2017-08-03 225 views
0

我目前正在創建一個與多個arduino板卡通信的服務器軟件。由於硬件,我正在使用UDP協議。我有一個非常簡單的機制,在大多數情況下,它們會在重新發送包時迷失。我現在有兩個問題:UDP數據包丟失模擬和概率

在一個沒有Internet接入的網絡和大約20個arduinos和一臺計算機的網絡中UDP包丟失的可能性有多大?是否需要重新發送方法?

有沒有一種方法可以模擬UDP網絡中的數據包丟失,以檢查重發機制是否正常工作?

+0

我想說丟失數據包的可能性將取決於你的網絡上,則路由arduinos自己的接線類型(或Wi-Fi),節點之間的距離等等......而且你是否需要重新發送取決於你在做什麼。對於某些丟失數據包的東西來說沒什麼大不了的,對於其他的東西可以忽略不計,這可能值得重新發送。 – litelite

+0

arduinos都使用官方的以太網盾(沒有TCP的那個)連線。電纜長度約爲4米,並且是TP-Link的管理型交換機。 – Nidhoegger

回答

2

UDP數據包在網絡中丟失的可能性如何,沒有 Internet訪問權限和大約20個arduinos和一臺計算機?

數據包遲早會被丟棄的概率是100%。

如果你想得到更詳細的統計數據,比如在特定的時間段內數據包被丟棄的概率,唯一真正知道的方法就是嘗試一下並找出數據包(例如使用數據包中的序列號,這樣接收器可以通過記錄跳過的序列號來檢測分組何時被丟棄)。概率將很大程度上取決於數據包的大小,數據包的發送速度,接收器的CPU速度,接收器花費CPU時間的其他任務,以太網交換機的質量,質量你的以太網電纜,月相等等。

是否有必要重新發送方法?

這取決於丟棄數據包會帶來怎樣的結果。對於某些應用程序(例如流式音頻或視頻或音頻測量數據),丟棄數據包並不重要;你只是忽略了一些數據丟失的事實,並像往常一樣繼續處理下一個數據包。對於其他應用程序(例如文件發送/接收),數據包的丟失意味着接收機需要的數據丟失,因此您需要有一些方法來恢復該數據丟失。通過檢測它並觸發重發,否則整個傳輸將失敗(或者至少接收器最終只有部分文件)。

有沒有一種方法可以模擬UDP網絡中的數據包丟失檢查 如果重發機制工作?

當然,只是把一些邏輯到接收器,以便他們偶爾假裝沒有收到一個數據包:

int numBytesReceived = recv(...); 
if ((rand()%100) == 0) // Simulate a 1% packet loss rate 
{ 
    printf("Pretending to have dropped a packet!\n"); 
} 
else 
{ 
    // handle the incoming packet as usual 
} 
+0

非常感謝您的詳細解答! – Nidhoegger