【发布时间】:2023-03-13 01:57:01
【问题描述】:
问题:
1- 客户端 1 监听子网 A 的 IP。
2- 服务器向子网 B 发送广播消息。
3- 客户端 1 还通过其位于子网 A 中的 IP 读取此消息。
- 如果消息不是广播而是单播,则不会出现这种情况。
我正在尝试编写一个 Java 应用程序来侦听在单个网络接口上定义的一些 IP 和端口。您可以在下面找到我的网络配置示例:
netsh interface ip>show address
接口“本地连接”的配置
启用 DHCP:否
IP地址:22.108.131.1
子网掩码:255.255.255.0
IP地址:22.108.132.1
子网掩码:255.255.255.0
IP地址:22.108.133.1
子网掩码:255.255.255.0
接口度量: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 网络处理的本质?
【问题讨论】:
标签: java windows networking udp broadcast