为什么忽略具有相同源IP地址的组播消息

时间:2012-02-03 11:54:09

标签: linux network-programming ip multicast

我实现了一个利用多播消息的网络发现过程。它允许发现具有连接到同一段的任何ip地址的特定设备。

客户端A发送多播消息,要求其他客户端。其他客户端使用多播消息“我在这里......”进行响应。基本上这很好用。

但有一个案例让我感到麻烦。

 Client A       Client B
192.168.2.5   192.168.2.5  
    |             |
     \__________ / 
         >>>
  UDP Multicast Message: 
  Source: 192.168.2.5 | Destination: 224.0.0.150

可能出现同意,发送多播消息的客户端A和客户端B都收听相同的IP地址。在这种情况下,UDP数据包的源地址与目标客户端的IP地址相同。因此,客户端B上的应用程序不会收到任何多播消息。

我猜在具有相同消息的多播消息被阻止并丢弃在ip-stack中。有没有办法(套接字设置)接收它。

1 个答案:

答案 0 :(得分:6)

是的,您可以让主机读取自己的多播数据包(通常只是源IP地址的过滤器),这由IP_MULTICAST_LOOP套接字选项控制。

int loop = 1;
setsockopt(socket, IPPROTO_IP, IP_MULTICAST_LOOP, &loop, sizeof(loop));