在对多播进行故障排除时,我发现没有引用此命令返回的字段的含义:
C:\Users\Administrator>netsh int ip show joins level=verbose
Interface 5: Ethernet0
Multicast Address : 224.0.0.1
Scope : 0
References : 0
Last Reporter? : Yes
Multicast Address : 224.0.0.251
Scope : 0
References : 2
Last Reporter? : Yes
Multicast Address : 224.0.0.252
Scope : 0
References : 1
Last Reporter? : YesScope,References和Last Reporter是什么意思?
我猜References是指侦听特定多播组的进程的数量。如果一个应用程序在离开它使用的多播组之前停止/崩溃,那么这个数字会变为零,但是实际上它并没有从列表中删除,并且机器一直在接收多播流。是否有任何设置可以阻止这种情况?例如,经过一段时间后,多播组不再被任何进程使用,操作系统会自动离开它?
这种情况发生在Windows10和Windows 2019上(默认情况下)使用IGMPv3。
发布于 2022-03-30 21:40:14
IGMP加入/离开的正式名称是IGMP成员报告。在多址网络上处理IGMP的上游路由器称为Querier。它确实定期查询所有主机(224.0.0.1)的实际组成员状态。
由于多接入网可能相当大,这可能会触发大量IGMP成员报告,这可能会淹没网络或查询本身;考虑到多播的性质,一个网络上有多少主机聆听特定组并不重要,只要一个主机就足以继续在一个接口上流这个组。
因此,在接收到IGMP查询后,所有主机启动一个随机计时器,第一个计时器过期,将其成员报告发送到224.0.0.1,以便查询者和其他人听到。如果主机已经听说它的组已经被报告,它会取消计时器。该体系结构的构建使得在大多数情况下只有少数主机能够真正响应查询。在此过程中报告组的主机称为此组的“最后报告者”。
如您所见,上游路由器不知道有多少客户端监听某个特定组。因此,当主机发送离开报告时,路由器不会(也不应该按设计)立即停止接口上的多播流,因为可能会有其他客户端在监听它。相反,它将IGMP特定的查询发送到这个特定的组(即239.0.0.1),以触发其他一些客户端,这些客户端侦听它以发回其成员报告。
由于所有这些查询/报告内容都是通过多播异步和不可靠地发送的,因此由于数据包丢失或其他问题,此特定查询可能无法立即返回报表的概率为非零,因此路由器默认情况下尝试发送两次(两个查询间隔),只有在接口和通信流停止时才会对组播组进行修剪。如果对于标准成员资格查询(在224.0.0.1上),特定组没有被报告两次,那么如果软件或硬件在能够为组发送休假报告之前出现故障,也会发生同样的情况。
这样的范围是一个多播地址范围,它起源于古老而辉煌的全球因特网多播路由梦,并指定了这个组应该运行的区域,0表示IPv4中的本地网络。
https://serverfault.com/questions/1097404
复制相似问题