您的位置:首页 > 其它

QoS基础及技术原理——3

2017-11-09 18:21 447 查看
拥塞避免和拥塞管理
当网络间歇性地出现拥塞,且时延敏感业务要求得到比非时延敏感业务更高质量的QoS服务时,需要进行拥塞管理;如果配置拥塞管理后仍然出现拥塞,则需要增加带宽。拥塞避免(Congestion Avoidance)是指通过监视网络资源(如队列或内存缓存区)的使用情况,在拥塞发生或有加剧的趋势时主动丢弃报文,通过调整网络的流量来解除网络过载的一种流控制机制。

为了解决网络拥塞,可以通过拥塞避免在网络出现拥塞时主动丢弃一些报文,解除网络过载;为了使用户得到更好的服务质量,可以通过拥塞管理对关键业务优先调度,使得这些业务得到更高的QoS服务。

一、拥塞避免

华为S系列交换机主要支持两种拥塞避免功能。

1、尾部丢弃

传统的丢包策略采用尾部丢弃的方法,且是同等的对待所有报文,不区分报文的服务等级。这时在拥塞发生期间,队列尾部的数据报文将被丢弃,直到拥塞解除。但这种丢弃策略会引发TCP全局同步现象。所谓TCP全局同步现象,是指当多个队列同时丢弃多个TCP连接报文时,将造成多个TCP连接同时进入拥塞避免和慢启动状态,以降低并调整流量;而后这几个TCP连接又会在某个时刻同时出现流量高峰。如此反复,使得网络流量忽大忽小,影响链路利用率。

2、RED/SRED/WRED

在华为S系列交换机中,对RED(Random EarlyDetection,随机早期检测)、SRED(Simple Random Early Detection,简单随机早期检测)和WRED(WeightedRandom Early Detection,权重随机早期检测)三种拥塞避免技术有不同的支持。

RED技术是通过随机地丢弃报文让多个TCP连接不同时降低发送速率,从而避免了TCP的全局同步现象。在RED技术的算法中,为每个队列的长度都设定了阈值的上、下限值,并有以下规定:

(1)当队列的长度小于阈值下限时,不丢弃报文。

(2)当队列的长度大于阈值上限时,丢弃所有新收到的报文。

(3)当队列的长度在阈值上限和阈值下限之间时,开始随机丢弃到来的报文。方法是为每个到来的报文赋予一个随机数,并用该随机数与当前队列的丢弃概率比较,如果大于丢弃概率则报文被丢弃。队列越长,报文被丢弃的概率越高。

SRED技术是在RED技术基础上诞生的。在接口出队列上,SRED会根据报文的优先级(而不是随机选择要丢弃的报文)将其区分为红色、黄色,并分别为红色和黄色的报文设定起始丢包点和丢包率,然后通过按照一定的丢弃概率主动丢弃队列中的红色甚至黄色报文,从而调整从接口输出的流量速率。

WRED技术也是在RED技术基础上改进的,与SRED一样也是基于报文优先级来选择丢弃报文的,但WRED同时还可以为相同颜色的不同报文设置不同的丢弃权重,以实现更加灵活的报文丢弃策略,使高优先级报文被丢弃的概率相对较小。

二、拥塞管理

拥塞管理一般采用队列调度技术,使用不同的调度算法来发送队列中的报文流。根据排队和调度策略的不同,设备LAN接口上的队列调度技术分为PQ、DRR、PQ+DRR、WRR、PQ+WRR;WAN接口上的队列调度技术分为PQ、WFQ、PQ+WFQ和CBQ。

1、PQ调度

PQ(PriorityQueueing,优先队列)调度是针对于关键业务类型应用而设计的队列机制。PQ调度算法维护一个优先级递减的队列系列,并且只有当更高优先级的所有队列为空时才服务低优先级的队列。这样,将关键业务的分组放入较高优先级的队列,将非关键业务(如Email)的分组放入较低优先级的队列,可以保证关键业务的分组被优先传送,非关键业务的分组在处理关键业务数据的空闲间隙被传送。



如上图,Queue7比Queue6具有更高的优先权,Queue6比Queue5具有更高的优先权,以此类推。只要链路能够传输分组,Queue7尽可能地被服务。只有当Queue7为空,调度器才考虑Queue6.当Queue6有分组等待传输且Queue7为空时,Queue6以链路速率接受类似的服务。当Queue7和Queue6为空时,Queue5以链路速率接收服务,依此类推。

PQ调度算法对低时延业务非常有用。假定数据流X在每一个节点都被映射到最高优先级队列,那么当数据流X的分组到达时,则分组将得到优先服务。然而PQ调度机制会使低优先级队列中的报文由于得不到服务而“饿死”。如映射到Queue7的数据流在一段时间内以100%的输出链路速率到达,调度器将从不为Queue6及以下队列服务。所以在采用PQ调度方式时,应将延迟敏感的关键业务放入高优先级队列,将非关键业务放入低优先级队列,从而确保关键业务被优先发送。

2、WRR调度

WRR(Weight RoundRobin,加权循环调度)是在RR(Round Robin,循环调度)的基础上演变而来的。它可在队列之间进行轮流调度,根据每个队列的权重来调度各队列中的报文流。实际上,RR调度相当于权值为1(即每个队列在调度一次后都重新开始新的一轮调度)的WRR调度。WRR队列示意图如下:



在进行WRR调度时,设备根据每个队列的权值进行轮循调度。调度一轮权值减一,权值减到零的队列不参加调度,当所有队列的权值减到0时,开始下一轮的调度。如用户根据需要为借口上8个队列指定的权值分别为4、2、5、3、6、4、2、1,按照WRR方式进行调度的结果见上表。

各队列中的报文流被调度的次数与该队列的权值成正比,权值越大被调度的次数相对越多。由于WRR调度是以报文为单位,因此每个队列没有固定的带宽,同等调度机会下大尺寸报文获得的实际带宽要大于小尺寸报文获得的带宽,避免了采用PQ调度时低优先级队列中的报文可能长时间得不到服务的缺点。另外,WRR调度中虽然多个队列的调度是轮循进行的,但对每个队列不是固定地分配服务时间片——如果某个队列为空,那么马上切换到下一个队列调度,这样带宽资源可以得到充分的利用。

但WRR调度有两个缺点:

(1)WRR调度按照报文个数进行调度,而用户一般关心的是带宽。当每个队列的平均报文长度相等或已知时,通过配置WRR权重,用户能够获得想要的带宽;但是,当队列的平均报文长度变化时,用户就不能通过配置WRR权重获取想要的带宽。

(2)低延时需求业务(如话音)得不到及时调度

3、DRR调度

DRR(DeficitRound Robin,差额循环调度)调度同样也是RR(循环调度)法的扩展。相对于WRR而言,DRR调度解决了WRR调度中只关心报文,同等调度机会下大尺寸报文获得的实际带宽要大于小尺寸报文获得的带宽的问题。DRR调度通过调度过程中考虑了包长的因素,从而达到调度的速率公平性。

在DRR调度中,Deficit表示队列的带宽赤字,初始值为0。每次调度前,系统按权重为各队列分配带宽,计算Deficit值,如果队列的Deficit值大于0,则参与此轮调度,发送一个报文,并根据所发送报文的长度计算调度后Deficit值,作为下一轮调度的依据;如果队列的Deficit值小于0,则不参与此轮调度,当前Deficit值作为下一轮调度的依据。

假设用户配置各队列权重为40、30、20、10、40、30、20、10(依次对应Q7、Q6、Q5、Q4、Q3、Q2、Q1、Q0)。在调度初始时,队列Q7、Q6、Q5、Q4、Q3、Q2、Q1、Q0依次能够获取20%、15%、10%、5%、20%、15%、10%、5%的带宽。下面以Q7、Q6为例,简要描述DRR队列调度的实现过程(假设Q7队列获得400bit/s的带宽,Q6队列获取300bit/s的带宽)。

第1轮调度

Deficit[7][1]=0(为Q7初始Deficit值)+400(为Q7队列带宽)=400(为Q7队列第1轮调度时的Deficit值),Deficit[6][1]=0(为Q6初始Deficit值)+300(为Q6队列带宽)=300(为Q6队列第1轮调度时的Deficit值).

假设这时从Q7队列取出一个900bytes的报文发送,从Q6队列取出一个400bytes的报文发送。发送后,Deficit[7][1]的Deficit值=400-900(400为Q7队列的带宽,900为Q7队列此次发送的数据字节大小)=-500(为Q7队列第1轮调度后的Deficit值),Deficit[6][1]的Deficit值=300-400(300为Q6队列的带宽,400为Q6队列此次发送的数据字节大小)=-100(为Q6队列第1轮调度后的Deficit值)。

第2轮调度

Deficit[7][2]=-500(为Q7第1轮调度后的Deficit值)+400(为Q7队列的带宽)=-100(为Q7第2轮调度时可用的Deficit值),同理,Deficit[6][2]=-100+300=200。因为Q7队列第2轮调度Deficit值小于0,所以此轮不参与调度,而Q6队列第2轮调度Deficit值大于0,所以仍可从Q6队列取出一个报文(假设为300bytes)进行发送。发送后,Deficit[6][2]=200-300=-100(为Q6队列第2轮调度后的Deficit值)。

第3轮调度

Deficit[7][3]=-100+400=300,Deficit[6][3]=-100+300=200。因为两个队列此时的Deficit值均大于0,所以均可以发送数据。假设此时从Q7队列取出一个600bytes的报文发送,从Q6队列取出一个500bytes的报文发送。发送后,Deficit[7][3]=300-600=-300,Deficit[6][3]=200-500=-300。这时再进行第4轮调度时,可根据前面的方法计算第4轮调度时两队列的Deficit值分别为100和0,所以Q7队列可以继续发送报文,而Q6队列不允许发送报文。如此循环调度,最终Q7、Q6队列获取的带宽将分别占总带宽的20%、15%。因此通过DRR调度方法时用户能够通过设置权重获取想要的带宽。但DRR调度仍然没有解决WRR调度中低延时需求业务得不到及时调度的问题。

DRR调度避免了采用PQ调度时低优先级队列中的报文可能长时间得不到服务的缺点,也避免了各队列报文长度不等或变化较大时,WRR调度不能按配置比例分配带宽资源的缺点。但是,DRR调度也具有低延时需求业务(如话音)得不到及时调度的缺点。

4、WFQ调度

FQ(Fair Queuing,公平队列)的目的是尽可能公平的分享网络资源,使所有流的延迟和抖动达到最优。即不同的队列获得公平的调度机会,从总体上均衡各个流的延迟;短报文和长报文也可获得公平的调度;如果不同队列间同时存在多个长报文和短报文等待发送,让短报文优先获得调度,从而在总体上减少各个流的报文间的抖动。

WFQ调度在报文入队列之前,先对流量进行分类,有两种分类方式:

(1)按流的“会话”信息分类。根据报文的协议类型、源和目的TCP或UDP端口号、源和目的IP地址、ToS域中的优先级位等自动进行流分类,并且尽可能多地提供队列,以将每个流均匀的放入不同队列中,从而在总体上均衡各个流的延迟。在出队列的时候,WFQ按流的优先级来分配每个流应占有带宽。优先级的数值越小,所得的带宽越少。优先级的数值越大,所得的带宽越多。

(2)按优先级分类。通过优先级映射把流量标记为本地优先级,每个本地优先级对应一个队列号。每个接口预分配4个或8个队列,报文根据队列号进入队列。缺省情况,队列的WFQ权重相同,流量平均分配接口带宽。用户可以通过配置修改权重,高优先权和低优先权按权重比例分配带宽。

以上整个WFQ调度原理下图。以端口有8个输出队列为例,WFQ可为每个队列配置一个加权值(依次为w7、w6、w5、w4、w3、w2、w1、w0),加权值表示获取资源的比重。例如:一个100MB的端口,配置它的WFQ队列调度算法的加权值为50、50、30、30、10、10、10、10(依次对应w7、w6、w5、w4、w3、w2、w1、w0),这样可以保证最低优先级队列至少获得5Mbit/s带宽,避免了采用PQ调度时低优先级队列中的报文可能长时间得不到服务的缺点。从统计上,WFQ使高优先权的报文获得优先调度的机会多于低优先权的报文。



5、PQ+WRR调度

PQ调度和WRR调度各有优缺点,为了克服单纯采用PQ调度或WRR调度时的缺点,PQ+WRR调度以发挥两种调度的各自优势,不仅可以通过WRR调度可以让低优先级队列中的报文也能及时获得带宽,而且通过PQ调度可以保证了低延时需求的业务能优先得到调度。

在设备上,用户可以配置队列的WRR参数,根据配置将接口上的8个队列分为两组,一组(例如Queue7、Queue6、Queue5)采用PQ调度,另一组(如Queue4、Queue3、Queue2、Queue1、Queue0队列)采用WRR调度,设备上只有LAN侧接口支持PQ+WRR调度。

PQ+WRR调度示意图如下。在调度时,设备首先按照PQ方式调度Queue7、Queue6、Queue5队列中的报文流,只有这些队列中的报文流全部调度完毕后,才开始以WRR方式循环调度其他队列中的报文流。Queue4、Queue3、Queue2、Queue1、Queue0队列包含自己的权值。重要的协议报文和有低延时需求的业务报文应放入采用PQ调度的队列中,得到优先调度的机会,其余报文放入以WRR方式调度的各队列中。



6、PQ+DRR

与PQ+WRR相似,其集合了PQ调度和DRR调度,各有优缺点。单纯采用PQ调度时,低优先级队列中的报文流长期得不到带宽,而单纯采用DRR调度时低延时需求业务得不到优先调度,如果将两种调度方式结合起来形成PQ+DRR调度,不仅能发挥两种调度的优势,而且能克服两种调度各自的缺点。

在PQ+DRR调度中,设备接口上的8个队列被分为两组,用户可以指定其中的某几组队列进行PQ调度,其他队列进行DRR调度。如下图:



在调度时设备首先按照PQ方式优先调度Queue7、Queue6和Queue5队列中的报文流,只有这些队列中的报文流全部调度完毕后,才开始以DRR方式调度Queue4、Queue3、Queue2、Queue1、Queue0队列中的报文流。其中,Queue4、Queue3、Queue2、Queue1、Queue0队列包含自己的权值。重要的协议报文以及有低延时需求的业务报文应放入需求进行PQ调度的队列中,得到优先调度的机会,其他报文放入以DRR方式调度的各队列中。

7、PQ+WFQ调度

与PQ+WRR相似,PQ+WFQ调度方式集合了PQ调度和WFQ调度,各有优缺点。单纯采用PQ调度时,低优先级队列中的报文流长期得不到带宽,而单纯采用WFQ调度时低延时需求业务(如话音)得不到优先调度,如果将两种调度方式结合起来形成PQ+WFQ调度,不仅能发挥两种调度的优势,而且能克服两种调度各自的缺点。

在PQ+WFQ调度中,设备接口上的8个队列也被分为两组,用户可以指定其中的某几组队列进行PQ调度,其他队列进行WFQ调度。只有WAN侧接口支持PQ+WFQ调度。如下图,在调度时,设备首先按照PQ方式优先调度Queue7、Queue6、Queue5队列中的报文流,只有这些队列中的报文流全部调度完毕后,才开始以WFQ方式调度Queue4、Queue3、Queue2、Queue1、Queue0队列中的报文流。其中,Queue4、Queue3、Queue2、Queue1、Queue0队列包含自己的权值。重要的协议报文以及有低延时需求的业务报文应放入需要进行PQ调度的队列中,得到优先调度的机会,其他报文放入以WFQ方式调度的各队列中。



8、CBQ调度

CBQ(Class-basedQueueing,基于类的加权公平队列)是对WFQ功能的扩展,为用户提供了定义类的支持。CBQ首先根据IP优先级或者DSCP优先级、输入接口、IP报文的五元组等规则对报文进行分类,然后让不同类别的报文进入不同的队列。对于不匹配任何类别的报文,送入系统定义的缺省类。



(1)EF(加速转发)队列:满足低时延业务

EF队列是具有高优先级的队列,一个或多个类的报文可以被设定进入EF队列,不同类别的报文可设定占用不同的带宽。在调度出队的时候,若EF队列中有报文,会优先得到调度,以保证其获得低时延。当接口发生拥塞时,EF队列的把我摁会优先发送,但为了防止低优先级队列(AF、BE队列)得不到调度,EF队列以设置的带宽限速。当接口不拥塞时,EF队列可以占用AF、BE的空闲带宽。这样,属于EF队列的报文既可以获得空闲的带宽,又不会占用超出规定的带宽,保护了其他报文的应得带宽。

设备除了提供普通的EF队列,还支持一种特殊的EF队列——LLQ(低时延队列)。两种队列都采用绝对优先调度,但是LLQ队列使用流量监管实现,不论接口是否拥塞,流量都不会超过设置的带宽,LLQ队列不缓存报文,可以将报文被发送的时延降低为最低限度。这为对时延敏感的应用(如VoIP业务)提供了良好的服务质量保证。

(2)AF(确保转发)队列:满足需要带宽保证的关键数据业务

每个AF队列分别对应一类报文,用户可以设定每类报文占用的带宽。在系统调度报文出队的时候,按用户为各类报文设定的带宽将报文出队发送,可以实现各个类的队列的公平调度。当接口有剩余带宽时,AF队列按照权重分享剩余带宽。同时,在接口拥塞的时候,仍然能保证各类报文得到用户设定的最小带宽。

对于AF队列。当队列的长度达到队列的最大长度时,缺省采用尾丢弃的策略,但用户还可以选择用WRED丢弃策略。

(3)BE队列(尽力而为):满足不需要严格QoS保证的尽力发送业务

当报文不匹配用户设定的所有类别时,报文被送入系统定义的缺省类。虽然允许为缺省类配置AF队列,并配置带宽,但是更多的情况是为缺省类配置BE队列。BE队列使用WFQ调度,使所有进入缺省类的报文进行基于流的队列调度。

对于BE队列,当队列的长度达到队列的最大长度时,缺省采用尾丢弃的策略,但用户还可以选择用WRED丢弃策略。

流策略
流策略是指按照某种规则对流量进行分类,并对同种类型的流量关联某种行为,形成某种策略。将该策略应用后可实现流量监管、重新标记优先级、重定向等功能。

流策略包含3个要素:流分类、流行为和流策略,这也是配置QoS流策略的前三大基本任务。

1、流分类

流分类采用一定的规则识别符合某类特征的报文,从而把具有某类共同特征的报文划分为一类,它是有区别地进行服务的前提和基础。

用户可以通过定义一系列的规则来对报文进行分类,同时也可以指定规则之间的关系。

(1)and:报文只有匹配了类中的所有的规则,设备才认为报文属于此类。当流分类中有ACL规则时,报文必须匹配其中一条ACL规则以及所有非ACL规则才属于该类。当流分类中没有ACL规则时,则报文必须匹配所有非ACL规则才属于该类。

(2)or:报文只要匹配了类中的一个规则,设备就认为报文属于此类。



2、流行为

流行为用来定义针对某类报文所做的QoS行为。进行流分类是为了有区别地提供服务,它必须与某种流量控制或资源分配的流行为关联起来才有意义。

针对流分类可实施的流行为包括报文过滤、重标记、重定向、流量监管、流量整形、流镜像、队列调度、流量统计、绑定子流策略、禁止URPF检查、封装外层VLAN标签和禁止MAC地址学习。

(1)报文过滤。报文过滤是最简单的流控行为。通过对报文的允许或禁止行为处理,控制网络流量,实现动态的防火墙报文过滤功能。

(2)重标记。重标记是指将报文的优先级字段进行重新设置。在不同的网络中报文使用不同的优先级字段,例如VLAN网络使用802.1p,IP网络使用ToS,MPLS网络使用EXP。因此需要设备可以针对不同的网络对报文的优先级进行重标记。

通常是需要在网络的边界节点设备上对进入的报文进行优先级重标记,网络内部的节点设备按照边界节点所标记的优先级提供相应等级的QoS服务,或者按自己的标准重新进行标记。

(3)重定向。重定向是指将报文不按原始的目的地址进行路由转发,而是将报文重定向转发到CPU、指定接口、指定的下一跳地址或下一跳标签LSP。

通过重定向可以实现策略路由,这也是QoS策略的一种主要应用。这种策略路由是静态的,当配置中的下一跳不可用时,系统将按原来的转发路径转发报文。

(4)流量监管。流量监管是一种通过对流量规格的监督,来限制流量及其资源使用的流控行为。为了避免用户不断突发的业务数据造成网络拥挤,可以通过流量监管,控制某些匹配分类规则的流的规格,对于超过规格的流量,可以采取丢弃、重标记颜色、重标记优先级或其他的QoS措施,以便更好的利用网络资源。

(5)流量整形。流量整形也是一种通过对流量规则的监督,来限制流量及其资源使用的流控行为。它是一种主动调整流的输出速率的流控措施,通常是为了使流量适配下游设备可供给的网络资源,避免不必要的报文丢弃和拥塞。流量整形通过限制流出某一网络的某一连接的流量,使这类报文以比较均匀的速度向外发送。

(6)流镜像。即将指定的数据包复制到用户指定的目的观察端口,以进行网络流量监控和故障分析与排除。

(7)队列调度。通常用来对某类的流量进行拥塞管理和拥塞避免,使不同类型的业务流进入不同优先级的队列,以获取不同等级的QoS转发服务。

(8)流量统计。流量统计用于统计指定业务流的数据报文。它统计的是匹配流分类的报文中通过和丢弃的报文数量和字节数。但流量统计本身不是QoS控制措施,但可以和其他QoS行为组合使用,以提高网络和报文的安全性。

(9)绑定子流策略。绑定子流策略是指为流策略中的流行为绑定一个子流策略,实现流策略嵌套。使用流策略嵌套时,对于匹配流分类的某一类报文,除了执行父策略中定义的行为外,还由子策略对该类流量进行再次分类,执行子策略中定义的行为,实现了更为精细化的HQoS(高级QoS)服务。

(10)禁止URPF检查。禁止URPF(UnicastReverse Path Forward,单播反向路径转发)检查是指设备对符合流分类规则的报文不进行逆向地址检查。配置接口的URPF检查功能后,设备对进入接口的所有报文都进行URPF检查,丢弃源地址对应的接口与入接口不一致的报文。此时,如果要保证某类特定的报文不被丢弃,比如设备相信从某个服务器过来的所有报文,不对其进行URPF检查,可配置对指定流禁止URPF检查功能。

(11)封装外层VLAN标签。封装外层VLAN标签是指对符合流分类规则的报文创建外层VLAN标签。当下游设备根据指定的外层VLAN标签提供差分服务时,可以在本设备上为指定流分类的报文配置封装外层VLAN标签,以便于下游设备进行识别。

(12)禁止MAC地址学习。禁止MAC地址学习是指设备不再学习符合流分类规则的报文的MAC地址。在网络比较稳定,报文的MAC地址相对固定的情况下,为了节省MAC地址表项的开支,提高设备的运行效率,可以去使能MAC地址学习功能。

(13)Netstream统计采样。对匹配流分类的流量使用Netstream统计采样的方法,通过设定适当的统计采样方式及采样间隔,只对匹配流分类的IPv4报文进行流信息统计分析,收集到的统计信息可以基本反映该流的流量状况,同时也可降低使能NetStream功能对设备性能的影响。

3、流策略

流策略是将流分类和流行绑定后形成的完整的策略。通过将流策略应用到接口、全局、单板或VLAN,实现了针对不同业务的差分服务。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: