我正在使用 C# .net 框架 4.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)是否可以具有 1 以外的 TTL 值?如果可以,那么我的代码中是否缺少某些内容?
更新:我将 TTL 设置为 10,Wireshark 仍然显示 TTL=1