關於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.策略
決策器能計算並限制某個特定佇列的流量
5. 丟棄
丟棄一個資料包,一個資料流或一個分類下的資料包,都可以叫做丟棄。
6. 標記
標記是一種對資料包進行一些修改的操作
注意
這裡說的標記不是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.