【问题标题】:Windows 7 does not accept broadcasts from ip address 0.0.0.1Windows 7 不接受来自 ip 地址 0.0.0.1 的广播
【发布时间】:2011-02-01 10:31:09
【问题描述】:

我们的网络设备很少,它们的 IP 地址为 0.0.0.1,以确保它们不会与新环境中的任何其他设备发生冲突(因此 10.x.x.x、172.16.x.x或 192.168.xx 范围)直到配置。 DHCP 不是解决方案,因为现场可能没有 DHCP 服务器。

设备将侦听 UDP 广播并通过广播进行应答,直到通过这种方式获得新的 IP 地址。

这在 Windows XP 上运行良好 - 但在 Windows 7 上很糟糕:配置程序没有从仍然具有 0.0.0.1 的设备接收应答数据包。 Wireshark 看到数据包,然后它们被系统转储。

问题:是否有任何原因(RFC?)实际上禁止在本地环境中使用此地址?还是只是 MS 过于谨慎了? 在哪里我可以看到他们为什么认为这个地址“无效”?哪些范围现在也真的“无效”了?

知道 PC 端 (Win 7) 的解决方法吗?

我知道不建议将 0.xxx 地址用于工作场所,但正是因为这个原因 - 有一个未使用的地址 - 它工作得很好。

编辑:根据他们的论坛,有一个名为“Netburner”的设备可能面临类似的问题。见:http://forum.embeddedethernet.com/viewtopic.php?f=5&t=612&p=2198 巧合的是,有人知道一些背景信息吗?

【问题讨论】:

  • 你的网卡配置中有那个子网吗?许多系统会丢弃来自非本地子网的广播数据包。
  • 您能改用以太网广播数据包吗?删除整个 TCP/IP 路由堆栈似乎是一个好处。
  • @thkala:我们会检查这个。感谢您的提示。尽管如此 - RFC1918 允许在本地使用 any ip 地址,但由于缺点,他们只是不推荐它。
  • @minastaros:非本地是指与您的计算机不在同一子网中的子网。从安全的角度来看,阻止此类广播非常有意义。
  • @sarnold:哦,这些设备已经在现场使用了一段时间。所以切换不会那么容易,新的 Win 7 PC 软件应该能够处理“旧”(=当前)设备......你到底有什么想法,某种 ARP ping东西?

标签: networking windows-7 ip-address broadcast


【解决方案1】:

听起来您的配置应用程序正在侦听所有网络接口上的广播数据包,并希望接收来自外部子网的数据包。

这应该起作用 - 操作系统应该只传递来自每个网络接口所在子网的广播数据包,而不是来自同一物理(例如以太网)网段上的所有子网的广播数据包。我有理由确定,不这样做是违反 IP 协议的行为。

有两种处理方法:

  • 确保您的网络接口在目标子网中有一个 IP 地址。每个网卡都可以有more than one IP addresses,这样就不会干扰正常的网络操作。

  • 配置或修改您的应用程序以使用原始套接字,例如 Wireshark。但是请记住,这会覆盖所有正常的检查和平衡,并且应该避免,因为它可能导致几乎无法诊断的行为 - 这就是为什么它被许多网络管理员所反对的原因。

【讨论】:

  • thkala,非常感谢您为编写答案所做的所有努力。我们将讨论您的想法并进行更多测试。使用不同的方法可能是可能的,也是一种考虑未来的方法 - 但是,问题是我们不能轻易更改所有已经部署的设备。所以从这个角度来看,最好的解决方案是坚持同样的方式,让它以某种方式工作。关于您的第一个建议:根据我上面的最后一条评论,我们需要从 any 子网中查找设备。所以添加一个 0.0.0.x 的接口只会完成一半的工作。无论如何,谢谢。
  • 做了一些研究:首先,测试表明收到了来自 IP 1.0.0.1 设备的消息。因此:这不是不同子网的问题。 RFC922 在第 4 章中明确指出“广播到本地硬件网络上的所有主机”是可能的,第 7 章提到接收器地址 255.255.255.255。我的结论是,当您可以发送所有主机时,您也必须能够从它们接收。问题是领先的 0.x。 RFC1700 第 4 (b) 页说 0.x.x.x 是“此网络上的指定主机。只能用作源地址。”。这就是我们所做的——应该没问题。
【解决方案2】:

你能轻松地向 Windows 机器添加新的路由表条目吗?在将广播数据包路由到0.0.0.x 网络时,Windows 必须知道使用哪个接口。

我熟悉的 Unix 机器有一个路由表,它将网络/网络掩码条目映射到网关或接口(如果网络是本地网络)。本地网络(我的家庭网络为192.168.0.0/16)被发送到接口eth0。其他所有0.0.0.0/0 都被发送到特定的网关机器192.168.0.1

如果我的机器向网络0.0.0.0/24 发送UDP 广播消息(换句话说,UDP 广播发送到0.0.0.255,那么我的机器会将数据包转发到网关机器(它可以通过arp 查找)。中间的交换机不会将数据包传播到其他网络设备,因为设置了 MAC 地址。

如果我的机器有另一个路由条目0.0.0.0/24 到本地接口,那么我的机器将使用以太网广播组在线发送数据包,交换机会将数据包转发到所有连接。 (耶!就像 90 年代的集线器一样!:)

所以我认为您需要将0.0.0.0/24 的路由条目添加到您的客户端计算机,以便它们可以正确处理广播数据包。

【讨论】:

  • 问题不在于 PC 无法发送广播。它可以,但它不接收它们。实际上,它确实如此,因为 Wireshark 看到它们到达了,但随后应用程序没有得到它(它在 XP 中做到了)。
猜你喜欢
  • 2010-10-16
  • 1970-01-01
  • 2019-03-08
  • 1970-01-01
  • 2015-06-22
  • 2013-04-16
  • 1970-01-01
  • 2020-05-24
  • 1970-01-01
相关资源
最近更新 更多