2012-03-26 87 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在我的交換機級別,它的工作正常..