
Meus dois hosts residem no mesmo segmento Ethernet. HospedarAé 10.1.0.1/16
, anfitriãoBé 10.1.0.2/16
.Aenvia transmissões UDP direcionadas para 10.1.255.255
um soquete de escuta UDP vinculado INADDR_ANY
aBos recebe.
Depois de alterar a configuração de IP emApara 10.0.0.1/16
que ele pertença a uma sub-rede IP diferente e comece a transmitir para 10.0.255.255
esse mesmo soquete emB ainda recebeesta transmissão.
Se eu reiniciar o aplicativo de escuta emB, essas transmissões para uma sub-rede "errada" sãonão é mais recebido pelo soquete.
Pergunta: por que a pilha de redes deBnão descarta o pacote, que não é unicast paraBnem uma transmissão para a sub-rede deB, até o desligamento do soquete?
Eu sei que RFC1122diz:
Hosts SHOULD use the Limited Broadcast address to broadcast to a connected network.
Entendo que o aplicativo emAenviandodirigidotransmissões com a intenção de transmitir para a própria sub-rede não seguem a cláusula "deveria". Mas minha pergunta é por queBnão os descarta enquanto o soquete UDP estiver ativo.
Observei esse comportamento nos kernels Linux 4.4 e 3.13.