緩衝膨脹:高速網路仍然卡頓的原因
有人開始下載後,視訊會議便無法進行,明明方案有足夠 Mbps。這不是速度問題,而是排隊問題。
實際發生了什麼事
每台路由器和數據機都有緩衝區,也就是線路短暫滿載時,封包等待的空間。少量緩衝很有幫助,但許多家用設備出廠時的緩衝區卻大了數百倍。
大型傳輸占滿線路時,過大的緩衝區也會被填滿。此後每個封包,包括通話、遊戲和點擊所需的小型緊急封包,都必須排在數 MB 的大量資料後方。延遲會從 20 ms 增加到 300、600,甚至超過 1000 ms;這就是緩衝膨脹。
典型症狀
連線平常一切正常,直到有人上傳相片、遊戲開始更新或雲端備份啟動;接著通話卡頓、串流重新緩衝、網頁緩慢、遊戲延遲。傳輸一停止,所有問題立刻消失。
因為觸發原因是自己的流量,緩衝膨脹能躲過閒置狀態的測速:下載、上傳和閒置 Ping 都可能看起來完美。
如何測量
必須在線路滿載時測量延遲。我們的測試正是如此:探測封包會在下載和上傳階段持續傳送,分別產生兩個負載延遲數字,再給出 A–F 的緩衝膨脹評級。C 級或更差代表線路一忙,即時應用程式就會受到影響。
解法,依有效程度排序
真正的解法是路由器上的智慧佇列管理(SQM)。fq_codel 或 CAKE 等演算法從設計上就會維持很短的佇列。請尋找 SQM、Smart Queue 或含 fq_codel/CAKE 的 QoS 設定,將整形速度設為略低於實測速度;評級從 D 升到 A 並不少見。
如果路由器不支援 SQM,可以啟用內建的「防緩衝膨脹」或遊戲 QoS 模式(效果可能從尚可到幾乎無效),改用支援 SQM 的路由器(包括可執行 OpenWrt 的機型),或將供應商設備改為橋接模式,再接上這類路由器。
沒有用的方法是購買更多 Mbps。更大的管線搭配同樣臃腫的緩衝區,只會更快被填滿。