我有几个嵌入式机器听和RTP流音频数据的多播组。 它们被连接到确实在其港口基本IGMP Snooping和多播过滤,让我(W)LAN的其余部分没有得到淹没智能网管型交换机(美国网件GS108Ev2)。
在开始一切正常,约500-520秒。 在那之后,直到他们离开,并再次加入该群,他们没有收到任何更多的数据。 我猜开关被“遗忘”,讲述一个超时后加入。
有什么办法来刷新组成员,即让开关知道,有北京时间仍然有人听,而不会丢失数据包?
系统信息:
Arch: blackfin
# cat /proc/version
Linux version 2.6.28.10-ADI-2009R1-uCBF54x-EMM
(gcc version 4.3.3 (ADI) ) #158 PREEMPT Tue Jun 5 20:05:42 CEST 2012
这是多播方式/ IGMP协议的工作原理。 客户端必须通过发送成员报告定期加入该组,否则将被认为他已经过了一段短暂的停顿离开了乐队。 然而,这些报告通常只能从本地组播路由器接收成员查询时发送。 无论您的客户端不接收查询或不符合的报告作出回应。
尝试使用Wireshark之类的工具,以了解哪些IGMP数据包通过你的网络发送。
你需要一个IGMP查询发送Membership Queries
,如已经通过SCAI解释。
如果你不能配置你的路由器要做到这一点,你可以用你的电脑之一。 眼看如何运行一个完整的多播路由服务将是矫枉过正(我从来没有做到这一点),我建议你尝试滥用igmpproxy 。
首先创建一个虚拟的上游接口(这不是执着!):
ip tap add dev tap6 mode tap
写igmpproxy.conf:
# Dummy upstream interface.
phyint tap6 upstream ratelimit 0 threshold 1
# Local interface.
phyint eth0 downstream ratelimit 0 threshold 1
# Explicitly disable any other interfaces (yes, it sucks).
phyint NAME disabled
...
最后启动igmpproxy(作为root):
igmpproxy -v /path/to/igmpproxy.conf
如果您的嵌入式设备运行的是Linux,你需要关闭反向数据包过滤器对他们或他们不会给组成员询问。 在这种情况下,上游交换机将假设没有酮侦听该多播和将其关闭。