1、基于CISCO路由器的QOS
1、QOS模型
尽力而为服务模型(Best-effort)
集成服务模型(Integrated Services)
差分服务模型(Differentiated Services)
2、差分服务模型结构
3、分类与标记
标记可以使用IP包头中TOS的高三位(IP优先级)或高六位(DSCP)做标记。
在R1上将ICMP流量的优先级设置为2,将HTTP流量的DSCP值设置为AF22,其他没匹配到的流量优先级设置为1,在ISP上查看标记是否生效。
ISP配置如下:
ip http server
access-list 100 permit ip any any dscp af22
access-list 100 permit ip any any precedence 1
access-list 100 permit ip any any precedence 2
interface FastEthernet2/0
service-policy input MARK
R1配置如下:
access-list 110 permit icmp any any
access-list 120 permit tcp any any eq www
class-map match-all ICMP
match access-group 110
class-map match-all WWW
match access-group 120
policy-map MARK
class ICMP
set precedence 2
class WWW
set dscp af22
class class-default
set precedence 1
interface FastEthernet2/0
service-policy input MARK
TEST上的测试命令
ping 33.1.1.1
telnet 33.1.1.1 80
查看命令
show ip access-lists
show class-map
show policy-map
show policy-map interface s0/1
4、队列技术(拥塞管理)
队列技术应用于接口的出方向,一个接口只能使用一种队列技术。
路由器的接口上有一个软件队列和一个硬件队列。数据包先进入软队列,然后使用队列技术对数据包进行调度进入硬件队列,硬件队列始终采用先进先出的方式发送数据包。
常用的队列技术:FIFO、PQ、CQ、WFQ、LLQ都是CLI工具,而CBWFQ是MQC工具。
先进先出队列(FIFO)
优先级队列(PQ)
自定义队里(CQ)
加权公平队列(WFQ)
低延时队列(LLQ)
实时传输队列(RTP PQ):
基于类加权公平队列(CBWFQ)
队列技术三大组件:分类组件、插入丢弃组件、调度组件
先进先出队列(FIFO)
默认时:当接口的速度大于2.048Mbps是,路由器采用FIFO进行调度。
优先级队列(PQ)
队列数:高、中、普通、低共4个队列
分类:根据事先分类放入不同队列
插入丢弃:可以设置队列长度,队列满后,数据包将被尾丢弃
调度:按照高、中、普通、低的顺序调度,只用高优先级的队列为空才会调度中优先级,依次类推。
优点:保证高优先数据包优先转发
缺点:高优先队列不为空,低优先级队列永远得不到转发
指定不符合任何类型的数据包将进入的队列(默认normal)
priority-list 1 default high
根据数据包的入口分类并将其放入到某个队列
priority-list 1 interface serial 0/0 high
根据数据包的协议类型分类并将其放入到某个队列
priority-list 1 protocol ip high tcp telnet
指定各队列的大小
priority-list 1 queue-limit 10 10 10 10
在接口上应用队列
priority-group 1
=================================================================
R1
=================================================================
priority-list 1 interface FastEthernet2/0 high
priority-list 1 protocol ip normal tcp www
priority-list 1 default low
priority-list 1 queue-limit 10 20 30 40
interface Serial0/1
priority-group 1
查看接口上的队列
show int s0/1
查看队列配置
show queueing priority
测试队列是否生效
debug priority
show queueing interface s0/1
自定义队列(CQ)
队列数:CQ有17个队列,其中队列0为优先级队列。只有队列0为空,才为其他队列服务。
分类:根据事先分类放入不同队列
插入丢弃:可以设置队列长度,队列满后,数据包将被尾丢弃
调度:为第1个队列转发一定字节数的数据包后,就转为为第2个队列转发,依次轮询
优点:保证每个队列都有被服务的机会
指定不符合任何类型的数据包将进入的队列(默认队列1)
queue-list 1 default 1
根据数据包的入口分类并将其放入到某个队列
queue-list 1 interface serial 0/0 1
根据数据包的协议类型分类并将其放入到某个队列
queue-list 1 protocol ip 1 tcp telnet
指定每次轮询时各队列被转发的数据包字节数
queue-list 1 queue 1 byte-count 100
指定各队列的大小
queue-list 1 queue 1 limit 100
指定优先级队列(例如此时为2,则队列0和1都是优先级队列)
queue-list 1 lowest-custom 2
在接口上应用队列
custom-queue-list 1
=================================================================
R1
=================================================================
queue-list 1 interface FastEthernet2/0 2
queue-list 1 protocol ip 3 tcp www
queue-list 1 queue 1 byte-count 100 limit 100
queue-list 1 queue 2 byte-count 200 limit 200
queue-list 1 queue 3 byte-count 300 limit 300
queue-list 1 lowest-custom 4
interface Serial0/1
custom-queue-list 1
查看接口上的队列
show int s0/1
查看队列配置
show queueing custom
测试队列是否生效
debug custom-queue
show queueing interface s0/1
加权公平队列(WFQ)
默认时:当接口的速度小于2.048Mbps时,路由器采用WFQ进行调度。
分类:具有相同协议类型,源IP,目的IP,源端口,目的端口,TOS值的数据包看成一个流,同一个流的数据包将放到一个队列中。
插入丢弃:队列满后,数据包将执行WFQ丢弃,丢弃最差完成时间的数据包
调度:先调度最快能转发完毕的数据包,包的大小采用虚拟包大小(虚拟包大小=实际包大小/(IP优先级+1))
优点:优先级越高、包越小的数据包优先得到转发
WFQ丢弃机制:(丢弃最差完成时间的数据包)
HQO(Hold Queue Out Limit):整个WFQ系统所能存放的最大数据包数量,这个值为各队列之和。
CDT(Congestive Discard Threshold):WFQ丢弃机制的门限值,当各队列数据包数量之和达到CDT就开始丢弃数据包。
=================================================================
R1
=================================================================
interface Serial0/1
fair-queue 512 64 (指定CDT为512,最大会话数为64)
hold-queue 1500 out (指定HQO为1500)
查看接口上的队列
show int s0/1
基于类的加权公平队列(CBWFQ)
分类:允许自定义类,把数据放入不同队列,最多可以定义64个类,不匹配分类的数据放到系统默认类class-default中
插入丢弃:可以设置队列长度,队列满后,数据包将被尾丢弃
调度:对每个队列保留指明带宽,每个队列默认采用FIFO调度,但也可以结合WFQ调度。如何保证带宽及各队列数据包如何被调度到硬件队列无从知晓。
优点:保证流量的最小带宽,而不是限制最多带宽
=================================================================
R1
=================================================================
access-list 1 permit 192.168.1.100
access-list 2 permit 192.168.1.1
class-map match-all 100
match access-group 1
class-map match-all 1
match access-group 2
policy-map MARK
class 100
bandwidth 500
class 1
bandwidth 500
interface Serial0/1
service-policy output MARK
查看命令
show class-map
show policy-map
show policy-map interface s0/1
低延时队列(LLQ)
LLQ配置类似CBWFQ,调度机制类似PQ。LLQ通常和CBWFQ一起使用。
=================================================================
R1
=================================================================
class-map match-any CLASS-MAP3
match ip precedence 5
class-map match-all CLASS-MAP2
match protocol telnet
class-map match-any CLASS_MAP1
match protocol http
match protocol ftp
policy-map MY-POLICY
class CLASS_MAP1
bandwidth 512
class CLASS-MAP2
bandwidth 128
queue-limit 128
class CLASS-MAP3
priority 128
interface Serial0/0
bandwidth 1024
service-policy output MY-POLICY
这个例子中结合使用了LLQ和CBWFQ。
CLASS-MAP3使用LLQ,保证带宽为128kbps,优先于CLASS-MAP1,CLASS-MAP2转发
CLASS-MAP1,CLASS-MAP2使用WFQ,保证带宽分别为512kbps,128kbps。
查看命令
show class-map
show policy-map
show policy-map interface s0/0
RTP优先队列
RTP优先队列是一种解决语音服务质量的简单技术,期原理就是将承载语音的RTP数据包送入优先级队列使其得到优先转发。
RTP识别语音的UDP数据包端口,这些数据包通常使用16384~32767的偶数端口发送。
RTP优先队列可以和前面的任何一种队列包括FIFO、PQ、CQ、WFQ、CBWFQ、LLQ结合使用,但是它的优先级是最高的。即使RTP和LLQ一起使用,RTP的优先级也比LLQ高。
interface Serial0/0
ip rtp priority 16384 16383 256
16384最低UDP端口号,16383端口增量,带宽256kbps
5、拥塞避免
随机早期预检测(RED)
给队列设定两个门限值:最小门限和最大门限,当队列的平均长度小于最小门限时,不丢弃数据包;
当队列的平均长度在最小门限和最大门限之间时,RED开始随机丢弃数据包;当队列的平均长度大于最高门限时,丢弃尾部所有的数据包。
加权随机早期预检测(WRED)
WRED和RED的原理一样,但是WRED可以根据不同的IP优先级或DSCP值,设定不同的最小门限、最大门限和丢弃概率,从而对不同优先级的数据包提供不同的丢弃特性。
WRED不能和PQ、CQ、WFQ队列同时使用。
配置基于IP Precedence的WRED
random-detect
根据IP优先级设置数据包的最小门限值、最大门限值、丢弃数据包的丢弃概率(该例中概率应该为1/10)
random-detect precedence 1 10 20 10
配置基于DSCP的WRED
random-detect dscp-based
根据DSCP设置数据包的最小门限值、最大门限值、丢弃数据包的丢弃概率(该例中概率应该为1/10)
random-detect dscp af22 10 20 10
设置计算队列平均长度的权重因子(默认值为9)
random-detect exponential-weighting-constant 9
查看WRED队列配置
show queueing int s0/0
基于流的加权随机早期预检测(FB-WRED)
WRED中,只用TCP流会对丢包做出反应并降低速率;而UDP等非自适应流并不会对丢包做出反应,因此UDP等非自适应流在拥塞时发送分组的速率将比自适应流高得多。
FB-WRED对WRED除了改进,他对占用队列资源多余公平份额的流将得到惩罚。
FB-WRED根据流和IP优先级(或者DSCP值)把到达的数据包放到不同的队列中,并且计算每个活动流的公平队列资源份额(队列长度/活动流的数目),
对于占用队列资源多余公平份额的流将得到惩罚。方法是通过降低队列的WRED最大门限值来加大分组的丢弃概率。
新的最大门限值=最小门限值+{(最大门限值-最小门限值)/ 2}
配置FB-WRED(必须先配置WRED)
random-detect flow
设置平均深度因素(即放大因子,默认值为4)
random-detect flow average-depth-factor 4
设置基于流的WRED的数据流数目
random-detect flow count 32
查看WRED队列配置
show queueing int s0/0
基于类的加权随机早期预检测(CB-WRED)
CB-WRED可以和CBWFQ、Shaping结合,而不能与FB-WRED、LLQ、Policing结合。
class-map match-any HTTP-FTP
match protocol http
match protocol ftp
policy-map MY-POLICY
class HTTP-FTP
bandwidth 512
random-detect
random-detect precedence 0 20 30 10
interface Serial0/0
bandwidth 1024
service-policy output MY-POLICY
此例启用基于优先级的WRED与CBWFQ结合。
查看命令
show class-map
show policy-map
show policy-map int s0/0
6、流量×××(Shaping)
流量×××的目的是平滑流量,流量×××会把超出规定速率的数据缓冲起来,不是丢弃,链路的平均流量速率较大,但会造成数据的延时加大或延时抖动。
令牌桶的相关名词:
CIR:承诺信息速率,单位bps
PRI:承诺信息速率,单位bps
Bc:正常突发量的大小,单位为字节
Be:超额突发量的大小,单位为字节
Tc: 时间间隔
CIR=Bc/Tc
当个令牌桶,桶的大小为Bc+Be;
令牌以CIR的速率添加到令牌桶中;
当数据包要转发出去,如果无法从令牌桶中获取足够的令牌,就将数据包缓存起来,都有足够的令牌在发送。数据包发送的平均速率不超过CIR,但某时刻可以一超过CIR的速率Bc+Be发送。
GTS通用流量×××实在软件队列之前又增加一个队列来实施,这一队列采用的是WFQ。GTS可以与FIFO、PQ、CQ、WFQ配合使用。
CLI配置法
interface Serial0/1
traffic-shape rate 8000 1500 1000 1000
MQC配置法
access-list 100 permit icmp any any
class-map match-all ICMP
match access-group 100
policy-map TEST
class ICMP
shape average 8000 1000 1000
interface Serial0/1
service-policy output TEST
查看命令
show traffic-shape
show traffic-shape statistics
7、流量监管(Policing)
流量监管可以应用在接口的出和入两个方向上。分为单桶单速双色、双桶单速三色、双桶双速三色。
流量监管的目的是限速,流量监管会把超出规定速率的丢弃或者标记便于后继的路由器进行处理,链路的流量速率有较大起伏,整体平均带宽低,但是不会造成数据包延时增加。
令牌桶的相关名词:
CIR:承诺信息速率,单位bps
PRI:承诺信息速率,单位bps
Bc:正常突发量的大小,单位为字节
Be:超额突发量的大小,单位为字节
Tc: 时间间隔
CIR=Bc/Tc
单桶单速双色
单个令牌桶,桶的大小为Be,而不是Bc+Be;
令牌以CIR的速率添加到令牌桶中;
当数据包要转发出去,如果可以从令牌桶中获取足够的令牌,则成为Conforn,此时桶内的令牌数为之前的令牌数减去数据包的大小;如果如法从令牌桶中获取足够的令牌,则成为Exceed,此时桶内的令牌数不变。
CLI配置法
interface Serial0/1
rate-limit output 8000 1500 2000 conform-action transmit exceed-action drop
MQC配置法
access-list 100 permit icmp any any
class-map match-all ICMP
match access-group 100
policy-map TEST
class ICMP
police cir 8000 bc 1500 be 1000
conform-action transmit
exceed-action drop
interface Serial0/1
service-policy input TEST
查看命令
show class-map
show policy-map
show policy-map int s0/0
双桶单速三色
两个令牌桶,TB1的大小为Bc,TB2的大小为Be;
令牌以CIR的速率添加到令牌桶中TB1中,当TB1满后,令牌溢出到TB2中。
当数据包要转发出去,如果可以从令牌桶TB1中获取足够的令牌,则成为Conforn,此时TB1的令牌数为之前的令牌数减去数据包的大小,TB2的令牌数不变;
当数据包要转发出去,如果无法从令牌桶TB1中获取足够的令牌,但能从令牌桶TB2中获取足够的令牌,则成为Exceed,此时TB1的令牌数不变,TB2的令牌数为之前的令牌数减去数据包的大小;
当数据包要转发出去,如果无法从令牌桶TB1中获取足够的令牌,也无法从令牌桶TB2中获取足够的令牌,则成为Violate,此时TB1、TB2的令牌数不变。
access-list 100 permit icmp any any
class-map match-all ICMP
match access-group 100
policy-map TEST
class ICMP
police cir 8000 bc 1500 be 1000
conform-action transmit
exceed-action drop
violate-action drop
interface Serial0/1
service-policy input TEST
查看命令
show class-map
show policy-map
show policy-map int s0/0
双桶双速三色
两个令牌桶,TB1的大小为Be,TB2的大小为Bc;
令牌以PIR的速率添加到令牌桶中TB1中,以CIR的速率添加到令牌桶中TB2中,PIR>=CIR;
当数据包要转发出去,如果可以从令牌桶TB1中获取足够的令牌,也可以从令牌桶TB2中获取足够的令牌,则成为Conforn,此时TB1的令牌数为之前的令牌数减去数据包的大小,TB2的令牌数也为之前的令牌数减去数据包的大小;
当数据包要转发出去,如果可以从令牌桶TB1中获取足够的令牌,但不能从令牌桶TB2中获取足够的令牌,则成为Exceed,此时TB1的令牌数为之前的令牌数减去数据包的大小,TB2的令牌数不变;
当数据包要转发出去,如果无法从令牌桶TB1中获取足够的令牌,也无法从令牌桶TB2中获取足够的令牌,则成为Violate,此时TB1、TB2的令牌数不变。
access-list 100 permit icmp any any
class-map match-all ICMP
match access-group 100
policy-map TEST
class ICMP
police cir 8000 bc 1500 pir 8000 be 1500
conform-action transmit
exceed-action drop
violate-action drop
interface Serial0/1
service-policy input TEST
查看命令
show class-map
show policy-map
show policy-map int s0/0