ping 224.0.0.1没有回复

这些天我正在玩组播,遇到一些我不明白的奇怪事情。

我创build一个聊天多播客户端,一切似乎工作正常。 之后,我阅读了一些linux文档,并通过ping 224.0.0.1发现应该返回所有join某个多播组的节点的回复。 我试图在XP和WIN7机器上。 他们的行为是相同的。 看来我的客户端只join我定义的组(224.0.19.1)。 它不join224.0.0.1组。

来自wireshark:[source ip] 224.0.0.22 IGMPv3 54成员报告/join组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地址的引用。 当然,我确实closures了两台机器上的防火墙。

现在的问题是:这是什么东西不支持的Windows? 不被.NET支持? 我忘了执行什么? 我将不胜感激任何帮助。 感谢名单。

我花了一些时间来调查这个问题,我决定分享我学到的东西。

只要绑定到某个多播组,引用计数就会增加。 对224.0.0.1的引用总是为0,因为它不可能绑定到这个组(至少不是在win7上)。

看起来,在Windows上禁用组播ping。 我没有找到答案,但我发现我的惠普打印机在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工具 ,您可以获得所有节点的成员资格报告。 该工具实际上在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来禁用。

我就这样解释了所有的问题。 唯一还在困扰我的是,我没有发现任何官方文档,多播ping不支持在Windows上。 那么在列表不完整,因为它可以发送ping请求,但不能发送回声。

多播地址不分配给单独的机器,所以你不能ping它们。 多播地址是各个机器“订阅”的“组”。