當網絡出現擁塞的時候,一般會有延遲、延遲抖動或丟包的現象出現,那麼解決這種現象的最好辦法就是提高網絡的帶寬,那麼,如果在無法提高網絡帶寬的話,就只能通過合理的利用網絡帶寬。在網絡發生擁塞時,根據業務的性質和需要使用QoS技術合理的分配現有帶寬,降低網絡擁塞的影響。
QoS服務模型一共分爲三種:
1、best-Effort service服務模型:它是一種單一的服務模型,也是最簡單的服務模型,應用程序可以在任何時候發送任意數量的報文。網絡盡最大可能發送這些報文,但是對於延時、可靠性不做保證,它是在互聯網中默認的服務模型,其遵循先進先出的轉發規則。
2、IntServ服務模型:IntServ服務模型在使用網絡資源時,需要提前申請,申請的過程是通過RSVP(資源預留協議)完成的,應用程序會通過RSVP將需要的時延、帶寬、丟包率等性能通知其他節點,這些節點收到資源預留請求後,會根據用戶的合法性、資源使用情況來決定是否預留資源。
這個服務模型的擴展性很差,實施比較困難,並且RSVP存在一定缺陷,所以限制了它的廣發應用。
3、Diffserv服務模型:它可以滿足不同的QoS需求,與IntServ不同,它不需要預留資源,網絡不需要爲每個端到端的流量進行維護。Diffserv服務模型可以使用不同的方法來指定報文的QoS,如報文的優先級、MAC地址、源IP地址、目的IP地址等,網絡可以通過這些信息來提供特定的服務(報文分類、流量整 形等)。
接下來,對Diffserv服務模型進行詳細的解釋。
QoS的操作模型:
QoS涉及四大組件:分類和標記、整 形和監管、擁塞避免和擁塞管理。QoS操作模型如下所示:
首先,數據進入設備進行流分類,根據流量的重要程度劃分不同的類別,並打上不同的標記。然後使用GTS或CAR技術進行整 形和監管,並根據策略對違規的報文進行操作,限制流量的速率。隨後通過WRED技術隨機丟棄相對不重要的報文避免網絡擁塞,最後通過擁塞管理的隊列技術將報文放入不同的隊列。隊列達到最大長度後,後到達的報文將被丟棄,通過隊列的出隊調度技術轉發報文。
可以通過下面這個實際的案例更加通俗的理解QoS對數據流的處理:
我們來把QoS操作模型拆分開來一步步瞭解:
1、分類和標記:
QoS是一個整體的框架,不侷限於一臺設備,整個網絡中設備相互配合,最終達到流量優化的目的。QoS的核心就是保證重要的流量有限通過網絡設備。默認情況下,網絡設備對任何流量都一視同仁,爲了可以讓任何設備都可以識別重要的流量,在網絡的邊界,也就是任何進入網絡的流量都應該根據重要程度被分類,並打上不同的標記,後續設備基於這些標記來標識哪些流量是相對重要的。
①、分類:流分類是進行區別服務的基礎,流分類可以使用報文的優先級來識別不同優先級特徵的流量;
流分類一般通過ACL區分不同的流量,尤其是擴展ACL,基本上可以定義大部分流量。如下命令定義了網絡中所有的FTP流量:
R1(config)#access-list 101 permit tcp any any eq 21
②、標記:在QoS技術的Diffserv服務模型中,對於IP報文中的DS字段使用DSCP(差異化服務編碼點)作爲QoS優先級描述,如下所示:
DS字段一共八位,在Diffserv中使用DS的前六位,即DS0~DS5定義了0~63共64個優先級。
QoS也可以使用DS字段中的IP優先級,使用DS的前三位IP。優先級共八個等級,其中0表示正常流量,盡力轉發。
默認情況下,如果不做設置,正常數據的優先級都是0,而像RIP、OSPF報文,默認優先級是6,優先級越高越優先發送;
在配置時,首先定義匹配類,然後定義流量控制策略,最後在端口實施策略。
1)定義匹配類
R1(config)#class-map abc
R1(config-cmap)#match access-group 101 #101爲上面創建的擴展ACL編號
除了配置ACL外,還可以配置端口、VLAN、源或目的MAC地址等信息,配置命令如下:
R1(config-cmap)#match input-interface f0/0 #匹配 F0/0端口進入的流量。
R1(config-cmap)#match any #匹配任意流量
2)、定義流量控制策略
通過policy map調用class map,然後爲每一個class map 配置策略:
R1(config)#policy-map QoS #定義策略名稱
R1(config-pmap)#class abc #調用class map
R1(config-pmap-c)#set ip dscp 5 #定義優先級,範圍爲0~63;
也可以使用如下命令來定義優先級:
R1(config-pmap-c)#set ip precedence 7 #與dscp一樣,用來定義優先級,範圍爲0~7。
3)、在接口上應用策略
R1(config-if)#service-policy input qos #service-policy爲命令字,input表示入站。
可以使用output來表示出站,qos爲定義的策略名稱
4)、查看配置
可以使用命令show policy-map來查看配置:
R1#show policy-map
Policy Map df
Class abc
set ip precedence 7
Policy Map qos
Class abc
set ip precedence 0
2、整 形和監管:
經過分類和標記已經可以區分流量的優先級了,那麼爲了避免網絡擁塞的出現,可以對流量進行控制,通過採用一定的策略控制流量的大小,以減少網絡擁塞的出現。主要的流量管理技術是整 形和監管。
在對流量進行監控時一般可以設定三個參數:
1. 承諾平均速率(CIR):允許流量通過的平均速率;
2. 突發量(BC):允許突發產生流量的大小,設置的大小必須大於最大報文長度。
3. 額外突發量(Be):表示流量超出突發量後還可以轉發的流量大小。
1)流量策略
對於符合規定部分的流量視爲合規流量,而對於超出規定部分的流量視爲違規流量。設置流量策略時,既可以設置合規流量策略,也可以設置違規流量策略。一般流量策略有以下幾種:
- 轉發:對於合規流量和違規流量都可以設置策略爲轉發。
- 丟棄:對於合規流量和違規流量都可以設置策略爲丟棄。
- 標記:標記報文的優先級。例如,將合規流量報文的IP優先級設定爲5,而將違規流量報文的優先級設置爲0.
- 進入下一級流量策略:流量策略可以多級處理,可以將流量提交給下一級流量策略來進行控制。
2)整 形與監管
流量整 形(GTS)是一種調節輸出速率的措施,流量整 形使用緩衝區使流量均勻地進行轉發。流量進入設備進行分類,不需要進行整 形的流量直接通過設備轉發,需要進行整 形的流量根據配置分爲合規流量和違規流量。當流量速率超過設定時,設備將多餘的流量緩存到GTS隊列,然後按照配置的CIR,將報文均勻地轉發出去,以保證網絡流量平穩。
由於流量整 形使用緩存來保存違規流量,所以可以減少丟包率,避免了報文重發,但是使用緩存將導致數據轉發時增加時延。流量整 形一般應用在整體流量較小,但有時出現突發流量的環境中。如下圖所示:
流量整 形配置有兩種配置方式,一種是基本的流量整 形配置,另一種是基於ACL的流量整 形配置。
基本的流量整 形配置如下:
R1(config)#access-list 100 permit udp any any
R1(config)#in f0/0
R1(config-if)#traffic-shape rate 8000000 #針對所有經過該接口的流量整 形。承諾平均速率爲100kb/s
R1(config)#in f1/0
R1(config-if)#traffic-shape group 100 800000 800000 800000 #針對於ACL組號爲100的流量整 形。
順序依次爲CIR、Bc、Be,CIR是每秒可通過的速率,
計量單位爲比特
(1GB=1024MB,1MB=1024KB,1KB=1024B,1B(字節)=8bits(比特),
也就是說80000bits大約是100KB/s
查看網絡整 形配置信息:
R1#show traffic-shape f0/0
Interface Fa0/0
Access Target Byte Sustain Excess Interval Increment Adapt
VC List Rate Limit bits/int bits/int (ms) (bytes) Active
- 1000000 6250 25000 25000 25 3125 -
查看GTS流量統計信息:
R1#show traffic-shape statistics f0/0
Acc. Queue Packets Bytes Packets Bytes Shaping
I/F List Depth Delayed Delayed Active
Fa0/0 0 0 0 0 0 no
查看GTS隊列信息:R1#show traffic-shape queue
Traffic queued in shaping queue on FastEthernet0/0
Queueing strategy: weighted fair
Queueing Stats: 0/1000/64/0 (size/max total/threshold/drops)
Conversations 0/0/64 (active/max active/max total)
Reserved Conversations 0/0 (allocated/max allocated)
Available Bandwidth 1000 kilobits/sec
其中粗體1000標識設置的緩存器限制。
流量監管是一種流量控制措施,監管使用的三個參數分別是承諾平均速率、Bc、Be。所以監管中,Bc+Be的大小是允許突發的最大流量的大小。監管的核心技術是承諾訪問速率(CAR)
Bc和Be相當於信用的積累,如果一直守信(小於規定流量),其信用值就不斷增加到某個數值(Bc);如果繼續守信,則信用值就會繼續增加到一個規定的最大值(Bc+Be)。這時,如果出現違規現象(流量速率超過規定速率),信用就會減少,知道信用值爲0,。所以Bc、Be是一個積累使用的過程,而不是始終存在的(最初時Bc和Be爲滿的)。
在使用CAR技術限制流量速率時,違規流量一般會被直接丟棄而不進行緩存,所以呢,CAR技術保證了數據的延時,但是增加了丟包率。CAR技術多應用於接入層,對接入用戶進行流量限制。
CAR的速率圖如下所示:
CIR表示速率,而Bc和Be表示大小。
一般的使用一下公式進行配置:
Bc=2XRTTXCIR/8
其中,RTT表示流量往返的時間,可以使用ping命令測試。Be流量一般等於Bc。
承諾訪問速率配置:和流量整 形相同,也有兩種配置方式,一種是基本的承諾訪問速率配置,另一種是擴展的承諾訪問速率配置。
1)、基本的承諾訪問速率配置
R1(config-if)#rate-limit input 8000000 2000 4000 conform-action transmit exceed-action drop
上述命令表示進入端口的流量被限速爲8000000b/s(約8MB/s),最大突發量爲4000字節,符合的流量conform-action
被轉發transmit
,超出的流量exceed-action
被丟棄drop
。
R1(config-if)#rate-limit input 8000000 2000 4000 conform-action set-prec-transmit 5
exceed-action set-prec-transmit 0
#其中8000000爲CIR,參數範圍是8000~2000000000,單位是b/s;
2000表示普通突發量,參數範圍是100~512000000,單位是字節;
4000表示最大突發量,參數範圍是2000~1024000000,單位是字節
上述命令表示進入端口的流量被限速爲8Mb/s,最大的突發量爲4000字節,符合的流量被標記IP優先級5後進行轉發,超出的流量被標記IP優先級0後進行轉發,IP優先級0爲默認值,表示盡力轉發。當網絡出現擁塞時,可以根據優先級確定優先丟棄的數據。
2)、擴展的承諾訪問速率配置
首先配置ACL,定義需要整 形的流量,然後再接口模式下配置如下命令進行流量整 形:
R1(config)#access-list 101 permit tcp any any
R1(config)#in f0/0
R1(config-if)#rate-limit input access-group 101 8000000 2000 4000
conform-action transmit exceed-action drop
#其中8000000爲CIR,參數範圍是8000~2000000000,單位是b/s;
2000表示普通突發量,參數範圍是100~512000000,單位是字節;
4000表示最大突發量,參數範圍是2000~1024000000,單位是字節
查看CAR配置信息:
R1#show interfaces f0/0 rate-limit
FastEthernet0/0
Input
matches: access-group 101 #匹配的ACL
params: 8000000 bps, 4000 limit, 4000 extended limit #配置的速率限制
conformed 0 packets, 0 bytes; action: transmit #符合的流量統計,動作爲轉發
exceeded 0 packets, 0 bytes; action: drop #違規的流量統計,動作爲丟棄
last packet: 4176504ms ago, current burst: 0 bytes #當前流量突發量信息
last cleared 00:07:24 ago, conformed 0 bps, exceeded 0 bps #速率信息
matches: access-group 101
params: 8000000 bps, 4000 limit, 4000 extended limit
conformed 0 packets, 0 bytes; action: transmit
exceeded 0 packets, 0 bytes; action: drop
last packet: 4176504ms ago, current burst: 0 bytes
last cleared 00:00:44 ago, conformed 0 bps, exceeded 0 bps