如何让 System.ServiceModel.DiscoveryClient 使用 IGMP?

How to get System.ServiceModel.DiscoveryClient to use IGMP?

我有一个 D-Link DGS-1210-10P,带有两个 VLAN(10.104.. 和 192.168..) 我在每个网络上都有一个摄像机,每个网络上我的计算机上都有两个网卡。

在 D-Link 上关闭 IGMP 后,我可以使用 Microsoft DiscoveryClient 发现两个摄像头,以及一些允许我指定哪个 NIC 发送多播消息的自定义端点。打开 IGMP 后,我只能看到 10.104 网络。

foreach (string id in getAdapterIds())
{
   DiscoveryClient dc = new DiscoveryClient(new UdpDiscoveryEndpointByNIC(DiscoveryVersion.WSDiscoveryApril2005, id));
   dc.FindProgressChanged += _real_FindProgressChanged;
   dc.FindAsync();
}

我确实在 Wireshark 中看到了 IGMP 消息(两个源都是我的计算机,目标是正确的多播地址)

Source        Destination     Protocol Length Info
10.104.128.37 239.255.255.250 IGMPv2   60     Membership Report Group
192.168.1.1   239.255.255.250 IGMPv2   60     Membership Report Group

我的问题归结为:DiscoveryClient 是否会自动加入 IGMP 组并且应该正常工作?我怀疑我只是缺少一些基本的 IGMP 理解,或者一些 D-Link 路由器设置。

像往常一样,我提出问题后立即找到答案:

问题是路由器上的 IGMP 设置不正确。

所以,

企业 VLAN

1) 禁用"Querier State",因为公司交换机已经是一个查询器

2) 启用 "Fast Leave"

隔离VLAN

1) 启用 "Querier State", because each VLAN needs a querier

2) 启用 "Fast Leave"