概述
在QoS各个组件在设备上的处理顺序中,如下图所示,拥塞避免和拥塞管理主要针对是设备接口的队列。简单来说,拥塞避免是采用丢弃策略减少进入队列中的报文,拥塞管理是采用调度策略调出队列中的报文,通过两种方式从而控制网络中出现的拥塞,提升网络的服务质量。
那么,拥塞避免有哪些丢弃策略呢?拥塞管理有哪些调度策略呢?它们是如何配置的呢?结合本期文章,让我们一起学习、总结。
拥塞避免
拥塞避免概述
拥塞避免(Congestion Avoidance)是指通过监视网络资源(如队列或内存缓冲区)的使用情况,在拥塞发生或有加剧的趋势时主动丢弃报文,通过调整网络的流量来解除网络过载的一种流控机制。它常用的两种丢弃报文方式为:尾部丢包策略和WRED。
尾部丢包策略
尾部丢弃(Tail-Drop)是一种传统的丢包策略。当队列的长度达到最大值后,所有新入队列的报文(缓存在队列尾部)都将被丢弃。
这种丢弃策略会引发TCP全局同步现象:当队列同时丢弃多个TCP连接的报文时,将造成多个TCP连接同时进入拥塞避免和慢启动状态以降低并调整流量,而后又会在某个时间同时出现流量高峰。如此反复,使网络流量忽大忽小,网络不停震荡。
WRED
WRED由RED发展演进而来,它的英文全称:Weighted Random Early Detection,中文全称:加权随机先期检测,它是基于丢弃参数随机丢弃报文。考虑到高优先级报文的利益并使其被丢弃的概率相对较小,WRED可以为不同业务的报文指定不同的丢弃策略。此外,通过随机丢弃报文,让多个TCP连接不同时降低发送速度,避免了TCP全局同步现象。
WRED技术为每个队列的长度都设定了阈值上下限,并规定:
当队列的长度小于阈值下限时,不丢弃报文。
当队列的长度大于阈值上限时,丢弃所有新收到的报文。
当队列的长度在阈值下限和阈值上限之间时,开始随机丢弃新收到的报文。队列越长,报文被丢弃的概率越高。
关于拥塞避免,华三、华为交换机的接口默认采用尾部丢弃的丢弃策略。相对于拥塞管理来讲,拥塞避免一般实际配置使用较少,在此不做过多赘述。
拥塞管理
拥塞管理概述
拥塞管理的中心内容就是当拥塞发生时如何制定一个资源的调度策略,以决定报文转发的处理次序。设备上,每个接口出方向都拥有8个队列,以队列索引号进行标识,队列索引号分别为0、1、2、3、4、5、6、7。设备根据本地优先级和队列之间的映射关系,自动将分类后的报文流送入各队列,然后按照各种队列调度机制进行调度。常见的队列调度机制有PQ/SP(华为定义是PQ、华三定义是SP)、WRR、WDRR、WFQ、PQ+WDRR、PQ+WRR和PQ+WFQ。
PQ/SP
优先队列PQ/SP调度,就是严格按照队列优先级的高低顺序进行调度。只有高优先级队列中的报文全部调度完毕后,低优先级队列才有调度机会。
采用PQ/SP调度方式,将时延敏感业务放入高优先级队列,将其它业务放入低优先级队列,从而确保时延敏感业务被优先调度。
PQ/SP调度的缺点是:拥塞发生时,如果高优先级队列中长时间有报文存在,那么低优先级队列中的报文就会得不到调度。
WRR
加权循环调度WRR(Weight Round Robin)在循环调度RR(Round Robin)的基础上演变而来,在队列之间进行轮流调度,根据每个队列的权重来调度各队列中的报文流。实际上,RR调度相当于权值为1的WRR调度。
在进行WRR调度时,设备根据每个队列的权值进行轮循调度。调度一轮权值减一,权值减到零的队列不参加调度,当所有队列的权限减到0时,开始下一轮的调度。例如,用户根据需要为接口上8个队列指定的权值分别为2、2、1、1、2、1、2和1,按照WRR方式进行调度的结果入下图所示。
从统计上看,各队列中的报文流被调度的次数与该队列的权值成正比,权值越大被调度的次数相对越多。由于WRR调度的以报文为单位,因此每个队列没有固定的带宽,同等调度机会下大尺寸报文获得的实际带宽要大于小尺寸报文获得的带宽。
WRR调度避免了采用PQ调度时发生拥塞的情况下低优先级队列中的报文长时间得不到服务的缺点。WRR调度还有一个优点是,虽然多个队列的调度是轮询进行的,但对每个队列不是固定地分配服务时间片——如果某个队列为空,那么马上换到下一个队列调度,这样带宽资源可以得到充分的利用。但WRR调度无法使低延时需求业务得到及时调度。
WDRR
备注:此种调度机制,华三交换机不支持。
加权赤字轮询调度WDRR(Weighted Deficit Round Robin)调度实现原理与WRR调度基本相同。
WDRR调度与WRR调度的区别是:WRR调度是按照报文个数进行调度,而WDRR是按照报文长度进行调度。如果报文长度超过了队列的调度能力,WDRR调度允许出现负权重,以保证长报文也能够得到调度。但下次轮询调度时该队列将不会被调度,直到权重为正,该队列才会参与WDRR调度。
WDRR调度避免了采用PQ调度时发生拥塞的情况下低优先级队列中的报文长时间得不到服务的缺点,也避免了各队列报文长度不等或变化较大时,WRR调度不能按配置比例分配带宽资源的缺点。但是,WDRR调度也具有时延敏感业务(如语音)得不到及时调度的缺点。
WFQ
公平队列FQ(Fair Queue)的目的是尽可能公平地分享网络资源,使所有流的延迟和抖动达到最优,让不同队列获得公平的调度机会。WFQ(Weighted Fair Queue)调度即加权公平队列调度,在FQ的基础上增加了优先权方面的考虑,使高优先权的报文获得优先调度的机会多于低优先权的报文。
WFQ能够按流的“会话”信息(协议类型、源和目的TCP或UDP端口号、源和目的IP地址、ToS域中的优先级位等)自动进行流分类,并且尽可能多地提供队列,以将每个流均匀地放入不同队列中,从而在总体上均衡各个流的延迟。在出队的时候,WFQ按流的优先级(precedence)来分配每个流应占有出口的带宽。优先级的数值越小,所得的带宽越少。优先级的数值越大,所得的带宽越多。
PQ+WRR/PQ+WDRR/PQ+WFQ
PQ调度和WRR/WDRR/WFQ调度各有优缺点。单纯采用PQ调度时,低优先级队列中的报文长期得不到带宽,而单纯采用WRR/WDRR/WFQ调度时低延时需求业务得不到优先调度,PQ+WRR/PQ+WDRR/PQ+WFQ调度方式则将前两种调度方式结合起来,不仅能发挥两种调度的优势,而且能克服两种调度各自的缺点。
用户可以借助PQ+WRR/PQ+WDRR/PQ+WFQ调度方式,将重要的协议报文和时延敏感业务报文放入采用PQ调度的队列中,并为该队列分配指定带宽;而将其他报文按各自的优先级放入采用WRR/WDRR/WFQ调度的各队列中,按照权值对各队列进行循环调度。
拥塞管理-华为交换机配置
拥塞管理-华为交换机默认配置
在华为交换机通过命令“dis qos configuration interface GigabitEthernet 0/0/7”可查看G0/0/7接口出队列拥塞管理的默认配置。
如下图所示,华为交换机默认采用“WRR”调度机制,并且,每个队列分配的权重都是1,。
拥塞管理-华为交换机配置示例
鉴于华为交换机S5720-36C-EI-AC不支持基于调度模板配置拥塞管理,因此就不举例说明了。
华为交换机基于调度模板或接口配置拥塞管理的逻辑与华三交换机类似,具体可参见“拥塞管理-华三交换机配置示例”。
拥塞管理-华三交换机配置
拥塞管理-华三交换机默认配置
在华三交换机通过命令“dis qos queue interface GigabitEthernet 1/0/7”可查看G1/0/7接口出队列拥塞管理的默认配置。
如下图所示,华三交换机默认也采用“WRR”调度机制,但是,随着队列索引号的增大,队列所分配的权重越大。
拥塞管理-华三交换机配置示例
示例1:创建调度模板,具体的调度策略,如下表所示,应用于接口G1/0/7,查看配置后的效果。
队列ID | 队列名称 | 调度机制 |
be | WRR,权值1 | |
1 | af1 | WRR,权值2 |
2 | af2 | WRR,权值3 |
3 | af3 | WRR,权值5 |
4 | af4 | WRR,权值10 |
5 | ef | WRR,权值15 |
6 | cs6 | sp |
7 | cs7 | sp |
#创建调度模板sp_wrr
[H3C_S5560X-54C-EI]qos qmprofile sp_wrr
[H3C_S5560X-54C-EI-qmprofile-sp_wrr]queue 0 wrr group 1 weight 1
[H3C_S5560X-54C-EI-qmprofile-sp_wrr]queue 1 wrr group 1 weight 2
[H3C_S5560X-54C-EI-qmprofile-sp_wrr]queue 2 wrr group 1 weight 3
[H3C_S5560X-54C-EI-qmprofile-sp_wrr]queue 3 wrr group 1 weight 5
[H3C_S5560X-54C-EI-qmprofile-sp_wrr]queue 4 wrr group 1 weight 10
[H3C_S5560X-54C-EI-qmprofile-sp_wrr]queue 5 wrr group 1 weight 15
[H3C_S5560X-54C-EI-qmprofile-sp_wrr]queue 6 sp
[H3C_S5560X-54C-EI-qmprofile-sp_wrr]queue 7 sp
[H3C_S5560X-54C-EI-qmprofile-sp_wrr]dis this
#
qos qmprofile sp_wrr
queue be wrr group 1 weight 1
queue af1 wrr group 1 weight 2
queue af2 wrr group 1 weight 3
queue af3 wrr group 1 weight 5
queue af4 wrr group 1 weight 10
queue ef wrr group 1 weight 15
#
return
[H3C_S5560X-54C-EI-qmprofile-sp_wrr]quit
#调度模板应用于接口G1/0/7
[H3C_S5560X-54C-EI]interface GigabitEthernet 1/0/7
[H3C_S5560X-54C-EI-GigabitEthernet1/0/7]qos apply qmprofile sp_wrr
[H3C_S5560X-54C-EI-GigabitEthernet1/0/7]quit
[H3C_S5560X-54C-EI]
#查看接口G1/0/7配置调度模板后的效果
[H3C_S5560X-54C-EI]dis qos queue interface GigabitEthernet 1/0/7
Interface: GigabitEthernet1/0/7
Output queue: Weighted Round Robin queuing
Queue ID Queue name Group Weight
---------------------------------------------------
0 be 1 1
1 af1 1 2
2 af2 1 3
3 af3 1 5
4 af4 1 10
5 ef 1 15
6 cs6 sp N/A
7 cs7 sp N/A
[H3C_S5560X-54C-EI]
示例2:直接修改接口G1/0/7队列调度策略,具体的调度策略如上表所示,查看配置后的效果。
[H3C_S5560X-54C-EI]interface GigabitEthernet 1/0/7
[H3C_S5560X-54C-EI-GigabitEthernet1/0/7]qos wrr 0 group 1 weight 1
[H3C_S5560X-54C-EI-GigabitEthernet1/0/7]qos wrr 1 group 1 weight 2
[H3C_S5560X-54C-EI-GigabitEthernet1/0/7]qos wrr 2 group 1 weight 3
[H3C_S5560X-54C-EI-GigabitEthernet1/0/7]qos wrr 3 group 1 weight 5
[H3C_S5560X-54C-EI-GigabitEthernet1/0/7]qos wrr 4 group 1 weight 10
[H3C_S5560X-54C-EI-GigabitEthernet1/0/7]qos wrr 5 group 1 weight 15
[H3C_S5560X-54C-EI-GigabitEthernet1/0/7] qos wrr cs6 group sp
[H3C_S5560X-54C-EI-GigabitEthernet1/0/7] qos wrr cs7 group sp
[H3C_S5560X-54C-EI-GigabitEthernet1/0/7]dis this
#
interface GigabitEthernet1/0/7
port link-mode bridge
qos wrr af3 group 1 weight 5
qos wrr af4 group 1 weight 10
qos wrr ef group 1 weight 15
qos wrr cs6 group sp
qos wrr cs7 group sp
#
return
[H3C_S5560X-54C-EI-GigabitEthernet1/0/7]quit
[H3C_S5560X-54C-EI]dis qos queue interface GigabitEthernet 1/0/7
Interface: GigabitEthernet1/0/7
Output queue: Weighted Round Robin queuing
Queue ID Queue name Group Weight
---------------------------------------------------
0 be 1 1
1 af1 1 2
2 af2 1 3
3 af3 1 5
4 af4 1 10
5 ef 1 15
6 cs6 sp N/A
7 cs7 sp N/A
[H3C_S5560X-54C-EI]
两种配置示例,对于接口G1/0/7来讲,实现的目标是一致的。
总结
通过本文学习、总结,希望各位小伙有如下收获:
拥塞避免是采用丢弃策略减少进入队列中的报文,拥塞管理是采用调度策略调出队列中的报文;
拥塞避免的丢失策略,拥塞管理的调度策略。