2

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

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

Если я перезапущу прослушивающее приложение на 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.

0