ping 224.0.0.1没有回复

时间:2014-02-05 10:21:47

标签: windows networking network-programming ip multicast

这些天我正在玩多播,我遇到了一些我不理解的奇怪事情。

我创建了一个聊天多播客户端,一切似乎都正常。之后我读了一些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会员报告/加入组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不支持?我忘了实施某些东西了吗?我将不胜感激任何帮助。感谢名单。

3 个答案:

答案 0 :(得分:3)

我现在花了一些时间研究这个问题,我决定分享我学到的东西。

一旦绑定到某个多播组,您的引用计数就会递增。对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节点可以加入224.0.0.1组,只要它能够接收IGMP请求即可。可以通过将注册表值IGMPLevel设置为0来禁用此功能。

我自己解释了所有的问题。唯一困扰我的是,我没有找到任何官方文档,Windows上不支持多播ping。列表不完全,因为它可以发送ping请求,但不能发送回声。

答案 1 :(得分:1)

这是一个很老的帖子,但它仍然没有被接受的答案。我想我们可以在“https://tldp.org/HOWTO/Multicast-HOWTO-7.html”页面的“IGMP version 1.”部分找到答案。它指出

<块引用>

没有为所有主机组发送报告。在这个组中的成员 是永久性的。

答案 2 :(得分:-1)

多播地址未分配给单个计算机,因此您 不能ping他们。多播地址是个人的“组” 机器“订阅。”