QOS-分類和標記
分類是QOS最基本的組件,
沒有分類的話,網絡中的所有數據將是一樣的,就不能做任何QOS策略
數據包可以基於如下類型進行分類 ,
一層 物理接口,子接口,
二層 MAC地址,COS, VLAN ID
三層 IP pre DSCP 源目IP地址
高層 TCP / UDP 還有高層應用
最主要的就是考慮二層和三層
二層 以太網封裝
| DMAC |
SMAC |
TYPE |
目的MAC 源MAC 類型,標記上層協議
上層協議標識
0x0800 IP
0x0806 ARP
這能打嗎?在哪兒打?好像沒有,
但是還記得trunk嗎?
Trunk鏈路會攜帶vlan id ,並且它會將傳統的以太網幀改為802.1Q的幀格式

是否打tag 2byte 幀優先級3bit 1bit VLAN號
幀優先級,user priority 可以用做二層的標記,
3bit,3位,2的3次方,可以分為8種二層的流量標記(0-7)
三層IP 報頭封裝
IP報頭中有專門的位置讓我們來用
服務質量 8bit
但是后面兩位全部置0 ,還剩下6位,
又分為兩種
IP pre
只用到了前三位,也是8種標記
DSCP
用到了前六位,就就是64種標記方法
打標的方法不一樣,所能區分的數據包種類也是不一樣的,
QOS的分類技術
說白了,就是進行抓取, 先抓取(進行分類),后標記,打上記號,方便后面的環節進行處理
ACL 最常見的工具
NBAR 在接口上對流量自動分類 ,並且能做到ACL做不到的東西,ACL並不能針對於高層流量進行抓取。
NBAR的使用方法
Class-map R1(config)#class-map aa R1(config-cmap)#match protocol ? aarp AppleTalk ARP appletalk AppleTalk arp IP ARP bgp Border Gateway Protocol bittorrent bittorrent bridge Bridging bstun Block Serial Tunnel cdp Cisco Discovery Protocol citrix Citrix Systems Metaframe 3.0 clns ISO CLNS clns_es ISO CLNS End System clns_is ISO CLNS Intermediate System cmns ISO CMNS compressedtcp Compressed TCP (VJ) cuseeme CU-SeeMe desktop video conference decnet DECnet decnet_node DECnet Node decnet_router-l1 DECnet Router L1 decnet_router-l2 DECnet Router L2 dhcp Dynamic Host Configuration directconnect Direct Connect Version 2.0 dlsw Data Link Switching (Direct encapsulation only) --More—
然后就可以看到N多預配的策略,供分類抓取
總之一句話,NBAR可以做數據包的深層次檢測,而ACL不行。
NBAR的配置方法
R1(config)#class-map aa 定義分類, R1(config-cmap)#match protocol http (當然,這一步也可以使用ACL來代替,1.1.1.1到2.2.2.2的WWW流量 R1(config)#access-list 100 per tcp host 1.1.1.1 host 2.2.2.2 eq 80 //ACL抓取 R1(config)#class-map aa //class-map 定義分類 R1(config-cmap)#match access-group 100 R1(config)#policy-map fu //policy-map 調用class R1(config-pmap)#class aa R1(config-pmap-c)#set ? //執行動作 atm-clp Set ATM CLP bit to 1 cos Set IEEE 802.1Q/ISL class of service/user priority discard-class Discard behavior identifier dscp Set DSCP in IP(v4) and IPv6 packets fr-de Set FR DE bit to 1 ip Set IP specific values mpls Set MPLS specific values precedence Set precedence in IP(v4) and IPv6 packets qos-group Set QoS Group R1(config-pmap-c)#set precedence ? //直接輸入 set precedence 同時會影響IPV6 <0-7> Precedence value cos Set packet precedence from L2 COS critical Set packets with critical precedence (5) flash Set packets with flash precedence (3) flash-override Set packets with flash override precedence (4) immediate Set packets with immediate precedence (2) internet Set packets with internetwork control precedence (6) network Set packets with network control precedence (7) priority Set packets with priority precedence (1) qos-group Set packet precedence from QoS Group. routine Set packets with routine precedence (0) R1(config-pmap-c)#set ip ? //這里都 是IPV4的, dscp Set IP DSCP (DiffServ CodePointint) precedence Set IP precedence R1(config-pmap-c)#set ip precedence ? 設置優先級 <0-7> Precedence value critical Set packets with critical precedence (5) flash Set packets with flash precedence (3) flash-override Set packets with flash override precedence (4) immediate Set packets with immediate precedence (2) internet Set packets with internetwork control precedence 6) network Set packets with network control precedence (7) priority Set packets with priority precedence (1) routine Set packets with routine precedence (0) R1(config-pmap-c)#set ip dscp ? //DSCP的方式,更多,並且用預設 <0-63> Differentiated services codepoint value af11 Match packets with AF11 dscp (001010) af12 Match packets with AF12 dscp (001100) af13 Match packets with AF13 dscp (001110) af21 Match packets with AF21 dscp (010010) af22 Match packets with AF22 dscp (010100) af23 Match packets with AF23 dscp (010110) af31 Match packets with AF31 dscp (011010) af32 Match packets with AF32 dscp (011100) af33 Match packets with AF33 dscp (011110) af41 Match packets with AF41 dscp (100010) af42 Match packets with AF42 dscp (100100) af43 Match packets with AF43 dscp (100110) cs1 Match packets with CS1(precedence 1) dscp (001000) cs2 Match packets with CS2(precedence 2) dscp (010000) cs3 Match packets with CS3(precedence 3) dscp (011000) cs4 Match packets with CS4(precedence 4) dscp (100000) cs5 Match packets with CS5(precedence 5) dscp (101000) cs6 Match packets with CS6(precedence 6) dscp (110000) cs7 Match packets with CS7(precedence 7) dscp (111000) default Match packets with default dscp (000000) ef Match packets with EF dscp (101110) <cr>
如果三層標記使用DSCP來打標記的話,默認會對tag做了一些預命名

0-63個標記,提前已經分配好了這么多
什么意思呢?
如果標記打成10,那么默認就為顯示為af11
R1(config-pmap-c)#set dscp 10 //這里設置的上是10
R1(config-pmap)#do show run | se dscp
set dscp af11 當查看時就會顯示為af11
再來一個
R1(config-pmap-c)#set ip dscp 40 //設置為40
R1(config-pmap-c)#do show run | se dscp
set ip dscp cs5 //顯示的就是CS5
set ip dscp af11
當然這些預置的名字也是有優先級的關系的。
數值越大越優
然后需要在接口下調用
R1(config)#inter f0/0 R1(config-if)#service-policy output fu //PS:肯定是針對於出接口做的,
PS: 分類一定是應用在入接口的,而標記可以應用在入,也可以應用在出
我個人的習慣是直接將這兩個全部應用在入接口。
都用到了什么呢?
Class-map
Policy-map
接口下的services policy
是不是套路~ MQC吧~
二層的標識方法
R1(config-pmap-c)#set cos ? <0-7> cos value dscp Set value from packet dscp. precedence Set value from packet precedence. R1(config-pmap-c)#set cos 0 best-effort data 最優 1 medium-priority data 中優先級 2 hight-priority data 高優先級 3 call signating 4 videoconferencing 視頻 5 voice bearer 語音 6 reserved 7 reserved
MPLS
MPLS中很重要的四個字段
標簽位,
EXP位,3bit 就在這里打標記,
0-7 8種,
當然還要記得MPLS 的隱含空和顯示空
Inpolice null / explice null 只有后面這種才可以,所以要修改
至此標記算是打完了,但是還不生效,為什么呢?
因為此時,並沒有針對這些標記做策略,
PS:就算是此時沒有手動的對流量進行分類 和標記,也是有的,默認就會存在的,
比如二層的標記,語音會標記為5 ,
標記方法
CBmarking 之上演示的就是CBmarking
PBR,策略路由,但是僅僅只能使用precedence,不能使用DSCP,是有限制的,
R1(config)#access-list 100 per tcp host 1.1.1.1 host 2.2.2.2 eq 80 R1(config-route-map)#ma ip add 100 R1(config-route-map)#set ip precedence ? <0-7> Precedence value critical Set critical precedence (5) flash Set flash precedence (3) flash-override Set flash override precedence (4) immediate Set immediate precedence (2) internet Set internetwork control precedence (6) network Set network control precedence (7) priority Set priority precedence (1) routine Set routine precedence (0) R1(config)#route-map aa per 20 最后就是去調用了, Inter f0/0 Ip police route-map aa //接口下調用
這玩意只能調用在入接口,
如果想要對本地生效的話還記得嗎?
R1(config)#ip local policy route-map aa //這個在全局下
預分類 CISCO 私有
VPN 環境中的標記
IPSEC VPN,
因為要加密,並且使用新的IP報頭,
但是你分類和標記都是針對於原始報頭的,新報頭有嗎?那就沒有辦法在VPN上進行QOS部署了嗎?
NO NO NO ,這要分情況
還記得VPN的分類嗎?
Lan to lan
Gre Over ipsec
VPN的轉發模式
TUNNEL transport
到底哪種可以部署QOS呢?
LAN TO LAN環境下 加密點,通信點(身后數據)
我原來是對通信點做的標記,VPN中間怎么辦呢?
因為中間有ESP,你看不見后面的啊~
我們要解決的問題就是如何讓原有的標記位,在新的IP報頭上顯示 ,
Tunnel 模式默認肯定不行
Transport 模式沒有問題,因為它在IP報頭后面加上ESP/AH,所以原始的標記沒有問題
所以我們要解決的就是tunnel模式的問題。
結論
1 基於通信點(身后的主機,私有地址)做QOS的標記策略,調用在tunnel(GRE,SVTI) 下時,需要做預分類
2 沒有tunnel 接口的,無法實現預分類
3 基於加密點做QOS的標記策略,如果調用在物理口下,不需要做預分類
4 基於通訊點做QOS的標記策略,如果調用在物理口下,需要做預分類 (一般現在都不用物理接口了,全用tunnel )
配置
GRE over ip sec
Interface tunn 0
Qos pre-classify
L2tp tunnel
Interface virtual-template 1
Qos pre-classify
基於通信點(身后的主機,私有地址)做QOS的標記策略,調用在tunnel(GRE) 下時,需要做預分類 實例

配置了ACL,Q,允許的是通信點
Class-map 調用ACL
Policy-map調用class 並且設置標記 precedence 4 ,名字為Q.policy
然后到tunnel 下
使用qos pre-classify 預分類
並且最終調用
Service-policy output+Q.policy (policy-map的名字)
QPPB
關於BGP
1通過BGP屬性通告
2社團屬性 community
3用ip precedence 和qos group
4只能用來分類標記inbound的數據
5 QOS策略和BGP路由無關,只是用來標記的
Community還記得嗎?
它不光是可以添加那幾個常見的屬性(no-advertise,no-export,local-as,),其最主要的意義就是在於可以為諸多的路由賦予一個屬性值,AA:NN,這樣一來,我就可以直接使用community-list在BGP的設備上進行抓取了,而不用去使用ACL去抓取,用ACL的話,那太麻煩 了,一條一條的寫,幾千條也這樣寫嗎?
BGP可以在哪些地方打,又能打成什么樣的呢?
那BGP可以在哪些地方做標記呢?
BGP community
As-path
Ip prefixes
主要就是這三個
然后再用
Ip precedence ,BGP不可以打DSCP
Qos group
來進行打標記
實例

當然還要使用acl或者是prefix-list來在源端先前抓取條目。這是使用route-map來做的,
還需要route-map 放行其它的,
最主要的是還需要激活QPPB
R1(config-router)#table-map bgp(名字) //去調用route-map R1(config)#inter f0/0 R1(config-if)#bgp-policy destination ip-prec-map 總開關,開啟后就可以針對條目打標記了,記住,這只能針對 於inbound方向來的數據的,(是數據流的in 方向 )
要求,所有去往AS400的數據 ,都打上111:37標記
此時as400這邊有2000條路由,
請問怎么做?
首先要明白路由傳遞的方向 和數據傳遞的方向是相反的,
現在要去往AS400,那么肯定就會有由AS400發出來的路由吧,
那么此時就可以在AS400這里做一個route-map ,在發出來的時候設置一個community 屬性值aa:nn,假設為111:37。並且發送這個community 屬性給鄰居 router。一路下發過去
分類和標記小節
分類方法 : ACL NBAR bgp屬性
標記方法 : PBR, ,MQC /CBmarking vpn qos(預分類) QPPB(針對於BGP)
PS: 分類可以應用在數據入接口,標記可以用在數據入接口和出接口
小實驗1

需求:
讓R1訪問R2環回口的流量打上標記(ip precedence 5 )
讓R2訪問R1環回口的流量打上標記(DSCP 40)
要求在兩台設備上配置
配置
R1 Extended IP access list 100 10 permit ip host 1.1.1.1 host 2.2.2.2 //分類具體的流量 class-map match-all r1 match access-group 100 //匹配ACL policy-map r1 class r1 set ip precedence 5 //定義標記 interface FastEthernet0/0 //出接口應用標記 service-policy output r1
R2 R2(config)#access-list 100 per ip host 2.2.2.2 host 1.1.1.1 R2(config)#class-map r2 R2(config-cmap)#match access-group 100 R2(config)#exit R2(config)#policy-map r2 R2(config-pmap-c)#set ip dscp 40 R2(config-pmap-c)#inter f0/0 R2(config-if)#service-policy output r2
查看結果


分類和標記就這樣做完了,
其實在實際的工作中,標記本身就存在着優先級,像precedence 中(0)(1)(2)(3)…(7)
以及DSCP中的AF11……ef,全都是有默認的等級的。
在配置的時候,盡量還是要記清他們的分類以及標記,不然事后診斷會很麻煩,或者說去調整策略時,會很蹩腳。
----------------------------------------------------------
CCIE 成長之路 --- 梅利
