首页 > 技术文章 > QoS---拥塞管理、拥塞避免

csdragon 2021-03-16 00:32 原文

实现拥塞管理使用队列调度技术
实现拥塞避免使用尾丢弃

一、拥塞管理

拥塞产生的场景:
1、从高速率链路迁到低速率链路
2、流量汇聚,从一个不满足现有带宽需求的接口转发出去

通过分类和标记,将不同业务的流量报文划分在不同队列中。不同队列的报文如何从接口发出、先后顺序如何。如果出现大量的业务流量需要从同一个接口发出,如何保证高优先级的流量显出,又如何保证低优先级的流量可以顺利发出。这里就涉及到队列调度技术

队列调度技术:在设备的出方向实现,利用设备的缓存形成软件队列(只在出方向存在缓存,入方向是没有缓存技术)

使用何种队列调度技术需要结合实际的网络环境来选择,可以针对

常见队列调度技术

1.FIFO

First In First Out

  • 采用尽力而为服务模型

  • 单队列技术,默认的队列技术

  • 好处:实现机制比较简单,尽最大可能转发,速度快
    缺点:无法对业务流量进行差分服务

FIFO.png

2.PQ

  • Priority Queuing

  • 优先级队列技术

  • 先转发优先级最高的队列所有报文,再转发下一个等级的队列的报文。

  • 好处:业务流量进行差分服务,保障关键业务转发
    缺点:可能会造成低优先级队列的饿死现象。

PQ.png

PQ队列主要应用在高优先级队列中,针对时延比较敏感的流量

案例配置

qos queue-profile huawei ###队列模板
schedule pq 5 to 7  ###---5到7队列为PQ队列
interface GigabitEthernet0/0/1
qos queue-profile huawei  ##出接口调用

3.RR

  • Round Robin

  • 轮询队列技术

  • 在调度时,会轮流问询每个队列,每个队列再一次调度中存在一次机会,当所有队列轮询完毕,该次调度完成

  • 是一种公平队列(无法区别对待高优先级与低优先级的报文

4.WRR

  • Weighted Round Robin

  • 加权轮询队列技术

实现方式:

  • 根据不同等级的队列分配权重值,优先级越高权重值越高,每次调度权重值-1.直到所有队列的权重值为0,一轮调度技术结束,重新开始轮询。
    • 当所有的队列,权重值为0时,该次调度结束,恢复所配置的权重值。进行下一轮调度

好处:解决PQ的低优先级饿死现象
缺点:只能解决调度个数,由于是基于报文个数调度,当数据包尺寸大小不一致,会出现不平等调度(低优先级队列发送的数据包比高优先级队列的数据包大)

WRR.png

案例配置

qos queue-profile huawei1
queue 2 weight 20    ##根据不同队列设置权重值,默认为10,配置范围1-100
queue 3 weight 30
queue 4 weight 40
schedule wrr 0 to 4
interface g0/0/2
qos queue-profile huawei1  ##出接口调用

5.WFQ

  • Weighted Fair Queuing

  • 加权公平队列技术

与WRR的区别在于实现了小包优先转发

实现方式:

  • 根据不同等级的队列分配权重值,优先级越高权重值越高,根据权重值分配带宽,重值越高分配带宽也越高,小包优先。
    • 采用轮询机制实现,小包优先级调度
    • 当所有队列的调度值小于或者等于0时,该次调度结束
    • 第二次调度,所有队列恢复原有权重值,但上一次调度结束后,权重值小于0的,需要补回该权重值

WFQ.png

案例配置

qos queue-profile huawei2
queue 2 weight 20    ##根据不同队列设置权重值,默认为10,配置范围1-100
queue 3 weight 30
queue 4 weight 40 
schedule wfq 0 to 4 pq 5 to 7		##指定队列技术
interface g0/0/0
qos queue-profile huawei2		##出接口调用

6.CBQ

通过复杂流分类形成流队列,根据调度技术转发流量

  • 基于类的队列技术

  • 用户根据复杂流分类,直接放入对应的队列

    • 可以存在多个EF,AF等队列

CBQ首先根据IP优先级或者DSCP优先级、入接口、IP报文的五元组等规则来对报文进行分类,然后让不同类别的报文进入不同的队列

三种队列、一种特殊队列
  • EF队列
    • 具有绝对优先转发的队列
    • 配置时指定该队列的最大带宽
  • LLQ队列
    • 特殊的EF队列
    • 时延最低
    • 最优先转发,不能抢占闲时带宽
  • AF队列
    • 配置时指定该队列的最小(保证)带宽,如果接口存在剩余带宽,可以分享带宽(给EF)
  • BF队列
    • 默认队列
    • 没有被匹配的队列默认进入该队列,按照接口剩余带宽还有WFQ队列技术转发

CBQ.png
优点:支持自定义类,可为不同的业务定义不同的调度策略。使用灵活

缺点:数据报文每次进入设备,都要进行ACL匹配。消耗设备性能

案例配置

##创建匹配规则
acl number 2000  
rule 5 permit source 192.168.1.0 0.0.0.255 
##创建流分类
traffic classifier CBQ 
if-match acl 2000
##创建流行为
traffic behavior CBQ
queue ef bandwidth 10
##创建流策略
traffic policy CBQ
classifier CBQ behavior CBQ
##对应接口上调用流策略
interface g0/0/0
traffic-policy 1 outbound

总览

类型优点缺点
FIFO实现简单,处理速度快不能有差别地对待优先级不同的报文
PQ低延迟业务能得到保障低优先级队列可能出现“饿死”现象
WRR避免了低优先级队列的“饿死”现象不平等调度;低时延业务得不到保障
WFQ按权重实现公平调度;自动分类,配置简单低时延业务得不到保障;无法支持自定义类
PQ+WFQ低时延业务能得到保障;按权重实现公平调度等无法支持自定义类
CBQ支持自定义类耗费较多的系统资源

PQ+其他队列调度技术

PQ+WFQ.png

  • 优点:可保证低时延业务得到及时调度;实现按权重分配带宽等。

  • 缺点:无法实现根据用户自定义灵活分类报文的需求。

用户可以借助“PQ+WRR/PQ+DRR/PQ+WFQ调度”调度方式,将高优先级队列使用PQ,剩余队列使用轮询队列,一个队列模板不能同时存在多种轮询队列;PQ队列必须高于轮询队列

 qos queue-profile huawei2
 schedule wrr 3 to 4 pq 5 to 7

二、拥塞避免

每个队列都是有长度限制,如果队列已满,后进来报文就会被执行尾丢弃

尾丢弃缺点

  • 无法对报文进行差分丢弃
    • 无差别丢弃.png
  • 引发TCP全局同步
    • TCP刚开始进行慢启动状态,但TCP报文超过接口带宽,造成网络拥塞,由于TCP滑动窗口减半机制,造成TCP整体流量同时下降,等到网络不拥塞,TCP又尝试慢启动状态,可能又会触发TCP滑动窗口减半机制,周而复始
    • 造成接口带宽利用率不高
    • TCP全局同步1.png
      TCP全局同步2.png]
  • 造成TCP饿死现象
    • TCP有滑动窗口减半机制,UDP无滑动窗口减半机制,UDP流量会不断抢占TCP带宽
      -TCP饿死.png]

解决方法

1.RED

随机丢弃(早期使用)

为避免TCP全局同步,可在队列未装满时先随机丢弃一部分报文。通过预先降低一部分TCP连接的传输速率来尽可能延缓TCP全局同步的到来

队列还没满开始丢弃,丢弃模板(下限值,上限值,最大丢弃概率),如果报文不超过队列长度下限值不丢弃,如果报文在下限值和上限值之间,按照丢弃概率去丢弃报文,如果超出上限值,丢弃所有报文。

  • 当队列的长度小于低门限时,不丢弃报文。
  • 当队列的长度大于高门限时,丢弃所有收到的报文。
  • 当队列的长度在低门限和高门限之间时,开始随机丢弃到来的报文。方法是为每个到来的报文赋予一个随机数,并用该随机数与当前队列的丢弃概率比较,如果大于丢弃概率则报文被丢弃。队列越长,报文被丢弃的概率越高

RED.png
RED无法解决会丢弃重要流量TCP饿死现象

2.WRED

加权早期随机丢弃

针对不同业务类型设置不同丢弃模板(比如针对重要数据丢弃概率降低)

  • 基于权重的早期随机检测
  • 根据不同优先级(针对三层流量IPP、DSCP)制定不同的丢弃策略
    • 低门限(队列到达该长度时开始丢弃)
    • 高门限(队列到达该长度时完全丢弃)
    • 丢弃概率(门限之间的丢弃概率)

WRED.png

案例配置

WRED配置.png

##创建三个丢弃模板,voice不需要
drop-profile manager 	
wred dscp
dscp 8 low-limit 50 high-limit 70 discard-percentage 10		

drop-profile ftp
wred dscp
dscp 16 low-limit 70 high-limit 90 discard-percentage 10

drop-profile video
wred dscp
dscp 24 low-limit 60 high-limit 80 discard-percentage 20
##创建队列模板
qos queue-profile qos-Huawei
queue 1 drop-profile manager		##在队列模板中针对不同队列使用不同模板
queue 2 drop-profile ftp
queue 3 drop-profile video
interface E1
qos queue-profile qos-Huawei	##接口调用队列模板

问题

1.拥塞管理机制的实现过程分为哪两步?

  • 答:第一步:将准备从一个接口发出的所有报文放入不同的队列中;第二步:根据各队列间的调度机制实现不同报文的差分转发

2.常用的队列技术有哪些?

  • 答:FIFO、PQ、WFQ、PQ+WFQ、CBQ等

推荐阅读