如何让 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"
我有一个 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"