如何在Windows上更改全局广播地址(255.255.255.255)的行为?

前端之家收集整理的这篇文章主要介绍了如何在Windows上更改全局广播地址(255.255.255.255)的行为?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
期望的行为

当应用程序将数据包发送到全局广播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广播支持.当然更好的方法是获得某种支持的配置更改(注册表黑客或类似),但我对所有建议持开放态度.

有任何想法吗?

并不是说我是在为微软辩护,但在阅读了下面那些试图定义广播如何工作的RFC之后,我认为微软不一定会违反任何RFC. IMO问题应该在应用级别(即定向广播,而不是全局)上修复,这将触及路由表中的适当路由,并且仅从该IP网络的正确接口发送.

> RFC922
> RFC919

他们都声明没有为广播定义标准.它还在919中提到应该为广播选择特定的物理接口.对于生成广播的多宿主,多NIC机器,我认为没有明确说明应该发生什么.路由器从一个接口到另一个接口永远不会传递广播,在这种情况下,Windows机器是路由器还是路由器?
如果它充当路由器,那么响应该网络的错误IP地址的广播的任何主机(在您的示例中为适配器2和3)应该将数据包发送回适配器2和3的以太网地址以响应适配器1的IP地址和Windows主机应将其路由到正确的接口.
这听起来令人困惑……但想不出更好的方式来表达这一点

最后,RFC 919具体说明了
来自RFC 919

Since we assume that the problem
has already been solved at the data
link layer,an IP host wishing to
send either a local broadcast or a
directed broadcast need only
specify the appropriate destination
address and send the datagram as
usual. Any sophisticated algorithms
need only reside in gateways.

阅读表明源IP地址与广播无关.

由于每个应用程序似乎都以不同的方式处理广播,我认为这是责任所在.例如. nbtstat在多NIC机器上发送定向广播,而游戏可能使用全局广播.
简而言之,应该修复应用程序,而不是在这种情况下的操作系统……

编辑:这是一个link相同的情况,但在Linux上. linux内核只通过默认接口(本例中为NIC A)发送一个数据包来处理它.他们建议应用程序枚举NIC并从每个NIC发送定向广播. Link

猜你在找的Windows相关文章