2012-03-26 63 views
0

我正在写一个应用程序,它在新的 Redhat Enterprise Linux 6服务器上接收组播数据。支持团队为我提供了一个用于测试服务器是否可以获取多播数据流的应用程序。红帽企业Linux 6组播饲料

一旦我开始测试应用程序,并且还具有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可以看到数据。缺少库或包?

谢谢。

回答

3

首先,值得检查RHEL 6是否在内核级别启用了组播支持。 (它可能会出现但我没有RHEL 6可用来检查) 请确保/ proc/net/igmp文件存在。

还要检查多播地址范围是否路由到您期望的接口。如果这是不正确的,你可以有一些有趣的症状,只有当tcpdump(混杂)嗅探数据包时才会收到多播。如果您的网卡不能正确支持多播,情况也会如此。不管ifconfig中显示的多播设置如何,一些较旧的NIC也可能需要设置为混杂模式才能接收任何多播。

另一件要做的事情是在测试应用程序运行时检查/ proc/net/igmp文件的内容。 /proc/net/igmp文件将包含服务器主动接收的所有组播组地址列表。如果在“组”列中有与测试应用程序要接收的多播组地址相对应的条目(在您的情况下为238.6.6.36和238.230.230.100),那么IP_ADD_MEMBERSHIP(或IP_ADD_SOURCE_MEMBERSHIP)套接字选项可能具有被正确调用,并在正确的网卡上。请注意,组列列出了十六进制和反向组播组地址 - 因此238.6.6.36将列为240606EE。

如果您在运行测试应用程序的同一台计算机上运行多播路由器(例如,Xorp,igmpproxy),则您的情况可能会更加复杂。 如果是这种情况,您还应该调查/ proc/net/ip_mr_vif和/ proc/net/ip_mr_cache文件以确保有适当的条目。

+0

谢谢安德鲁的回复。由于我不是网络专家,我会将其转发给支持团队。 – 2607 2012-03-29 02:23:39

+0

有用的信息,我有同样的问题。不知道/ proc/net/igmp,但使用的是netstat -g。仍然没有发现问题 – easytiger 2014-06-12 13:18:15

1

我在RHEL 6机器上遇到类似问题。我通过将防火墙所需的UDP端口添加到允许的端口来解决此问题。尝试添加udp端口50002.

+0

谢谢你的回复。服务器上禁用selinux和iptable。会发生什么情况是,在应用程序处理多播数据之前,它需要来自另一个单播数据源的快照,并且该单播源端口未打开。 – 2607 2012-03-29 02:15:10

2

请检查交换机级别。在我的情况下,我被困在群集。我的群集只能用于多播。但是我在多播时正面临着一些丢包。这对我来说太奇怪了。但最终我从我最好的朋友之一得到了解决方案(谷歌)。我刚才禁用IGMP在我的交换机级别,它的工作正常..

相关问题