Направленные широковещательные рассылки, отличные от собственной IP-подсети, принимаются до отключения сокета - почему?
Мои два хоста находятся в одном и том же сегменте Ethernet. Хост А является 10.1.0.1/16
хост B 10.1.0.2/16
, A отправляет направленные UDP-трансляции на 10.1.255.255
и сокет прослушивания UDP, связанный с INADDR_ANY
на Б их получает.
После того, как я изменяю конфигурацию 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.