单个 NIC 上的多个 IP 地址从不同子网接收 UDP

单个 NIC 上的多个 IP 地址从不同子网接收 UDP

抱歉,如果我没有使用正确的语言来表达这一切,我是一个软件开发人员,而不是服务器/网络管理员!

我有一台 Windows 计算机,它有一个配置了多个 IP 地址的单个 NIC。例如,NIC 地址是172.1.48.3。它在属性 -> Ip 4 属性 -> 高级中配置了三个 IP 地址,它们都位于不同的子网172.1.48.3172.1.88.3172.1.104.3。(所有这些都有子网掩码255.255.255.0)。

我有一个程序,它监听三个 UDP 套接字,每个套接字都包含这些 IP 地址。

网络上有三件事向每个子网广播:172.1.48.255172.1.88.255172.1.104.255

我可以在 wireshark 中看到 UDP 正从这些地址传入,因此等172.1.48.255 -> 172.1.48.3172.1.88.255 -> 172.1.88.3但是,我看到套接字之间存在“交叉污染”。绑定到 的 UDP 套接字正在从、 和 172.1.48.3接收 UDP 消息。172.1.48.3172.1.88.3172.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 层目标网络中的主机将接受流量然后丢弃它……但它们会接受它。

答案2

有人知道为什么套接字会接收消息广播吗?

因为……这就是(第 2 层)广播的工作方式。同一网络中的每一台物理网卡L2广播域将会收到相同的广播包。

如果你想把它们分开,你必须在物理上分开它们,或者逻辑上

相关内容