QoS(Quality of Service,服务质量)即针对各种应用的不同需求,为其提供不同的服务质量。本质是降低一部分应用的质量,提高另一部分应用的质量。 QoS(分类、标记、拥塞管理、拥塞避免)是在链路出现了拥塞或者拥塞前使用的机制。
QoS服务模型
- 尽力而为:没有做服务保障,遵循先进先出的原则。
- 综合服务:如TE(流量工程),做了服务保障,但是服务保障是定制的:
- 对每一条流量分配固定的带宽资源,资源无法回收。
- 每一条流量都需要精细的匹配(每种业务对应不同的流量,都需要做匹配)。
- 对于业务匹配的颗粒度太细了,不能实现所有的业务匹配。
- 区分服务:基于类的流量匹配。 将网络中的流量分成多个类,然后为每个类定义相应的处理行为,使其拥有不同的优先转发、丢包率、时延等。 区分服务对于流量存在的特征进行匹配,可以是相同的SIP或相同DIP或相同服务协议。
特征主要是根据流量的标记来进行的,比如IP报文头部中存在的ToS字段,比如802.1Q数据帧存在的PRI字段(需要有vlan标签,不是以太网II数据帧)。
QoS基本概念
::: warning 只能在流量的入方向调用traffic-policy做匹配打标记。 :::
流量分类
1.复杂流分类: 在设备接收流量的入方向,使用五元组(源地址、源端口号、协议号码、目的地址、目的端口号)定义一条流量 需要匹配的每一条流量都要做五元组定义 2.简单流分类: 通过流量已包含的标记进行二次匹配 根据标记匹配出一类流量进行操作配置(限速、是否允许转发等)
::: tip
复杂流分类在边界设备使用ACL、traffic policy匹配流量。 简单流分类直接匹配已经做好的标记值。 ::: 2. 流量标记(使用优先级)
VLAN报文中802.1P:3个bit,定义值为0-7,只在二层VLAN网络中使用,无法做到端到端的通信。
MPLS报文中EXP:3个bit,定义值为0-7,只在MPLS网络中使用,无法做到端到端的通信。
IP报文中PRI。
不同的报文使用不同的QoS优先级。* ::: warning 802.1P和EXP的标记生效范围都有限,通常使用IP做标记。 ::: ::: tip IP报文tos字段共8bit。
DSCP字段包含了IP PRI字段:tos 8bit中,前3bit为IP PRI字段,前6bit为DSCP字段。* ::: IP报文头部的tos字段:
1.IP PRE:3个bit,定义值为0-7,可以实现端到端的通信 0-7的范围内只有8个优先级值,各种类型的业务不能精确匹配 2.DSCP:6个bit,定义值为0-63,可以实现端到端的通信 支持0-63共64个对应业务信息 DSCP可以使用数字表示,也可以使用关键字表示(有时配置DSCP时只能使用数字输入,而报文中是关键字显示)
DSCP关键字:
1.CS:类别服务(主要用于实现和IP PRE的兼容) CS7 = IPP的7、CS6 = IPP的6、CS5 = IPP的5 。。。(如下外部优先级对应关系图表) CS关键字的数字表示是直接*8,如CS7的数字标识是7*8=56 2.EF:快速转发(一般用于需要低延迟、低抖动、低丢包率的业务) EF = 46 3.AF:确保转发(一般用于需要带宽保证的业务,对于延时、抖动要求不高) AF的关键字的数字表示是8X+2Y,如AF41=8*4+2*1=34 外部优先级对应关系图表中,每一个AF关键字后面的AFXY(如41、42、43等,代表每一个关键字下优先级不同,X相同时,Y值越大越优先。 AF4可以用来承载语音的信令流量。 信令即协议报文。语音优先于信令原因是这里信令是电话的呼叫控制,通话时可以忍受接通前等待几秒钟,但绝不允许在通话时产生中断,即语音要优先于信令。 AF3可以用来承载IPTV的直播流量,直播的实时性很强,需要连续性和大吞吐量的保证。 AF2可以用来承载VOD(视频点播)的流量,相对于直播流量,VOD对实时性要求没那么强,允许时延或者缓冲。 AF1可以用来承载普通上网业务。 4.BE:尽力转发(无需做任何服务保障,是非关键性业务的流量) BE = 0
外部优先级对应关系: 上述优先级值数字表示时最大为7,最小为0。
QoS实验
路由器间建立OSPF邻居后,在流量入方向做匹配
[AR1-acl-adv-3000]acl 3000
[AR1-acl-adv-3000]rule 5 permit ip destination 3.3.3.1 0
[AR1-acl-adv-3000]acl 3001
[AR1-acl-adv-3001]rule 5 permit ip destination 3.3.3.2 0
[AR1-acl-adv-3001]acl 3002
[AR1-acl-adv-3002]rule 5 permit ip destination 3.3.3.3 0
::: tip 配置模板化QoS需要用到Traffic Policy工具。 Traffic Policy由Traffic Classifier与Traffic Behavior组成,Traffic Classifier用于匹配数据包,Traffic Behavior用于修改数据包。 :::
配置流量分类时,使用MQC的方式进行匹配。
MQC:模块化的命令行:
traffic classifier:流分类。进行流量分类的定义,主要通过ACL绑定来实现(ACL匹配流量,再将ACL绑定到流分类)
traffic behavior:流行为。进行流量的标记,便于分类
traffic policy:流策略。关联流分类和流行为
::: tip MQC(Modular QoS Command-ine)是模块化QOS命令行,又叫流策略。 指通过将某些具有相同特征的报文划分为类,并为这一类报文提供相同服务的配置方法。 通过配置流策略,用户可以定义报文分类规则匹配需要单独处理的流量,然后将匹配的流量进行相应处理,达到自己想要的效果。 :::
[AR1]traffic classifier 1
[AR1-classifier-1]if-match acl 3000
[AR1]traffic behavior 1
[AR1-behavior-1]remark dscp AF11
[AR1]traffic policy 1
[AR1-trafficpolicy-1]classifier 1 behavior 1
[AR1-GigabitEthernet0/0/1]trust dscp 路由器入方向做标记
[AR1-GigabitEthernet0/0/0]traffic-policy 1 outbound
PC1访问3.3.3.3,为默认转发,标记值CS0: PC1访问3.3.3.1,3.3.3.1为ACL3000匹配,设置了Traffic Policy,标记值改为AF11: 将3.2和3.3的标记值设置为EF和AR41:
[AR1]traffic classifier 2
[AR1-classifier-2]if-match acl 3001
[AR1]traffic behavior 2
[AR1-behavior-2]remark dscp EF
[AR1]traffic classifier 3
[AR1-classifier-3]if-match acl 3002
[AR1]traffic behavior 3
[AR1-behavior-3]remark dscp AF41
[AR1]traffic policy 1
[AR1-trafficpolicy-1]classifier 2 behavior 2
[AR1-trafficpolicy-1]classifier 3 behavior 3
如上在AR1上做了复杂流分类,如果AR2也需要做相同的匹配,不需要使用ACL做匹配,可以通过匹配简单流分类,在入接口做配置:
[AR2-GigabitEthernet0/0/0]trust ? 信任DSCP优先级
8021p Specify trust VLAN 8021p parameters
dscp Specify trust DSCP parameters
exp Specify trust EXP parameters
[AR2-GigabitEthernet0/0/0]trust dscp
[AR2]traffic classifier 1
[AR2-classifier-1]if-match dscp ef 如果DSCP的标记为EF则被匹配
[AR2]traffic behavior 1
[AR2-behavior-1]remark dscp AF22 如果被匹配到,将标记由EF改为A22
[AR2-GigabitEthernet0/0/1]traffic-policy 1 outbound
查看AR2匹配EF标签的数据后更改的标签信息:
::: tip 复杂流分类是在边界路由器使用ACL匹配出每一条流量,针对每一条流量做Traffic Policy匹配。 简单流分类直接对做好标记的流量进行标记匹配。 :::
单臂路由携带vlan,vlan中携带二层优先级,路由器匹配交换机发出的报文的vlan优先级。
[SW1]vlan 10
[SW1-GigabitEthernet0/0/1]port link-type access
[SW1-GigabitEthernet0/0/1]port default vlan 10
[SW1-GigabitEthernet0/0/2]port link-type trunk
[SW1-GigabitEthernet0/0/2]port trunk allow-pass vlan 10
[SW1-GigabitEthernet0/0/3]port link-type trunk
[SW1-GigabitEthernet0/0/3]port trunk allow-pass vlan 10
AR4配置单臂路由
[AR4]vlan10
[AR4]int gi 0/0/0.1
[AR4-GigabitEthernet0/0/0.1]dot1q termination vid 10
[AR4-GigabitEthernet0/0/0.1]ip ad 192.168.1.254 24
[AR4-GigabitEthernet0/0/0.1]arp broadcast enable
AR7配置单臂路由
[AR7]vlan10
[AR7]int gi 0/0/0.1
[AR7-GigabitEthernet0/0/0.1]dot1q termination vid 10
[AR7-GigabitEthernet0/0/0.1]ip ad 192.168.1.10 24
[AR7-GigabitEthernet0/0/0.1]arp broadcast enable
起始时默认优先级值为0:
PC2访问时,在交换机上使用流量匹配,发出时执行参数更改:
[SW1-acl-adv-3000]rule 5 permit ip source 192.168.1.1 0 destination 192.168.1.254 0
[SW1]traffic classifier 1
[SW1-classifier-1]if-match acl 3000
[SW1]traffic behavior 1
[SW1-behavior-1]remark 8021p ?
INTEGER<0-7> VLAN 802.1p value 更改优先级值
inner-8021p Inner vlan 802.1p 内部优先级
<cr>
[SW1-behavior-1]remark 8021p 6
[SW1]traffic policy 1
[SW1-trafficpolicy-1]classifier 1 behavior 1
[SW1]int gi 0/0/2 出接口做配置,方便通过抓包查看现象
[SW1-GigabitEthernet0/0/2]traffic-policy 1 outbound
[SW1]int gi 0/0/1
[SW1-GigabitEthernet0/0/1]trust 8021p inner 入方向信任内部优先级
[SW1-acl-adv-3000]rule 10 permit ip source 192.168.1.1 0 destination 6.6.6.6 0
AR7访问时,在AR7上使用流量匹配,发出时执行参数更改,交换机只做转发:
[SW1-GigabitEthernet0/0/3]trust 8021p inner
[AR7]acl 3000
[AR7-acl-adv-3000]rule 5 permit ip source 192.168.1.10 0 destination 192.168.1.254 0
[AR7]traffic classifier 1
[AR7-classifier-1]if-match acl 3000
[AR7]traffic behavior 1
[AR7-behavior-1]remark 8021p ?
INTEGER<0-7> VLAN 802.1p value
[AR7-behavior-1]remark 8021p 5
[AR7]traffic policy 1
[AR7-trafficpolicy-1]classifier 1 behavior 1
[AR7]int gi 0/0/0 路由器上做时必须在物理接口上绑定traffic-policy
[AR7-GigabitEthernet0/0/0]traffic-policy 1 outbound
查看PC2访问的DSCP优先级: 查看AR7访问的DSCP优先级: ::: tip 后续AR4、AR5做简单流配置时,需要对input进行更改(以下按照PC2访问AR6为例)。 后续设备做简单流配置时,只需要使用映射表做更改即可,不需要再设置ACL等匹配。 :::
[AR4]int gi 0/0/0.1
[AR4-GigabitEthernet0/0/0.1]trust 8021p override 信任并覆盖802.1p值(配置新的优先级标记替换802.1p)
[AR4]qos map-table dot1p-dscp 使用映射表将(收到的)802.1p优先级dot1p值(在发出时)映射为dscp优先级值,实现Qos优化
[AR4-maptbl-dot1p-dscp]input 0 output 50 AR1入方向收到的802.1p优先级为0,发出时改为50(修改范围0-63)
::: warning 子接口配置trust 8021p时需要添加override参数覆盖写入。 子接口和物理接口同时配置时,优选子接口的配置。 :::
::: warning 如果同时使用MQC和映射表的改变方式修改802.1p的优先级,设备优选MQC设置的值。 :::
[AR5]int gi 0/0/0
[AR5-GigabitEthernet0/0/0]trust dscp override
[AR5]qos map-table dscp-dscp
[AR5-maptbl-dscp-dscp]input 50 output 30
QoS(DiffServ模型下)常用技术和数据处理模型
- 流量限速:即流量监管和流量整形。 通过监督进入网络的流量速率,用来限制流量及其资源的使用,保证更好的为用户提供服务。
- 拥塞避免和拥塞管理:通过配置拥塞管理和拥塞避免,当网络中发生拥塞时,设备按照一定的调度策略决定报文的转发次序,使关键业务得到优先处理,或者主动丢弃报文,通过调整网络流量来解除网络过载。
QoS拥塞管理
拥塞管理: 先转发高优先级的报文。
如果网络中出现了间歇性的拥塞、报文需要优先转发,就需要存在队列机制。
部分场景:
1. 速率不匹配,报文从高速链路,进入低速链路
2. 汇聚链路,多个入方向的链路对应一个出方向链路
拥塞存在的问题:
1.增加了报文的时延和抖动
2.过高的延迟会引发重传
3.网络的吞吐量不稳定
当网络带宽足够使用的情况下,则QoS的拥塞管理(队列机制)没有作用。
队列机制:
1.硬件队列:设备默认的队列(设备本身)
流分类:不存在分类
插入机制:没满就存(满了则存入软件队列)
调度机制:先进先出
2.软件队列:网络出现拥塞,帮助硬件队列实施优先调度
流分类:分类器(分类、打标)
插入机制:没满就存,满了就丢(尾丢弃即拥塞避免机制)
调度机制:通过一些QoS策略将软件队列保存的数据放入硬件队列进行转发
设备中默认存在8个软件队列(0-7)。 每一个队列都有对应的本地优先级值(LP)。 报文优先级对应队列优先级: 如果需要改变对应关系,如将优先级5的报文放入7号队列,使用如下命令修改:
[AR1]qos map-table dot1p-lp
[AR1-maptbl-dot1p-lp]input 5 output 7
如上,队列优先级值可以更简单的将优先级对应队列。 DSCP取值0-63,每8个值对应一个队列优先级值。
拥塞管理的处理
前提:链路出现拥塞,软件队列已经存在。 (默认已经做好了流量分类标记)
1.根据报文携带的优先级值,用优先级值对应LP值(本地优先级),再根据LP值对应队列的值进入队列
2.队列调度机制:根据队列的调度机制来决定不同报文的转发顺序
1.FIFQ:先进先出队列(类似于硬件队列)
没有对报文进行分类,尽力而为
根据报文进行的顺序依次转发,先进先出
优点:实现机制简单,处理速度快
缺点:不能有差别的对待报文,关键业务不能得到保证
2.PQ:优先级队列(又称为SP调度算法)
提供快速转发的业务,适合实时性通信的业务
优点:符合高优先级的业务一定能得到最大程度的保障
缺点:低优先级的业务会饿死
3.RR:轮询队列(每个队列的报文都可以发送一个数据包)
优点:每个队列都能得到带宽
缺点:不能有差别的对待报文,关键业务不能得到保证
4.WRR:加权的轮询队列
在队列调度之前,系统会为每一个队列分配一个权重值,该权重值由管理员手工配置
该权重值的设定是针对每一轮可转发的报文个数
以队列7的权重为一轮数据包转发的标准,当各个队列可转发的报文个数不同时,一轮数据包转发是否结束以队列7为准(默认情况下权重值是相同的)
优点:每一个队列都能得到带宽,体现了区分服务的特点
缺点:当低优先级队列数据包较大时,会造成带宽的波动,低优先级队列占用了更多带宽
5.WFQ:加权的公平队列
在队列调度之前,系统会为每一个队列分配一个权重值(默认情况权重值为队列号+1)
该权重值的设定是针对每一个队列所占用的带宽
将每个队列的权重值除以所有队列的权重值之和,得到百分比乘接口的带宽总量,得到每个队列所占用的带宽值
WFQ的两种匹配方式:
1.按优先级分配权重(如上每个队列单独对应权重值的方式)
优点:按照权重实现公平调度,自动分类
缺点:只能做队列的带宽分配,不能根据业务流量进行带宽分配
2.基于流的分类,其实就是CBQ的BE队列
根据报文的SIP+DIP+协议号+SPort+DPort+tos(优先级)进行hash计算,得到的hash值就是队列号
将不同报文放入hash计算后的不同队列中,所有的hash队列平分高优先级队列分配剩下的带宽
6.CBQ:基于类的加权公平队列
1.为每一个队列分配固定固定带宽值
2.基于类为每一个匹配的流量分配带宽
对于队列中的报文,只有发出的动作,按照分配给队列的带宽转发报文
对于类匹配的报文,根据DSCP优先级值匹配,按照分配给DSCP优先级值的带宽转发报文
CBQ定义了自身所拥有的三种队列:(队列名和DSCP关键字没有关系)
1.EF队列:满足低延时业务(分配的带宽是最大值带宽,即最多可以使用的带宽值)LLQ队列是特殊的EF队列,作用是提供更低延迟的服务
2.AF队列:满足带宽保障业务(分配的带宽是最小值带宽,即最少可以使用的带宽值)
3.BE队列:不需要保障的业务,执行尽力而为的服务,即基于流的WFQ队列,使用剩余带宽,如果满存则丢弃后续的信息
优点:(为每一个队列分配固定带宽)可以支持自定义分类,按照手工配置带宽进行合理分配
(基于类分配带宽)可以直接为每一类业务分配额定的带宽,不进入队列直接进行转发,减少了设备处理不同队列复杂的调度机制
缺点:CBQ没有动态机制,所有只有管理员通过手工配置来实现,对人员操作要求较高
WRR加权轮询队列的简单实现过程: 如上,每一轮查询中,每一个队列轮流发送一个数据包,相应队列的权重每次-1,以队列7为准,等队列7的权重变为0时,第一轮结束。当优先级低的队列权重变为0时就不再转发,等待队列7权重变为0后,第二轮再按照权重值转发。每队列轮流发送数据包过程中,如果遇到低优先级队列有较大数据包的情况,会出现高优先级等待低优先级的情况。
WFQ:加权公平队列的简单实现过程: ::: tip 加权公平队列WFQ调度是按队列权重来分配每个流应占有出口的带宽。 为了使得带宽分配更加公平,WFQ以bit为单位进行调度(bit-by-bit调度模型)。报文出队时,首先让高优先队列中的报文出队并发送,直到高优先队列中的报文发送完,然后发送中优先队列中的报文,直到发送完,接着是低优先队列。 :::
设备设置队列:
[AR1]qos queue-profile 1
[AR1-qos-queue-profile-1]schedule ?
drr Deficit weighted round robin
pq Priority queuing
wfq Weighted fair queuing
wrr Weighted round robin
[AR1-qos-queue-profile-1]schedule wfq ?
INTEGER<0-7> Queue priority, One queue priority value indicates one QoS queue
[AR1-qos-queue-profile-1]schedule wfq 4 to 6
[AR1-qos-queue-profile-1]queue ?
INTEGER<0-7> Queue priority, One queue priority value indicates one QoS queue
[AR1-qos-queue-profile-1]queue 4 weight ?
INTEGER<1-100> Value of weight
[AR1-qos-queue-profile-1]queue 4 weight 20 可以给低优先级的队列设置更大权重
[AR1-qos-queue-profile-1]queue 5 weight 40
[AR1-qos-queue-profile-1]queue 6 weight 60
::: warning WFQ基于流的分类主要用于没有对应标记的流量。 基于流的含义是:流量没有携带任何标记,不能进入任何队列(流量进入队列需要报文携带优先级,优先级对应相应的队列优先级LP,然后才可以送入队列),没有携带任何流量标记的默认送入0号队列。0号队列如果没有匹配,就通过基于流的分类,使用hash自己计算队列,使用剩余的带宽进行转发。 :::
组合队列:PQ+WFQ、PQ+WRR。用于某些流量必须做高优先级转发,剩余流量也需要保证转发
优点:低延时的业务得到有效的保障,低优先级的业务不会饿死
缺点:无法自定义类
队列标记实验
[AR1]acl name PC1_PC2 3000
[AR1-acl-adv-PC1_PC2]rule 5 permit ip destination 172.16.1.2 0 源都是PC1
[AR1]acl name PC1_PC3 3001
[AR1-acl-adv-PC1_PC3]rule 5 permit ip destination 172.16.1.3 0
[AR1]acl name PC1_PC4 3002
[AR1-acl-adv-PC1_PC4]rule 5 permit ip destination 172.16.1.4 0
流量匹配:
[AR1]traffic classifier 1_2
[AR1-classifier-1_2]if-match acl PC1_PC2
[AR1]traffic classifier 1_3
[AR1-classifier-1_3]if-match acl PC1_PC3
[AR1-classifier-1_3][AR1]traffic classifier 1_4
[AR1-classifier-1_4]if-match acl PC1_PC4
打标记:
[AR1]traffic behavior 1_2
[AR1-behavior-1_2]remark dscp af12
[AR1]traffic behavior 1_3
[AR1-behavior-1_3]remark dscp ef
[AR1]traffic behavior 1_4
[AR1-behavior-1_4]remark dscp cs7
对应匹配:
[AR1]traffic policy test
[AR1-trafficpolicy-test]classifier 1_2 behavior 1_2
[AR1-trafficpolicy-test]classifier 1_3 behavior 1_3
[AR1-trafficpolicy-test]classifier 1_4 behavior 1_4
AR1入接口配置:
[AR1-GigabitEthernet0/0/0]traffic-policy test inbound
上述命令由于是采用MQC方式实现,即在AR1的入方向和出方向做配置都可以(入接口打的标记不会在路由器内部清除)。 由于进入AR1的流量不携带标记,默认进入0号队列: (上述队列中显示的数据为ping数据包的数量) ::: warning trust dscp override在复杂流分类中不使用,只能用于简单流分类。 如在AR1入方向使用该命令,由于进入时DSCP优先级为CS0,信任该优先级后,就无法使用MQC方式更改。 ::: ::: tip 虽然在入方向做了优先级的标签,但是没有根据标记进入相应的队列。 查看qos map-table dscp-lp,DSCP优先级AF12(12)对应LP值1。 在入方向接收时,DCSP优先级不会对应为LP本地优先级进入相应队列中,在出方向上才会按照接收的DCSP对应的LP优先级进入队列。 (在本设备内已经根据接收到的DSCP对应的LP进入队列,本设备做的MQC改变优先级只对发出时做更改,不会在本设备内再根据优先级更改队列) ::: ::: warning 路由器的入方向不存在队列机制,出方向存在队列机制。 上述拓扑中,AR2入方向做trust dscp后,PC1pingPC4,AR2的入方向GE0/0/0口仍默认走0队列,但在出方向GE0/0/1可以按照标记进入不同队列。 :::
清空QoS队列接口状态:
<AR1>reset qos queue statistics int gi 0/0/0
<AR1>reset qos queue statistics int gi 0/0/1
AR1打标记的流量发送到AR2后,做简单流分类需要使得AR2信任DSCP值:
[AR2-GigabitEthernet0/0/0]trust dscp
[AR2-GigabitEthernet0/0/0]trust dscp override AR2将原本进入1号队列的访问1.2的数据送入3号队列,需要覆盖写入
[AR2]qos map-table dscp-lp
[AR2-maptbl-dscp-lp]input 12 output 3
[AR2-maptbl-dscp-lp]input 46 output 4
[AR2-maptbl-dscp-lp]input 56 output 6
::: tip trust ( ) override命令用于需要配置QoS映射表时,如dscp-lp、dot1p-dscp等,要在流量接收入方向配置。 ::: PC1分别ping PC2、3、4各一个数据包: 如上改变了原有的进入1、5、7号队列。
队列指定调度机制:
[AR2]qos queue-profile 1 1为模板名称
[AR2-qos-queue-profile-1]schedule ?
drr Deficit weighted round robin
pq Priority queuing
wfq Weighted fair queuing
wrr Weighted round robin
[AR2-qos-queue-profile-1]schedule pq 6
[AR2-qos-queue-profile-1]schedule wfq 3 to 4
为WFQ队列设置权重
[AR2-qos-queue-profile-1]queue 3 weight 50
[AR2-qos-queue-profile-1]queue 4 weight 80
PC1 ping PC2,AR2 GE0/0/1抓包: 如上,在做简单流分类设备的入方向接口做信任后,发出时会保留复杂流分类时对流量做的标记。
AR3上将去往PC2的流量优先级修改为AF22
[AR3-GigabitEthernet0/0/0]trust dscp override
[AR3]qos map-table dscp-dscp
[AR3-maptbl-dscp-dscp]input 12 output 20 DSCP优先级中,AF12对应12,AF22对应20
::: warning AR3中将去往PC2的流量优先级改为AF22后,按照DSCP对应LP,应进入队列2,但在AR3内部调度时,仍按照AR3收到的DSCP对应LP的优先级将流量放入队列1。 可通过如下命令查看现象:
[AR3]dis qos queue statistics int gi 0/0/1
qos map-table dscp-lp中做配置才可以在AR3内部做进入队列的选择(lp值是进入队列的值),dscp-lp是映射到本地优先级的,dscp-dscp是对出方向的改变。 查看设备内部进入队列的信息:
[AR3]dis qos map-table dscp-lp
:::
AR带宽分配:
[AR4]traffic classifier 1_2
[AR4-classifier-1_2]if-match dscp 20
[AR4]traffic behavior 1_2
[AR4-behavior-1_2]queue ef bandwidth 8 分配队列带宽值,单位Kbps
[AR4]traffic classifier 1_3
[AR4-classifier-1_3]if-match dscp 46
[AR4]traffic behavior 1_3
[AR4-behavior-1_3]queue ef bandwidth 1010 分配队列带宽值,单位Kbps
[AR4]traffic policy test
[AR4-trafficpolicy-test]classifier 1_2 behavior 1_2
[AR4-trafficpolicy-test]classifier 1_3 behavior 1_3
[AR4-GigabitEthernet0/0/1]traffic-policy test outbound
[AR4-GigabitEthernet0/0/1]bandwidth 1 指定接口带宽值,单位Mbits/sec
拥塞避免
设备队列满存后(硬件队列满存后软件队列也满存),后续的报文会无差别丢弃,这种操作行为称为尾丢弃。
尾丢弃是默认的丢弃策略,超出缓存的报文不考虑优先级,没有区别对待的全部丢弃,会出现如下三种现象:
- 无差别的丢弃,会导致重要业务的数据丢失.
- 造成网络中TCP全局同步: 网络中如果全是具有流控机制(滑动窗口机制)的TCP报文,当网络正常情况下,TCP的窗口大小为最大,当接口发生拥塞尾丢包时,TCP感应到链路的拥塞,将窗口改小,接口速率降低,链路恢复正常。TCP感应到链路正常后将窗口大小还原,链路又发生拥塞,如此周而复始。
- 造成网络中TCP饿死: TCP具有流控机制(滑动窗口机制),当发现链路拥塞,会自动调节窗口大小。如果此时UDP的报文进入转发,UDP没有像TCP一样的窗口机制,当(TCP释放带宽后)链路不拥塞时,UDP会和TCP一起吃掉这部分带宽,导致TCP仍能感觉到链路拥塞,再次缩小窗口。如果UDP报文持续不断的发送(大速率发送),TCP报文最终将无法获得带宽,UDP占据全部带宽。 ::: tip TCP滑动窗口机制是发送方根据接收方的确认来控制发送速率,接收方通过TCP报文段中的窗口字段告诉发送方自己的窗口大小,以便发送方因此设置发送时窗口大小,控制发送速率。 窗口即一定长度的字节数据。 :::
尾丢弃无法解决,当网络出现拥塞必然会造成尾丢弃,只能使用拥塞避免机制尽量延缓尾丢弃的到来。
拥塞避免机制
1.RED(早期随机检测)
在队列满存之前就开始无差别丢弃报文(类似于提前进行尾丢弃)
RED的丢弃方式:
设置低门限值和高门限制
1.链路带宽占比没有达到低门限值时,不丢包
2.链路带宽占比超过低门限值时,开始按照配置的丢包概率随机丢包
3.链路带宽占比超过高门限制时,开始按照配置最大的丢包概率随机丢包
4.链路带宽占比使用达到最大值时,则执行尾丢弃
2.WRED(加权的早期随机检测)
主要针对报文的优先级值进行分类,对优先级值不同的报文设置不同的丢弃概率
WRED的丢弃方式:
设置低门限值和高门限制
1.链路带宽占比没有达到低门限值,不丢包
2.链路带宽占比超过低门限值,开始按照配置的丢包概率随机丢包
3.链路带宽占比超过高门限制,开始按照配置最大的丢包概率随机丢包
4.链路带宽占比使用达到最大值,则执行尾丢弃
WRED在门限值前加上优先级,优先级越高,低门限的值和高门限的值也越高,丢弃概率相应就更小,较高优先级的流量不丢包
::: warning RED的带宽值是总的带宽和丢包率,WRED可以按照优先级高低为每一类流量单独分配带宽和丢包率。 :::
::: tip WRED的方式可假设总带宽为100M,占用10%时低优先级的流量开始丢包,占用40%时中优先级开始丢包,低优先级的丢弃概率逐步增大,占用80%时低优先级流量丢弃概率增加到最大并在此时完全丢弃,保障高优先级不被丢弃。 ::: 报文到达低门限时开始丢包,随着门限增高,丢包率不断增加,最高丢包率不超过设置的最高丢包率,直到到达高门限时丢弃所有的报文(丢包率100%): 上图中可将实际队列长度当作时间值。 WRED按照一定程度主动丢弃队列中的报文,一定程度避免了尾丢弃的缺点。
WRED实验
[AR1]acl 3001
[AR1-acl-adv-3001]rule 5 permit ip destination 3.3.3.3 0
[AR1]acl 3002
[AR1-acl-adv-3002]rule 5 permit ip destination 3.3.3.4 0
[AR1]acl 3003
[AR1-acl-adv-3003]rule 5 permit ip destination 4.4.4.4 0
[AR1]acl 3004
[AR1-acl-adv-3004]rule 5 permit ip destination 4.4.4.5 0
[AR1]traffic classifier 1
[AR1-classifier-1]if-match acl 3001
[AR1]traffic classifier 2
[AR1-classifier-2]if-match acl 3002
[AR1]traffic classifier 3
[AR1-classifier-3]if-match acl 3003
[AR1]traffic classifier 4
[AR1-classifier-4]if-match acl 3004
[AR1]traffic behavior 1
[AR1-behavior-1]remark dscp af11
[AR1]traffic behavior 2
[AR1-behavior-2]remark dscp af22
[AR1]traffic behavior 3
[AR1-behavior-3]remark dscp af33
[AR1]traffic behavior 4
[AR1-behavior-4]remark dscp ef
[AR1-trafficpolicy-test]classifier 1 behavior 1
[AR1-trafficpolicy-test]classifier 2 behavior 2
[AR1-trafficpolicy-test]classifier 3 behavior 3
[AR1-trafficpolicy-test]classifier 4 behavior 4
[AR1-GigabitEthernet0/0/0]traffic-policy test outbound
[AR2-GigabitEthernet0/0/0]trust dscp override
[AR2]dis qos map-table dscp-lp dscp优先级换算成数值表示后,根据map-table映射关系进入队列
[AR2]qos queue-profile 1
[AR2-qos-queue-profile-1]schedule pq 5
[AR2-qos-queue-profile-1]schedule wfq 1 to 3
::: warning 队列必须是连续的,在队列模板中,队列选择时写1to3,即1、2、3号队列都是WFQ,不能将2号队列单独设置其他调度机制。 :::
[AR2-qos-queue-profile-1]queue 1 weight 63
[AR2-qos-queue-profile-1]queue 2 weight 30
[AR2-qos-queue-profile-1]queue 3 weight 13
[AR2]drop-profile AF11 进入丢弃模板视图,设置模板名为AF11
[AR2-drop-profile-AF11]wred dscp 使用DSCP的优先级值做加权的早期随机检测
[AR2-drop-profile-AF11]dscp af11 low-limit 20 high-limit 70 discard-percentage 40 针对AF11的流量设置高低门限值和丢弃概率
[AR2]drop-profile AF22
[AR2-drop-profile-AF22]wred dscp
[AR2-drop-profile-AF22]dscp af22 low-limit 30 high-limit 80 discard-percentage 30
[AR2]drop-profile AF33
[AR2-drop-profile-AF33]wred dscp
[AR2-drop-profile-AF33]dscp af33 low-limit 40 high-limit 85 discard-percentage 20
PQ最优先转发,不会丢弃,没有丢弃模板
丢弃模板关联在队列
[AR2]qos queue-profile 1
[AR2-qos-queue-profile-1]queue 1 drop-profile AF11
[AR2-qos-queue-profile-1]queue 2 drop-profile AF22
[AR2-qos-queue-profile-1]queue 3 drop-profile AF33
WRED发出时设置丢弃策略
[AR2-GigabitEthernet0/0/1]qos queue-profile 1 接口调用队列模板
[AR2-GigabitEthernet0/0/2]qos queue-profile 1 接口调用队列模板
QoS流量限速
QoS的流量监管和流量整形,是在链路带宽够用的情况下,进一步对带宽进行操作整合(防止带宽滥用)。 限速:通过设置额定的速率限制用户上传和下载。
使用场景:
1. ISP对于客户做流量限速。
2. 企业网络根据业务来进行限速。
3. 上下游带宽不匹配时,可以配置限速。
4. 对于流量汇聚的设备可以做限速。
限速的概要:
1. 带宽不足时做限速,为了保障其他业务有可用带宽
2. 带宽足够时做限速,保障带宽不被滥用
限速的种类
1.流量监管
流量监管可以配置在接口的入方向或出方向,要尽可能部署在靠近用户端的位置。 链路空闲时,会造成带宽的浪费,因为流量监管没有缓存机制,流量超出限速值会直接丢弃。 (削峰不填谷)
在交换机上配置:
1.MQC
[SW1]traffic behavior 1 在traffic behavior中设置限速速率
[SW1-behavior-1]car cir 限速速率(8-10000000Kbps)
2.全局视图下配置
[SW1]qos car 1 cir 1为限速模板名,限速速率(64-10000000Kbps)
如果全局和MQC都配置了限速,全局视图下指定的cir值一定要大于MQC视图指定的cir值
在路由器上配置:
1.使用MQC来实现(和交换机的配置相同)
路由器上限速速率范围8-4294967295Kbps,也可以使用百分比形式设置速率
2.接口下配置
[AR1-GigabitEthernet0/0/0]qos car inbound/outbound cir 限速速率(8-4294967295Kbps)
流量监管优点:
- 不会引入额外的时延,适用于低延时保障的业务。(额外时延指被缓存后从缓存队列发出所用的时间等较小时间)
- 可以调用在出方向或入方向。
流量监管缺点:
- 当链路达到最大值时会出现丢包。
- 链路空闲时又没有数据转发。
监管的作用相当于对接收到的流量做整合。
2.流量整形
流量整形只能配置在接口的出方向,要尽可能部署在靠近服务端的位置。
流量整形存在缓存机制,链路空闲时,会将缓存机制存下的流量继续转发(速率达到额定值时,将超出的部分存入缓存队列)。 (削峰填谷)
::: tip
缓存机制会引入额外的时延和抖动,如果缓存队列存满,超出的部分仍要丢弃。
:::
交换机上配置:
1.配置接口队列流量整形
[SW1-GigabitEthernet0/0/1]qos queue 3 shaping cir 3为队列名,shaping为整形,限速速率(0-1000000Kbps)
路由器上配置:
1.配置接口流量整形
[AR1-GigabitEthernet0/0/1]qos gts cir 限速速率8-4294967295kbit/s
2.配置接口自适应的流量整形
[AR1]qos adaptation-profile 1 设置自适应速率的模板
[AR1-qos-adaptation-profile-1]rate-adjust loss low-threshold 30 high-threshold 60 设置速率的高低门限值,即达到30%开始限速,达到60%随机丢包或其他
[AR1-qos-adaptation-profile-1]track nqa 指定NQA实例名绑定(NQA:网络性能监控)
[AR1-GigabitEthernet0/0/1]qos gts adaptation-profile 1 接口下调用该自适应速率模板
3.配置队列的整形
[AR1]qos queue-profile 1
[AR1-qos-queue-profile-1]schedule pq 5 设置PQ队列
[AR1-qos-queue-profile-1]queue 5 gts cir 限速速率8-4294967295kbit/s
4.配置MQC的整形(和配置MQC监管的方式一致)
[AR1-behavior-1]gts cir 限速速率8-4294967295kbps
5.配置MQC自适应的整形
[AR1-behavior-1]gts cir adaptation-profile
流量整形优点:
- 存在缓存机制,在链路空闲时可以转发缓存数据 持续使用链路带宽。
- 对于下游设备而言,接收到的都是平稳的数据,不会出现额外的突发流量。
流量整形缺点:
- 存在缓存机制,会引入额外的时延和抖动。
3.物理接口总限速
在交换机上配置
1.如果是接口入方向的配置,则相当于配置了流量监管(入方向没有缓存)
[SW1-GigabitEthernet0/0/2]qos lr inbound cir
2.如果是接口出方向的配置,则相当于配置了流量整形(出方向有缓存)
[SW1-GigabitEthernet0/0/2]qos lr outbound cir
在路由器上配置
1.配置接口的百分比限速
[AR1-GigabitEthernet0/0/1]qos lr pct
限速实现的机制:(令牌桶)
::: tip 令牌桶是一种流量控制和速率限制的算法,原理概括:
令牌以一定的速率放入桶中。
每个令牌允许源发送一定数量的比特。
发送一个包,流量调节器就要从桶中删除与包大小相等的令牌数。
如果没有足够的令牌发送包,这个包就会等待直到有足够的令牌或者包被丢弃,也有可能被标记更低的DSCP。
桶有特定的容量,如果桶已经满了,新加入的令牌就会被丢弃。
:::单速单桶:
[AR1-GigabitEthernet0/0/1]qos gts cir 8 cbs 1500
使用如下简称: C表示令牌桶的名字,Tc表示令牌桶中现有令牌的数量。
CIR:承诺信息速率,即允许发送报文的平均速率,单位kbps,表示向令牌桶中投放令牌的速率 CBS:承诺突发尺寸,在某一时刻内可以转发最大报文的速率(相当于令牌桶最大容量),单位byte
Tc、CIR、CBS三者关系: 1.如果Tc < CBS,则按照CIR的速率项令牌桶中投放令牌 2.如果Tc = CBS,则令牌桶中的令牌数量不会增加
报文转发: 1.Tc >= 报文的大小,则报文被标记为绿色转发,同时令牌桶中减少相应的令牌数 2.Tc < 报文的大小,则报文被标记为后红色丢弃,同时令牌桶中的令牌不会减少
::: tip 单速单桶没有额外的突发流量,适用于流量整形机制。 :::
单速双桶 :
[AR1-GigabitEthernet0/0/1]qos car outbound cir 8 cbs 1500 pbs 1500
使用如下简称: C表示令牌桶的名字,Tc表示C令牌桶中现有令牌的数量。 E表示令牌桶的名字,Te表示E令牌桶中现有令牌的数量。 B表示转发的数据报文大小。
CIR:承诺信息速率,表示向令牌桶中投放令牌的速率,即允许发送报文的平均速率,单位kbps CBS:承诺突发尺寸,在某一时刻内可以转发最大报文的速率,即令牌桶最大容量,单位byte EBS:峰值突发尺寸,每次突发所允许的最大的流量尺寸,即在某一时刻内可以转发最大报文的速率(相当于E桶最大容量),单位为byte
参数之间的关系: 1.Tc < CBS,则按照CIR速率项C桶投放令牌 2.Tc = CBS,Te < EBS,则按照CIR速率向E桶中投放令牌 3.Tc = CBS,Te = EBS,则令牌桶中的令牌不会增加
报文转发:
- B <= Tc,则将报文标记为绿色转发,C桶中减少对应的令牌数
- Tc < B <= Te,则将报文标记为黄色(默认转发),C桶中的令牌数不变,E桶中减少相应的令牌
- B > Tc , B > Te,则将报文标记为红色丢弃,C桶和E桶中的令牌数不变
如上,E桶大于C桶,流量首先通过C桶,如果C桶大小够用,优先使用C桶的令牌,C桶令牌不够,则使用E桶令牌。令牌桶中的令牌数量不满时,cir向令牌桶注入令牌,直至令牌桶满,C桶中令牌数量涨到Tc > B时就使用C桶的令牌。 ::: tip 单速双桶通过增加E桶来扩大某一时刻内转发的报文速率,针对报文的尺寸进行额外的流量突发。 :::
- 双速双桶:
::: tip 双速双桶通过增加另一个速率在某一时间段内改变转发的速率,即针对报文速率做额外的流量突发。[AR1-GigabitEthernet0/0/1]qos car outbound cir 8 pir 20 cbs 1500 pbs 1500
PIR一定大于CIR。 如果CIR = PIR,则为单速单桶(转发过程中P桶令牌数减少,忽略C桶)。 ::: 使用如下简称: C表示令牌桶的名字,Tc表示C令牌桶中现有令牌的数量。 P表示令牌桶的名字,Tp表示P令牌桶中现有令牌的数量。 B表示转发的数据报文大小。
CIR:承诺信息速率,允许发送报文的平均速率(相当于向C桶中投放令牌的速率)
CBS:承诺突发尺寸,在某一时刻内可以转发最大报文的速率(相当于C桶最大容量)
PIR:峰值信息速率,允许发送报文的平均速率(相当于向P桶中投放令牌的速率)
PBS:峰值突发尺寸,在某一时刻内可以转发最大报文的速率(相当于P桶最大容量)
参数之间的关系:
1.Tc < CBS,则按照CIR速率项C桶投放令牌
2.Tp < PBS,则按照PIR速率向P桶中投放令牌
3.Tc = CBS,Tp 等于 PBS,则令牌桶中的令牌不会增加
报文是如何转发的:
1.B <= Tc(则一定B < Tp),则报文被标记绿色转发,C桶和P桶中同时减少相应的令牌数
2.Tc < B <= Tp,则报文被标记黄色(默认转发),C桶中令牌不变,P桶中较少相应的令牌数
3.Tp < B ,则报文被标记为红色丢弃,两桶内的令牌都不减少
::: warning Tp < B,则一定Tc < B。 Tc不可能大于Tp,一旦C桶内的令牌数增长到Tc = B,C桶和P桶中的令牌数又会同步减少。 :::
三种令牌桶模式之间的区别和相互关系: