ISP QoS Lab

p_w_picpath

1-PQ

优先级队列(PQ,Priority Queue)中,有高、中、普通、低优先级四个队列。数据包

根据事先的定义放在不同的队列中,路由器按照高、中、普通、低顺序服务,只有高优先级

的队列为空后才为中优先级的队列服务,依次类推。这样能保证高优先级数据包一定是优先

服务,然而如果高优先级队列长期不空,则低优先级的队列永远不会被服务。我们可以为每

个队列设置一个长度,队列满后,数据包将被丢弃

clip_p_w_picpath002

R1(config)#priority-list 1 protocol ip ? \\可以定义四个优先级

high

medium

normal

low

R1(config)#priority-list 1 protocol ip high tcp 23 \\我们把telenet流量放在最高优先级

R1(config)#priority-list 1 interface f0/0 medium \\把某个接口收到的流量放在中等优先级

R1(config)#priority-list 1 default low

R1(config)#int f1/0

R1(config-if)#pri

R1(config-if)#priority-group ?

<1-16> Priority group

R1(config-if)#priority-group 1

R1#sh int f1/0

FastEthernet1/0 is up, line protocol is up

Hardware is AmdFE, address is cc00.2618.0010 (bia cc00.2618.0010)

Internet address is 192.168.12.1/24

MTU 1500 bytes, BW 100000 Kbit, DLY 100 usec,

reliability 255/255, txload 1/255, rxload 1/255

Encapsulation ARPA, loopback not set

Keepalive set (10 sec)

Full-duplex, 100Mb/s, 100BaseTX/FX

ARP type: ARPA, ARP Timeout 04:00:00

Last input 00:00:04, output 00:00:01, 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: priority-list 1

Output queue (queue priority: size/max/drops):

high: 0/20/0, medium: 0/40/0, normal: 0/60/0, low: 0/80/0

R1#show queueing priority

Current DLCI priority queue configuration:

Current priority queue configuration:

List Queue Args

1 low default

1 high protocol ip tcp port telnet

1 medium interface FastEthernet0/0

2-CQ

自定义队列(CQ,Custom Queue)和PQ 不一样,在CQ 中有16 个队列。数据包根据事

先的定义放在不同的队列中,路由器将为第一个队列服务一定包数量或者字节数的数据包

后,就转为为第二个队列服务。我们可以定义不同队列中的深度,这样可以保证某个队列被

服务的数据包数量较多,但不至于使得某个队列永远不会被服务。CQ 中的队列0 比较特殊,

只有队列0 为空了,才能为其他队列服务。

R1(config)#queue-list 1 protocol ip 1 tcp telnet \\把telenet流量放到队列1中

R1(config)#queue-list 1 default 6 \\其他流量默认放在队列6中

R1(config)#int f1/0

R1(config-if)#custom-queue-list 1

R1#sh int f1/0

FastEthernet1/0 is up, line protocol is up

Hardware is AmdFE, address is cc00.2618.0010 (bia cc00.2618.0010)

Internet address is 192.168.12.1/24

MTU 1500 bytes, BW 100000 Kbit, DLY 100 usec,

reliability 255/255, txload 1/255, rxload 1/255

Encapsulation ARPA, loopback not set

Keepalive set (10 sec)

Full-duplex, 100Mb/s, 100BaseTX/FX

ARP type: ARPA, ARP Timeout 04:00:00

Last input 00:00:00, output 00:00:01, 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: custom-list 1

Output queues: (queue #: size/max/drops)

0: 0/20/0 1: 0/20/0 2: 0/20/0 3: 0/20/0 4: 0/20/0

5: 0/20/0 6: 0/20/0 7: 0/20/0 8: 0/20/0 9: 0/20/0

10: 0/20/0 11: 0/20/0 12: 0/20/0 13: 0/20/0 14: 0/20/0

15: 0/20/0 16: 0/20/0

5 minute input rate 0 bits/sec, 0 packets/sec

5 minute output rate 0 bits/sec, 0 packets/sec

3-WFQ

加权公平队列(WFQ,Weight Fair Queue)是低速链路(2.048M 以下)上的默认设置。

WFQ 将数据包区分为不同的流,例如在IP 中利用IP 地址和端口号可以区分不同的TCP 流或

者UDP 流。WFQ 为不同的流根据权重分配不同的带宽,权因子是IP 数据包中的优先级字段。

例如有3 个流,两个流的优先级为0,第三个为5,总权为(1+1+6)=8,则前两个流每个

得到带宽的1/8,第三个流得到6/8。

R1(config)#int f1/0

R1(config-if)#fair-queue 512 1024 10 \\以上是在接口上启用WFQ,实际上在E1 速(2.048M)或者更低速率的链路上,WFQ 是默认启用的。512 是丢弃值,当队列达到512 数据包时,数据将被丢弃;1024 是最大的会话数;10 是RSVP 可预留队列。

Show int f1/0

Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0

Queueing strategy: weighted fair

Output queue: 0/1000/512/0 (size/max total/threshold/drops)

Conversations 0/1/1024 (active/max active/max total)

Reserved Conversations 0/0 (allocated/max allocated)

Available Bandwidth 75000 kilobits/sec

4-CBWFQ

基于类的加权公平队列(CBWFQ,Class Based Weight Fair Queue)允许用户自定义类

别,并对这些类别的带宽进行控制。这在实际中很有用,例如我们可以控制我们的网络访问

Internet 时的web 流量的带宽。可以根据数据包的协议类型、ACL、IP 优先级或者输入接口

等条件事先定义好流量的类型,为不同类别的流量配置最大带宽、占用接口带宽的百分比等。

CBWFQ 可以和NBAR、WRED 等一起使用。

Step1: 定义Class map

R1(config)#class-map match-any map1

R1(config-cmap)#match protocol http

R1(config-cmap)#match protocol ftp

R1(config-cmap)#exit

R1(config)#class-map match-all map2

R1(config-cmap)#match protocol telnet

Step2:定义Policy-Map

R1(config)#policy-map my-policy

R1(config-pmap)#class map1

R1(config-pmap-c)#bandwidth 60

R1(config-pmap-c)#class map2

R1(config-pmap-c)#bandwidth 10

R1(config-pmap-c)#exit

Step3:调用到接口

R1(config)#int f1/0

R1(config-if)#service-policy output my-polic

【技术要点】class-map 命令格式为:“class-map [ match-all | match-any ] name”:

match-all:指明下面的条件必须全部满足,才可以执行,此为默认值;

match-any:表示匹配任何一个条件就可以执行。

在class-map 模式下,可以设置各种匹配条件,例如:

匹配一种协议类型:match protocol protocol-name 。协议类型包括EGP,ICMP,EIGRP,

DNS,HTTP,Telnet 等上百种具体协议。

匹配访问列表:match access-group { number | name acl_name } 。可以匹配基

于号码的list 和基于Name 的Access list。

匹配CoS (class of Servie):match cos cos-value 。匹配IP 包中的CoS 值。

匹配IP 优先级(IP Precedence):match ip precedence precedence-value 。匹配

IP 包中的IP 优先级值。

匹配DSCP 值(Differentiated Services Code Point): match ip dscp dscp_value 。

匹配IP 包中的DSCP 值。

匹配入接口:match input-interface type number。匹配IP 包的进入接口。

R1#show class-map

Class Map match-any class-default (id 0)

Match any

Class Map match-any map1 (id 1)

Match protocol http

Match protocol ftp

Class Map match-all map2 (id 2)

Match protocol telnet

R1#show policy-map

Policy Map my-policy

Class map1

Bandwidth 60 (kbps) Max Threshold 64 (packets)

Class map2

Bandwidth 10 (kbps) Max Threshold 64 (packets)

5-LLQ

低延迟队列(LLQ,Low Latency Queue)的配置和CBWFQ 很类似。有的数据包,例如

VOIP 的数据包,对数据的延迟非常敏感。LLQ 允许用户自定义数据类别,并优先让这些类别

的数据传输,在这些数据没有传输完之前不会传输其他类别的数据。

LLQ=CBWFQ + PQ

Default queue默认是WFQ

R1(config)#class-map match-any map3

R1(config-cmap)#match ip precedence critical

R1(config-cmap)#exit

R1(config)#policy

R1(config)#policy-map my-policy

R1(config-pmap)#class map3

R1(config-pmap-c)#priority ?

<8-2000000> Kilo Bits per second

percent % of total bandwidth

R1(config-pmap-c)#priority 15

\\LLQ 的配置和CQWFQ 配置很类似,不过使用了priority 命令,我们这里限制它的带宽为

15k,超过这个带宽的数据包将被丢弃。这样CLASS-MAP3 的流量将优先被发送,然后才发送

CLASS-MAP1 和CLASS-MAP2 等流量。

R1#sh policy-map interface f1/0

FastEthernet1/0

Class-map: map3 (match-any)

0 packets, 0 bytes

5 minute offered rate 0 bps, drop rate 0 bps

Match: ip precedence 5

0 packets, 0 bytes

5 minute rate 0 bps

Queueing

Strict Priority

Output Queue: Conversation 264

Bandwidth 15 (kbps) Burst 375 (Bytes)

(pkts matched/bytes matched) 0/0

(total drops/bytes drops) 0/0

Class-map: class-default (match-any)

763 packets, 63162 bytes

5 minute offered rate 0 bps, drop rate 0 bps

Match: any

R1(config)#policy-map my-policy

R1(config-pmap)#class class-default

R1(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

fair-queue Enable Flow-based Fair Queuing in this Class

netflow-sampler NetFlow action

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

service-policy Configure Flow Next

set Set QoS values

shape Traffic Shaping

R1(config-pmap-c)#no fair-queue \\更改default 队列机制

6-WRED

加权随机早期检测(WRED,Weight Random Early Detect)是RED 的Cisco 实现。当

多个TCP 连接在传输数据时,全部连接都按照最大能力传输数据,很快造成队列满,队列满

后的全部数据被丢失;这时所有的发送者立即同时以最小能力传输数据,带宽开始空闲。接

着全部发送者开始慢慢加大速度,于是又同时达到最大速率,又出现堵塞,如此反复。这样

网络时空时堵,带宽的利用率不高。RED 则随机地丢弃TCP 的数据包,保证链路的整体利用

率。WRED 是对RED 的改进,数据包根据IP 优先级分成不同队列,每个队列有最小阀值、最

大阀值,当平均长度小于最小阀值时,数据包不会被丢弃;随着平均队列的长度增加,丢弃

的概率也增加;当平均长度大于最大阀值时,数据包按照设定的比例丢弃数据包。

R1(config)#int f1/0

R1(config-if)#random-detect

//以上在接口上启用WRED

R1(config-if)#random-detect precedence 0 18 42 12

//以上配置IP 优先级为0 的队列,最低阀值为18,平均队列长度小于18 时,数据包不会

被丢弃;当平均队列长度大于18 时,开始丢弃数据包,平均队列长度越大,丢弃的数据包

越多;最大阀值为42,平均队列长度小于42 时,数据包按照1/12 的比例丢弃。

R1#show queueing random-detect

Current random-detect configuration:

FastEthernet1/0

Queueing strategy: random early detection (WRED)

Random-detect not active on the dialer

Exp-weight-constant: 9 (1/512)

Mean queue depth: 0

class Random drop Tail drop Minimum Maximum Mark

pkts/bytes pkts/bytes thresh thresh prob

0 0/0 0/0 18 42 1/12

1 0/0 0/0 22 40 1/10

2 0/0 0/0 24 40 1/10

3 0/0 0/0 26 40 1/10

4 0/0 0/0 28 40 1/10

5 0/0 0/0 31 40 1/10

6 0/0 0/0 33 40 1/10

7 0/0 0/0 35 40 1/10

rsvp 0/0 0/0 37 40 1/10

\\以上显示WRED 的配置情况,默认时不同IP 优先级的队列的最低有所不同,我们更改了

IP 优先级为0 的队列。

7-CAR

承诺访问速率(CAR,Commited Access Rate)是一种流量策略的分类和标记的方法,

它基于IP 优先级、DSCP 值、MAC 地址或者访问控制列表来限制IP 流量的速率。标记则可以

改变IP 优先级或者DSCP。

CAR 使用令牌桶的机制,检查令牌桶中是否有足够的令牌。如果一个接口有可用的令牌,

令牌可以从令牌桶中挪走,数据包被转发,当这个时间间隔过去后,令牌会重新添加到令牌

桶中。如果接口没有可用的令牌,那么CAR 可以定义对数据包采取的行为。CAR 使用3 种速

率定义来定义流量的速率:

Normal rate(正常的速率):令牌被添加到令牌桶中的平均速率,就是数据包的平均

传输速率。

1- Normal burst(正常的突发):正常的突发时在时间间隔内允许正常流量速率的流量。

2-Excess burst(过量突发):超过正常突发的流量。当配置过量突发时,会借令牌并且

将它添加到令牌桶中来允许某种程度的流量突发。当被借的令牌已经使用后在这个接口

上收到的任何超出的流量会被扔掉。流量突发只会发生在短时间内,直到令牌桶中没有

令牌存在才停止传输。

通常建议正常的流量速率配置为等于在一段时间内的平均流量速率。正常的突发速率应

当等于正常速率的1.5 倍。过量速率是正常突发速率的2 倍。

R1(config-if)#rate-limit output access-group 101 64000 12000 16000 conform-action

set-prec-transmit 3 exceed-action set-prec-transmit 0

//以上在接口上启用CAR,对于符合ACL 101 的流量,平均速率为64000 位/秒,正常突发

量为12000 字节/秒,过量突发量为12000 字节/秒。

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 值并转发数据包

R1#show interfaces rate-limit

9-NBAR

基于网络的应用识别(NBAR,Network Based Application Recognition)实际上一个

分类引擎,它查看数据包,对数据包包含的信息进行分析。NBAR 使得路由器不仅要做转发

数据的工作,还要对数据包进行检查,这样会大大增加负载。NBAR 可以检查应用层的内容,

例如可以检查URL 是否有“.java”字样。NBAR 可以和许多QOS 配合使用。

R1(config)#class-map exchange

R1(config-cmap)#match protocol exchange

R1(config-cmap)#exit

R1(config)#policy-map deny-exchange

R1(config-pmap)#class exchange

R1(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

netflow-sampler NetFlow action

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

service-policy Configure Flow Next

set Set QoS values

shape Traffic Shaping

R1(config-pmap-c)#drop

R1(config)#int f1/0

R1(config-if)#service-policy output deny-exchange

NABR 的配置和CBWFQ 没什么差别,因为NBAR 实际上只是一个分类技术。

在旧的IOS 中,class-map 模式下不能使用“match protocol bittorrent”等命令,要先从Cisco 网站下载bittorrent.pdlm 等文件,上传到路由器上的FLASH 中,并使用命令“ip nbar pdlm flash: bittorrent.pdlm”后,才能在class-map 模式下,使用“matchprotocol bittorrent”命令。

【提示】NBAR 需要路由器启用CEF,默认时CEF 是开启的,如果没有开启,可以使用“ip cef”

命令。

10-命令总结

priority-list 1 protocol ip high tcp telnet创建优先级队列,标号为1。把telnet 流量放在高优先级队列中

priority-list 1 queue-limit 20 30 40 50 定义优先级队列高、中、普通、低队列中的长度

priority-group 1 把定义好的优先级队列应用接口上

show queueing priority 查看优先级队列情况

debug priority 调试优先级队列

queue-list 1 protocol ip 1 tcp telnet 创建自定义队列,标号为1。把telnet 流量放在队列1 中

queue-list 1 queue 1 limit 40 定义队列1 的深度为40,

custom-queue-list 1 把定义好的自定义队列应用接口上

fair-queue 512 1024 10 在接口上启用WFQ,512 是丢弃值,1024 是最大的会话数,10 是RSVP 可预留队列

class-map match-any CLASS-MAP1 定义class-map,名为CLASS-MAP1

match protocol http 匹配http 协议