概述
windows上组播接收异常的问题
应项目要求, 参与将一个设备发现服务从 linux 移植到 windows 上的过程, 设备发现服务通过加入特定的组播组,比如239.255.255.250,来监听对应组播组的发现报文,接收到目的地址为对应组播组的地址时,返回当前设备的IP地址,完成发现的流程。
测试过程中发现, 在部分型号路由器(包括TPlink部分型号,萤石,ASUS)下, 无法进行 SADP 搜索。通过抓包发现, windows 端 win10 系统发送的均为 IGMPv3 报文, 路由器上发送的均为IGMPv2 的报文, 在客户端发送对应的 239.255.255.250 地址段的组播报文时, 路由器未转发数据包到 windows 网段, 可以认为是没能成功加入组播组。
按照微软官网描述,在发现系统所处的环境为 IGMPv2 组播环境时, 会自动切换到以 IGMPv2, 但此时看来因某种未知原因, windows 的该机制没有生效。故而从官网上找到一种固定 windows 系统的 IGMP 版本的办法, 通过修改注册表的方式固定从网卡以 IGMPv2 的方式加入组播组, 修改完成后, 即可正常在该路由器环境下接收到 IGMP 报文。修改地址如下:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters
截图如下:
新增 DWORD 类型的 IGMPLevel 字段为 2 , DWORD 类型的 IGMPVersion 字段为 3。
IGMPVersion 字段中 2 表示 IGMPv1, 3 为 IGMPv2, 4 为 IGMPv3(默认)。
IGMPLevel 字段中 0 表示不支持组播, 1 表示只支持发送 IPv4 组播, 2 表示完全支持IGMP(默认)
参考网址:
https://social.technet.microsoft.com/Forums/windows/en-US/0d0da348-3b8b-4790-8aa2-60740a02536f/windows-7-and-igmp-multicast
最后
以上就是谨慎咖啡豆为你收集整理的windows无法接收到组播问题的全部内容,希望文章能够帮你解决windows无法接收到组播问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复