期望的行为
当应用程序向全球广播IP地址发送数据包时255.255.255.255
,我希望ff:ff:ff:ff:ff:ff
在所有接口上将数据包发送至以太网全球广播地址()。
在Linux以及其他操作系统上,这似乎也可行。Windows XP和Windows 7对此表现出不同的行为,这两种行为都不适合我的情况。
Windows XP行为
数据包将被正确发送到第一个网络接口(接口顺序在“网络连接/高级/高级设置”中指定)。它还将被发送到其他接口。
到目前为止一切都很好。问题是,当发送到其他接口时,广播数据包的源地址是第一个接口的IP地址。例如,假设此网络配置(顺序很重要):
- 适配器1:IP地址
192.168.0.1
- 适配器2:IP地址
10.0.0.1
- 适配器3:IP地址
172.17.0.1
现在,如果我发送广播数据包,将发送以下数据包(带有源和目标IP地址):
- 在适配器1上:
192.168.0.1
=>255.255.255.255
- 在适配器2上:
192.168.0.1
=>255.255.255.255
在适配器3上:
192.168.0.1
=>255.255.255.255
实际上,使用广播数据包的应用程序将无法在适配器1以外的任何接口上运行。在我看来,这是Windows XP TCP / IP堆栈中的一个明显错误。
Windows 7行为
修改网络接口顺序似乎对Windows 7无效。相反,广播似乎由IP路由表控制。
IPv4 Route Table
===========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 10.202.254.254 10.202.1.2 286
0.0.0.0 0.0.0.0 192.168.0.1 192.168.0.3 10
10.202.0.0 255.255.0.0 On-link 10.202.1.2 286
10.202.1.2 255.255.255.255 On-link 10.202.1.2 286
10.202.255.255 255.255.255.255 On-link 10.202.1.2 286
127.0.0.0 255.0.0.0 On-link 127.0.0.1 306
127.0.0.1 255.255.255.255 On-link 127.0.0.1 306
127.255.255.255 255.255.255.255 On-link 127.0.0.1 306
192.168.0.0 255.255.255.0 On-link 192.168.0.3 266
192.168.0.3 255.255.255.255 On-link 192.168.0.3 266
192.168.0.255 255.255.255.255 On-link 192.168.0.3 266
224.0.0.0 240.0.0.0 On-link 127.0.0.1 306
224.0.0.0 240.0.0.0 On-link 192.168.0.3 266
224.0.0.0 240.0.0.0 On-link 10.202.1.2 286
255.255.255.255 255.255.255.255 On-link 127.0.0.1 306
255.255.255.255 255.255.255.255 On-link 192.168.0.3 266
255.255.255.255 255.255.255.255 On-link 10.202.1.2 286
===========================================================================
看到255.255.255.255
路线了吗?是的,他们控制广播数据包。在这种情况下,广播数据包将通过进行发送,192.168.0.3
因为它具有较低的指标...,但不会发送到其他接口。
您可以更改接口,通过该接口可以非常轻松地发送全局广播数据包(只需添加255.255.255.255
一个低度量标准的持久路由)。但是,无论您多么努力,广播数据包只会在一个接口上发送,而并非像我希望的那样全部发送。
结论
- Windows 7仅将广播数据包发送到一个接口。您可以选择哪一个,但这不是重点。
- Windows XP将广播数据包发送到所有接口,但仅按预期方式将它们发送到一个接口,这实际上等同于Windows 7行为。
目标
我想一劳永逸地更改Windows(最好是Windows 7)中的这种全球IP广播支持。当然,更好的方法是进行某种受支持的配置更改(注册表修改或类似操作),但是我愿意接受所有建议。
有任何想法吗?