Мои два хоста находятся в одном и том же сегменте 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.