首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带TTL的JoinMulticastGroup

带TTL的JoinMulticastGroup
EN

Stack Overflow用户
提问于 2021-03-22 22:33:11
回答 1查看 332关注 0票数 0

我正在使用C# .net Framework4.7。我的应用程序正在尝试加入几个路由器(跳)之外的多播组。因此,我试图发送TTL > 1的IGMP数据包。目前,我使用的是UdpClient.JoinMulticastGroup(),TTL参数设置为3,但是当我使用Wireshark检查IGMP数据包时,TTL保持在1。

这是我的密码

代码语言:javascript
复制
        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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-24 03:11:45

指定的TTL仅适用于传出多播数据包。来自Microsoft的备注:

timeToLive参数指定在丢弃多个数据报之前允许多少个路由器跳数。

IGMP消息总是有一个TTL为1,因为它们只需要被本地路由器接收。路由器将在必要时向其他路由器发送自己的消息。有关更多详细信息,请参阅https://networkengineering.stackexchange.com/questions/9636/why-ttl-value-1-in-igmp

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66754750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档