ping 224.0.0.1 无回复
Posted
技术标签:
【中文标题】ping 224.0.0.1 无回复【英文标题】:No reply on ping 224.0.0.1 【发布时间】:2014-03-01 17:16:09 【问题描述】:这些天我在玩多播,我遇到了一些我不明白的奇怪事情。
我创建了一个聊天多播客户端,一切似乎都正常。之后,我阅读了一些 linux 文档并发现通过 ping 224.0.0.1 应该会从所有加入某个多播组的节点返回我的回复。我在xp和win7机器上试过。他们两个的行为是相同的。看来我的客户只加入了我定义的组(224.0.19.1)。它不加入 224.0.0.1 组。
来自wireshark: [source ip] 224.0.0.22 IGMPv3 54 Membership Report / 任何来源加入组 224.0.19.1
这是我设置套接字的方式:
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, int.Parse(port));
m_socket.Bind(ipep);
IPAddress ip = IPAddress.Parse(mcastGroup);
m_socket.SetSocketOption(
SocketOptionLevel.IP, SocketOptionName.AddMembership,
new MulticastOption(ip, IPAddress.Any));
然后我检查了netsh:
C:\Users\user1>netsh interface ip show joins
Interface 1: Loopback Pseudo-Interface 1
Scope References Last Address
---------- ---------- ---- ---------------------------------
0 2 Yes 239.255.255.250
Interface 11: LAN
Scope References Last Address
---------- ---------- ---- ---------------------------------
0 0 Yes 224.0.0.1
0 1 Yes 224.0.0.252
0 1 Yes 224.0.19.1
0 1 Yes 230.230.230.230
0 2 Yes 239.255.255.250
Interface 15: Local Area Connection* 9
Scope References Last Address
---------- ---------- ---- ---------------------------------
0 0 Yes 224.0.0.1
并且您可以注意到没有对 224.0.0.1 地址的引用。 当然,我确实关闭了两台机器上的防火墙。
现在的问题是:Windows 不支持此功能吗? .NET 不支持?我忘了实施什么吗?我将不胜感激任何帮助。谢谢。
【问题讨论】:
【参考方案1】:组播地址不会分配给单个机器,所以你 无法ping通他们。多播地址是个人的“组” 机器“订阅”。
【讨论】:
确实如此。但是 224.0.0.1 是特殊类型的组:“224.0.0.1 是所有主机组。如果您 ping 该组,网络上所有支持多播的主机都应该回答,因为每个支持多播的主机必须在启动时加入该组在所有支持多播的接口上。” tldp.org/HOWTO/Multicast-HOWTO-2.html【参考方案2】:我现在花了一些时间调查这个问题,我决定分享我学到的东西。
一旦您绑定到某个多播组,您的引用计数就会增加。对 224.0.0.1 的引用始终为 0,因为无法绑定到该组(至少在 win7 上不是)。
Windows 上似乎禁用了多播 ping。我没有找到答案,但我发现我的 HP 打印机正在回复 ping 224.0.0.1。
D:\tools>ping 224.0.0.1
Pinging 224.0.0.1 with 32 bytes of data:
Reply from 10.13.72.103: bytes=32 time<1ms TTL=64
Reply from 10.13.72.103: bytes=32 time<1ms TTL=64
Reply from 10.13.72.103: bytes=32 time<1ms TTL=64
Reply from 10.13.72.103: bytes=32 time<1ms TTL=64
还有另一个选项可以检查是否有人在使用多播地址以及他们在哪个组中。通过运行igmpquery tool,您可以获得所有节点的成员资格报告。该工具实际上是在 224.0.0.1 地址上发送 IGMP 通用查询,然后得到所有节点的响应:
Source Destination Protocol Length Info
10.11.72.28 224.0.0.1 IGMPv2 60 Membership Query, general
10.11.72.12 224.0.0.252 IGMPv2 60 Membership Report group 224.0.0.252
10.11.72.12 239.255.255.250 IGMPv2 60 Membership Report group 239.255.255.250
10.11.72.28 224.0.19.1 IGMPv2 46 Membership Report group 224.0.19.1
10.11.72.254 224.0.0.2 IGMPv2 60 Membership Report group 224.0.0.2
10.11.72.103 224.0.0.251 IGMPv1 60 Membership Report
节点只有在监听某个多播地址时才会响应。 win节点只要能够接收IGMP请求,就可以加入224.0.0.1组。这可以通过将注册表值 IGMPLevel 设置为 0 来禁用。
我解释了自己所有的问题。唯一仍然困扰我的是,我没有找到任何官方文档表明 windows 不支持多播 ping。列表不完全,因为它可以发送 ping 请求,但不能发送回显。
【讨论】:
【参考方案3】:这是一个非常古老的帖子,但仍然没有公认的答案。我想我们可以在“https://tldp.org/HOWTO/Multicast-HOWTO-7.html”页面的“IGMP 版本 1”部分找到答案。它指出
没有为所有主机组发送报告。本组成员 是永久的。
【讨论】:
您好,感谢您的反馈。最初我使用 IGMPv3:来自 wireshark:[source ip] 224.0.0.22 IGMPv3 54 Membership Report / Join group 224.0.19.1 用于任何来源。良好的指示思想。我没有更多的环境来检查不同的 IGMP 版本是否有任何问题。如果时间允许,我会尝试使用它。以上是关于ping 224.0.0.1 无回复的主要内容,如果未能解决你的问题,请参考以下文章