2015-04-22 212 views
1

我在計算機(C#)和微控制器(C++)之間發送/接收非常短的UDP數據包。與速度無關,我的UDP數據包大約損失了50%,有時甚至更多,有時甚至更少。50%udp數據包丟失

在c#中我使用UDPClient發送到IPEndPoint(同步)並異步接收。

我的緩衝區足夠大,我看到損失是在計算機中發送和接收(微發送儘可能多的數據包)。我試圖每秒發送/接收大約60個數據包,但是我可以調整,甚至每秒丟失10個數據包。例如,我每秒發送20個數據包,微型接收和發送15個數據,而我的計算機每秒接收10個數據包。

我們正在談論1千兆位,非常短(可能是10英尺)的本地有線以太網連接。我正在發送單播數據包,但在網絡中我也有一個多播視頻(12 Mbps)。最大的數據包大約爲120個字節,其中大部分大約爲30-40個字節

有關如何調試問題或可能導致問題的任何建議?

謝謝。

回答

1

這裏有一些事情要考慮:

  • 這是有線連接或無線連接?在無線的情況下,50%的UDP數據包丟失當然會更常見,儘管只是在糟糕的鏈路上。

  • 假設它是無線連接,兩臺設備的信號強度是否相當高?您可以使用各種實用程序進行檢查,例如* nix上的iwconfig

  • 連接的實際比特率是多少?您提到您以各種速率傳輸數據,但我認爲這是指您多長時間發送數據包,而不是實際的鏈路比特率。比特率越快,預期的數據包丟失就越高。我相信這是天線物理學的一個直接結果,如果數據以較低的比特率傳輸,那麼數據可以以更高的功率傳輸。

  • 這些數據包是單播還是廣播?廣播數據包將導致更高的數據包丟失率。這是由於在廣播情況下網絡堆棧的較低層缺少重試機制。

  • 雖然你說你的數據包很小,但影響UDP數據包丟失的另一個因素是數據包的大小。這個比較直觀:數據包越大,收到的數據越不可能完整。

希望這些考慮至少可以讓你開始朝着答案的方向發展。

+0

感謝您的回答。剛剛編輯添加額外信息的問題。 – chourizo

+0

@chourizo我遇到了多播/ udp廣播數據包的問題,​​我也遇到了+ 60%的損失,我將回報任何可能有用的有關此問題的幫助/信息。與此同時,我將發送重複數據包,即發送每個數據包2次,首先是「丟失」 – KGCybeX

+0

我希望我錯了,但恐怕增加數據包的數量只會使事情變得更糟。我的部分問題是由於有兩個網絡接口的優先級不正確。請確保不是這種情況(禁用其中一個)。另外,爲了減少開銷,嘗試使用更少數據的數據包。通過這樣做我解決了我的問題。 – chourizo