我正在编写一个应用程序,它在新的红帽企业Linux6服务器上接收多播数据。支持小组给了我一个应用程序,用于测试服务器是否能够获得多播数据流。
一旦启动测试应用程序,并运行tcpdump,我就可以看到多播数据的输入,例如,
12:58:21.645968 IP 10.26.12.22.50002 > 238.6.6.36.50002: UDP, length 729
12:58:21.648369 IP 10.26.12.22.50002 > 238.6.6.36.50002: UDP, length 969
12:58:21.649406 IP 10.26.12.22.50002 > 238.6.6.36.50002: UDP, length 893
12:58:21.651823 IP 10.26.12.22.50002 > 238.6.6.36.50002: UDP, length 604
12:58:21.654079 IP 10.26.12.22.50002 > 238.6.6.36.50002: UDP, length 913
12:58:21.656724 IP 10.26.12.22.50002 > 238.6.6.36.50002: UDP, length 1320
12:58:21.658194 IP 10.26.12.22.50002 > 238.6.6.36.50002: UDP, length 124
12:58:21.658226 IP 10.26.12.22.50002 > 238.6.6.36.50002: UDP, length 217
12:58:21.658348 IP 10.26.12.22.50002 > 238.6.6.36.50002: UDP, length 182
12:58:21.658625 IP 10.26.12.22.50002 > 238.6.6.36.50002: UDP, length 1014
12:58:21.659592 IP 10.26.12.22.50002 > 238.6.6.36.50002: UDP, length 135
12:58:21.659842 IP 10.26.12.22.50002 > 238.6.6.36.50002: UDP, length 242
12:58:21.660674 IP 10.26.12.22.50002 > 238.6.6.36.50002: UDP, length 242
12:58:21.660743 IP 10.26.12.22.50002 > 238.6.6.36.50002: UDP, length 84
12:58:21.662327 IP 10.26.12.22.50002 > 238.6.6.36.50002: UDP, length 84
12:58:21.669154 IP 10.26.12.22.50002 > 238.6.6.36.50002: UDP, length 161
12:58:21.669365 IP 10.26.12.22.50002 > 238.6.6.36.50002: UDP, length 166
12:58:21.670792 IP 10.26.12.22.60002 > 238.230.230.100.60002: UDP, length 49
12:58:21.670796 IP 10.26.12.22.60002 > 238.230.230.100.60002: UDP, length 49
12:58:21.670798 IP 10.26.12.22.60002 > 238.230.230.100.60002: UDP, length 49
12:58:21.670799 IP 10.26.12.22.60002 > 238.230.230.100.60002: UDP, length 49但是应用程序无法获取任何数据流,也就是说,应用程序运行时会像组播数据订阅失败一样运行。
支持团队向我保证,测试应用程序没有问题,因为它在其他服务器上运行良好。因为我有一个新的服务器,所以服务器上的某些设置可能不正确。
我想知道我应该查找哪些Linux设置可能会阻止应用程序接收多播数据,即使tcpdump可以看到数据。丢失的库或包?
谢谢。
发布于 2012-03-29 00:00:25
首先,值得检查一下RHEL 6是否在内核级别上启用了组播支持。(可能是这样,但我没有可用的RHEL 6来检查),确保/proc/net/igmp文件存在。
还要检查多播地址范围是否被路由到您期望的接口。如果这是不正确的,您可能会有一些有趣的症状,您只接收组播,而tcpdump是(杂乱无章地)嗅探数据包。如果NIC不正确地支持多播,也可能出现这种情况。一些旧的NIC也可能需要设置为杂乱模式才能接收任何多播,而不管ifconfig中显示的多播设置如何。
另一件事是在测试应用程序运行时检查/proc/net/igmp文件的内容。/proc/net/igmp文件将包含服务器正在主动接收的所有多播组地址的列表。如果" group“列中有一个条目对应于测试应用程序要接收的多播组地址(在您的示例中是238.6.6.36和238.230.230.100),那么IP_ADD_MEMBERSHIP (或IP_ADD_SOURCE_MEMBERSHIP)套接字选项可能被正确调用,并且位于正确的NIC上。请注意,Group列以十六进制和向后列出了多播组地址-因此,238.6.6.36将被列为240606EE。
如果您有一个多播路由器,您的情况可能会更复杂(例如。在运行测试应用程序的同一台机器上运行。如果是这样的话,您还应该调查/proc/net/ip_mr_vif和/proc/net/ip_mr_cache文件,以确保有适当的条目。
发布于 2012-12-11 12:49:37
请检查开关level.In我的情况我被困在集群。我的集群只适用于多媒体广播。但我正面临着在多媒体节目中丢包的问题。对我来说太奇怪了。但最终我得到了我最好的朋友之一(谷歌)的解决方案。我刚刚在我的开关级别上禁用了IGMP,它运行良好。
发布于 2012-03-28 21:59:20
我在一台RHEL 6机器上也有类似的问题。我通过防火墙将所需的UDP端口添加到允许的端口来解决这个问题。尝试添加udp端口50002。
https://stackoverflow.com/questions/9877696
复制相似问题