QOS(Quality Of Server)(在拥塞时才用)
哪些问题会影响网络的数据传输
1、有限的带宽
2、延迟
3、抖动
4、丢包
解决可用带宽的方法:
1、升级带宽,增加链路带宽
2、让优先级高的流量先过
3、压缩二层的帧
4、压缩IP包的头部
延迟的分类:
1、处理延迟--网络设备将数据帧从入接口取出,将其放到接收队列,再放到出接口输出队列所需的时间
2、排队延迟--数据包在接口的输出队列中等待的时间
3、串行化延迟--将封装在数据帧中比特放到物理介质上的时间
4、传播延迟--通过物理介质传输数据帧中的比特所需的时间
注意:只有排队延迟可以通过使用QOS来进行控制
QOS服务模型:
1、尽力而为的服务--没有应用QOS,网络的默认行为
2、集成服务--所有的中间系统和资源都显式的为流提供预定的服务,这种服务需要预留网络资源,确保网络能够满足通信流的特定服务要求。
3、区分服务--将根据服务要求将通信流分类,然后将它们加入到效率不同的队列中,使一些通信流优先于其他类别的通信流得到处理。
IntServ
集成服务是通过使用RSVP(Resource Reservation Protocol资源预留协议)实现的,在两个端点中间网络设备上都要启用RSVP。
工作原理--数据流在发送之前,起始节点会向网络请求特定类型的服务,并将其流量配置文件告诉网络中的每个中间节点,请求网络提供一种能够满足其带宽和延迟要求的服务。在从网络得到确认后,应用才开始发送数据。
资源预留的过程分为5步:
1、数据发送方发送rsvp path控制消息,这种消息描述了将要被发送的数据的信息。
2、每个rsvp路由器收到path消息后,保存上一跳的IP地址,并继续向下发送。
3、接收站接收到rsvp path消息后,使用rsvp resv消息向上一跳路由器请求rsvp资源预留。rsvp resv消息从接收方到发送方所经过的路径与rsvp path消息到来时完全相同。
4、rsvp路由器确定是否可以满足这些rsvp请求,如果不能,则拒绝。如果可以,则预留出资源,并继续向上一跳发送出rsvp请求。
5、发送方收到rsvp请求,说明预留已经就绪,可以开始发送数据了。
路由器对数据包的处理过程:
1、准入控制
2、分类
3、策略
4、排队
5、调度
资源预留方式可分为两类:
1、独占式--适合于多个数据源同时发送的应用程序,针对每个发送方预留资源,且发送方是很清楚的。
2、共享式--适合于多个数据源不太可能同时发送的应用程序。
又可分为两种:
①共享显式(shard explicit SE)--为多个明确的源预留资源
②通配符过滤器(wildcard filter WF)--为所有源预留资源
需要一个PDP(policy Decision Point策略决策点)来集中完成网络对RSVP请求的许可控制。
缺点:不具有可扩展性,并且需要网络设备不断的发送信号,本身占用带宽。
R1(config)#interface e0
R1(config-if)#ip rsvp bandwidth 起用rsvp,默认使用75%的带宽做rsvp
R1(config-if)#ip rsvp bandwidth 500 设定只使用500K的带宽
R1(config)#interface S0
R1(config-if)#ip rsvp bandwidth
R1(config)#ip rsvp sender 20.1.1.5 10.1.1.4 udp 1040 0 10.1.1.4 e0 32 32
目标IP 源IP 目标端口 源端口 预留带宽
R2(config)#interface S0
R2(config-if)#ip rsvp bandwidth
R2(config)#interface S1
R2(config-if)#ip rsvp bandwidth
R3(config)#interface S0
R3(config-if)#ip rsvp bandwidth
R3(config)#interface S1
R3(config-if)#ip rsvp bandwidth
R3(config)#ip rsvp reservation 20.1.1.5 10.1.1.4 udp 1040 0 20.1.1.5 e0 ff load 32 32
独占式预留
show ip rsvp interface
show ip rsvp installed
show ip rsvp sender
每30S发一次dump-messages
===========================================================================
DiffServ
区分服务--能够提供满足不同QOS需求的多种服务等级。不需要显示的通知网络设备。
路由器对数据包的处理是逐跳行为
缺点:没有绝对的服务保证,机制复杂。
语音进程的端口号:16384-32767之间的偶数 奇数的是控制端口,偶数的是数据端口
·确定数据流的优先顺序。对延迟敏感的流量赋予高的优先级。
如果WAN链路不发生拥塞,没有必要划分数据流的优先顺序。
如果WAN链路经常发生拥塞,划分数据流的优先顺序可能解决不了问题,更合适的解决方案是增加带宽。
·制定排队策略:
1.为所有用户提供合适的服务级别
2.节省昂贵的WAN费用
·RTP(Real-Time Protocol):实时传输协议
RTP传输多媒体应用的数据流,包括IP语音和视频(对延迟比较敏感的)
·MQC(Modular QoS CLI(command line interface)):
MQC--模块化的QOS命令行
为我们配置QOS提供了一个统一的格式标准
区分服务可分为以下四大部分:
-----------------------------------------------------------------------------------------
分类和标记 限速(shaping&policy) 拥塞避免 Queuing
ACL GTS CAR RED FIFO
PBR FRTS CBpolicing WRED PQ
NBAR CBshaping FB-WRED CQ
CBMARKING CB-WRED WFQ
LLQ
CBWFQ
WRRQ
------------------------------------------------------------------------------------------
分类和标识的方法:
分类就是以预定的参数来区分帧或数据包,最常见的是按流量的类型来分类。
标记就是对区分出来的数据包打上相应的优先级
一、二层标记方法
COS--二层的服务类别
7 保留
6 保留
5 语音流量
4 视频会议
3 呼叫信令
2 高优先级数据
1 中优先级数据
0 尽力而为的传输
二、三层标记方法
IP优先级--共8个分类,从0-7,0级最低,7级最高
DSCP--区分服务代码点
使用ToS字段的前6个bit,共64个不同的优先级
PHB--逐跳行为,取出13个DSCP值进行了标准化
AF--保证转发,定义了四种不同的类别,每种类别又定义了三种不同的丢弃概率
EF--快速转发
PBR:做了分类和设置优先级的工作。
注意:只能设置IP优先级,不能支持DSCP
例一:
1、对VOIP流量设定IP优先级为5
2、对于5.5.5.0网段过来的,访问2.2.2.0的流量设定IP优先级为2
3、对于6.6.6.0网段过来的,访问2.2.2.0的流量设定IP优先级为1
第一步:定义ACL
R1(config)#access-list 100 permit udp any any range 16384 32767
R1(config)#access-list 101 permit ip 5.5.5.0 0.0.0.255 2.2.2.0 0.0.0.255
R1(config)#access-list 102 permit ip 6.6.6.0 0.0.0.255 2.2.2.0 0.0.0.255
第二步:定义route-map并打标记
R1(config)#route-map PBR 10
R1(config-route-map)#match ip address 100
R1(config-route-map)#set ip precedence 5
R1(config)#route-map PBR 20
R1(config-route-map)#match ip address 101
R1(config-route-map)#set ip precedence 2
R1(config)#route-map PBR 30
R1(config-route-map)#match ip address 102
R1(config-route-map)#set ip precedence 1
第三步:调用
R1(config)#interface s0
R1(config-if)#ip policy route-map PBR
CBMARKING
例二:
1、对VOIP流量,给予IP优先级5
2、对于telnet流量,给予IP优先级4
3、对于来自172.16.1.0的流量,给予IP优先级2
步骤:
1、定义ACL
R1(config)#access-list 100 permit udp any any range 16384 32767
R1(config)#access-list 101 permit tcp any any eq 23
R1(config)#access-list 102 permit ip 172.16.1.0 0.0.0.255 any
2、定义类别映射表
R1(config)#class-map [match-any|match-all] VOIP
R1(config-cmap)#match access-group 100
R1(config)#class-map [match-any|match-all] TELNET
R1(config-cmap)#match access-group 101
R1(config)#class-map [match-any|match-all] NETWORK
R1(config-cmap)#match access-group 102
3、定义策略映射表
R1(config)#policy-map XWX
R1(config-pmap)#class VOIP
R1(config-pmap-c)#set ip precedence 5
R1(config-pmap)#class TELNET
R1(config-pmap-c)#set ip precedence 4
R1(config-pmap)#class NETWORK
R1(config-pmap-c)#set ip precedence 2
4、调用
R1(config)#int s0
R1(config-if)#service-policy input XWX
#show policy-map
#show class-map
#show policy-map interface
class-map默认是match-all
例三:
对于来自s1接口的流量,给予IP优先级1
R1(config)#class-map [match-any|match-all] INTER
R1(config-cmap)#match input-interface s1 还可以匹配入站接口
R1(config)#policy-map XWX
R1(config-pmap)#class INTER
R1(config-pmap-c)#set ip precedence 1
调用在出口
R1(config)#int s0
R1(config-if)#service-policy input XWX
NBAR(Network-Based Application Recognition基于网络的应用识别)
基于ACL的分类使用数据包的第3层和4层信息来对数据包进行分类。
NBAR可以根据第7层信息来对数据帧进行分类。
在定义class-map时使用match protocol命令时,就是使用了NBAR
例一:
在路由器入口,对于telnet流量,给予优先级3
配置NBAR:
1、开启cef
R1(config)#ip cef
2、定义类别映射表
R1(config)#class-map [match-any|match-all] TELNET
R1(config-cmap)#match protocol telnet 区别就在这里
3、定义策略映射表
R1(config)#policy-map XWX
R1(config-pmap)#class TELNET
R1(config-pmap-c)#set ip precedence 3
4、调用
R1(config)#int s0
R1(config-if)#ip nbar protocol-discovery
R1(config-if)#service-policy input XWX
注意事项:
使用NBAR,必须先启用CEF特性
config)#ip cef
使用NBAR,接口模式下必须打开 (match 字段中有protocol时就表示使用了NBAR)
ip nbar protocol-discovery 必须在接口下开启这一命令
R1(config)#ip nbar port-map http tcp 80 8080 指定http协议对应的端口,不仅仅是默认的,还可以扩展
例二、禁止访问新浪、禁止下载JPG图片
class-map match-any DROP
match protocol http host www.sina.com.cn 过滤本网站的流量
match protocol http url *.jpg|*.gif 还可以抓网页上的图片
R1(config)#policy-map XWX
R1(config-pmap)#class DROP
R1(config-pmap-c)#drop
R1(config)#int s0
R1(config-if)#service-policy input XWX
PDLM(packet description language module)
包描述语言模块,一种扩展的技术,可以让路由器直接对某种应用程序流量或新的协议流量进行识别,而不需要更换IOS或重启路由器。PDLM模块由cisco的工程师开发,需要先下载进flash中,再进行加载。
例三:
在网络中过滤掉BT流量
R1(config)#ip nbar pdlm bt.pdlm -------灌入抓BT的PDLM。装入之后就可以在class map中调用了
R1(config)#class-map match-any DROP
R1(config-cmap)#match protocol pdlm bt
R1(config)#policy-map XWX
R1(config-pmap)#class DROP
R1(config-pmap-c)#drop
R1(config)#int s0
R1(config-if)#service-policy input XWX
----------------------------------------------------------------------------------
----------------------------------------------------------------------------------
排队技术
从三个步骤上来学习:
1、分类
2、加队
3、调度
FIFO:first in first out queuing 先进先出队列
分类:不对报文进行分类
加队:按数据包到达的先后顺序进行加队,按尾丢弃原则丢弃。
调度:按数据包到达的先后顺序进行出队
·FIFO(First In First Out) 排队是一种经典的分组传输算法。
分组的传输顺序与接收顺序相同。现今仍是大部分接口的默认设置。(大于2M的基本都是)
默认2M以下都是WFQ
R1(config-if)#no fair-queue 在接口启用FIFO
show interface e0 查看
FIFO输出队列的缓存中默认只容纳40个包,可以修改。
R1(config-if)#hold-queue 50 out
PQ:优先级队列
共有四个队列,分为四个优先级别,默认的流量都是normal
优先级分类:1high 2medium 3normal 4low 默认所有流量都走normal队列
加队:在每一个队列中还是按照fifo的原则加队,按尾丢弃原则丢弃。
调度:只要高优先级有流量就发高优先级的,只到高优先级的数据发完再发低优先级的数据,这样就有可能造成低优先级的数据无带宽可用。
实验:
要求在路由器的出接口将telnet流量放入high队列 将icmp流量放入medium队列
Access-list 100 permit icmp any any
R1(Config)# priority-list 1 protocol ip high tcp telnet 将telnet流量的优先级置为high
R1(Config)# priority-list 1 protocol ip medium list 100 调用访问列表将icmp的优先级置为normal
R1(Config-if)#priority-group 1 接口下调用
priority-list 1 queue-limit 22 44 66 88 定义每一个队列的座位数,队列1为22个,队列4为88个
priority-list 1 interface s0 [high|medium|normal|low] 按接口来进行分类,也就是说把一个接口来的数据都放进一个队列,太过粗略
priority-list 1 default [high|medium|normal|low] 设置默认
Show int e0 看每一个队列有多少个座位,也就是能容纳多少个包
Show queueing (看所有队列)
Show queueing priority
Debug priority 再使用telnet和ping来测试
CQ Custom queue
分类:1~16队列 再加上一个优先队列0级队列 共17个队列 0级和其它级的关系相当于PQ
加队:自定义加队,不同的流量加不同的队列。在每一个队列中还是按照fifo的原则加队,按尾丢弃原则丢弃。
调度:轮循,第一个传完就传第二个,默认1500个字节,可以修改每个队列的传输字节数
先有1000个字节,再来1000,还是会传
例:将VOIP流量设为优先队列,将telnet流量置为队列1,将ICMP流量置为队列2
access-list 100 permit udp any any range 16384 32767
access-list 101 permit icmp any any
R1(Config)# queue-list 1 protocol ip 0 list 100
R1(Config)# queue-list 1 protocol ip 1 tcp telnet 将telnet流量置为队列1
R1(Config)# queue-list 1 protocol ip 2 list 101
注意:在定义CQ时,最好由小到大一个个来定义,否则可能出错
R1(Config-if)#custom-queue-list 1 接口下调用
R1(Config)# queue-list 1 queue 0 byte-count 800
R1(Config)# queue-list 1 queue 1 byte-count 1600 设置本队列每次可传的字节数
R1(Config)# queue-list 1 queue 1 limit 50 设置本队列的座位数
show queueing custom
Debug custom-queue
show interface e0/0
扩大优先级队列的范围 :
R1(Config)#queue-list 1 lowest-custom 1 不推荐打0 一般打2 这样的话队列0和队列1同其它队列就相当于是PQ的关系
默认没有分类的流量走的是低级队列的第一个队列。默认就是走1级队列。
WFQ(Weighted Fair Queuing) 加权公平队列(基于流的)
分类标准:按流来分,而不是按类来分
2层 源和目标的mac地址
3层 源和目标的ip地址,还有协议类型
4层 源和目标的端口号
流的五元组:源IP、目标IP、源端口号、目标端口号、协议
·WFQ算法将数据流划分成流,这是根据分组报头中的地址实现的。
源/目标网络地址(MAC地址)(套接字)(DLCI)
加队:默认总共只有256个队列,共享缓存,统一调度座位
CDT:congestive discard threshold 缓存中容纳包的下限
当缓存中的数据包小于这个值时,不采取任何限制措施
当缓存中的数据包大于这个值时,采用以下方法来限制后续数据包:
1、如果后续数据包属于最长队列,则被drop
2、如果后续数据包不属于最长队列,则直接将这个包加入
HQO:hold-Queue out limit 缓存中容纳包的上限
如果缓存中的数据包超过HQO值,又来了一个包,则采取以下措施:
1、如果这个包属于最长队列,则被drop
2、如果这个包不属于最长队列,则去掉最长队列中的一个包,再将这个包加入其所属队列
调度:
·基于流的WFQ在传输数据之前,将各个会话的分组放到公平队列中。
·WFQ给每个数据包指定一个权重(also called finish time),权重决定了队列中分组的传输顺序。权重小的数据包得到优先传送,权重是根据公式得到的,FT和SN算法
·WFQ在调度时首先传输权重小的分组。包的尺寸越小,其权重也就越小。所以小尺寸的包往往被优先传送。
·小容量流量发送后,各大容量共享余下的链路带宽。
·对于有优先级的包的处理:要计算其权重的时候会使用其虚拟包大小来计算。
virtual packet size=real packet/(ip precedence+1)实际上等于减小了权重
虚拟包大小=实际包大小/(ip优先级+1)
从以上公式可以看出:优先级越大,计算出的权重越小
·WFQ可确保每个数据报都能占用适当的带宽。
大小相同的文件传输将获得相同的带宽,而不是先到的文件占用大量带宽。
·WFQ给每个会话分配一个队列,队列优先级分7种。
配置:
R2(config-if)#fair-queue (接口启用WFQ) (s口默认是开启的,E口默认是FIFO)
R2#show interfaces ethernet 0/0
....Queueing strategy: weighted fair
·速率不超过E1(2.048Mbps)的Serial口默认使用WFQ。
在使用X.25或压缩PPP的Serial,WFQ被禁用。
E3/T3 (34M/45M)的WAN接口和Serial不支持WFQ。
修改默认的队列数:
R2(config-if)#fair-queue 256 512 6 注意最后这一参数表示为RSVP预留的队列数
CDT 队列数
R2(config-if)#hold-queue 2000 out 修改允许的座位数HQO值,默认最大是1000
show queueing interface
show queueing fair
Link queue:为系统保留的
Reserved queue:保留队列,为RSVP保留的
CBWFQ(Class-Based Weighted Fair Queuing)
·CBWFQ拓展了标准WFQ的功能,支持用户自定义的数据流类别。
可以根据多种条件来定义数据流类别。(协议/ACL/输入接口)
CBWFQ最多只有64个类别,默认每个队列中能缓存64个包。
·CBWFQ给每个类别(而不是流)指定权重,它与分配给类别的带宽呈反比。
·默认情况下,分配给所有类别的带宽总和不能超过接口可用带宽的75%。
余下的25%用于传输控制数据流和路由选择数据流。
实验一:
Voip 30%
Http 20%
Other ......25%
1、分类:
R1(config)#class-map voip
R1(config-)#match ip rtp 16384 16383
R1(config)#access-list 111 permit tcp any any eq www
R1(config)#class-map http
R1(config-)#match access-group 111
2、策略:
policy-map CBWFQ
class voip
bandwidth percent 30 percent参数代表总带宽的百分比,remaining参数代表可用带宽的百分比
class http
bandwidth percent 20
class class-default 设置其它流量占用20%带宽
bandwidth percent 25
3、调用:
service-policy output CBWFQ 调用
还可以在最后一个队列中单独使用WFQ,用了后,就不能指定带宽了
policy-map CBWFQ
class class-default
fair-queue
max-reserved-bandwidth 100 这个值默认是75%,如果你想用到100%,必须打上这一命令
实验二:
·需求:普通199.1.1.0/24 ->20%
Voice (Critial)->50% VOIP的流量已经被标记了优先级5
Other ->30%
1)定义普通用户的流量:
access-list 1 permit 199.1.1.0 0.0.0.255
2)将前2种流量放入Class-map:
class-map match-all VOICE
match ip precedence 5 将优先级为5的包找出来
class-map match-all NORMAL
match access-group 1
3)为3种流量设定百分比:
policy-map CBWFQ
class NORMAL
bandwidth percent 20
class VOICE
bandwidth percent 50
class class-default
bandwidth percent 30
4)在接口调用:
interface Serial0/0
max-reserved-bandwidth 100
(因为默认是只能使用总带宽的75%,如果想用所有带宽,必须使用这一命令,对所有带宽进行划分)
service-policy output CBWFQ
默认情况下,带宽的25%用于网络控制流量,只有75%用于数据的传输
R2#show class-map
R2#show policy-map
R2#show policy-map interface
LLQ(Low Latency Queuing)在WFQ的基础上增加了一个优先队列
·CBWFQ虽然能够为各种类别的流量提供带宽的保证,但却不能提供低延迟的传输保证。
·低延迟队列:LLQ将绝对优先队列技术应用于CBWFQ,能够提供低延迟的传输保证。从而缓和了语音会话的抖动。绝对优先队列主要被用来处理对延迟敏感的数据(如语音)。
使用这种LLQ特性后,将首先发送对延迟敏感的数据,也就是LLQ中的数据。这种数据发送完毕后才发送其他队列中的分组。
·虽然可以将多种不同的实时数据流加入到Priority队列中,但Cisco建议只将语音流加入到这种队列中。
例一:
policy-map WAN-EDGE
class VOICE
priority percent 33 设定语音流量占用33%的带宽,并放入LLQ队列
class CALL-SIGNALING
bandwidth percent 20
class MISSION
bandwidth percent 20
class class-default
fair-queue 对其它的流量应用WFQ
例二:
policy-map WAN-EDGE
class VOICE
priority 540 指定语音流量占用540K带宽
class VIDEO
priority 460 指定视频流量占用460K带宽
class CALL-SIGNALING
bandwidth percent 2
class MISSION
bandwidth percent 20
class class-default
fair-queue
例三:
policy-map WAN-EDGE
class VOICE
priority percent 33
class NISSION
bandwidth remaining percent 50 剩余百分比语句,划分去掉优先级队列所占带宽之后的带宽
class class-default
bandwidth remaining percent 50
可用带宽=实际带宽*0.75
其它队列的可用带宽=实际带宽*0.75-分配给语音的带宽
<CBWFQ/WFQ的对比>
与基于流的WFQ相比,CBWFQ具有以下优点:
·带宽分配:CBWFQ能够给每个类别分配带宽,最多可以定义64个类别
WFQ只能根据7种IP优先级来对数据流进行分类。
·粒度更细、可扩展性更高:CBWFQ可根据多种条件来定义类别。
<RTP优先队列>队列中真正的老大
RTP优先队列可以和WFQ或CBWFQ结合使用
RTP优先队列只能为UDP流量服务
这个队列在接口下直接配置,实际上就是在接口下划出一部分带宽给特定UDP流量来使用,实际上主要是为VOIP流量服务
·RTP(Real-Time Protocol):实时传输协议
RTP传输多媒体应用的数据流,包括IP语音和视频(对延迟比较敏感的)
语音进程的端口号:16384-32767之间的偶数 奇数的是控制端口,偶数的是数据端口
R1(config-if) #ip rtp priority 16384 16383 50 最后这个参数是分配的带宽值
WRRQ(Weighted Round-Robin加权轮询队列)
主要用于交换机的技术
3550每一个端口下都有四个队列,每个队列默认占用25%的带宽,采用轮询的方式来调度。可以把第四个队列配置成绝对优先队列,只有绝对优先队列中的数据处理完成后,才会传输其它队列的数据。
配置实例:
需求:
将优先级为0、1的数据帧放入队列一中
将优先级为2、3的数据帧放入队列二中
将优先级为4、5的数据帧放入队列三中
将优先级为6、7的数据帧放入队列四中
SW1(config)#mls qos 启用命令,必须打上
SW1(config-if)#wrr-queue cos-map 1 0 1 定义映射表,将cos 0和1映射到队列1
SW1(config-if)#wrr-queue cos-map 2 2 3
SW1(config-if)#wrr-queue cos-map 3 4 5
SW1(config-if)#wrr-queue cos-map 4 6 7
SW1#sh mls qos int f0/1 queueing 查看
可以配置四个队列的权值,使其得到不同的服务
SW1(config-if)#wrr-queue bandwidth 1 2 3 4
队列1得到10%的带宽
队列2得到20%的带宽
队列3得到30%的带宽
队列4得到40%的带宽
SW1(config-if)#priority-queue out 启用绝对优先队列
配置入站信任
SW1(config-if)#mls qos trust cos
SW1(config-if)#mls qos trust dscp
SW1(config-if)#mls qos trust ip-precedence
SW1(config-if)#mls qos trust device cisco-phone
当信任入站的COS和IP优先级时,会映射到相应的内部DSCP值,在交换机上根据内部的DSCP值来决定相应的出站QOS策略。
-----------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------
限速策略:
可分为两种:policing和shaping
policing的特点:会将超出的流量直接drop掉,所以接口的流量输出图形是锯齿状,不平滑的。但是工作原理简单,占用系统资源少。
shaping的特点:会将超出的流量先缓存起来,等到有可用带宽的时候,再发送出去,所以接口的流量输出是非常平滑的,但是占用的系统资源比较多。
Shaping mechanisms:
Generic traffic shaping (GTS)通用流量整型
Frame Relay traffic shaping (FRTS)帧中继流量整型
Class-based shaping
Policing mechanisms:
Committed access rate (CAR)
Class-based policing
令牌桶理论:
TC:time comminted 间隔时间,也就是放令牌的周期时间。
BC:burst committed 承诺突发量,也叫正常突发量,单位bit
Be:burst excess 超出的突发量,相当于存钱罐,可以将超出的令牌存起来。
CIR:commited infromation rate,单位Kbps。承诺信息速率
TC=BC/CIR
每Tc秒向桶中放入Bc这么多的令牌
CIR承诺信息速率,也就是你实际想要控制的速率
Shaping mechanisms:
GTS Building Blocks通用流量整型
GTS Overview
GTS is multiprotocol.
GTS uses WFQ for the shaping queue. 默认是WFQ,不能改
GTS can be implemented in combination with any queuing mechanisms:可以配合以下的软件Q使用
FIFO queuing
Priority queuing (PQ)
Custom queuing (CQ)
Weighted fair queuing (WFQ)
GTS works on output only. 只能工作在出方向
GTS Implementation
Traffic-shape group shapes outbound traffic matched by the specified access list.
Several traffic-shape group commands can be configured on the same interface.
The traffic-shape rate and traffic-shape group commands cannot be mixed on the same interface.
A separate token bucket and shaping queue is maintained for each traffic-shape group command.
Traffic not matching any access list is not shaped.
configuration GTS
例一:
要求将接口速率限制为64K
R1(config-if)#traffic-shape rate 64000 8000 8000 1000 ---------- 启用GTS,设置CIR为64000。
CIR Bc Be buffer(shape Q中的座位数)
关键是CIR的值,其它会自动计算,可以不指定
#show traffic-shap serial 0
例二:
对于1.1.1.0网段的用户访问2.2.2.0网段进行限速,限为64K
R1(config)#access-list 100 permit ip 1.1.1.0 0.0.0.255 2.2.2.0 0.0.0.255
R1(config-if)#traffic-shape group 100 64000
#show traffic-shape
#show traffic-shape queue 查看shape队列
GTS帧中继适应性整型(GTS Frame Relay Congestion Adaptability)
FECN (Forward explicit congestion notification) 前向显示拥塞通告 帧中继交换机通告receive方
BECN (Backward explicit congestion notification) 后向显示拥塞通告 交换机通告send方
CLLM (Consolidated link layer management)
DE(Discard Eligibility)bit
DE:一旦帧中继有一个DE位置位,而且发生拥塞,那么就丢掉DE位的帧。
GTS在帧中继中可以做适应性的整型,如果收到BECN就降低到3/4,如收不到则回升。
注意:在做帧中继适应性整型命令之前,首先要做正常的GTS流量×××,说明接口的限制速率。
if)#traffic-shape adaptive [bit-rate] ---------- 启用帧中继适应性整型命令,还可以在这里设置当发生拥塞时,最少可低至多少流速
if)#traffic-shape adaptive 12800 当发生拥塞时,最少可低到12800bit/S
show traffic-shape 可以查看到BECN显示出来了
traffic-shape fecn-adapt ----- 在接收方配置,在某些情况下,发过来的是单向流量,没有回包,产生拥塞时,无法通知发送方,用这一命令可让接收方在收到FECN置位的数据帧后发送一个测试信息,用来通知发送方产生了拥塞。
例三:
要求将路由器的出接口速率限定为256K,并启用帧中继的适应性×××,一旦收到BECN,则可将速率最低降到64K。
interface s0/0
traffic-shape rate 256000
traffic-shape adaptive 64000
FRTS Overview 帧中继流量整型 可以在帧中继中为每一个PVC管道做整型
FRTS is multiprotocol.
在接口上启用了FRTS后,不能使用WFQ,只能是FIFO,CISCO的胶片上有错误
FRTS can use one of these queuing mechanisms as the shaping queue:shap Q可以选以下任一种
Priority queuing (PQ)
Custom queuing (CQ)
Weighted fair queuing (WFQ)
FRTS can be implemented only in combination with only FIFO on the interface.
FRTS works on output only. 也只能工作在出方向
配置:
第一步:
R1(config-if)#frame-relay traffic-shaping 在接口上启用FRTS
第二步:
在帧中继中必须在map-class中去改CIR
R1(config)#map-class frame-relay FRTS
R1(config-map-class)#frame-relay traffic-rate average[peak] 看下面的示例
R1(config-map-class)#frame-relay traffic-rate 64000 80000 如果两个值相同,等于没有Be
R1(config-map-class)#frame-relay traffic-rate 64000 64000 这种情况等于没有Be
另一种写法
R1(config-map-class)#frame-relay [in|out] cir 64000 分别指定,以下三条命令等于上面一条
R1(config-map-class)#frame-relay [in|out] BC 8000
R1(config-map-class)#frame-relay [in|out] BE 8000
show traffic-shaping
第三步:
R1(config-if)#frame-relay class FRTS 在接口下调用,对本接口下的所有VC均有效
在一条PVC中单独调用:
R1(config-if)#frame-relay interface-dlci 104
R1(config-if-dlci)#class FRTS 在PVC下单独调用和修改
也可以做适应性的流量×××:
R1(config)#map-class frame-relay FRTS
R1(config-map-class)#frame-relay adaptive-shaping becn ----------- FR中启用适应性的整型,也就是让路由器根据收到的BECN量调整其发送速率。单独针对一条PVC起效
R1(config-map-class)#frame-relay cir 128000 适应性整型时指定cir
R1(config-map-class)#frame-relay minicir 16000 适应性整型的最低速率,通常和上一条命令结合用。
FRTS的shape queue默认也是WFQ
EIR=Be/Tc
实验:
需求:R1通过两条PVC连接了R4和R5,现要求对这两条PVC做限速。
对于PVC104,将其速率限制为256K。
对于PVC105,将其速率限制为128K。并启用帧中继适应性流量×××,最小速率不低于32K。
map-class frame-relay WOLF
frame-relay traffic-rate 256000 256000
!
map-class frame-relay PVC104
frame-relay traffic-rate 256000 256000
!
map-class frame-relay PVC105
frame-relay cir 128000
frame-relay mincir 32000
frame-relay adaptive-shaping becn
interface Serial1/0
encapsulation frame-relay
frame-relay traffic-shaping
frame-relay interface-dlci 102
class PVC102
frame-relay interface-dlci 103
class PVC103
CBshaping
CBshaping可以对出接口的流量进行分类,然后对每一类流量进行限速。
在CBshaping中可以指定平均速率,也可以指定最大速率。
例:
1、对VOICE流量,设定平均速率为64K
2、对于1.1.1.0网段访问2.2.2.0网段的流量,设定最大速率为32K
第一步:定义ACL,抓出流量
access-list 100 permit udp any any range 16384 32767
access-list 101 permit ip 1.1.1.0 0.0.0.255 2.2.2.0 0.0.0.255
第二步:定义class-map,将流量分类
class-map VOIP
match access-group 100
class-map NET
match access-group 101
第三步:定义策略,对不同类别的流量给予不同的速率
policy-map CBSHAPE
class VOIP
shape average 64000
class NET
shape peak 32000
第四步:接口下调用
int e0/0
service-policy output CBSHAPE
show policy-map interface s0
shape max-buffers 2000 -------- 修改的buffers数,默认值为1000。
Policing mechanisms:
CAR可以做在进方向也可以做在出方向。
可以单独针对某一个流量作限速,还可决定拿到牌的和没拿到牌的分别作什么动作
-Transmit
-Continue
-Drop
CAR没有BE的情况下:
If the number of bytes in the packet is less than or equal to(<=)the number of tokens in Bucket1,the packet conforms,CAR removes tokens from Bucket1 equal to the number of bythes in the packet and performs the action for packets that conform
CAR中有Be的情况下:
DA-actual debt 真实债务,向第二个桶所借的实际令牌数,DA是累加的,直到新令牌放进来
DC-compounded debt 符合债务
DC=原DC+当前DA
当DC<=Be时,这个包就属于comform-action
当DC>Be时,这个包就属于exceed-action,同时将DC置0
例一:对所有流量都控制,没有分类
if)#rate-limit input 64000 1500 2000 conform-action transmit exceed-action drop
#show interface rate-limit
shaping中BC和BE是用单位bit
例二:对一类特定的流量做限制
要求在出接口做 CAR
speed:64Kpbs
Traffic:192.168.1.0/24 any udp 4000 5000(端口号4000-5000)
Token:prec=3
NO Token:Drop
access-list 100 permit udp 192.168.1.0 0.0.0.255 any range 4000 5000
int s0/0
rate-limit output access-group 100 64000 1500 2000 conform-action set-prec-transmit 3 exceed-action drop
CIR Bc Bc+Be 拿到令牌的 设置优先级 没令牌的drop掉
#show interface rate-limit
注意:这里Bc和Be的单位是BYTE,切记,在shaping中,单位是bit,在policy中,单位是byte
set-prec-transmit 如果这里用的是set-prec-continue 则表示可以继续向下找更优的语句
例三:说明continue的作用
要求:
1、对于接口的VOIP流量要求控制在128K,拿到令牌的,直接传递,没牌的向下匹配
2、将出接口的总速率控制在640K,拿到令牌的传递,其他的drop
access-list 100 permit udp any any range 16384 32767
rate-limit output access-group 100 128000 1500 2000 conform-action transmit exceed-action continue
rate-limit output 640000 1500 2000 conform-action transmit exceed-action drop
CBpolicing
-conforms 拿到令牌的就是conforms
-exceeds 在只有一个桶的情况下,没拿到令牌的就是exceeds,两个桶的情况下,借了第二个桶的令牌的就是exceeds
-violates 在有两个桶的情况下才有用,当两个桶的令牌都用完了,再来的数据包就是violates一类了
例:
对于VOICE流量,设传输速率为64K,拿到令牌的设为EF优先级,并传输,借用令牌的,只作为普通包传输,没牌的drop掉。
第一步:
access-list 100 permit udp any any range 16384 32767
第二步:
class-map VOIP
match access-group 100
第三步:
policy-map WOLF
class VOIP
police cir 64000 conform-action set-dscp-transmit ef exceed-action transmit violate-action drop 拿到令牌的设为ef优先级,借用令牌的只作为普通包传输,没牌的丢掉
第四步:
int s0/0
service-policy input WOLF 调用
show policy-map interface s0/0
-----------------------------------------------------------------------------------------
WRED(Weighted Random Early Detection)
·TCP中存在一个慢启动和拥塞避免机制,当检测到网络中发生冲突的时候,会大幅度降低发送速率
·当网络中发生拥塞,有可能同时丢失多个TCP连接的数据包,造成多个TCP连接同时进入慢启动状态,这被称为TCP全局同步
·解决方法:可以在网络发生拥塞之前,就主动丢弃一部分TCP数据包,防止出现尾丢弃,从而避免进入慢启动
·默认设置尾丢弃是一种被动的队列管理机制。
主动队列管理机制在拥塞发生前就丢弃分组。
·基本思想:确保队列长度位于最小阈值和最大阈值之间,对于不同类别的数据流采用不同丢弃策略。
丢弃概率:1/10
R2(config-if)#random-detect 启用开关
random-detect precedence 6 45 50 5 设优先级为6的包在队列填充到45和50之间时开始丢弃
5表示按1/5的概率丢弃
random-detect dscp-based
show queueing random-detect
random-detect exponential-weighting-constant N 默认是9
N值越大,WRED就越不敏感,最后导致失效,N值越小,会导致包被丢掉的概率越大
注意:默认情况下,启用WRED后只能使用FIFO
FB-WRED
使用流来分类,默认最多可分256个流
int s0/0
random-detect flow 开启开关
random-detect flow count 256 设定可分的流的数目
show queueing random-detect
CBWRED即可对TCP,也可对非TCP流量,必须结合CBWFQ来做
例:将优先级为3、4 的数据包分为一个类别GOLD、带宽30%
当队列中数据包达到20个时,以1/10的概率丢弃优先级为3的包,达到40个时尾丢弃
当队列中数据包达到30个时,以1/10的概率丢弃优先级为4的包,达到40个时尾丢弃
将优先级为1、2 的数据包分为一个类别SILVER、带宽20%
当队列中数据包达到15个时,以1/10的概率丢弃优先级为1的包,达到35个时尾丢弃
当队列中数据包达到20个时,以1/10的概率丢弃优先级为2的包,达到35个时尾丢弃
对于默认队列,启用WFQ,WRED
class-map GOLD
match ip precedence 3 4
class-map SILVER
match ip precedence 1 2
policy-map POLICY1
class GOLD
bandwidth percent 30
random-detect
random-detect precedence 3 20 40 10
random-detect precedence 4 30 40 10
class SILVER
bandwidth percent 20
random-detect
random-detect precedence 1 15 35 10
random-detect precedence 2 20 35 10
class class-default
fair-queue
random-detect
show policy-map
show policy-map interface s0/0
以上的例子是基于优先级来做的,如果基于DSCP,开启的命令是不一样的
policy-map POLICY1
class GOLD
bandwidth percent 30
random-detect dscp-based
random-detect precedence 31 20 40 10
random-detect precedence 41 30 40 10
class SILVER
bandwidth percent 20
random-detect dscp-based
random-detect precedence 11 15 35 10
random-detect precedence 21 20 35 10
class class-default
rair-queue
random-detect dscp-based
------------------------------------------------------------------------------------------
QPPB:QoS Policy
router bgp 300
table-map mark-prec4-as400
!
route-map mark prec4-as400 10
match as-path 1
set ip precedence 4
!
route-map mark prec4-as400 20
set ip precedence 0
!
ip as-path access-list 1 permit 400
!
interface serial 0
bgp-policy destination ip-prec-map
!
----------------------------------------------------------------------
压缩
int s0/0
ip tcp header compression TCP的头部压缩
show ip tcp header compression
int s0/0
ip rtp header-compression RTP的头部压缩
show ip rtp header-comression
在帧中继接口下:
int s0/0
frame-relay ip tcp header-compression TCP头部压缩
frame-relay ip rtp header-compression RTP头部压缩
其它内容
------------------------------
if)#no fair-queue(改为FIFO队列)
if)#hold-queue 100 out(更改缓存大小)
Priority Queuing
priority-list