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请求的许可控制。
缺点:不具有可扩展性,并且需要网络设备不断的发送信号,本身占用带宽。

配置:
QoS_第1张图片

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通用流量整型

 QoS_第2张图片

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

 QoS_第3张图片


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

实验:

QoS_第4张图片

需求: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