如果我使用的地址不同于224.0.0.1,则不会发送多播数据包

时间:2015-04-13 14:31:37

标签: linux sockets networking multicast

我正在使用this code来试验多播。

我在局域网中的另一台PC上运行wireshark,我正在尝试查看通过网络发送的数据包。

如果将数据包发送到IP地址224.0.0.1,则会正确接收这些数据包,如果我将数据包发送到地址239.255.255.250则不会。

我在路由表中有这个条目

224.0.0.0/4 dev eth0.100  src 192.0.0.1

我知道192.0.0.1看起来很奇怪,但它是正确的接口地址

你知道为什么没有发送数据包吗?

2 个答案:

答案 0 :(得分:0)

您尝试捕获多播流量的PC很可能启用了多播过滤,但未启用239.255.255.250组的接收。

任何通信多播的主机设备都会加入224.0.0.1(所有主机组),因此发送到该组的数据包会通过过滤器,但不会发送到239.255.255.250的数据包。

多播过滤通常在网络接口中实现,并且未通过过滤器的接收帧将被丢弃在硬件中,而不是传递给内核驱动程序。如果帧没有传递给内核,那么Wireshark无法捕获它们。

您可以使用 netstat 验证每个接口的活动多播组。我假设你使用的是Linux系统,因为你用“Linux”标记了这个问题

netstat -g

当套接字启用IP_ADD_MEMBERSHIP套接字选项时,将加入多播组。要在捕获设备上加入组,您需要一个程序来创建套接字并使用IP_ADD_MEMBERSHIP套接字选项加入组播组

答案 1 :(得分:0)

switched LAN的案例中添加Joel Cunningham的回答:

239.255.255.250没有收听多播,因此没有发送IGMP个联接。因此,交换机不会将这些组播帧传播到您拥有wireshark(1)运行PC的端口。

同样,226.0.0.1well known,并且始终由所有主机加入。