2台のホストは同じイーサネットセグメント上に存在します。ホストあは10.1.0.1/16
、ホストBは10.1.0.2/16
。あにUDPブロードキャストを送信し、に10.1.255.255
バインドされたUDPリスニングソケットを送信しますINADDR_ANY
B受け取ります。
IP設定を変更した後あ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.
私は、あ送信監督された自身のサブネットにブロードキャストする意図でブロードキャストすることは、「すべき」節に従わない。しかし、私の質問はなぜBUDP ソケットが存続している限り、それらはドロップされません。
この動作は Linux カーネル 4.4 および 3.13 で確認されました。