1-智能QOS方案介紹

1. QOS是什麼

在傳統的 IP 網絡中,所有的報文都被無區別的同等對待。即每個網絡設備對所有的報文均採用 FIFO(First In First Out,先進先出)的策略進行處理,依照報文到達時間的先後次序分配所需的資源,盡最大的努力(Best-Effort)將報文送到目的地。

這種方式下,對報文傳送的可靠性、傳遞延遲、丟包率等性能不能提供任何保證,僅適用於對服務性能不敏感的普通業務,如WWW、FTP、Email等。隨着IP互聯網上新型應用不斷出現,對 IP 網絡的服務質量提出新要求,如遠程醫療、遊戲、VOIP等,對實時性和連續性方面要求更加苛刻,如果報文傳送延時太長將是用戶無法接受的,這類應用中不能容忍中間停頓現象。

爲支持具有不同服務需求的話音、視頻以及數據等業務,要求網絡能夠區分出不同的業務類型,進而爲之提供相應等級的服務。

QoS 正是這樣一種可以爲不同業務類型報文提供差分服務的技術,通過對網絡流量進行調控,可避免並管理網絡擁塞,減少報文丟包率。

2. 現有廠家的方案

小米:https://zhidao.baidu.com/question/439781106.html

image.png

華爲榮耀:https://jingyan.baidu.com/article/414eccf64b65ba6b431f0a12.html

image.png

華爲WS5200:

image.png

家用路由器的 QOS 功能基本是以幾部分組成,總帶寬的設置,根據應用優
先級設置,根據設備限速,網站過濾。

3. QOS原理

下面用簡單的例子對比了在網絡發生擁塞時報文在無QoS保證和有QoS保證網絡中的不同處理過程。

下圖所示爲發生擁塞時網絡設備的一個接口在不支持QoS的情況下報文的發送情況:
image.png

所有要從該接口輸出的報文,按照到達的先後順序進入接口的FIFO隊列尾部。而接口在發送報文時從 FIFO 先入先出隊列的頭部開始依次發送報文。所有的報文在發送過程中沒有任何區別也不對報文傳送的質量提供任何保證。

既然上述的方式不好,那就對數據包進行優先級分類,下圖爲一個優先級隊列進行 Qos 處理的過程:

image.png

在報文到達接口後,首先對報文進行分類,然後按照報文所屬的類別讓報文進入所屬隊列的尾部。

在報文發送時,按照優先級總是在所有優先級較高的隊列中的報文,發送完畢後再發送低優先級隊列中的報文。這樣在每次發送報文時總是將優先級高的先發出去。保證了屬於較高優先級隊列的報文有較低的時延報文的丟失率和時延。這兩個性能指標在網絡擁塞時也可以有一定的保障。

從上面可以看出來,QOS的作用部分主要位於兩個地方,一個就是隊列入口的報文分類,需要把哪些報文放在優先級高,哪些在優先級低的;另一個就是出隊列的調度算法,出隊列的算法這部分現有很多可以選擇的,下面進行說明。

因爲調度算法的不同會有不同的類別劃分形式,所以先從隊列的調度算法選擇說起,然後反過來規劃類別

4. 隊列調度算法選擇

內核裏面已經實現了很多種調度算法,根據需求來選擇適合自己的算法。

image.png

下面列舉幾個常規的調度算法:

  • PFIFO:這個隊列的特點就像它的名字一樣——先進先出(FIFO),也就是說沒有任何數據包被特殊處理,這也是默認的隊列方式。
  • PRIO:PRIO QDisc 不能限制帶寬,使用 PRIO QDisc可以很容易對流量進行優先級管理,只有屬於高優先級類別的數據包全部發送完畢,纔會發送屬於低優先級類別的數據包。
  • CBQ:CBQ 是 Class Based Queueing(基於類別排隊)的縮寫。它實現了一個豐富的連接共享類別結構,既有限制(shaping)帶寬的能力,也具有帶寬優先級管理的能力。帶寬限制是通過計算連接的空閒時間完成的。空閒時間的計算標準是數據包離隊事件的頻率和下層連接(數據鏈路層)的帶寬。
  • HTB:HTB 是 Hierarchy Token Bucket 的縮寫。通過在實踐基礎上的改進,它實現了一個豐富的連接共享類別體系。使用 HTB 可以很容易地保證每個類別的帶寬,雖然它也允許特定的類可以突破帶寬上限,佔用別的類的帶寬。HTB可以通過 TBF(Token Bucket Filter)實現帶寬限制,也能夠劃分類別的優先級。
  • HFSC:HFSC - Hierarchical Fair Service Curve’s(層次公平服務曲線) 層次公平服務曲線。HFSC允許按比例分配頻寬並且控制及分配延遲(latency)。這能夠在只有一條實體網路連線的情況下,又快又好地同時提供頻寬密集的資料傳輸服務及互動式服務。

最終選擇 prio 配合 pfifo 和 hfsc 算法進行設計:

image.png

以 prio 做一個基礎性的優先級調度分配,分成兩個 band。

將一些比較直觀性的功能如 ping,放到第一個 band,該級別的調度就按默認的 fifo 即可,讓用戶感知不出 ping 的延時,另外對於其他不需要經過 QOS 規則的鏈也直接走 fifo。

對於第二個 band 就用來存放各 qos 規則,使用 hfsc 調度算法

5. 等級制定

hfsc 算法要求設置總帶寬,並且可以按類別設置,有如下四種服務:

  • rt : realtime service curve(即時服務)
  • ls : linkshare service curve(共享服務/百分比)
  • sc : rt+ls service curve(組合型)
  • ul : upperlimit service curve(上限值/帶寬設置)

現有方案一共分了四個等級的隊列,RealTime、Fast、Normal、Slow:

RealTime:爲最高優先級,使用rt服務,設置最小/大帶寬,分配延遲。(QOS是在帶寬不夠用時纔有競爭一說,如果帶寬主夠沒有被堵塞,完成可以都走實時)

Fast/Normal/Slow:下面三個等級就按帶寬比例分配,使用 ls 服務。

(當然等級裏面的配置信息是會根據應用需求進行調整的)

6. 規則制定/應用分類

上面將等級已經劃分好之後,就可以根據應用需求將不同的應用放進相應的等級裏面,目前基於端口/IP/包大小對應用進行分類。

  • 端口如:25/smtp,80/http,109/pop2,110/pop3,143/imap,
    443/https,465/smtps,993/imaps,995/pop3s
  • IP如:傳輸層的TCP/UDP,網絡層的IP/ICMP等
  • 包大小:0-100、100-300、300-700、700-
1. 默認規則:

image.png

規則說明:

1、當四個隊列全部有規則匹配時,則按上面的比例共享帶寬。如總帶寬 1000M,Class1=100M,Class2=700M,Class3=180M,Class4=20M

2、當有空閒的隊列出現時,則空出的帶寬按比例分配給剩餘隊列使用。如 Class3 和 Class4 的規則沒有數據,則 Class1 和 Class2 按比例 10/70 進行分配帶寬,Class1=125M,Class2=875M,Class3=0M,Class4=0M

3、如果 rl 分配到的比例帶寬小於最小帶寬,則以最小帶寬爲主如 Class1 分配的 10%的帶寬,只有 10M,但是設置了最小帶寬爲 50M,則以 50M 爲準。

2. 遊戲優先:RT 的帶寬設大,並保證時實時性,遊戲進入 RT
3. 視頻優先:Fast 帶寬設大,視頻進入 Fast
4. 網頁優先:80/http,443/https 進入 Fast 隊列
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章