前言 QOS基礎
QOS(quality of service ),服務質量。傳統IP網絡中,全部報文都是無區別對待。網絡設備的處理機制是FIFO(first in first out)也就是best-effort,但對報文的吞吐量,延遲,延遲抖動,丟包率等不保證。Maybe很好,maybe不好,視網絡具體情況而定。
隨着網絡的高速發展,網絡承載的信息愈來愈豐富。而實時性強的語音,圖像,重要數據對延遲,抖動,帶寬比較敏感,解決的辦法是增長帶寬。但帶寬始終是有限的。用有限的帶寬,對不一樣網絡應用數據流提供預期的服務質量保證。但QOS自己並不能增長帶寬。(只是把帶寬等資源進行從新分配調度)
QOS可以:
1,
經過某種測量和監管機制,控制不一樣業務享受到不一樣的服務。
2,
經過某種調度策略,保障了在網絡擁塞時重要業務保持持續穩定的運行。
3,
經過對網絡流量的優化,使流量得到合理分配,網絡運行於最佳狀態。
形象點說,就跟現實中各行業裏的VIP和普通客戶,分別得到不一樣的服務。
交換QoS主要是在網絡的接入層對數據流,實施分類和標記,同時提供流量監管和擁塞管理。
QOS
模型
:因爲QOS是端對端的通信,好比兩個不一樣網絡通信,中間可能會跨越多個router和switch,那麼QOS設計就須要全局考慮。不然你只能控制你的網絡out的流。
1,
best-effort service 盡力而爲模型
2,
integrated 綜合服務模型 簡稱 intserv
3,
differentiated service 區分(差分)服務模型 簡稱 diffserv
其實best-effort 模型並不算QOS,這是數據傳輸的一種簡單機制。目前是internet缺省服務類型。Intserv模型,應用程序首先通知本身的流量參數和須要的特定服務質量。在收到確認報文後,纔開始發送報文。靠的是RSVP(resource reservation protocol)預留資源協議。缺點:RSVP報文太多,不停刷新。對單一數據流預留帶寬的解決思路在internet上太難實現。廠家互聯等。因此,現實中幾乎是不採用。
Diffserv模型,不須要預留資源。經過IP優先級,COS,DSCP,ACL等定義QOS,對報文進行分類,流量監管,流量×××,隊列調度等。通常經過如下技術來實現:
1,
CAR 根據報文的COS或TOS(對IP報文就是IP優先級和DSCP等),或IP報文的五元組(源,目的地址,源,目的端口,協議類型)對報文進行分類標誌和流量監管
2, 隊列技術 WRED,PQ,CQ,WFQ,CBWFQ等隊列技術對擁塞的報文進行緩存和調度,實現擁塞管理。
QOS處理流程:
1,
首先在網絡邊緣對數據流進行分類,打上不一樣的QOS標誌。流分類(traffic classification)是指採用必定的規則,標識出具備某種特徵的報文。分類規則(classification rule)是指根據管理需求而配置的過濾規則。能夠只根據DSCP,TOS或定義ACL對MAC地址,IP,源端口,目的端口等進行過濾。
2,
而後根據標誌,在每一跳上進行相應的轉發處理。好比流量×××,流量監管,擁塞避免。
一,優先級標誌
優先級標誌是實施QOS的基礎。方法包括:802.1P,優先級,IP優先級,TOS優先級和DSCP優先級.
1, IP header的TOS區域有8個bit,0到2這3個bit表示的是IP優先級(COS),取值範圍是0~7(二層frame只用0~5,6和7保留) ;3-6bit表示的是TOS(type of service)優先級,取值範圍是0~15;在RFC2474中,從新定義了TOS域.稱之爲DS域,其中DSCP使用0~5,取值範圍是0-63 , 6和7是保留位.
以太幀格式和TAG字段。四個字節的TAG裏,PRI就表明802.1P優先級.
正常的以太frame並不帶標誌,802.1Q纔會帶有.(還有ISL,CISCO私有VLAN協議).而packet卻有兩中標分方法: IP precedence IP優先級和DSCP 區分服務代碼點
IP precedence分0~7和各對應表.
802.1P優先級位於二層報文頭.適用於不須要分析三層報文,只須要在二層保證QOS的場合.
The table below is very important,we should be aware and remember。
二
標誌
(
marking
)
設備說明:
1,
華爲記錄HCSE教材上的設備型號,或本人實際操做的S5624P,AR46-20
2,
思科選用是C3550-48-EMI 三層交換機 以及 C7200 路由交換機。
3,
設備型號均在命令的主機名有顯示。
配置優先級標誌: 若是同時指定了802.1P優先級和local-precedence,那麼802.1P優先。TOS字段裏包括IP precendce和DSCP,而DSCP是至關於IP precedence的擴展。因此DSCP比IP precedence優先。
H
3C
配置:
一, S3026只支持802.1P優先級.接口視圖下:priority-level [0~7] 設定優先級,同時配置 port priority replacement 設置接口優先級替換,而後通過該端口的數據流都打上此端口的優先級.
二, S3526E以上三層交換機都支持: IP優先級,802.1P優先級(COS值),DSCP優先級和本地優先級.是根據ACL結合來定義數據流.接口視圖下:
[S5624P-GigabitEthernet1/0/25]traffic-priority inbound ip-group 2000 ?
cos Specify 802.1p priority
dscp Specify DSCP
ip-precedence Specify IP precedence
local-precedence Specify local precedence
rule Specify the ID of acl rule
華爲的是在一條命令裏完成定義要標誌的報文並設置優先級。而Cisco的是經過class-map定義要標誌的報文,而後在policy-map裏調用再設置優先級。
Cisco配置:
C7200(config)#class-map [match-any| match-all] ewen 定義class-map
C7200(config-cmap)#match ? 好多match的選擇,
access-group Access group
any Any packets
class-map Class map
cos IEEE 802.1Q/ISL class of service/user priority values
destination-address Destination address
discard-class Discard behavior identifier
dscp Match DSCP in IP(v4) and IPv6 packets
fr-de Match .
Frame-relay
DE
bit
fr-dlci Match . fr-dlci
input-interface Select an input interface to match
ip IP specific values
mpls Multi Protocol Label Switching specific values
not Negate this match result
packet Layer 3 Packet length
precedence Match Precedence in IP(v4) and IPv6 packets
protocol Protocol
qos-group Qos-group
source-address Source address
C3550(config-cmap)#match ? 3550上選項就少多了。不過多了個vlan
access-group Access group
class-map Class map
ip IP specific values
vlan VLANs to match
C7200(config-cmap)#match ip precedence ? 匹配ip優先級
<0-7> Enter up to 4 precedence values separated by white-spaces
critical Match packets with critical precedence (5)
flash Match packets with flash precedence (3)
flash-override Match packets with flash override precedence (4)
immediate Match packets with immediate precedence (2)
internet Match packets with internetwork control precedence (6)
network Match packets with network control precedence (7)
priority Match packets with priority precedence (1)
routine Match packets with routine precedence (0)
marking也就這麼一個match命令了,就至關因而個super ACL,用來定義感興趣的報文。以便後面的policy-map引用。較經常使用的是使用IP優先級和ACL定義。
C3550(config)#policy-map qos
C3550(config-pmap)#class ewen 調用class-map
C3550(config-pmap-c)#police 80000 8000 exceed-action drop 利用令牌桶算法進行限速CIR
C3550(config-pmap-c)#set ? 對class-map定義的報文設置優先級。
cos Set IEEE 802.1Q/ISL class of service/user priority
dscp Set DSCP in IP(v4) and IPv6 packets
ip Set IP specific values
precedence Set precedence in IP(v4) and IPv6 packets
而路由器裏則有較多的選項:
C7200(config-pmap-c)#?
QoS policy-map class configuration commands:
bandwidth Bandwidth 定義保留的帶寬
compression Activate Compression
drop Drop all packets
exit Exit from QoS class action configuration mode
no Negate or set default values of a command
police Police 利用令牌桶算法進行限速
priority Strict Scheduling Priority for this Class優先級保留的帶寬以及突發流量
queue-limit Queue Max Threshold for Tail Drop隊列的最大包個數
random-detect Enable Random Early Detection as drop policy啓用WRED
service-policy Configure QoS Service Policy
set Set QoS values 定義class-map報文的優先級
shape Traffic Shaping 定義CIR,Bc,Bc以及流量×××
配置bandwidth和priority命令的話,就是啓用了CBWFQ,兩個命令只能啓用一個。當第二個取用的話,系統會提示:Must remove priority configuration from this class first.或者Must deconfigure bandwidth before issuing this command in this class
而後在接口上應用
C7200(config-if)#service-policy input qos
Class-map是個匹配模塊,policy-map是個執行模塊。一個policy-map能夠調用多個class-map而完成對多種不一樣流量進行優先級設置和帶寬保留等做用。
Case 1
把來自192.168.10.0/24 的出站telnet 流量的IP優先級設置爲5,其餘的出站流量的IP優先級設置爲1:
access-list 133 permit tcp 192.168.10.0
0.0.0
.255 any eq telnet
(ACL133定義特定流量)
class-map match-all telnet
(telnet是class map的名稱,而不是什麼協議噢)
match access-group 133 (調用ACL133)
policy-map qos (qos是policy map的名稱)
class telnet (policy調用名字叫作telnet的class map)
set ip precedence 5 (把優先級修改爲5)
class class-default (class-default指的就是其餘的數據)
set ip precedence 1 (優先級次修改成1)
interface Serial1
ip address
10.0.0
.1 255.255.255.252
service-policy output qos (在接口上執行)
這就是一個簡單的分類標記工做,實際工程中可能會命令會多一點,複雜一點,可是道理都是同樣的。
附加知識
關於class-map嵌套:有兩點理由在建立class map的時候去調用一個已有的class map:
1、管理方便,在已有的基礎上增長一個修改進行平滑的過分。
2、容許用戶在同一個class map裏分別使用匹配全部(match-all)和匹配任何(match-any)。
好比4個匹配標準:A、B、C和D。如今想讓class map 匹配A,或匹配B,或同時匹配C和D,
流量監管
簡單說就是對特定的數據流進行流量控制.使之更能適應分配資源.
原理是: 特定數據流,會進入令牌桶.這個桶的流量是配置一個數值來限制.按規定速度向桶中丟令牌,當桶裏滿了後,再也不增長.當數據流須要令牌桶處理的時候,若是桶裏有足夠的令牌也就是流量值,就直接發送,桶裏流量相應減小.當少於發送的流量時,數據流會按照配置的執行動做處理.
配置:
一 , S3026不支持流量監管.
二, S3026FM/FS和S3526是結合ACL來定義數據流,但不能定義方向.也不支持突發量
三, S3026E和S3526E也是結合ACL來定義數據流,只能定義in的方向.也能支持突發的action.
[S5624P-GigabitEthernet1/0/25]traffic-limit inbound ip-group 2000 5000 exceed ?
drop Drop the packets
remark-dscp Specify DSCP
端口限速
LR(line rate) 也是用令牌桶來進行流量處理.當桶裏令牌數不夠時,會認爲端口擁塞,就會放進QOS隊列進行擁塞管理.由於用了令牌桶.因此流量控制更爲合理和有彈性.
LR是對物理接口上發送的總報文速率限制.工做在二層.對全部報文都能限制.而CAR是工做在IP層,對IP報文進行限制.若是不通過三層處理的報文就不起做用.因此,LR比CAR控制精度更高.記住:只對out方向報文有效
配製很是簡單:
[S5624P-GigabitEthernet1/0/25]line-rate outbound ?
INTEGER<64-1000000> Target rate(Kbps). It must be a multiple of
64 in
this
port.
三
擁塞管理
這纔是QOS的精華所在哦。當接收端口速度大於發送端口速度時,擁塞就會發生.擁塞管理採用隊列技術,在網絡擁塞時經過報文緩存和調度策略,使報文能按規定發送出去。隊列技術不僅能進行擁塞管理,還能對不一樣數據流提供差異服務.
一,先進先出隊列(First In First Out Queuing,FIFO)
Internet默認使用的隊列技術,對報文不進行分類.在報文進入接口的速度大於報文出接口的速度的狀況下,按照報文到達接口的前後順序進入隊列,發送的時候也是同樣。在不使用其餘隊列技術時,除了小於2.048Mbps的串行接口之外的全部接口,默認都使用FIFO
C7200#sh int f0/0
FastEthernet0/0 is administratively down, line protocol is down
Hardware is DEC21140, address is ca00.02ec.0000 (bia ca00.02ec.0000)
MTU 1500 bytes, BW 100000 Kbit, DLY 100 usec,
reliability 252/255, txload 1/255, rxload 1/255
Encapsulation ARPA, loopback not set
Keepalive set (10 sec)
Half-duplex, 100Mb/s, 100BaseTX/FX
ARP type: ARPA, ARP Timeout 04:00:00
Last input never, output 00:42:30, output hang never
Last clearing of "show interface" counters never
Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0
Queueing strategy: fifo
Output queue: 0/40 (size/max)
二, 加權公平隊列(Weighed Fair Queuing,WFQ)
對報文按流進行分類(對IP網絡來講,流是指相同源,目的IP地址,源,目的端口,協議號,IP優先級的報文屬於同一個流),出站按照IP優先級高低分配帶寬,優先級高的佔用高.
WFQ是帶寬低於2.048Mbps串行接口默認使用的隊列技術.(銳捷路由器使用交互式配置PPPOE默認也是)因此沒什麼好說的.
不足之處:不支持加密的接口,不支持隧道.精確度不如CBWFQ等高.
配置很簡單:
C7200(config-if)#fair-queue
三, 優先級隊列(Priority Queuing, PQ)
把報文優先級分類.而後歸類到四個優先級:high , medium, normal ,low
當網絡擁塞時,會按照定義的優先級從高到低發送.當優先級高的隊列發送完畢纔到下一個優先級隊列.若是高優先級隊列一直持續發送,那麼低優先級的就永遠不能發送,形成餓死了.
配置:
1,建立優先級列表
C7200(config)#priority-list 1 ?
default Set priority queue for unspecified datagrams
interface Establish priorities for packets from a named interface 匹配進口
protocol priority queueing by protocol 匹配協議
queue-limit Set queue limits for priority queues 定義隊列個數
2,定義隊列匹配條件
C7200(config)#priority-list 1 protocol ?
arp IP ARP
bridge Bridging
bstun Block Serial Tunnel
cdp Cisco Discovery Protocol
compressedtcp Compressed TCP
dlsw Data Link Switching (Direct encapsulation .ly)
ip IP
ipv6 IPV6
llc2 llc2
pad PAD links
pppoe PPP over Ethernet
qllc qllc protocol
rsrb Remote Source-Route Bridging
snapshot Snapshot routing support
stun Serial Tunnel
C7200(config)#priority-list 1 protocol ip high ?
fragments Prioritize fragmented IP packets
gt Prioritize packets greater than a specified size大於多少字節的包(包括幀的封裝頭)
list To specify an access list
lt Prioritize packets less than a specified size 小於多少字節的包(包括幀的封裝頭)
tcp Prioritize TCP packets 'to' or 'from' the specified port
udp Prioritize UDP packets 'to' or 'from' the specified port
<cr>能夠經過ACL或TCP/UDP端口號來定義不一樣報文的優先級.
3,定義隊列中報文個數.默認就是20 40 60 80,能夠修改.
C7200(config)#priority-list 1 queue-limit 20 40 60 80
4,應用在接口上
C7200(config-if)#priority-group 1
四,自定義隊列(Custom Queuing , CQ)