2017-08-11 284 views
0

我在一臺VM Ubuntu 16.04計算機上的100個多播組上生成UDP數據包,並訂閱另一臺VM Ubuntu 16.04計算機上的這些組。兩者都位於由Hyper-V管理器運行的惠普服務器上。問題是我的應用程序只能收到100個組中的2個。但是,當Wireshark捕獲時,應用程序開始接收所有消息。僅在混雜模式下接收UDP數據包

我發現了幾個其他類似的問題,如this one,它解釋說因爲Wireshark運行在混雜模式下,它允許所有數據包都通過(通過什麼?),這就解釋了爲什麼我的應用程序也開始「看」它們。因此,將以太網接口配置更改爲混雜模式允許應用程序在不運行Wireshark的情況下接收所有消息。

但是,通常不會收到的其他數據包的問題是什麼?我試圖交叉驗證「好」和「壞」消息的十六進制轉儲,並且它們似乎沒有不同。 IP和UDP級別的校驗和是正確的。還有什麼可能是這個問題?

  • 多播IP範圍239.1.4.1-100
  • 目的端口50003
  • 源端口範圍〜33000 - 60900
  • 禁用防火牆

編輯:

它看起來像應用程序訂閱了8個多播組時,它的工作原理然而,如果訂閱超過8個,則僅接收2個(如果它們以.7或.8結尾)或沒有,如上所述。所以,我會假設數據包是正確的。問題可能出現在網絡設置中嗎?或者應用程序本身 - 需要找到我沒有寫過的腳本中的錯誤。

EDIT2:

我安裝在另一臺機器(虛擬框,而不是惠普的Windows Server),ISO映像和它的作品,因爲它應該。因此,我認爲我的應用程序工作正常,所有的Ubuntu操作系統配置都是正確的。現在我把所有的責任都放在虛擬管理器/設置上。有任何想法嗎?

+0

數據包,而不是「包」。 –

+1

@JamesKPolk感謝您的更正 – Nazar

+0

這裏的可能性,最大羣組成員身份:https://serverfault.com/questions/248094/igmp-membership-under-linux-igmp-max-memberships –

回答

1

聽起來好像你沒有告訴內核。

http://tldp.org/HOWTO/Multicast-HOWTO-6.html

你必須使用setsockoptIP_ADD_MEMBERSHIP。並且一定要使用正確的值作爲本地接口。

+0

是的,我在套接字選項。還有別的東西。剛剛更新了我的問題。 – Nazar

+0

@Naz:也許這個? https://serverfault.com/questions/248094/igmp-membership-under-linux-igmp-max-memberships –

+0

netstat列出了它訂閱的所有IP組,以及其他一些... – Nazar