问题:
1-客户端 1 监听子网 A 的
IP。2-服务器向子网 B 发送广播消息
。3-客户端 1 也通过其在子网 A 中的 IP 读取此消息。-
如果消息未广播,则不会出现这种情况但单播。
我正在尝试编写一个 Java 应用程序来侦听在单个网络接口上定义的一些 IP 和端口。您可以在下面找到我的网络配置示例:
netsh interface ip>show address
Configuration for interface "Local Area Connection"
DHCP enabled: No
IP Address: 22.108.131.1
SubnetMask: 255.255.255.0
IP Address: 22.108.132.1
SubnetMask: 255.255.255.0
IP Address: 22.108.133.1
SubnetMask: 255.255.255.0
InterfaceMetric: 0
我正在打开数据报通道并将它们绑定到这些 IP 地址。对于每个 IP,我都有不同的线程来响应来自通道的消息。
现在的问题是,服务器将 UDP 广播消息发送到
22.108.131.255
22.108.132.255
等等。
但是,例如在为监听 22.108.131.1 而创建的线程中,我收到了发往 22.108.132.255 的广播消息。我使用 Wireshark 检查传入的消息,它告诉我消息正确地以 22.108.132.255 的形式出现,但是在我的应用程序中,我看到消息的端点是 22.108.131.1,即监听线程。
起初我认为我的实现是错误的,但更令人惊讶的问题是传入的非广播消息。我的意思是,如果消息的目的地是 22.108.131.1,那么 22.108.132.1 不会收到,这显然是应该的。但我不明白的是,当它与广播消息有关时,它为什么不能按应有的方式运行。
我不确定问题是否是由 Windows 多 IP 配置引起的。但我观察到的是操作系统将子网 A 的广播消息传递给子网 B。
另一件可能是线索的事情是,我在上面只谈到了 22.108.131.1 和 22.108.132.1,虽然我也定义了 22.108.133.1。如果我不为该 IP 打开数据报通道,我仍然可以从其他 IP 读取该子网的广播消息。
那么我在这里错过了什么吗?还是 Windows 网络处理的本质?