随着網絡的發展,網際網路流量迅速增加,使得網絡産生擁堵,延時增大,有時還會造成丢包現象,導緻業務品質下降。那麼如何在有限的帶寬上控制不同業務的流量?這就需要QoS(Quality of Service,服務品質)技術了
網絡擁堵的産生
産生網絡擁堵的兩種常見情況如下(下圖所示):
(1)資料從高速端口進入裝置,從低速端口轉發出去
(2)流量彙聚,流量從多個端口進入裝置,從一個端口轉發出去,并且進入端口速率之和大于轉發接口的速率
<a href="http://yangshufan.blog.51cto.com/13004230/1964891" target="_blank"></a>
網絡擁堵的影響
(1)封包傳輸延遲、延遲抖動和丢包率增加
(2)由于過高的延遲和丢包導緻封包重傳,增加網絡負擔
(3)由于網絡擁塞、封包重傳導緻網絡有效吞吐量降低
網絡擁堵的解決方法
(1)提高網絡帶寬
(2)合理利用網絡帶寬,根據需要使用QoS技術合理配置設定現有帶寬,降低網絡擁塞的影響
QOS流量管理
可通過一定的政策控制流量的大小,減少網絡擁堵的出現,主要的流量管理技術是承諾通路速率CAR和流量整形GTS。在實際應用中CAR使用的較多,而GTS使用較少。
流分類與流量管理
(1)流分類
流分類是進行差別服務的基礎。流分類可以使用封包的優先級,識别不同優先級的流量:也可以使用源位址,目的位址,MAC位址、協定或端口号等資訊來識别不同流量。流分類必須與某種流量或帶寬配置設定的動作關聯起來才有意義。
(2)流量監控
在對流量進行監控時一般可以設定三個參數:
承諾平均速率(CIR):允許流量通過的平均速率
突發量(Bc):允許突發産生流量的大小,設定的大小必須大于最大封包長度
額外突發量(Be):表示超出突發量後還可以轉發的流量的大小
(3)流量政策
轉發(transmit):對合規和違規流量設定政策為轉發
丢棄(drop):對合規和違規流量設定政策為丢棄
标記(set):标記封包的優先級
(4)流量整形(GTS)
流量整形是一種調節輸出速率的措施,使用緩存來儲存違規流量,是以可以減小丢包率,避免封包重發,增加延時,一般應用在整體流量小,但有時出現突發流量的環境中。
(5)承諾通路速率(CAR)
承諾通路速率是一種流量控制措施,Bc+Be的大小是允突發的最大的流量,違規流量一般會被直接丢棄而不進行轉發,增加了丢包率,CAR多用于接入層。
流量整形與承諾通路速率的配置
1.流量整形配置
有以下兩種方式:
(1)基本流量整形配置
1
<code>Router(config-</code><code>if</code><code>)</code><code># traffic-shape rate {CIR[BC[BE]]} [buffer-limit]</code>
其中,CIR必須配置,Bc可不用配置。buffer-limit表示緩存區的使用限制,預設為1000(封包數)
(2)基于ACL的流量整形配置
首先,配置ACL,定義需要整形的流量,在配置以下指令:
<code>Router(config-</code><code>if</code><code>)</code><code># traffic-shape group access-group {CIR[BC[BE]]}</code>
access-group表示定義的ACL的序号
例如:某路由器的配置指令如下:
2
3
4
5
<code>Router(config)</code><code># access-list 151 permit udp any any</code>
<code>Router(config)</code><code># int f0/0</code>
<code>Router(config-</code><code>if</code><code>)</code><code># traffic-shape rate 1000000</code>
<code>Router(config-</code><code>if</code><code>)</code><code># int f0/1</code>
<code>Router(config-</code><code>if</code><code>)</code><code># traffic-shape group 151 1000000 1000000 1000000</code>
(3)檢視GTS配置指令
<code> </code><code>Router</code><code># show traffic-shape f0/0 //檢視CTS配置資訊</code>
<code> </code><code>Router</code><code># show traffic-shape statistics f0/0 //檢視CTS流量統計資訊</code>
<code> </code><code>Router</code><code># show traffic-shape queue //檢視CTS隊列資訊</code>
2.承諾通路速率配置
也有以下兩種配置方法:
(1)基本承諾通路速率配置
<code>Router(config-</code><code>if</code><code>)</code><code># rate-limit {input|output} {CIR} {burst-nlrmal} {burst-max} conform-action {action} exceed-action {action}</code>
各參數含義如下
input|output:針對端口如方向|出方向的流量
CIR:承諾通路速率(參數範圍 8000---2000 000 000)
burst-nlrmal:普通突發量(參數範圍 1000---512 000 000)
burst-max:最大突發量(參數範圍 2000---1024 000 000)
conform-action:對合規流量進行的操作
exceed-action:對違規流量進行的操作
action:對相應流量進行的操作(drop丢棄transmit轉發 set标記 )
案例1:配置限速流量8Mb/s,最大突發量4000,符合流量轉發,超出流量丢棄
<code>Router(config-</code><code>if</code><code>)</code><code># rate-limit input 8000000 2000 4000 conform-action transmit exceed-action drop</code>
案例2:配置限速流量8Mb/s,最大突發量4000,符合流量被标記5後進行轉發,超出流量被标記0後進行轉發。優先級為0是預設值,表示盡力發送,當網絡擁堵時,根據優先級丢棄資料
<code>Router(config-</code><code>if</code><code>)</code><code># rate-limit input 8000000 2000 4000 conform-action set-prec-transmit 5 exceed-action set-prec-transmit 0</code>
(2)擴充承諾通路速率
<code>Router(config-</code><code>if</code><code>)</code><code># rate-limit {input|output} [access-group access-group] {CIR} {Bc} {Be} conform-action exceed-action</code>
(3)檢視CAR配置指令
<code>Router</code><code># show interface f1/0 rate-limit //檢視端口限速資訊</code>
2.承諾通路速率與流量整形的第二種配置
這種配置可以在端口應用一種政策實施多種流量控制
(1)定義比對政策
6
<code>Router(config)</code><code># class-map [match-all|match-any] {class-map-name} //進入class-map模式,配置比對條件</code>
<code>Router(config-map)</code><code># match access-group 100 //比對配置的ACL</code>
<code>Router(config-map)</code><code># match protocol {protocol} //比對配置的協定</code>
<code>Router(config-map)</code><code># match input-interface int f0/0 //比對端口進入的流量</code>
<code>Router(config-map)</code><code># match any //比對任意資料包</code>
<code>Router(config-map)</code><code># match {source-address|destination-address} mac {mac-address} //比對源或目的MAC位址</code>
class-map-name:建立的class-map的名稱
match-all:表示比對class-map定義的所有條件,是預設配置
match-any:表示至少比對class-map定義的一個條件
(2)定義流量控制政策
通過policy map調用class map,然後分别為每個class map配置政策
<code>Router(config)</code><code># policy-map {policy-map-name} //定義policy-map</code>
<code>Router(config-pmap)</code><code># class {class-map-name} //調用class map</code>
然後在調用的class map 中配置的政策包括标記流量、流量整形、CAR等
<code>Router(config-pmap-c)</code><code># set ip dscp {dscp} //标記流量的優先級</code>
<code>Router(config-pmap-c)</code><code># set ip precedence {precedence}</code>
配置CAR
<code>Router(config-pmap-c)</code><code># police {CIR} [burst-normal] [burst-max] conform-action {action} execeed-action {action} violate-action {action}</code>
CIR:承諾通路速率
burst-normal:承諾突發量Bc
burst-max:與rate-limit指令不同,此參數表示過量突發量Be
config-action:對小于Bc(包含CIR流量)的流量采取的動作,預設轉發
exceed-action:對于Bc和Bc+Be之間的流量采取的動作,預設轉發
violate-action:對于大于Bc+Be的流量采取的動作,預設丢棄
action:同rate-limit指令中的action 對流量的相應操作
配置GTS
<code>Router(config-pmap-c)</code><code># shape average {CIR [Bc[Be]]}</code>
average表示平均值,配置完average形式的CTS後,整形後的速率為CIR
配置緩沖區上限
<code>Router(config-pmap-c)</code><code># shape max-buffers {buffer-limit}</code>
buffer-limit:機關封包數,範圍為1-4096,預設為1000
(3)在接口上應用政策
<code>Router(config-</code><code>if</code><code>)</code><code># service-policy {input|output} {policy-map-name}</code>
注意:CTS隻能應用在output方向,而CAR可以應用在兩個方向
(4)檢視配置
<code>Router</code><code># show policy-map [policy-map-name] //檢視政策配置</code>
<code>Router</code><code># show policy-map int f0/0 //檢視端口政策應用和流量資訊</code>
例如:某路由器的配置如下
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<code>Router(config)</code><code># access-list 100 permit ip 10.0.0.0 0.0.0.255 10.0.0.0 0.0.0.255 </code>
<code>Router(config)</code><code># class-map yyy //配置class map</code>
<code>Router(config-cmap)</code><code># match access-group 100 //配置比對條件,調用ACL</code>
<code>Router(config)</code><code># policy-map ysf1 //定義policy map,配置CAR</code>
<code>Router(config-pmpa)</code><code># class yyy //調用 class map</code>
<code>Router(config-pmap-c)</code><code># police 8000 1500 1500 conform-action transmit exceed-action transmit viliate-action drop</code>
<code>//</code><code>配置CAR,小于Bc轉發,在Bc- Bc+Be之間轉發,大于Bc+Be丢棄</code>
<code>Router(config)</code><code># int f0/0 //在f0/0接口應用CAR政策 </code>
<code>Router(config-</code><code>if</code><code>)</code><code># service-policy input ysf1</code>
<code>Router(config)</code><code># policy-map ysf2 //定義policy map,配置GTS</code>
<code>Router(config-pmap)</code><code># class yyy //調用class map</code>
<code>Router(config-pmap-c)</code><code># shape average 8000 //配置average形式,隻配置CIR</code>
<code>Router(config)</code><code># int f0/1 //在f0/1口應用CTS政策</code>
<code>Router(config-</code><code>if</code><code>)</code><code># service-policy output ysf2 </code>
<code>Router</code><code># show policy-map //檢視配置政策</code>
擁塞管理技術
擁塞管理一般采用隊列排程技術,通過隊列排程技術的算法使得不同的資料流擁有不同的優先級和帶寬資訊等,進而确定不同資料流被轉發的順序和帶寬。主要有以下六種技術:
1.FIFO:先進先出隊列(隻有一個隊)
2.PQ:優先級隊列(4個隊列,進階别長期占用,出問題)
3.CQ:定制隊列(管理者可加,0保留,1--16輪循環)
4.WFQ:權重公平隊列(很多類,包小,優先級高,先發)
5.CBWFQ:基于類的權重公平隊列(保證帶寬)
6.CBLLQ:基于類低延遲的權重公平隊列(保證延遲)
配置CBWFQ
随着技術的發展,最常用的是CBWFQ技術
(1)定義比對政策,與GTS、CAT第二種配置相同(略)
(2)定義 policy map 并調用class map ,在每一個class map中設定政策
<code>Router(config-pmap-c)</code><code># bandwidtn {bandwidth-kbps | percent percentage}</code>
bandwidth:保證最小帶寬
bandwidth-kbps:最小帶寬速率(預設情況下,各class map 配置設定的帶寬總和不能超過接口帶寬的75%,剩餘的25%用于控制和路由選擇的流量。可以通過接口模式下的max-reserved-bandwidt 指令進行修改)
percent percentage:最小帶寬占端口帶寬的百分比
* 然後,配置隊列中資料包的個數
<code>Router(config-pmap-c)</code><code># queue-limit {packets}</code>
packets:為設定的隊列的數值,範圍是1--4096
* 如果需要配置預設類,可用以下指令:
<code>Router(config-pmap)</code><code># class class-default</code>
* 配置LLQ隊列的最大帶寬
<code>router(config-pmap-c)</code><code># {bandwidth-kbps | percent percentage}</code>
priority:表示隊列的最大帶寬,其參數的含義與bandwidtn指令相同
(3)在端口實施政策
與CRS、CAR的第二種配置相同,但是需要注意CBWFQ隻能配置在端口的output方向
(4)相關檢視指令
<code>show policy-map [policy-map-name] </code><code>//</code><code>檢視policy map 的配置資訊</code>
<code>show policy-map int f0</code><code>/0</code> <code>//</code><code>檢視端口的policy map資訊和流量資訊</code>
實驗案例:配置CBWFQ,通過為PC1、PC2、PC3、PC4配置最小保證帶寬,解決網絡擁塞問題
(1)配置網絡全網互通(略)
(2)配置CBWFQ,實作網絡擁塞時保證最小帶寬
21
22
23
24
25
26
<code>R1(config)</code><code># access-list 100 permit ip host 10.0.1.2 host 10.0.0.4</code>
<code>R1(config)</code><code># access-list 101 permit ip host 10.0.1.2 host 10.0.0.1</code>
<code>R1(config)</code><code># access-list 102 permit ip host 10.0.1.2 host 10.0.0.2 //定義ACL</code>
<code>R1(config)</code><code># class-map match-all ftp1 //定義名稱為ftp1的類</code>
<code>R1(config-cmap)</code><code># match access-group 100 //比對ACL100的流量屬于類ftp1</code>
<code>R1(config)</code><code># class-map match-all ftp2 </code>
<code>R1(config-cmap)</code><code># match access-group 101</code>
<code>R1(config)</code><code># class-map match-all ftp3</code>
<code>R1(config-cmap)</code><code># match access-group 102</code>
<code>R1(config)</code><code># policy-map ftp //定義名稱為ftp的政策</code>
<code>R1(config-pmap)</code><code># class ftp1 //進入類ftp1</code>
<code>R1(config-pmap-c)</code><code># bandwidth 4000 //為類ftp1設定政策,擁塞時帶寬為4000Kb/s</code>
<code>R1(config-pmap-c)</code><code># exit</code>
<code>R1(config-pmap)</code><code># class ftp2</code>
<code>R1(config-pmap-c)</code><code># bandwidth 1600</code>
<code>R1(config-pmap)</code><code># class ftp3</code>
<code>R1(config-pmap)</code><code># class class-default //配置其他流量為預設類</code>
<code>R1(config-pmap-c)</code><code># fair-queue //啟用公平隊列,可和bandwidth同時使用</code>
<code>R1(config)</code><code># interface f0/1</code>
<code>R1(config-</code><code>if</code><code>)</code><code># service-policy output ftp //CBWPQ隻能應用于output方向</code>
擁塞避免技術
過度的網絡擁塞對于網絡的危害是很大的,擁塞避免就是主動丢棄部分封包,以減免網絡擁塞程度
1.尾丢棄
傳統的丢包政策,即當隊列達到最長時,将後面的封包全部丢棄的政策。可能導緻網絡中流量忽大忽小,極不穩定
在CBWFQ中配置尾丢棄的指令 queue-limit
2.WRED
為避免出現尾丢棄的現象,權重随機預檢測(RED)将隊列分為兩個值,為低閥值和高閥值,并采用如下算法:
* 小于低閥值時,不進行封包丢棄
* 大于高閥值時,完全丢棄封包
* 在低閥值和高閥值之間時,WRED開始進行随機丢棄封包。隊列越長,丢棄的機率越高
WRED原理和RED相同,隻是在随機丢棄封包時,加入了優先級來區分丢棄政策
WRED的配置
(1)在接口上配置
基于DSCP的配置
<code>Router(config-</code><code>if</code><code>)</code><code># random-detect dscp-based //啟動基于DSCP的WRED</code>
<code>Router(config-</code><code>if</code><code>)</code><code># random-detect dscp {dscp} { min max }[mark]</code>
min:低閥值
max:高閥值
mark:最大機率分母(在計算丢棄時使用)
基于IP優先級的配置
<code>router(config-</code><code>if</code><code>)</code><code>#random-detect</code>
<code>router(config-</code><code>if</code><code>)</code><code>#random-detect precedence {precedence} {min max} {mark}</code>
(2)通過policy-map配置WRED
<code>router(config-pmap-c)</code><code>#random-detect</code>
<code>router(config-pmap-c)</code><code>#random-detect precedence {precedence} {min max} {mark}</code>
(3)檢視WRED
<code>show queueing random-detect </code><code>//</code><code>檢視WERD資訊</code>
<code>show queue [int f0</code><code>/0</code> <code>] </code><code>//</code><code>檢視隊列資訊</code>
LLQ隊列不能使用WRED,也不能使用queue-limit 指令
本文轉自 楊書凡 51CTO部落格,原文連結:http://blog.51cto.com/yangshufan/1964891,如需轉載請自行聯系原作者