當頻寬飽和時,什麼可能會導致高延遲?

當頻寬飽和時,什麼可能會導致高延遲?

我遇到網路問題已經有一段時間了,我正在嘗試找出問題的根源。

昨天,我透過 WiFi 連線使用 SCP 將檔案從筆記型電腦傳輸到桌上型電腦。下載開始時,兩台電腦對本機路由器的 ping 值都很低(192.168.1.1,兩者都在 10ms-50ms 左右),下載速度為 2-3 MB/s。

大約一分鐘後,我發現我的桌面到 192.168.1.1 的延遲急劇上升(> 1,000 毫秒),並且傳輸速度慢得像爬行(~200 KB/s)。然而,筆記型電腦到 192.168.1.1 的延遲保持不變(10-50 毫秒)。傳輸完成後,桌面的延遲就會回落到正常範圍。

顯然,當連接飽和時就會出現問題。會是什麼呢?這是否表示路由器有問題,或者我的桌面有問題?從哪裡開始尋找適合的地方?

答案1

谷歌搜尋“緩衝區膨脹”。

隨著 RAM 變得便宜,網路設備添加了幀緩衝區,因此它們永遠不必丟幀。

不幸的是,幀丟失是 TCP 注意到擁塞並知道何時退出的方式。如果沒有丟幀,傳統的 TCP 實作永遠不會注意到擁塞,也永遠不會後退,因此它們只是繼續以高速率發送,並使情況變得更糟。

如果所有網路設備在擁塞期間緩衝越來越多的幀,並讓佇列長度無限制地增長,則延遲會隨著耗盡佇列所需的時間越來越長而不斷增加。

主動隊列管理 (AQM) 技術和明確擁塞通知 (ECN) 等機制可以緩解這一問題,但由於該問題尚未廣泛宣傳,因此很難知道哪些產品可以避免緩衝區膨脹,哪些產品不能。這不像你可以尋找“無緩衝區膨脹!”盒子側面有徽標,就知道您正在獲得優質設備。

然而,有一些 Wi-Fi 路由器售後韌體發行版專門用於避免緩衝區膨脹。至少有一個發行版是由首先認識到該問題的 TCP 研究人員專門開發的,並在尋找解決方案時用作他們的研發平台。

答案2

當資料包進入佇列並通過非常繁忙的鏈路傳輸時,就會出現高延遲。佇列中位於其前面的所有資料包必須先發送。當鏈路需求很大且佇列緩衝區很大時,這會導致往返時間較長。

相關內容