我正在使用C# .net Framework4.7。我的应用程序正在尝试加入几个路由器(跳)之外的多播组。因此,我试图发送TTL > 1的IGMP数据包。目前,我使用的是UdpClient.JoinMulticastGroup(),TTL参数设置为3,但是当我使用Wireshark检查IGMP数据包时,TTL保持在1。
这是我的密码
UdpClient udpClient = new UdpClient();
// Creates an IPAddress to use to join and drop the multicast group.
IPAddress multicastIpAddress = IPAddress.Parse("239.192.16.107");
udpClient.Client.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.IpTimeToLive, 10);
udpClient.Client.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 10);
udpClient.Ttl = 10;
// The packet dies after 10 router hops.
udpClient.JoinMulticastGroup(multicastIpAddress, 10);在线上的几个帖子似乎表明IGMP是针对本地网络的,所以TTL总是1;然而,如果是这样的话,为什么JoinMulticastGroup允许我们设置TTL呢?但另一方面,当我将TTL设置为3时,为什么TTL不改变呢?
是否有人能确认多播连接包(IGMP)是否可以有一个TTL值以外的1?如果可以的话,那么我的代码中缺少了什么吗?
更新:我将TTL设置为10,Wireshark仍然显示TTL=1

发布于 2021-03-24 03:11:45
指定的TTL仅适用于传出多播数据包。来自Microsoft的备注:
timeToLive参数指定在丢弃多个数据报之前允许多少个路由器跳数。
IGMP消息总是有一个TTL为1,因为它们只需要被本地路由器接收。路由器将在必要时向其他路由器发送自己的消息。有关更多详细信息,请参阅https://networkengineering.stackexchange.com/questions/9636/why-ttl-value-1-in-igmp。
https://stackoverflow.com/questions/66754750
复制相似问题