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

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

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

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

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

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

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

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

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

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

Связанный контент