我正在编写一个应用程序,它在新 Redhat Enterprise 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可以看到数据。缺少库或包?
感谢。
答案 0 :(得分:3)
首先,值得检查RHEL 6是否在内核级别启用了多播支持。 (它可能会,但我没有RHEL 6可供检查) 确保/ proc / net / igmp文件存在。
还要检查多播地址范围是否路由到您期望的接口。如果这不正确,您可能会遇到一些有趣的症状,即只有在tcpdump(混杂地)嗅探数据包时才会收到多播。如果您的NIC不能正确支持多播,也可能出现这种情况。无论ifconfig中显示的多播设置如何,一些较旧的NIC也可能需要设置为混杂模式以接收任何多播。
另一件事是在测试应用程序运行时检查/ proc / net / igmp文件的内容。 / proc / net / igmp文件将包含服务器正在主动接收的所有多播组地址的列表。如果“组”列中的条目对应于测试应用程序要接收的多播组地址(在您的情况下为238.6.6.36和238.230.230.100),则IP_ADD_MEMBERSHIP(或IP_ADD_SOURCE_MEMBERSHIP)套接字选项可能已正确调用,并在正确的NIC上。请注意,Group列以十六进制和后向列出了多播组地址 - 因此238.6.6.36将被列为240606EE。
如果您在运行测试应用程序的同一台计算机上运行多播路由器(例如,Xorp,igmpproxy),您的情况可能会更复杂。 如果是这种情况,您还应该调查/ proc / net / ip_mr_vif和/ proc / net / ip_mr_cache文件以确保有适当的条目。
答案 1 :(得分:2)
请检查开关级别。在我的情况下,我遇到了Clustering。我的群集只适用于mulitcast。但我在mulitcast面临一些数据包丢失。这对我来说太奇怪了。但最终我得到了我最好的朋友之一(谷歌)的解决方案。我刚刚在我的交换机级别禁用 IGMP ,它工作正常..
答案 2 :(得分:1)
我在RHEL 6机器上遇到了类似的问题。我通过防火墙将所需的UDP端口添加到允许的端口来解决它。尝试添加udp端口50002。