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