【问题标题】:Multicast packets are not sent if I use an address different from 224.0.0.1如果我使用不同于 224.0.0.1 的地址,则不会发送多播数据包
【发布时间】:2015-06-18 22:02:48
【问题描述】:

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

我在 LAN 中的另一台 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 看起来很奇怪,但它是正确的接口地址

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

【问题讨论】:

  • 把代码贴在这里而不是别处。
  • 代码不是我的,是页面里的。
  • 所以?粘贴到这里。

标签: linux sockets networking multicast


【解决方案1】:

您尝试捕获多播流量的 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 套接字选项加入多播组

【讨论】:

    【解决方案2】:

    switched LAN 的情况下添加到 Joel Cunningham 的答案:

    239.255.255.250 上没有监听多播,因此没有发送IGMP 连接。因此交换机不会将这些多播帧传播到您拥有wireshark(1)-running PC 的端口。

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

    【讨论】:

      猜你喜欢
      • 2012-07-26
      • 1970-01-01
      • 2017-04-14
      • 2012-10-06
      • 2017-04-30
      • 2016-04-14
      • 1970-01-01
      • 2016-10-15
      • 2017-04-25
      相关资源
      最近更新 更多