Направленные широковещательные рассылки, не относящиеся к собственной IP-подсети, принимаются до отключения сокета - почему?

482
Konstantin Shemyak

Мои два хоста находятся в одном и том же сегменте Ethernet. Хост A есть 10.1.0.1/16, хост B есть 10.1.0.2/16. Посылает широковещательные UDP направляется к и слушающий сокет UDP, связанный с на Б принимает их.10.1.255.255INADDR_ANY

После того, как я изменение конфигурации IP на, чтобы таким образом, что он принадлежит к другой IP - подсети и начинает вещание на, тот же разъем на B - прежнему получает эту передачу.10.0.0.1/1610.0.255.255

Если я перезапущу прослушивающее приложение на B, эти трансляции в «неправильную» подсеть больше не будут приниматься сокетом .

Вопрос: почему сетевой стек B не отбрасывает пакет, который не является ни одноадресной передачей B, ни широковещательной рассылкой подсети B, пока не будет отключен сокет?

Я знаю, что RFC1122 говорит :

Hosts SHOULD use the Limited Broadcast address to broadcast to a connected network. 

Я понимаю, что применение на А посылающих направленных передач с целью вещания в собственной подсети не следует «должно» положение. Но мой вопрос заключается в том, почему B не удаляет их, пока работает сокет UDP.

Я наблюдал такое поведение в ядрах Linux 4.4 и 3.13.

2
Когда вы говорите «B получает эту широковещательную рассылку», какая программа фактически показывает это - захват пакета (tcpdump) или обычный сокет UDP? grawity 7 лет назад 2
@ Grawity UDP сокет. (Естественно, tcpdump также, когда интерфейс не в случайном режиме.) Konstantin Shemyak 7 лет назад 0
То, что хост B видит трафик, который является нормальным, не означает, что он действует на него. В зависимости от вашего метода мониторинга вы можете неправильно интерпретировать ваши данные. Если вы используете инструмент анализа сети, адаптер Ethernet, вероятно, находится в случайном режиме, поэтому, конечно, он будет видеть весь трафик в сети, а не адресован ему или нет. Appleoddity 7 лет назад 0
Также имеет значение, если эти устройства подключены через коммутатор или концентратор. Appleoddity 7 лет назад 0
@Appleoddity в вышеприведенном комментарии. Я явно упомянул прием пакета с помощью * UDP-сокета * (а также использование * не * беспорядочного режима при запуске сниффера). Konstantin Shemyak 7 лет назад 0
@Appleoddity: на уровне Ethernet это совершенно нормально независимо (поскольку все типы широковещания используют один и тот же MAC-адрес); Я полагаю, что ОП спрашивает, почему он не удаляется, когда достигает уровня IP. grawity 7 лет назад 2
@ user3608247 Я не вижу ни одной вещи, о которой вы только что упомянули в своем вопросе, но я думаю, это ни здесь, ни там. У вас включена пересылка IP на хосте b? Это заставило бы стек ip отвечать на любой пакет, и я бы подумал. Appleoddity 7 лет назад 0
Подождите, извините, чтобы превратить это в разговор, но вы используете снифер, чем чтобы определить, получает ли хост пакет? Конечно, сниффер это видит. Точно так же, как упомянуто @grawity, все они используют один и тот же широковещательный MAC-адрес, поэтому сетевая карта получит пакет и обнаружит его в сниффере, но не пройдет уровень 3 стека OSI. Appleoddity 7 лет назад 0
@ Grawity Я отредактировал вопрос. Неожиданный прием широковещательных рассылок в «неправильную» подсеть продолжается только до завершения прослушивания сокета UDP. Konstantin Shemyak 7 лет назад 0
Похоже, что та же проблема была обнаружена 6 месяцев назад на сервере: https://serverfault.com/questions/830364/application-receiving-boradcast-from-different-subnet Konstantin Shemyak 7 лет назад 0

0 ответов на вопрос