2013-08-24 28 views
0

我的應用程序使用UDP的多播功能。多播數據開銷?

總之我使用java和希望發送使用單個多播地址和端口的所有數據。儘管多路廣播監聽器在邏輯上將其劃分爲可在運行時更改的子組,並且可能不希望處理來自組外的數據。

要做到這一點我已經做了代碼,使應用程序的所有運行實例將加入同一個組播組和端口,但會仔細觀察該數據包的發送者以確定它是否屬於它們的子組。

警告我的應用程序的最小數據包大小是30000-60000字節!!!!!

會閱讀使用MulticastSocket.receive(DatagramPacket類),每一個數據包,並確定如果所需的數據包造成的開銷太大(即使緩衝區溢出)。

它會產生大量的流量,導致網絡擁塞,因爲每一個數據包被髮送到每一個人?

+1

對於這樣大的數據包,您更有可能超過網絡設備/適配器的緩衝區大小。許多系統每個連接只有幾個MB,並且系統上有其他流量,所以您可能會經常溢出緩衝區。我建議你編寫你的應用程序來處理相當高的退出率。 –

+0

另一種選擇是將這些數據包分成更小的數據包,傳輸它們,然後在接收器上重新組裝它們! –

回答

0

每個數據包都可能發送給每個人,但每個數據包只會在網絡上出現一次。

但是除非應用程序在局域網是完全由你控制,包括所有的路由器下運行完全,它已經廣泛不可行。一旦你通過一個你不控制的路由器,一般接受的最大UDP數據報大小是534。

+0

嗯,我可能會減少數據包的大小,是的,它全部在私有WLAN中,但我主要擔心的是它會引起擁塞,因爲實際上相同的數據將被複制並由路由器發送到已加入組的每個設備。 因此,如果LAN中有100個設備,那麼它會不會導致擁塞? – Allahjane

+0

不可以,因爲每個數據包只出現在每個子網上一次,除非其中有多路廣播偵聽器,否則不會。這是多播的關鍵。 – EJP

1

每一個數據包沒有發送到多播以來(如PIM)每個人都會構建將使接收器和發送器優化的多播樹。所以,網絡會在需要時複製數據包。在最後一跳時廣播組播數據包(技術上更精確,在第2層氾濫)。 IGMP協助最後一跳的組播,並確保如果沒有接收者加入最後一跳,則不會進行這種泛洪。

「並且可能不希望處理來自組外的數據。」接收呼叫會返回下一個收到的數據報,因此幾乎沒有人可以做,以避免處理不適用於子組分類的數據包。你的應用程序不能使用不同的多個組?

+0

如果100個收割者聯合在同一組中,該怎麼辦 – Allahjane

+1

請您澄清一下您的意見。即使有大量的接收器,多播的基本部分也會繼續工作,所以100個接收器仍然應該可以。 –

+1

IGMP協助每一跳。如果另一端沒有接收器,則不傳播數據報。 – EJP