目錄
IP-Precedence到DSCP的映射(Tos-->DSCP)
視頻教程:
https://www.bilibili.com/video/BV1nK411g7aq?from=search&seid=5647562267094223387
介紹和區別
IP優先級、TOS優先級、DSCP優先級和802.1p優先級的區別(https://blog.csdn.net/Mr_zhangtf/article/details/107925938)
以太網交換機可為特定報文提供優先級標記的服務,優先級的種類包括IP Precedence,TOS、DSCP、802.1p prioriy等,這些優先級分別適用於不同的QoS 模型,在不同的模型中被定義。Precedence、TOS和DSCP優先級是定義在三層IP頭中的TOS字段;802.1p用戶優先級定義在二層802.1Q 標簽頭中的TCI字段中。(主要區分TOS字段和TOS )
IP header 有一個8-bit的TOS(服務類型)優先級區域,它通常被分為precedence部分(IP優先級)和TOS部分,最后一位作保留;它的具體定義如下:
由於對區分服務類型的多樣化的要求,在之后的RFC文檔中對TOS字段這個區域進行了重新的分配,命名為DSCP:也就是IP包頭的區分服務標記域。DSCP優先級是把整個8位的前6位重新定義了一下,稱為DSCP優先級;
數據幀里有4個字節的802。1q標簽頭,包含2字節的標簽和2字節的控制信息,在控制信息(vlan tag的TCI區域)的前3位,就定義為802.1p優先級。它指明幀的優先級。一共有8 種優先級,主要用於當交換機阻塞時,優先發送優先級高的數據包。
Qos/Cos
Cos 是在二層。(mac)
QoS(quality of service)是cisco的叫法,類似的叫法,在Juniper為CoS(class of service)。CoS在外企的Juniper設備上配置比較多,在國內用戶的設備上見到很少。
IP-TOS(IPP/CS)和DSCP
早期Qos分類簡單,使用Tos字段的高3個bit作為TTP的不同組合值(定義IP優先級方案,ip precedence既IPP,稱為CS),加起來就八種,后來發現不夠,IETF對TOS字段重新分配,提出了DSCP(Differentiated Services Codepoint,區分服務代碼點),用6比特取代了原來的3比特。
https://book.51cto.com/art/201012/236881.htm
取值范圍0-63,0優先級最低,63優先級最高。COS TOS DHCP通常要做映射機制。
由於DSCP和IP PRECEDENCE是共存的於是存在了一些兼容性的問題,而且DSCP的可讀性比較差,比如DSCP 43(101011)我們並不知道對應着IP PRECEDENCE的什么取值,於是就把DSCP進行了進一步的分類。目前定義的DSCP總共分成了4類(64個優先級並未用完):
類選擇器 Class Selector(CS) aaa 000
加速轉發 Expedited Forwarding(EF) 101 110
確保轉發 Assured Forwarding(AF) aaa bb0
盡力而為 Default(BE) 000 000
https://www.cnblogs.com/zandon/p/11923607.html
IP-TOS(IPP,IP優先級方案)
DSCP
PHB(Per-Hop-Behaviors)
Per-Hop-Behaviors傳輸中每一跳的動作。網絡管理員可以配置DSCP到PHB的映射。DS采用的缺省PHB是(Best-Effort,DSCP=000000)
Defalut PHB 規定DSCP的后3個bit全為0時,去兼容ip precedence,稱為class selector。
區別
TOS和DSCP是三層協議(IP層)中的字段;
COS是二層協議中的字段;
各個等級的DSCP值和含義(PHB)
DSCP不同的值(PHB值)代表選擇不同的PHB(Per-Hop Behavior,動作),PHB代表不同的QoS(時延、 帶寬等)--->設備根據所選的PHB,為IP報文提供不同的QoS。
每個DSCP值與PHB存在一對一,或多對一的關系。
缺省的PHB編碼 000000 對應 Best-effort traffic.
優先級別為CS7>CS6>EF>AF31>(AF32,AF31)>AF11>(AF12,AF13)>BE,通俗定義為CS7>CS6>EF>AF4>AF3>AF2>AF1>BE.通常CS級別為網絡內部協議使用,所以最高級別為EF
映射
COS到DSCP的映射
(https://blog.51cto.com/u_692344/1085561)
默認關系如下:
查看命令:
這是個二維陣列表,d1 列代表DSCP值的十位數,d2 行代表DSCP值的個位數。在列與行交叉的位置上顯示的是映射到該DSCP值上的CoS值。
比如DSCP值08(十進制)(D1=0,D2=8)交叉值是01,就表示對應的COS 值是01.
再比如
比如DSCP值0x30=48-->(D1=4,D2=8)
IP-Precedence到DSCP的映射(Tos-->DSCP)
默認的IP-Precedence-to-DSCP映射關系如下。
https://blog.csdn.net/Mr_zhangtf/article/details/107925938
詳細:
DiffServ 域
https://my.oschina.net/u/4315153/blog/3844629
TOS在不同協議中進行過定義,分別為RFC791、RFC1122、RFC1349;RFC1349廢除了之前兩個RFC定義,現在大多數設備使用RFC1349.
DSCP由RFC2474定義,重新命名了IPv4包頭中TOS和IPv6包頭中數據類(Traffic Class)那1字節,新的名稱為DS字段,仍然被QoS工具用來標注數據。
0 1 2 3 4 5 6 7
+---+---+---+---+---+---+---+---+
| DSCP | CU |
+---+---+---+---+---+---+---+---+
DSCP: differentiated services codepoin
CU: currently unused
COS在802.1q標准定義,在二層數據幀(802.1q幀)里包含2個字節的標簽(TPID)和2個字節的控制信息(TCI),TCI的前3位定義了802.1p優先級。
在實施Qos策略時,Cos與Tos或DSCP之間通常要做映射機制。
Qos分類
《理解DSCP PHB AF DF》:http://www.dengb.com/wlxy/462317.html
PPT
上圖的CS等級
DSCP-PHB行為的AF類,規定前3bit不能為101且最后一個bit為0的任意組合,前3bit的組合為類,跟着的2bit為dd域,所以
所以有AF類有AF1-AF4,4個類。配合dd則為AF1-dd
AF1-01(AF11) |
AF2-01(AF21) | AF3-01(AF31) |
AF1-02(AF12) |
AF2-02(AF22) | AF3-02(AF32) |
AF1-03(AF13) |
AF2-03(AF23) | AF3-03(AF33) |
AF類消息定義發送擁塞時被丟棄的可能,dd=Low 低概率,Medium 中概率,High 最先被丟棄
映射實例講解
Traffic class 0xc0==>CS6==>DSCP 0x30
Qos 步驟
根據需要-->保證帶寬/最小延遲……-->標志-->查
更多
http://www.inotes.cn/Cx/page/inote/3-3
QOS--理論篇
關於qos ,也是linux下面必備功能之一,一般只需要結合iptables/etables/iproute2 和tc配合即可實現大部分功能. 網上講這么方面的資料很多,大部分都講tc命令的應用.這里就先從理論入手.
QoS(Quality of Service)服務質量,是網絡的一種安全機制, 是用來解決網絡延遲和阻塞等問題的一種技術。但是對關鍵應用和多媒體應用就十分必要。當網絡過載或擁塞時,QoS 能確保重要業務量不受延遲或丟棄,同時保證網絡的高效運行. 在網絡總帶寬固定的情況下,如果某類業務占用的帶寬越多,那么其他業務能使用的帶寬就越少,可能會影響其他業務的使用。因此,網絡管理者需要根據各種業務的特點來對網絡資源進行合理的規划和分配,從而使網絡資源得到高效利用
QoS服務模型
通常QoS提供以下三種服務模型:
1> Best-Effort service(盡力而為服務模型)(系統默認;PFIFO_FAST)
2> Integrated service(綜合服務模型,簡稱Int-Serv)
3>Differentiated service(區分服務模型,簡稱Diff-Serv)
1. Best-Effort服務模型Best-Effort是一個單一的服務模型,也是最簡單的服務模型。對Best-Effort服務模型,網絡盡最大的可能性來發送報文。但對時延、可靠性等性能不提供任何保證。
Best-Effort服務模型是網絡的缺省服務模型,通過FIFO隊列來實現。它適用於絕大多數網絡應用,如FTP、E-Mail等。
2. Int-Serv服務模型Int-Serv是一個綜合服務模型,它可以滿足多種QoS需求。該模型使用資源預留協議(RSVP),RSVP運行在從源端到目的端的每個設備上,可以監視每個流,以防止其消耗資源過多。這種體系能夠明確區分並保證每一個業務流的服務質量,為網絡提供最細粒度化的服務質量區分。
但是,Inter-Serv模型對設備的要求很高,當網絡中的數據流數量很大時,設備的存儲和處理能力會遇到很大的壓力。Inter-Serv模型可擴展性很差,難以在Internet核心網絡實施,前主要與MPLS TE(Traffic Engineering,流量工程)結合使用.
3. Diff-Serv服務模型Diff-Serv是一個多服務模型,它可以滿足不同的QoS需求。與Int-Serv不同,它不需要通知網絡為每個業務預留資源。區分服務實現簡單,擴展性較好,
可以說是為現在的網絡量身打做的。這個這種類型的QOS中,數據流是要進行分類的,然后,我們可以進一步的對各種不同類的流進行的控制。這個控制的實現就是通過策略表來實現的。這樣簡單一說,我們就該知道了,實現他們是要有個類表,然后還得有個控制表---策略表.
它由RFC2475定義,在區分服務中,根據服務要求對不同業務的數據進行分類,對報文按類進行優先級標記,然后有差別地提供服務。
區分服務一般用來為一些重要的應用提供端到端的QoS,它通過下列技術來實現:
1)流量標記與控制技術:它根據報文的CoS(Class of Service,服務等級)域、ToS域(對於IP報文是指IP優先級或者DSCP)、IP報文的五元組(協議、源地址、目的地址、源端口號、目的端口號)等信息進行報文分類,完成報文的標記和流量監管。目前實現流量監管技術多采用令牌桶機制。
2)擁塞管理與擁塞避免技術:WRED、PQ、CQ、WFQ、CBQ等隊列技術對擁塞的報文進行緩存和調度,實現擁塞管理與擁塞避免。
QoS的應用
流量約定(SLA, Service Level Agreement服務等級協議)給數據流設定優先級,以此在網絡/協議層面上,根據相互商定的尺度,設定有保障的性能、通過量、延遲等界限。一些特定形式的網絡數據流需要定義服務質量,例如:
多媒體流要求有保障的通過量
IP電話需要嚴格的抖動和延遲限制
性命攸關的應用系統,例如遠程外科手術要求有可靠保證的可用性(也稱作硬性 QoS).
這些類型的服務被稱為非彈性,意思是它們需要固定的帶寬才能運作--如果得到多余的帶寬,它們也無法使用;如果得到較少的帶寬,則根本無法工作。相形之下,彈性應用可以從多余的帶寬中受益。
網絡中會遇到的情況:
1. 數據包丟失
當數據包到達一個緩沖器(buffer)已滿的路由器時,則代表此次的發送失敗,路由器會依網絡的狀況決定要丟棄一部份、不丟棄 或者是所有的數據包,而且這不可能在預先就知道,接收端的應用程序在這時必須請求重新傳送,而這同時可能造成總體傳輸嚴重的延遲
2. 延遲
或許需要很長時間才能將數據包傳送到終點,因為它會被漫長的隊列遲滯,或需要運用間接路由以避免阻塞;也許能找到快速、直接的路由。總之,延遲非常難以預料
3. 傳輸順序出錯
當一群相關的數據包被路由經過因特網時,不同的數據包可能選擇不同的路由器,這會導致每個數據包有不同的延遲時間。最后數據包到達目的地的順序會和數據包從發送端發送出去的順序不一致,這個問題必須要有特殊額外的協議負責刷新失序的數據包。
4. 出錯
有些時候,數據包在被運送的途中會發生跑錯路徑、被合並 甚至是 毀壞的情況,這時接收端必須要能偵測出這些情況,並將它們統統判別為已遺失的數據包,再請求發送端再送一份同樣的數據包。處理流程:
分類
Classifying即分類,其過程是根據信任策略或者根據分析每個報文的內容來確定將這些報文歸類到以CoS值來表示的各個數據流中,因此分類動作的核心任務是確定輸入報文的CoS值。分類發生在端口接收輸入報文階段,當某個端口關聯了一個表示QoS策略的Policy-map后,分類就在該端口上生效,它對所有從該端口輸入的報文起作用
(1)協議
有些協議非常“健談”,只要它們存在就會導致業務延遲,因此根據協議對數據包進行識別和優先級處理可以降低延遲。應用可以通過它們的EtherType進行識別。譬如,AppleTalk協議采用0x809B,IPX使用0x8137。根據協議進行優先級處理是控制或阻止少數較老設備所使用的“健談”協議的一種強有力方法。
(2) TCP和UDP端口號碼
許多應用都采用一些TCP或UDP端口進行通信,如HTTP采用TCP端口80。通過檢查IP數據包的端口號碼,智能網絡可以確定數據包是由哪類應用產生的,這種方法也稱為第四層交換,因為TCP和UDP都位於OSI模型的第四層。
(3) 源IP地址
許多應用都是通過其源IP地址進行識別的。由於服務器有時是專門針對單一應用而配置的,如電子郵件服務器,所以分析數據包的源IP地址可以識別該數據包是由什么應用產生的。當識別交換機與應用服務器不直接相連,而且許多不同服務器的數據流都到達該交換機時,這種方法就非常有用。
(4) 物理端口號碼
與源IP地址類似,物理端口號碼可以指示哪個服務器正在發送數據。這種方法取決於交換機物理端口和應用服務器的映射關系。雖然這是最簡單的分類形式,但是它依賴於直接與該交換機連接的服務器
策略
Policing 即策略,發生在數據流分類完成后,用於約束被分類的數據流所占用的傳輸帶寬。Policing動作檢查被歸類的數據流中的每一個報文,如果該報文超出了作用於該數據流的Police所允許的限制帶寬,那么該報文將會被做特殊處理,它或者要被丟棄,或者要被賦予另外的DSCP 值。
在QoS 處理流程中,Policing 動作是可選的。如果沒有Policing 動作,那么被分類的數據流中的報文的DSCP 值將不會作任何修改,報文也不會在送往Marking 動作之前被丟棄。
標識
Marking即標識,經過Classifying 和Policing 動作處理之后,為了確保被分類報文對應DSCP的值能夠傳遞給網絡上的下一跳設備,需要通過Marking 動作將為報文寫入QoS 信息,可以使用QoS ACLs 改變報文的QoS信息,也可以使用Trust 方式直接保留報文中QoS 信息,例如,選擇Trust DSCP 從而保留IP 報文頭的DSCP 信息。
隊列
Queueing即隊列,負責將數據流中報文送往端口的某個輸出隊列中,送往端口的不同輸出隊列的報文將獲得不同等級和性質的傳輸服務策略。
每一個端口上都擁有8 個輸出隊列,通過設備上配置的DSCP-to-CoS Map 和Cos-to-Queue Map 兩張映射表來將報文的DSCP 值轉化成輸出隊列號,以便確定報文應該被送往的輸出隊列。
調度
Scheduling即調度,為QoS 流程的最后一個環節。當報文被送到端口的不同輸出隊列上之后,設備將采用WRR 或者其它算法發送8 個隊列中的報文。
可以通過設置WRR算法的權重值來配置各個輸出隊列在輸出報文的時候所占用的每循環發送報文個數,從而影響傳輸帶寬。或通過設置DRR算法的權重值來配置各個輸出隊列在輸出報文的時候所占用的每循環發送報文字節數,從而影響傳輸帶寬
先說說常用的分類和標記,首先需要說下:
cos tos dscp的概念及區別:
1、COS是在第二層ISL或802.1Q數據幀中的ISL或802。1Q的報頭中的3位用於COS,即優先標識。3bit,0--7個級別。
802.1Q:
2、TOS是在第三層IP數據包中的8位TOS數據位,以來標識優先級。這8位中前3位表示優先級,后4位表示服務類型(分別為:最小延遲、最大吞吐量、最高可靠性、最小費用。只能其中一位為1,即生效。如果全為0就表示一般服務)。最后一位一般不用,置0
3、DSCP也是三層IP中的8位TOS字段表示優先級。不同的是用了前6位表示優先級,可設0--63,共64個等級。(把前6位中的前3位設為優先級,后3位設為0,就可以實現DSCP和TOS互相映射兼容)。 最后兩位為早期擁塞通知。
因為COS二層標記中也是3位用於優先級,所以也可以把COS和TOS和DSCP中的優先級映射
DSCP數位域標識出數據包所屬的特定交付分類,具體實現方法是企業為分類制定明確的交付目標。路由器和其它設備可以通過數據包隊列(本質上就是緩沖區)和相應算法,傳遞數據包,實現交付目標。一些推薦標准涉及到DSCP數位域的值(如RFC2474中列舉的),它們圍繞加速轉發(進一步描述可參見RFC3246)和確保轉發(RFC2597)定義了一些期望行為:加速轉發讓交付過程低丟包、低延時和抖動最小;確保轉發則保證無損交付。
RFC推薦使用DSCP值46來標記加速轉發分類(6位DSCP的二進制值為101110),它適用於諸如VoIP或IP會議的實時交互多媒體流;為確保轉發流量分配了包含12個標記值的集合,來保證不同等級的交付。
這里cos和dscp是修改了數據報文的內容,可以在網絡其他設備來調度,還有本地主機的工具可以打一些標記,tc的u32模塊,iptables的MARK,以及iproute2的工具.
這些工具並不修改報文,而是提供本地內核調度用.
QOS要保證服務,就要設計流量控制我們先了解幾個概念:
流量控制中的概念
1. 整形
整形就是流量控制,把數據包的發送速率控制在一個固定的水平以下。由於整形通過延遲數據包的發送來控制數據包發送速率,故整形機制是非工作保存的。“非工作保存”可以理解為:系統必須進行一些操作來延遲數據包的發送。
反過來說,一種非工作保存的隊列是可以進行流量整形的,而工作保存的隊列(參考 PRIO)不能進行流量整形,因為工作保存隊列無法延遲發送數據包。
2. 調度
一個調度器會對將要發送的數據包順序進行排列或重排。
3分類
分類器能把不同類型的網絡流量划分到不同的隊列中去。
4.策略
決策器能計算並限制某個特定隊列的流量
4. 丟棄
丟棄一個數據包,一個數據流或一個分類下的數據包,都可以叫做丟棄。
5. 標記
標記是一種對數據包進行一些修改的操作
注意
這里說的標記不是fwmark。iptables,$ipt-mark;,ipchains以及--mark都只修改數據包的元數據,而不修改數據包本身。
流量控制中的標記操作會給數據包加上一個DSCP,接下來在由一個管理員控制的一個網絡下的其他路由器上將會使用這個標記。
QoS的關鍵指標主要包括:可用性、吞吐量、時延、時延變化(包括抖動和漂移)和丟失
在linux中是通過Tc命令來實現的(外加內核的支持). 我們看到網上大部分說的隊列規則、分類、分類器什么的都是說的TC的機制,而tc只是實現qos的方式之一.
在網絡通信設備中不同的廠商對qos有各自的實現和配置. 基於QOS的特性,便產生了tc.
我們先看一個圖:
關於tc的設計:
遞歸控制 所謂的遞歸控制就是分層次地控制,而對於每個層次,控制方式都是一致的
Qdisc –class –filter 的樹型組織模式.
qdisc 隊列規則(queueing discipline):
用來實現控制網絡的收發速度.通過隊列,linux可以將網絡數據包緩存起來,然后根據用戶的設置,在盡量不中斷連接(如 tcp)的前提下來平滑網絡流量.需要注意的是,linux 對接收隊列的控制不夠好,所以我們一般只用發送隊列,即"控發不控收".它封裝了其他兩個主要 tc 組件(類和分類器).內核如果需要通過某個網絡接口發送數據包,它都需要按照為這個接口配置的 qdisc 隊列規則把數據包加入隊列.然后,內核會盡可能多地從 qdisc里面取出數據包,把它們交給網絡適配器驅動模塊.
最簡單的 QDisc 是 pfifo 它不對進入的數據包做任何的處理,數據包采用先入先出的方式通過隊列.不過,它會保存網絡接口一時無法處理的數據包.常有的隊列規則包括 FIFO 先進先出,RED 隨機早期探測,SFQ 隨機公平隊列和令牌桶 Token Bucket,類基隊列 CBQ,CBQ 是一種超級隊列,即它能夠包含其它隊列,甚至其它 CBQ
Class 類
class 用來表示控制策略.很顯然,很多時候,我們很可能要對不同的IP實行不同的流量控制策略,這時候我們就得用不同的class來表示不同的控制策略了.
Filter 規則
filter 用來將用戶划入到具體的控制策略中
目前,tc可以使用的過濾器有:fwmark分類器,u32 分類器,基於路由的分類器和 RSVP 分類器(分別用於IPV6、IPV4)等;其中,fwmark 分類器允許我們使用 Linux netfilter 代碼選擇流量,而 u32 分類器允許我們選擇基於 ANY 頭的流量 .需要注意的是,filter (過濾器)是在QDisc 內部,它們不能作為主體
關於tc的具體應用,我們以后分析.這里僅僅以理論作為引導讓我們了解什么是QOS.