
QoS 是一個很大的領域,涉及到網絡中的多個層次和環節。本文僅簡要的談談 Endpoint 側的 QoS 概念,將這些紛繁的概念名詞串起來,便于理解。
QoS 技術背景
下圖說明了 QoS workflow 中,各項技術的位置和關系

當流量進入設備后,它依次經過 mark(標記)→ meter(計量) → police(管制) → class/dscp(重分類) → queue(隊列) → sharper(整形) → queue priority (優先級調度). meter + police 完成 rate-limit 功能。 而 queue + sharping + priority 完成 congestion manager 功能。sharping 功能屬于可選項。
細解釋其中的專業術語和實現特點
- Classification and marking
- Metering
- Policing
- Shaping
- Scheduling
- Congestion management
- 分類:將數據分為不同的類別,稱為分類(classification),分類并不修改原來的數據包。
- 標記:將數據設置為不同的優先級稱為標記(marking),而標記會修改原來的數據包。
- 流量計量:流量計量可以通過漏桶算法(常用于ATM網絡)或令牌桶算法(常用于IP網絡)實現。計量后的數據包會根據不同的整形類別分別保存在緩沖區中,待滿足對應的流量資料后再進行發送。
- 流量管制:丟棄超出帶寬,稱為管制(Policing)。
- 流量整形:將超出的帶寬緩存在內存中,等到下一秒再傳遞,這種行為稱為Shaping。典型作用是限制流出某一網絡的某一連接的流量與突發,使這類報文以比較均勻的速度向外發送,以符合種給定的“流量資料”(traffic profile)。
- 隊列調度機制:在QoS技術體系中屬于擁塞管理的范疇。
- 擁塞管理:當網絡發生擁塞后,數據還是要被傳遞的,正因為接收到的數據遠多于自身的傳輸能力,所以數據被傳輸時就出現了先后順序,而依照什么樣的方式來傳數據,就需要隊列的指導,QOS中的隊列定義了數據包被傳輸的先后順序。如果處理方式為管制,那么數據包就會被丟棄,通常情況下,網絡設備默認丟棄后到的數據包而傳輸先到的數據包,這樣的丟棄方式稱為尾丟棄。
流量整形(traffic shaping)常與流量監管(traffic policing)混淆。它們的主要區別在于,流量整形是一種主動調整流量輸出速率的措施。流量整形對流量監管中需要丟棄的報文進行緩存——通常是將它們放入緩沖區或隊列內,再根據特定算法均勻的向外發送這些被緩存的報文。但這不代表流量整形不會丟棄報文。shaping可能會增加延遲,而policing幾乎不引入額外的延遲。
通常的實現方式
- Marking: fwmark, ToS/IPP/DSCP
- Metering: token bucket, trTCM, mark ToS/IPP/DSCP
- Policing per interface (egress)
- Shaping per interface (egress)
- Scheduling: Priority Queuing
- Congestion management: Taildrop
標記方式
實現 QoS 的一個最基本的方法就是分類和標記。
ToS/IPP/DSCP 是 IP頭部的一個名為 ToS 字段。用于標記服務類型。這個字段隨著發展,被不斷的賦予了新的定義。見下表:

ToS/IPP:根據RFC791定義,IP報文頭ToS(Type of Service)域由8個比特組成,其中3個比特的 Precedence 字段標識了 IP 報文的優先級
DSCP:差分服務代碼點(Differentiated Services Code Point)RFC2474 重新定義了 IP 報文中的 ToS 域,增加了C比特,表示傳輸開銷(Monetary Cost)。
下圖是RFC1349 定義的每個位的意義:

上圖示例了一些協議應該如何設置(4~1)位:
到了 RFC2474 , IPP的的意義就發生了變化。而 DTR位意義不變。IPP 與 DSCP 相應存在一個轉換關系。DSCP 可以看成定義了一系列隊列類別,下表列出一部分:

在路由器中,一般都是把 CS6 和CS7 中的數據用 PQ 做絕對優先處理,無論下面是否有數據也是要優先來傳遞這兩個隊列中的數據。而其他EF到AF1的隊列中是用 WFQ 來做的,保證所有隊列都可以得到帶寬來傳輸。
PQ(Priority Queueing,優先隊列):PQ會先服務高優先級的子隊列,若高優先級子隊列里沒有數據后,再服務中等優先級子隊列,依次類推。如果PQ正在服務中等優先級子隊列,但是高優先級里又來了數據包,則PQ會中斷中等優先級子隊列的服務,轉而服務高優先級子隊列。
WFQ(Weighted Fair Queueing,加權公平隊列):可以保證相同優先級業務間公平,不同優先級業務間加權。
計量算法
令牌桶算法(Token Bucket)
有時人們將漏桶算法與令牌桶算法錯誤地混淆在一起。而實際上,這兩種算法具有截然不同的特性并且為截然不同的目的而使用。它們之間最主要的差別在于:漏桶算法能夠強行限制數據的傳輸速率,而令牌桶算法能夠在限制數據的平均傳輸速率的同時還允許某種程度的突發傳輸。
雙速率三色標記器(trTCM)
基于令牌桶算法做計量器
管制支持
Ingress policing per interface provided by the Fast Path QoS module. QoS basic 支持對 入口流量做管制。 QoS advance 僅支持對 出口流量做管制。管制也即丟棄。
隊列調度算法
Priority Queuing
在報文到達接口后,首先對報文進行分類,然后按照報文所屬類別讓報文進入所屬隊列尾部,在報文發送時,按照優先級,總是在所有優先級較高隊列中報文發送完畢后,再發送低優先級隊列中報文,這樣,在每次發送報文時,總是將優先級高的報文先發出去,保證了屬于較高優先級隊列報文有較低時延,所以PQ的優缺點是很明顯的:優點是可以保證高優先級隊列的報文可以得到較大帶寬、較低的時延、較小的抖動;缺點是低優先級隊列的報文不能得到及時的調度,甚至得不到調度,即會出現“餓死”現象。
PQ具有如下特征:
(1) 報文丟棄策略采用 Tail Drop 機制;
(2) 每個隊列內部使用FIFO邏輯;
(3) 當從隊列調度報文時,先從高優先級的隊列調度報文
從上面可以看出,PQ一般的應用場合是保證某類流量盡可能得到最好的服務,而不管其它流量的“死活”。
擁塞管理算法
與調度算法相匹配,使用簡單的尾部丟棄算法(tail drop)
上述的這些實現方式,按照文章中的第一個 workflow 圖,被串起來,對流量進行控制。各種 Endpoint QoS 實現,都無出本文之右。