2014-09-03 43 views
0

這是我的第一個「問題」,我希望我做的是正確的:)丟幀通過UDP

我與網絡編程實驗,特別是我想從一臺機器的數據廣播到其它一些> 10臺設備使用UDP,通過無線網絡。數據以大約300字節的數據包和大約每秒30幀的數據包的形式出現,即每33毫秒一個數據包。 我的實現基於qt示例:http://qt-project.org/doc/qt-4.8/network-broadcastreceiver.html

我正在測試只有一個客戶端的應用程序,並且遇到了很多丟失的幀,不知道爲什麼。所有工作正常,如果我使用以太網電纜。我希望這裏有人能幫我找到一個理由。

我能發現丟幀,因爲數據包包含時間戳:我收到一個報文後,我可以檢查它的日期和時間以及最後一個接收之間的區別,如果這是比例如更大這意味着我在路上丟了一個包。 即使我有專用的Wi-Fi網絡(沒有連接到互聯網,只有3臺機器連接到我剛購買的路由器),這種情況經常發生。大多數情況下,我會丟棄一個或兩個數據包,這不會成爲問題,但有時時間戳之間的差異表明有大於30個數據包丟失,這對我嘗試實現的目標並不合適。

當我從一臺計算機ping通其他的,我得到這些值:

50 packets transmitted, 50 packets received, 0.0% packet loss 
round-trip min/avg/max/stddev = 1.244/91.405/508.959/119.074 ms 

非常糟糕的一個新的路由器,在只有3個客戶端的專用網絡,是不是?該路由器被宣傳爲非常快速的Wi-Fi路由器,性能比802.11n路由器快三倍。

與我從舊路由器獲取的值進行比較吧,坐在同一個房間裏,與連接到它的一些10臺機器,辦公時間:

39 packets transmitted, 39 packets received, 0.0% packet loss 
round-trip min/avg/max/stddev = 1.458/47.297/142.201/37.186 ms 

也許路由器是有缺陷?

有一件事我無法解釋的是,如果我平跑我的UDP客戶端/服務器應用程序的同時,統計改善:

55 packets transmitted, 55 packets received, 0.0% packet loss 
round-trip min/avg/max/stddev = 1.164/6.174/197.962/26.181 ms 

我想知道如果任何人有什麼測試的提示,提示如何通過Wi-Fi實現這些機器之間的「可靠」UDP連接。通過可靠的我的意思是我可以放棄2個連續的數據包,但不會更多。

謝謝。

編輯

看來,路由器(?)發送數據包突發。我測量它通過接收該客戶端上的兩個數據報之間的時間,並且該值是〜10個包的序列約3毫秒,然後,在300毫秒的下一個分組。我認爲我在客戶端的問題更多地與幀之間的間隔中的不一致相關,而不是丟失的幀。我可能只需要有一個隊列和一個> 300ms的延遲到服務器。

+4

雖然UDP的吞吐量往往比TCP高,但UDP是不可靠的協議,它可以並且會丟棄數據包,以及您將接收到亂序或重複的已接收數據包。在設計應用協議時需要考慮這一點,並且準備好處理這些情況。 – 2014-09-03 13:14:22

+0

感謝Joachim。我知道UDP是不可靠的,我確實希望在這裏和那裏丟棄一個數據包。不幸的是,我正在經歷30個數據包連續丟棄,這是太多處理。我考慮過在每個數據報中寫入多個幀,但是我不能這麼做,因爲數據包會比MTU大得多,我認爲這會產生問題。 – user3233195 2014-09-03 13:20:35

+0

關於我的新路由器ping時間的任何評論?我正在考慮嘗試將它帶回商店並嘗試另一個。 – user3233195 2014-09-03 13:23:56

回答

1

以應對與網絡上的任何問題,第一,最簡單的方法是抓住他們的Wireshark。 並檢查數據包是否真的從廣播機發出。

此外,根據您的描述,如果數據包使用以太網電纜而不是UDP傳輸,那麼 也可能是UDP端口的問題。

+0

感謝您試用分組分析儀的提示。我使用UDP端口33235,我相信這應該是好的。 – user3233195 2014-09-03 15:29:22