Информация об изменениях

Сообщение Re[2]: Почему сокету нельзя сделать bind() к двум портам? от 04.06.2015 11:25

Изменено 04.06.2015 11:46 PlushBeaver

Здравствуйте, smeeld, Вы писали:

S> если разные dport будут соответствовать одному

S> и тому же сокету то что будет если в системе появится второй сокет с таким же dport+daddr? Как определить
S> здесь к какому из двух сокетов направлен пакет с данным daddr?
Речь о другом ограничении: что по двум разным ключам (daddr, dport) нельзя держать одинаковые значения (указатели на одну и ту же структуру). Но даже если с SO_REUSEADDR появятся другие сокеты на том же (daddr, dport), сработает round-robin, о которой вы говорите с netch80, чему помешают одинаковые значения, не ключи?

Я совсем не знаю механизмов ядра, и могу ошибаться, но как понял фрагмент, на который вы дали
Автор: smeeld
Дата: 04.06.15
ссылку, round-robin организуется изменением поля sk_refcnt той структуры-сокета, которую выбрали при очередном поиске. Раз сокет один, это подвинуло бы его во всех круговых очередях, где он участвует. Тогда был бы такой проблемный сценарий (полужирным отмечено, кому достается пакет):
Куда приходит пакет Очередь e1 Очередь e2
e1 s1,s3 s2,s3
e2 s3,s1 s3,s2
e1 s1,s3 s2,s3
e2 s3,s1 s3,s2
e1 s1,s3 s2,s3
Но даже если так — получается, причина запрета только в реализации, и с точки зрения логики работы сетевого стека препятствий нет?
Re[2]: Почему сокету нельзя сделать bind() к двум портам?
Здравствуйте, smeeld, Вы писали:

S> если разные dport будут соответствовать одному

S> и тому же сокету то что будет если в системе появится второй сокет с таким же dport+daddr? Как определить
S> здесь к какому из двух сокетов направлен пакет с данным daddr?
Речь о другом ограничении: что по двум разным ключам (daddr, dport) нельзя держать одинаковые значения (указатели на одну и ту же структуру). Но даже если с SO_REUSEADDR появятся другие сокеты на том же (daddr, dport), сработает round-robin, о которой вы говорите с netch80, чему помешают одинаковые значения, не ключи?

Я совсем не знаю механизмов ядра, и могу ошибаться, но как понял фрагмент, на который вы дали
Автор: smeeld
Дата: 04.06.15
ссылку, round-robin организуется изменением поля sk_refcnt той структуры-сокета, которую выбрали при очередном поиске. Раз сокет один, это подвинуло бы его во всех круговых очередях, где он участвует. Тогда был бы такой проблемный сценарий (полужирным отмечено, кому достается пакет):

Правка, забыто: Пусть сокет s1 привязан к e1, s2 привязан к e2, s3 привязан к e1 и e2 (чего сейчас нельзя).
Куда приходит пакет Очередь e1 Очередь e2
e1 s1,s3 s2,s3
e2 s3,s1 s3,s2
e1 s1,s3 s2,s3
e2 s3,s1 s3,s2
e1 s1,s3 s2,s3
Но даже если так — получается, причина запрета только в реализации, и с точки зрения логики работы сетевого стека препятствий нет?