刷新组播组成员(Refresh multicast group membership)

2019-07-29 18:04发布

我有几个嵌入式机器听和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

Answer 1:

这是多播方式/ IGMP协议的工作原理。 客户端必须通过发送成员报告定期加入该组,否则将被认为他已经过了一段短暂的停顿离开了乐队。 然而,这些报告通常只能从本地组播路由器接收成员查询时发送。 无论您的客户端不接收查询或不符合的报告作出回应。

尝试使用Wireshark之​​类的工具,以了解哪些IGMP数据包通过你的网络发送。



Answer 2:

你需要一个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


Answer 3:

如果您的嵌入式设备运行的是Linux,你需要关闭反向数据包过滤器对他们或他们不会给组成员询问。 在这种情况下,上游交换机将假设没有酮侦听该多播和将其关闭。



文章来源: Refresh multicast group membership