Meus dois hosts residem no mesmo segmento de Ethernet. O host A é 10.1.0.1/16
, o host B é 10.1.0.2/16
. Um envia broadcasts UDP direcionados para 10.1.255.255
e um soquete de escuta UDP vinculado a INADDR_ANY
em B os recebe.
Depois de alterar a configuração de IP em A para 10.0.0.1/16
para que ela pertença a uma sub-rede IP diferente e comece a transmitir para 10.0.255.255
, o mesmo soquete em B ainda recebe esta transmissão.
Se eu reiniciar o aplicativo de escuta em B , essas transmissões para uma sub-rede "errada" não serão mais recebidas pelo soquete .
Pergunta: por que a pilha de rede de B não elimina o pacote, que não é unicast para B nem uma transmissão para a sub-rede de B , até o encerramento do soquete?
Eu sei que o RFC1122 diz :
Hosts SHOULD use the Limited Broadcast address to broadcast to a connected network.
Eu entendo que o aplicativo em transmissões A enviando direcionado com a intenção de transmitir para a própria sub-rede não segue a cláusula "should". Mas a minha pergunta é por que B não os elimina enquanto o soquete UDP estiver ativo.
Eu observei esse comportamento nos kernels 4.4 e 3.13 do Linux.
Tags networking ipv4 linux broadcast