技術文章 · 網路與網通建置

QoS 頻寬管理:讓視訊會議不卡、別被下載塞爆

一個人下載大檔,全辦公室視訊就跟著卡,這多半不是頻寬不夠,而是沒人管。本文深入拆解緩衝膨脹、QoS 的分類標記、智慧佇列與上傳整形,帶你看懂頻寬實際該優先給誰、哪裡管得動、哪裡先天管不動。

作者 Steve Chen · 發布  · 更新  · 約 9 分鐘閱讀

網路與網通建置 — 廷皓技術專欄插圖

一個人下載大檔,全辦公室視訊就跟著卡,這多半不是頻寬不夠,而是沒人管。本文深入拆解緩衝膨脹、QoS 的分類標記、智慧佇列與上傳整形,帶你看懂頻寬實際該優先給誰、哪裡管得動、哪裡先天管不動。

這就是為什麼「加頻寬」常常治標不治本。真正該補的那一塊,叫做 QoS(Quality of Service,服務品質),白話講就是頻寬管理。這篇我想把它講得透一點:不只是告訴你「開一下 QoS 就好」,而是讓你懂它背後實際在管什麼、哪些地方管得動、哪些地方其實管不動。這樣你在買設備、談需求、除錯的時候,心裡才有一把尺。

為什麼加頻寬沒用?問題出在「排隊」,不在「車道寬度」

要理解 QoS,得先理解卡頓實際是怎麼發生的。很多人把頻寬想成水管,管子夠粗、水就流得順。但視訊、語音這類即時應用,怕的其實不是「不夠寬」,而是「延遲」:封包晚到了,畫面就凍、聲音就斷。頻寬(每秒能送多少資料)跟延遲(一個封包要多久才送達)是兩件不同的事,而卡頓殺的通常是後者。

台灣多數的網路方案,是下載快、上傳慢的不對稱頻寬。下載動輒好幾百 Mbps,上傳卻可能只有幾十 Mbps,有些方案甚至更低。問題就出在這條又細又擠的上傳頻寬上:當有人在傳大檔給客戶、雲端硬碟正在同步、或半夜排程的備份剛好還沒跑完,這條上傳頻寬「唰」一下就被塞滿了。而視訊、語音要的是穩定、即時的雙向往返,上傳一塞,它們立刻遭殃。

真正的元兇:緩衝膨脹(bufferbloat)

上傳被塞滿之後,接下來發生的事才是關鍵。你的設備一時之間送不出去那麼多封包,就會先把它們暫存在自己的緩衝區(buffer)裡排隊。這聽起來很貼心,實際上是災難:當緩衝區塞了成千上萬個等著上傳的封包,你的視訊、語音封包一送出去,就得乖乖排在這條長長隊伍的最後面,等前面的封包全部送完才輪得到它。原本幾毫秒就能送達的封包,硬生生被拖到幾百毫秒、甚至上千毫秒。這個「緩衝區塞太多、害延遲爆表」的現象,業界叫它緩衝膨脹(bufferbloat)。

所以你會看到一個很反直覺的畫面:測速跑出來頻寬明明還很漂亮,視訊卻卡得要命。因為緩衝膨脹殺的是延遲,不是頻寬。這也解釋了為什麼加頻寬沒用:車道再寬,只要大家還是擠在同一個收費站前排成一條長龍,救護車一樣過不去。你要做的不是拓寬車道,而是給救護車一條專用道,並且不讓大家在收費站前無限排隊。

QoS 實際在管什麼

QoS 的核心觀念其實只有一句話:依重要性分配頻寬與優先權,讓重要的流量先走。它不是去「變出更多頻寬」,而是在頻寬吃緊、大家搶著用的那一刻,替你決定誰先誰後。要做到這件事,QoS 內部分成兩個動作。

第一個動作是分類與標記:把流量看清楚:這是視訊、那是備份、那是網頁瀏覽,然後替每一種流量貼上一張「身分標籤」。國際間對這件事有一套通用做法,叫 DiffServ(差異化服務),它會在每個封包的 IP 表頭裡寫入一個六位元的欄位,叫 DSCP。其中最重要的一個等級叫 EF(Expedited Forwarding,加速轉送,對應 DSCP 值 46),專門留給電話語音這種要求「低延遲、低抖動、低遺失、保證頻寬」的即時流量。封包一旦被標上 EF,沿路的網路設備看到就知道:這是急件,優先處理。

第二個動作是排程與調度:設備依據標籤,把急件放進優先隊伍先送,把「晚一點完成也沒差」的背景流量放進普通隊伍,有空檔才送。打個比方,這就像在塞車的路上劃出一條救護車專用道:別的車流再多,救命的車永遠先過。QoS 真正在做的,就是這條專用道加上一位懂得分辨輕重緩急的交通指揮。

好的即時通訊,數字長什麼樣

要判斷 QoS 有沒有做到位,不能只憑「感覺順不順」,業界有明確的量化指標可以對照:

  • 單向延遲:國際電信標準建議控制在 150 毫秒以內,超過就開始有感;一旦到 400 毫秒以上,基本上就沒辦法好好對話了。視訊會議稍微寬容一點,大約落在 200 到 300 毫秒之間還能接受。
  • 抖動(jitter):指封包到達時間忽快忽慢的程度,最好壓在 30 毫秒以內。抖動太大,即使平均延遲不高,聲音一樣會斷斷續續、忽大忽小。
  • 封包遺失率:語音對遺失特別敏感,最好低於 1%,理想上趨近於零。掉一個封包,往往就是掉一小段聲音,累積起來就是那種「機器人破音」。

QoS 的任務,就是在頻寬被塞爆的那一刻,也替關鍵應用守住這三條線。守得住,通話品質就穩;守不住,數字一超標,人耳馬上聽得出來。

一個一定要懂的邊界:QoS 管得動「上傳」,管不太動「下載」

這是最多人出錯、卻最少人講清楚的一點。你的路由器或防火牆,坐在公司內網和電信商之間,它能決定的,是要不要把公司的封包送出去、以什麼順序送出去:這是上傳方向,路由器說了算。但「下載」是別人往你這裡塞資料,資料早就從電信商那頭的設備發出來了,等它到你手上,塞車其實已經發生在電信商那一段線路,你的設備只能被動接收,管不太到。這是網路架構的先天限制,不是設備不夠好。

換句話說,如果卡頓是因為有人在瘋狂上傳(備份、傳大檔、雲端同步),QoS 非常有效;但如果是有人在瘋狂下載(灌大型系統更新、下載影片),純靠傳統 QoS,效果就有限。這時候比較實際的做法有兩條:一是對「特別愛下載的裝置或人」設一個下載總量上限,逼它自己收斂,間接替其他人騰出空間;二是仰賴後面要講的智慧佇列,用一點技巧去馴服下載方向。理解這個邊界很重要:它能幫你在採購與設定時,把力氣花在真正有效的地方,而不是花錢買一個管不到問題根源的功能。

對付緩衝膨脹的利器:智慧佇列 SQM

前面說緩衝膨脹是卡頓的元兇,那有沒有辦法直接對付它?有,這套技術叫智慧佇列管理(SQM,Smart Queue Management),背後常見的演算法是 FQ-CoDel 和 CAKE,都是內建在 Linux 核心、公開而成熟的技術,許多中高階路由器與防火牆都支援。它的思路非常聰明。

既然緩衝膨脹是因為「塞車發生在電信商那一段、我控制不到」,那 SQM 就故意把自己送出資料的速度,設定成比電信商實際線路稍微慢一點點(通常慢個 5% 到 10%)。這麼一來,那個真正塞車的瓶頸,就被「搬」回到你自己的設備裡:而在你自己的地盤上,你就有完全的主導權去決定怎麼排隊。這一招看似浪費了一點頻寬,換來的卻是延遲的全面可控,非常划算。

接著 SQM 做兩件事:第一,把每一條連線分開排隊,備份的歸備份、視訊的歸視訊,誰也塞不到誰,即時流量再也不必排在下載大軍的後面;第二,主動而提早地丟掉或標記一點點封包,及早通知傳送端「你太快了,慢一點」,讓隊伍在還沒排長之前就先被壓短。效果就是:即使線路被塞滿,排隊延遲依然很低,該有的頻寬也幾乎沒少。這正是對付緩衝膨脹最對症下藥的一招,尤其對深受上傳塞爆之苦的視訊會議,特別有感。

FQ-CoDel 和 CAKE 的差別在於,CAKE 比較新、功能更完整,把流量分隔與速度整形整合在一起,設定起來更省事,但也比較吃設備的運算力;FQ-CoDel 較輕量,在設備效能有限時是穩妥的選擇。實務上該用哪一個、上傳速度該設成幾成,要看你的線路速度與設備等級來拿捏,沒有一個放諸四海皆準的數字。

真的要設,方向怎麼抓

講完原理,落到實作,可以照這幾個方向去規劃,順序大致就是優先級:

  • 先辨識關鍵即時應用:視訊會議、網路電話(VoIP)、遠端桌面這幾類最怕延遲的,給它們最高優先權,確保它們永遠先被服務。
  • 壓制大流量背景任務:雲端同步、系統備份、系統更新、大檔上下載這種「晚點完成沒關係」的,降到低優先或直接限速,讓它們懂得禮讓。
  • 對上傳做速度整形:把上傳整形到略低於實際線路速度,把瓶頸收回自己手上,這是治緩衝膨脹的關鍵一步,也是最容易被忽略的一步。
  • 針對單機或單一網段設總量上限:避免單一台電腦、單一個人(尤其是狂下載或狂上傳的那位)把整條線一個人吃滿。
  • 別忘了 Wi-Fi 這一段:QoS 不只在有線上有效,無線也有對應機制(WMM,把流量分成語音、影像、一般、背景四級)。如果你的視訊是走 Wi-Fi,這一段沒設好,前面做得再漂亮,也會在空中被打折。

有一點一定要提醒:QoS 得設在路由器或防火牆這種「流量的咽喉點」上才會真正生效,設在末端的交換器或個別電腦上,效果非常有限。而且每間公司的應用組合都不一樣:有的以視訊為主、有的重雲端 ERP、有的三天兩頭在傳大檔給工廠:優先權該怎麼排、上限抓多少,都得依實際情況客製。網路上抓來的範本往往水土不服,套下去不但沒解決問題,還可能把原本正常的流量誤降級。

幾個常見誤區,別再踩

  • 「卡就是網速慢,升頻寬就好」:如前所述,卡頓多半是延遲問題、不是頻寬問題,升頻寬對緩衝膨脹幾乎沒幫助,錢花下去卡頓照舊。
  • 「QoS 開下去,下載也會跟著變順」:QoS 對上傳方向最有效,下載方向先天受限,別期待它包治百病;下載的問題要靠限速或智慧佇列另外處理。
  • 「把所有流量都設成高優先就好」:當每一種流量都是高優先,就等於每一種都沒有優先。QoS 的本質是取捨,一定要有東西被降級,重要的才走得動。
  • 「設一次就一勞永逸」:公司會換視訊軟體、會導入新的雲端系統、人也會愈來愈多,流量結構一變,規則就該跟著檢視與調整,不是設完就丟著不管。

對照指令

聯絡廷皓討論 看更多文章