![单个 NIC 上的多个 IP 地址从不同子网接收 UDP](https://linux22.com/image/723213/%E5%8D%95%E4%B8%AA%20NIC%20%E4%B8%8A%E7%9A%84%E5%A4%9A%E4%B8%AA%20IP%20%E5%9C%B0%E5%9D%80%E4%BB%8E%E4%B8%8D%E5%90%8C%E5%AD%90%E7%BD%91%E6%8E%A5%E6%94%B6%20UDP.png)
抱歉,如果我没有使用正确的语言来表达这一切,我是一个软件开发人员,而不是服务器/网络管理员!
我有一台 Windows 计算机,它有一个配置了多个 IP 地址的单个 NIC。例如,NIC 地址是172.1.48.3
。它在属性 -> Ip 4 属性 -> 高级中配置了三个 IP 地址,它们都位于不同的子网172.1.48.3
和 172.1.88.3
上 172.1.104.3
。(所有这些都有子网掩码255.255.255.0
)。
我有一个程序,它监听三个 UDP 套接字,每个套接字都包含这些 IP 地址。
网络上有三件事向每个子网广播:172.1.48.255
、172.1.88.255
和172.1.104.255
。
我可以在 wireshark 中看到 UDP 正从这些地址传入,因此等172.1.48.255 -> 172.1.48.3
。172.1.88.255 -> 172.1.88.3
但是,我看到套接字之间存在“交叉污染”。绑定到 的 UDP 套接字正在从、 和 172.1.48.3
接收 UDP 消息。172.1.48.3
172.1.88.3
172.1.104.3
要么是我对 UDP 理解不正确,要么是网络出了问题。我认为将这三个独立的 IP 地址放在一个 NIC 上存在一些问题,因为如果每个 IP 都有自己的机器(因此有 NIC),它就可以正常工作。
有人知道为什么172.1.48.3
套接字会接收广播到不同子网的消息172.1.104.255
吗?
答案1
因为广播流量本质上就是广播。如果您在 Wireshark 中查看 UDP 流量的以太网帧部分,您会看到目标 MAC 地址(第 2 层)是 FF-FF-FF-FF-FF-FF,其中包括连接到同一物理网段的所有主机。连接到同一物理网段的所有主机都将接收此流量并查看第 3 层地址,并确定它们是否应该接受和处理流量。不在同一第 3 层目标网络中的主机将接受流量然后丢弃它……但它们会接受它。