我的兩台主機位於同一乙太網路段。主持人A是10.1.0.1/16
, 主機乙是10.1.0.2/16
。A發送定向 UDP 廣播並綁定到10.1.255.255
UDP 偵聽套接字INADDR_ANY
乙接收它們。
當我更改 IP 配置後A以便10.0.0.1/16
它屬於不同的 IP 子網並開始廣播到 上10.0.255.255
的同一個套接字乙 仍然收到這次廣播。
如果我重新啟動監聽應用程式乙,這些廣播到「錯誤」的子網路是套接字不再接收到。
問題:為什麼網路堆疊乙不丟棄資料包,這既不是單播乙也沒有廣播到子網乙,直到套接字關閉?
我知道 RFC1122說:
Hosts SHOULD use the Limited Broadcast address to broadcast to a connected network.
據我了解,該申請A傳送指導的旨在向自己的子網路廣播的廣播不遵循「應該」子句。但我的問題是為什麼乙只要 UDP 套接字處於作用中狀態,就不會丟棄它們。
我在 Linux 核心 4.4 和 3.13 上觀察到了這種行為。