Windows

流量控制軟體會導致tcp數據包丟包嗎

  • May 23, 2013

我正在使用流量控制軟體 NetLimiter 測試我們的客戶端-伺服器應用程序。我發現,當客戶端從伺服器接收文件時,我使用 NetLimiter 通過連續點擊按鈕將下載速率設置為 50K/S(將速率從 0K/s 增加到 50K/s,每次點擊都會增加rate 1),然後傳輸將停止並且永遠不會恢復,似乎來自伺服器的一些控制封包遺失了。

流量控制軟體是否會由於未知原因攔截數據包並保留它們而不發送給我們的客戶端?流量控制軟體會丟棄應該發送給我們客戶端的 tcp 數據包嗎?

$$ More $$流量控制軟體確實會中斷傳輸,因為我們的伺服器會向客戶端發送一些控制數據包來控制傳輸,例如停止傳輸或啟動傳輸。在測試過程中,我們發現“開始傳輸”控制數據包已經到達網路介面卡,但我們的客戶端沒有收到數據包(有一個 TCP 套接字)。 謝謝

簡而言之,是的流量控制軟體在整形流量時確實可以丟包。這對 TCP 協議來說沒問題,因為 TCP 將負責確保失去的數據包得到重新發送。

流量整形 Wiki描述了一些用於整形流量的方法。有許多可用的算法,例如REDtail drop等。

流量控制軟體是否會由於未知原因攔截數據包並保留它們而不發送給我們的客戶端?

它會在發送之前將它們保留(排隊)一段時間,以確保滿足特定配置的速率。

流量控制軟體會丟棄應該發送給我們客戶端的 tcp 數據包嗎?

是的,例如,您可能在兩個網路之間進行路由,其中​​一個網路的速度為 50KB/s,而另一側的速度可能為 100KB/s。如果 100KB/s 的數據連續發送到 50KB/s 網路上的主機,則需要將數據包保存在路由器中以滿足 50KB/s 的速率。由於記憶體有限且隊列大小通常固定,因此您可能不得不開始丟棄數據包。丟包不是壞事。TCP 旨在恢復。如果您要將所有內容都排隊,這可能會很糟糕,因為它會增加顯著的延遲。所以丟棄數據包是明智的。

$$ More $$流量控制軟體確實會中斷傳輸,因為我們的伺服器會向客戶端發送一些控制數據包來控制傳輸,例如停止傳輸或啟動傳輸。在測試過程中,我們發現“開始傳輸”控制數據包已經到達網路介面卡,但我們的客戶端沒有收到數據包(有一個 TCP 套接字)。

我不想這麼說,但聽起來你的客戶端伺服器應用程序已經壞了。通過 Internet 丟棄數據包是正常的預期行為。

失去的是您的控制命令。聽起來像是軟體錯誤吞噬了它們!

引用自:https://serverfault.com/questions/510075