|
在Cisco网络设备上使用服务质量(QoS),可以为某些类型的网络流量提供固定的带宽和优先级。笔者会向大家介绍如何通过我们的设置模板,轻松的为Cisco路由器和交换机配置 QoS。网络管理员可以通过QoS为某类网络流量指定所需的带宽和优先级。
首先我们要理解带宽和优先级之间的区别。当我们在网络设备(路由器和交换机)上指定了某类数据流的优先级和带宽,那么这些数据就会在其它数据传输之前进行传输,同时网 络设备也会通过加大该类数据的发送量的方式来提高其传输带宽。
正如我之前所说的,配置QoS是一件复杂的工作。根据QoS的不同,使用QoS的方式也多种多样。我们曾介绍过如何利用Cisco IOS AutoQoS对路由器进行自动配置,为VoIP数据流提 供足够的带宽和优先级。
配置QoS
下面我们就来看看在Cisco 871W路由器上配置QoS的具体步骤。
第1步:定义传输类型
你必须告诉路由器,哪种数据流需要进行QoS管理。你可以通过访问控制列表(ACL)或者基于网络应用程序识别(NBAR)的方式来进行定义。其中ACL是为路由器设定不同传输数据 类型的传统方式。
而NBAR则是让路由器识别流经路由器的各种数据的类别,比如HTTP数据是HTTP类别,Skype是Skype类别。但是路由器可识别的应用程序协议数量是有限的,这依赖于路由器内部存 储的一个程序协议列表。
虽然路由器无法识别全部应用程序,但是路由器厂商在每次IOS升级时,会在列表中加入更多的程序。另外,你也可以自己定义程序识别列表。
第2步:创建类映射(class-map)
类映射就是将不同类型的数据流进行分组。比如,你可以创建一个叫做“VoIP traffic”的类映射,然后将各种VoIP协议归入该类。
第3步:创建策略映射(policy-map)
策略映射可以与类映射匹配,确定某类数据流的带宽和/或优先级。
第4步:将策略映射应用于接口
和ACL列表一样,你必须将策略映射应用于某个你所设定的端口上。你可以设定策略映射为输入或输出模式,以下是相应的指令代码:
service-policy output|input {name of policy-map}
对不同IP组进行流量限制实例:
Cisco(config)#ip access-list extended BOSS
Cisco(config-ext-nacl)#permit ip host 192.168.1.8 any
Cisco(config-ext-nacl)#permit ip host 192.168.1.18 any
Cisco(config-ext-nacl)#permit ip host 192.168.1.38 any
Cisco(config-ext-nacl)#permit ip host 192.168.1.48 any
Cisco(config-ext-nacl)#permit ip host 192.168.1.58 any
Cisco(config-ext-nacl)#permit ip host 192.168.1.68 any
Cisco(config-ext-nacl)#end
Cisco#config t
Cisco(config)#ip access-list extended COMMON
Cisco(config-ext-nacl)#deny ip host 192.168.1.8 any
Cisco(config-ext-nacl)#deny ip host 192.168.1.18 any
Cisco(config-ext-nacl)#deny ip host 192.168.1.38 any
Cisco(config-ext-nacl)#deny ip host 192.168.1.48 any
Cisco(config-ext-nacl)#deny ip host 192.168.1.58 any
Cisco(config-ext-nacl)#deny ip host 192.168.1.68 any
Cisco(config-ext-nacl)#permit ip 192.168.0.0 0.0.255.255 any
Cisco(config-ext-nacl)#end
Cisco#config t
Cisco(config)#route-map QoS permit 10
Cisco(config-route-map)#match ip address BOSS
Cisco(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)
<cr>
Cisco(config-route-map)#set ip precedence critical
Cisco(config-route-map)#exit
Cisco(config)#route-map QoS permit 20
Cisco(config-route-map)#match ip address COMMON
Cisco(config-route-map)#set ip precedence priority
Cisco(config-route-map)#exit
Cisco(config)#class-map match-any NORMAL
Cisco(config-cmap)#match ip precedence 0 1 2
Cisco(config-cmap)#class-map match-any PREMIUM
Cisco(config-cmap)#match ip precedence 0 1 2
Cisco(config-cmap)#exit
Cisco(config)#policy-map QoS_OUTPUT
Cisco(config-pmap)#class PREMIUM
Cisco(config-pmap-c)#bandwidth 2048
Cisco(config-pmap-c)#police 2048000 bc 19200 38400
Cisco(config-pmap-c-police)#conform-action transmit
Cisco(config-pmap-c-police)#exceed-action transmit
Cisco(config-pmap-c-police)#class NORMAL
Cisco(config-pmap-c)#bandwidth 512
Cisco(config-pmap-c)#police cir 51000 bc 1200 be 1200
Cisco(config-pmap-c-police)#conform-action transmit
Cisco(config-pmap-c-police)#exceed-action drop
Cisco(config-pmap-c-police)#end
Cisco#config t
Cisco(config)#interface G 0/0
Cisco(config-if)#ip nat inside
Cisco(config-if)#ip policy route-map QoS
Cisco(config)#interface G 0/1
Cisco(config-if)#ip nat outside
Cisco(config-if)#service-policy output QoS_OUTPUT
----------------------------------------------------------------------------
marking:
1.定义class-map.
class-map [match-all/match-any] {map-name}
默认不打的话是match-all
2.定义匹配命令match
match access-group {NO}
match input-interface {interface}
match class-map {map-name} class-map嵌套
match source-address {mac-address} 源mac地址
match destination-address {mac-address} 目的mac地址
match vlan {vlan-ID}
match ip dscp {DSCP}
match ip precedencc {precedence}
match protocol {protocol} 基于NBAR
Router(config) class-map FOO
Router(config-cmap)#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
input-interface Select an input interface to match
ip IP specific values
mpls Multi Protocol Label Switching specific values
not Negate this match result
protocol Protocol
qos-group Qos-group
source-address Source address
3.设置policy-map
policy-map {policy-name}
4.调用class-map
class-map {map-name}
5.设置标记
set ip dscp {DSCP}
set ip precedence {PRECEDENCE}
set cos {COS}
priority {Kbps|percent PERCENT} [bc] 定义优先级流量的带宽以及突发流量
bandwidth {Kbps|percent PERCENT} 定义保留带宽
random-detect 启用WRED
police {CIR BC BE} conform-action {action} exceed-action {action} [violated-action {action}] 使用令牌桶限速
queue-limit {PACKETS} 定义队列中数据报的最大个数
service-policy {policy-name} 调用其它的策略进行嵌套
shape {average|peak} {CIR [BC] [BE]} 整形
drop
6.在接口模式下调用policy-map
service-policy [input|ouput] {POLICY-NAME}
察看命令:
show policy-map [policy-name]
show policy-map interface [INTERFACE]
show class-map [class-name]
show ip nbar pdlm
show ip nbar port-map 显示NBAR使用的协议到端口的映射
NBAR应用:
使用限制:
1.快速以太网信道
2.隧道接口或加密的接口
3.SVI(交换虚拟接口)
4.拨号接口
5.多链路PPP(MLP)
使用前先要敲命令:ip cef
class-map {name}
match protocol ...
ip nbar pdlm flash://bittorrent.pdlm 加载bittorrent.pdlm 到路由器闪存里(事先要把pdlm复制到flash中)
match procotol http url "*.jpeg|*.jpg" (匹配url中带有jpeg和jpg的连接)
match procotol http url "*.gif" (匹配url中有gif的连接)
拥塞管理
WFQ:
特点:
1.基于流(5元素)分类,队列数N可以配置
2.出队后按IP优先级来分配带宽,优先级越低则带宽越小
3.在其它队列空闲时抢占它们的带宽,又有流量时归还带宽
4.是低于2.048Mbps串行接口的默认配置
配置命令:
接口模式下fair-queue
show queueing fair
show queue [interface]
PQ:
缺点:1.只能静态配置,不能适应网络拓扑的变化2.不支持隧道接口3.要通过数据分类卡,比FIFO慢
配置:
1.定义优先级队列,可以基于协议和基于进站接口
基于协议priority-list {list-number} protocol {PROTOCOL-NAME} {high|medium|normal|low}
基于进站接口priority-list {list-number} interface {interface} {high|medium|normal|low}
2.定义默认优先级队列,未被分类的数据报被送到此处,默认级别为normal
priority-list {list-number} default {high|medium|normal|low}
3.定义每个队列中数据报的个数,从高到低,默认为20,40,60,80
priority-list {list-number} queue-limit {high-limit medium-limit normal-limit low-limit}
4.把优先级队列运用在接口上
priority-group {list-number}
察看命令:
show queue [interface]
show queueing priority
RTP(Real Time Protocol)
支持端口号为偶数的udp报文
可以进行限速,超过的可丢弃,也可以配置带宽,不会占用超出规定的带宽
命令:
ip rtp priority {starting-rtp-port-number port-number-range} {bandwidth}
max-reserved-bandwidth PERCENT
show queue [interface]
debug priority
CRTP(压缩实时协议): 用来压缩ip/udp/rtp报头
压缩分为三种:链路压缩,有效负载压缩,报头压缩
二层报头--tcp/ip报头--有效负载
1.链路压缩:对整个分组进行压缩,包括报头和有效负载。独立于协议的。只适用于点到点链路。两种算法:Predictor和STAC
2.有效负载压缩:只压缩数据部分,对报头没有影响。适用于frame-relay或ATM网络。
3.tcp/ip报头压缩:针对协议的,适用于几个字节数据的小型分组。
配置:
对HDLC,LAPB: compress [predictor|stac|mppc]
对ppp: ip compress [predictor|stac]
对frame-relay点到点接口或子接口启用stac压缩: frame-relay payload-compress
启用crtp:
1. ip rtp header-compression [passive]
若不启用passive,则对所有RTP数据流压缩;若启用passive,则只有当进入端口的RTP分组被压缩时,软件才能对离开该接口的RTP分组压缩
2. ip rtp compression-connections {NUMBER}
更改CRTP压缩的条数,默认为16条
3. 启用tcp报头压缩: ip tcp header-compression [passive] 若没有启用passive, 则必须指定关键字active,将对所有IP/UDP/RTP包头进行压缩
ip tcp compression-connections {NUMBER}
frame-relay中的 crtp:
在物理接口上启用CRTP,则在它的子接口上将继承特性
frame-relay ip rtp header-compression [passive]
frame-relay ip rtp compression-connections {NUMBER}
只针对特定的PVC启用CRTP:
frame-relay map ip {ip-address} {dlci} [broadcast] rtp header-compression [active|passive] [connections number]
察看命令:
show ip rtp header-compression [interface] [detail]
show frame-relay ip rtp header-compression [interface]
WRR(weighted round-robin)
一种队列调度机制,根据每个出站队列的权值来分配带宽,权值与带宽成正比。
仅当发生拥塞时才会使用WRR,不拥塞时不会分配带宽。
步骤:
1.全局启用mls qos
2.进入接口模式
3.通过COS将数据报分配到不同的队列中去。
wrr-queue cos-map QUEUE-ID THROSHOLD COS1... COSn 它用于配置cos值到出站队列的映射关系。
对队列进行编号时,从低优先级开始,到严格优先级结束。
配置严格优先级队列:wrr-queue priority-queue
4.配置WRR队列的权重
wrr-queue bandwidth WEIGHT1 WEIGHT2 WEIGHT3 WEIGHT4
计算每个队列的方法是:
example:wrr-queue bandwith 1 2 3 4
则带宽: 队列1:权重1/总权重=1/10
5.定义传输队列长度的比例,取值为1-100%
wrr-queue queue-limit LOW-PRIORITY-QUEUE-WEIGHT MEDIUM-PRIORITY-QUEUE-WEIGHTS HIGH-PRIORITY-QUEUE-WEIGHTS
高优先级队列因为延时小,数据量小,所以不需要太大的缓存区。往往将大部分缓冲区用于低优先级队列。
拥塞避免
1.尾丢弃
对所有通信流平等对待,将导致TCP全局同步
wrr-queue threshold QUEUE-ID THR1% 100% THR1%是开始丢弃通信流时输出队列的填满程度,后面一个是100%是尾丢弃
2.WRED
WRED与RED的区别在于前者引入IP优先权DSCP值来区别丢弃策略,可以为不同IP优先级DSCP设定不同的队列长度、队列阈值、丢弃概率。并且RED只对TCP流量有用
通过对队列数据流传输速度的平均值计算来决定是否丢弃,防止了对突发流量的不公平待遇。
WRED和LLQ矛盾
WRED往往和WRR一起使用。
WRED可以在接口上进行配置,也可以在policy上进行配置,可以针对于precedence进行RED,也可以针对于DSCP值进行RED,当然,两者之间只能选择一个。
(1)基于DSCP
random-detect dscp-based
random-detect dscp {DSCP} {min max mark}
(2)基于ip precedence
random-detect
random-detect precedence {PRECEDENCE} {min max mark}
WRED与WRR连用:
wrr-queue random-detect min-throshold QUEUE-ID THR1% [THR2% [THR3% ...]]
wrr-queue random-detect max-throshold QUEUE-ID THR1% [THR2% [THR3% ...]]
min-throshold表示开始丢弃某些数据包时的最大填满程度
max-throshold表示丢弃所有数据包时的最大填满程度
example:
int G1/1
wrr-queue bandwidth 50 75
wrr-queue queue-limit 100 50
wrr-queue random-detect min-throshold 1 50 70
wrr-queue random-detect max-throshold 1 75 100
wrr-queue cos-map 1 1 0 2
wrr-queue cos-map 1 2 3
wrr-queue cos-map 2 1 4
wrr-queue cos-map 2 2 6
priority-queue cos-map 1 1 5 7
rcv-queue cos-map 1 1 0
switchport
解释:共有两个队列。当队列1的填满程度达到50%和70%时,交换机分别对映射到闸值1和闸值2的数据包进行WRED(即开始丢弃),当队列1的填满程度达到75%和100%时,交换机分别对映射到闸值1和闸值2的数据包全部丢弃。注意:队列2没有采取WRED。
基于流的WRED(WRED和WFQ结合起来使用)
小的流丢弃的概率小,大的流丢弃的概率大,保护小的流。
命令:
1.启用基于流的WRED。
random-detect flow
2.设置平均深度因素(average depth factor)的值,值必须为2的幂,默认值为4.可选:
random-detect flow average-depth-factor {scaling-factor} 这个参数是改变一个乘法的比例因数.从而改变队列的大小,其实就是改变队列的长度。
3.设置基于流的WRED 的数据流数目,默认值为256
random-detect flow count {number}
流量策略
qos的流程:1.基于流或基于类的分类;2.结合令牌桶进行policing或shaping(CAR或GTS);3.拥塞避免(尾丢弃或WRED);4.拥塞管理(各种队列机制);5.出队。
标记在什么地方进行??(标记可以在进行CAR的时候进行,CAR也可以进行重新标记)
CAR(Committed Access Rate)
CAR通过使用令牌桶TC来进行流量控制。分类后,不需要流控的流量直接继续发送,而需要进行流控的流量就要经过令牌桶。只有当令牌桶中有令牌时,相应的流量才能通过。若没有足够的令牌,要么流量被直接丢弃(policing),要么缓存起来(shaping),等有了足够的令牌后再发送出去。
CAR还可以用来做mark或remark(即可以用来设置ip优先级或重新设置ip优先级)
CAR可以为不同类别的报文设置不同的流量特性和标记特性,即可以对每个类进行CAR。CAR的策略还可以串联处理,比如先对总的流量进行一次限速,然后再对各个类进行小范围的限速。
CAR一般用在网络边界路由器上。可以在一个接口上设置多个CAR策略,数据包依次和多个CAR策略匹配,若没有匹配的,则默认操作时转发数据包。
CAR的使用有以下限制:1.只能对IP流量限速;2.不支持fast EtherChannel;3.不支持隧道接口;4.不支持ISDN PRI接口。
命令:
rate-limit {output|input} {CIR BC BE} conform-action {action} exceed-action {action}
注意:CIR单位是bit/s;而BC和BE的单位是byte/s。
conform-action的条件是指当要发的数据小于正常突发(bc)的时候。exceed-action是指要发的数据大于普通突发,小于最大突发(be)的时候。
action的选项共有如下这些:
continue 继续执行下一条CAR语句
drop 丢弃数据包
tranmsit 转发数据包
set-prec-continue {precedence} 设置IP优先级并继续执行下一条CAR语句
set-prec-transmit {precedence} 设置IP优先级并转发数据包
set-dscp-continue {dscp} 设置dscp值并继续执行下一条CAR语句
set-dscp-transmit {dscp} 设置dscp值并转发数据包
上面都是只能基于整个接口的流量进行CAR,下面的可以分别针对某个流量或ip precedence或dscp值或MAC地址进行CAR
扩展的配置
1.针对dscp值进行CAR
rate-limit {output|input} [dscp DSCP] {CAR BC BE} conform-action {action} exceed-action {action}
2.针对ACL进行CAR
rate-limit {output|input} access-group {ACL NUM} {CAR BC BE} conform-action {action} exceed-action {action}
3.针对限速ACL进行CAR
rate-limit {output|input} access-group rate-limit {ACL NUM} {CAR BC BE} conform-action {action} exceed-action {action}
限速ACL只是一种调用关系:access-list rate-limit {ACL NUM} {precedence|mac-address} 可以匹配优先级,也可以匹配MAC地址
察看命令:
1.查看限速ACL:show access-lists rate-limit [ACL]
2.查看接口的限速信息:show interfaces [interface] rate-limit
policy map中CAR操作
police {CIR BC BE} conform-action {action} exceed-action {acion} violated-action {acion}
action的选项同上。
流量整形(shaping)
通常通过缓冲区和令牌桶来完成,当报文的发送速度过快时,首先在缓冲区进行缓存,在令牌桶的控制下再均匀地发送这些被缓冲的报文。
采用的技术为GTS(通用流量整形)。
GTS与CAR的主要区别在于:利用CAR进行报文流量控制时对不符合流量特性的报文进行丢弃,而GTS对于不符合流量特性的报文则是进行缓冲,减少了报文的丢弃,同时满足报文的流量特性。
若报文不需要进行GTS,则不经过令牌桶的处理直接发送。
当因为缺乏足够的令牌而采用GTS后,GTS按一定的周期从队列中取出报文进行发送。每次发送都会与令牌桶中的令牌数作比较。直到令牌桶中的令牌数减少到队列中的报文不能再发送或是队列中的报文全部发送完毕为止。
一般在路由器的出口进行shaping,入口进行policing。
命令:
1.基本的GTS:traffic-shape rate {CIR BC BE}
2.基于ACL的GTS: traffic-shape group {ACL} {CIR BC BE}
察看:
1.查看GTS 的配置信息:show traffic-shape [interface]
2.查看GTS 的统计信息:show traffic-shape statistics [interface]
GTS在Frame Relay上的实现
1.在接口上启用GTS:
traffic-shape rate {CIR [Bc [Be]]}
2.当接口收到向后显性拥塞通知(BECN)时,估算流量速率的最低值:
traffic-shape adaptive {CIR}
3.以向前显性拥塞通知(FECN)做为BECN 的响应.可选:
traffic-shape fecn-adapt
GTS在policy map上的实现
GTS还可以定义平均值和峰值的流量整形,并且可以在配置GTS 的时候采用CBWFQ。
配置基于分类的流量整形的步骤如下:
1.定义平均值和峰值的CIR,Bc 和Be:
(config-pmap-c)#shape {average|peak} {CIR [Bc] [Be]} average指的是平均值,peak说得是峰值
2.定义缓冲区上限,默认值为1000.可选:
(config-pmap-c)#shape max-buffers {number-of-buffers}
3.在策略上应用CBWFQ。可选:
(config-if)#service-policy output {policy-name} |
|