QoS服务质量八拥塞避免

4、Qos拥塞避免

什么是拥塞避免?拥塞避免主要是在发生拥塞的时候通过丢弃报文来解除流量过载。通过丢弃报文缓解下游设备的流量压力。

两种丢弃策略:

  • 尾丢弃
  • WRED

4.1、 尾丢弃

尾丢弃(Tail Drop,尾丢弃)指当队列被填满时,所有后续进入的报文会因无法入队而丢弃,从队尾开始丢弃的方式。由于是对队列尾部的数据报文将被全部丢弃,直到拥塞解除。因此不对报文进行任何方式的区分,也即不对服务等级进行区分。
在这里插入图片描述

尾丢弃后果:高延迟、高抖动、丧失服务保证、TCP全局同步和TCP"饿死"等。
以上后果会导致应用超时、数据重传、业务不可用等数据传输过程的现象,数据超时重传会进一步加重网络拥塞的发生。

TCP的拥塞控制:
TCP的拥塞控制
横坐标为提供的负载,代表单位时间内输入给网络的分组的数目;
纵坐标是吞吐量,代表单位时间内从网络输出的分组数目。
TCP拥塞窗口

tcp全局同步
这种现象是因为当队列被填满时,所有报文被丢弃,这就导致TCP流的报文在此刻全部被丢弃,传输中断,这时多个 TCP 连接同时进入拥塞避免和慢启动状态,以降低并调整流量。链路由于TCP报文减少,带宽变得充足,不再拥塞,前面中断了的TCP流在这一刻发起联系报文,根据TCP快重传和快恢复特性并发送数据。同时流的传输又会造成拥塞。这种现象不断反复发生,使网络流量忽大忽小,影响链路利用率。这种现象称为TCP全局同步。

tcp全局同步

TCP饥饿
尾丢弃造成TCP流量之间分配带宽不均衡,一些优先级高报文的流量会占用大部分的带宽,而普通的TCP流量分配不了带宽而“饿死”。

当网路中既有TCP又有UDP流量的时候,TCP流量因为窗口机制(尾丢弃造成滑动窗口减小)而释放带宽,UDP流量没有窗口机制,于是UDP流量会迅速占用TCP释放的带宽,最终造成UDP流量占用了所有带宽而TCP流量因没有带宽分配而“饿死”。

无差别丢弃
无差别的丢弃,没有区分各种不同优先级的报文。

4.2、 RED技术原理

RED(Random Early Detection,随机早期检测)较好的解决了TCP全局同步的问题,具体原理是在队列被填满前就开始丢弃报文,并且随着队列长度的增加(即可能发生拥塞)报文被丢弃的概率就会变得越大,当超过一个最大丢弃概率时再全部丢弃来到的报文。

在这里插入图片描述

随机早期检测,随机指丢弃的方式,是以报文为单位,不是以流为单位。早期指发生在拥塞之前就进行,报文不是全部丢弃而是有所“选择”。通过随机早期检测可以避免TCP流的报文在同一时间被丢弃,也就不会产生TCP全局同步的问题。

RED的三个重要参数
(1)、最小门限THmin:最低丢弃门限。平均队列长度超过此门限时,若平均队列长度小于最小门限THmin,则把新到达的分组放入队列进行排队;平均队列长度超过此门限时,则按照某一概率将新到达的分组丢弃。

(2)、最大门限THmax(high-limit):若平均队列长度超过最大门限THmax,则把新到达的分组丢弃。

(3)、丢弃概率Pmax(low-limit):最大丢弃概率。即RED丢弃报文条件下被丢弃的最大概率,最大值通常不超过100%。

平均队列长度avg、丢弃概率 p 与 THmin 和 Thmax 的关系

  • 当 avg > Thmin 时,丢弃概率 p = 0。
  • 当 avg < Thmax 时,丢弃概率 p = 1。
  • 当 THmin < avg < THmax时, 0 < p < 1 。

概率p、最大门限THmax和最小门限THmin

图示分组丢弃概率p、最大门限THmax和最小门限THmin的关系
绿色报文:当avg > Thmin时标记为绿色,不进行丢弃
黄色报文:当THmin < avg < THmax时,报文被标记为黄色,进行概率丢弃。并且,队列的长队越长,丢弃的概率就越高。
红色报文:当avg < Thmax时,报文被标记为红色,并且进行全部丢弃。

RED随机早期检测

平均队列长度的计算
平均队列长度avg=old_avg x (1-2-n) + current_queue_size x 2-n
其中,n为用户配置值,即weighting-constant加权常数。

当前队伍的丢弃概率为
P = Pmax x (avg-MinTheshold)/(MaxTheshold- MinTheshold)

使用RED技术的结果:
RED丢弃减少了链路的剧烈振荡,提高了线路的带宽利用率和吞吐量。减少了延迟和抖动。
在这里插入图片描述
RED技术的缺点:

  • 公平性问题
    对于不响应拥塞通知的连接,RED算法无法有效处理,因此这样的连接经常会挤占大量的网络带宽,导致了各种连接不公平地共享带宽。
  • 参数设置问题
    RED算法对参数设置很敏感,两个门限值和最大丢包概率的细微变化经常是对网络性能造成很大影响,如果根据具体业务环境选择最合适的参数是RED存在的一个重要问题。
  • 网路性能问题
    RED算法控制的平均队列长度经常会随着连接数目的增加而不断增大,造成传输时延抖动,引起网络性能不稳定。

4.3、 WRED技术原理

WRED(Weighted RED,加权随机早期检测)对比RED解决重要和紧急报文被丢弃的问题。允许不同优先级的报文配置不同的RED参数,从而保证不同优先级报文获得不同的服务。当发生拥塞时,实时性的业务带宽能够得到最大的保证。

WRED支持基于DSCP优先级的WRED和基于IP优先级的WRED,允许为不同优先级的报文配置不同的RED参数,从而保证了不同重要程度的报文获得不同的服务。

基于IP优先级的报文在最低丢弃门限不同时的丢弃曲线:
IP优先级WRED

IP Precedence越高的队列其丢弃率就越低,这意味着报文丢弃得越少,对于重要和紧急的报文得到优先保障。

基于DSCP优先级的报文在最低丢弃门限不同时的丢弃曲线:
DSCP优先级WRED

可以看出EF报文具有最小的丢弃概率和丢弃区间。

WFQ队列,CBQ队列内AF队列支持WRED、且WRED区分三种丢弃优先级(对应红、黄、绿三种报文颜色),允许用户对每种丢弃优先级设定高低门限百分比和丢弃概率,因此WRED可以对各种业务流以及同一业务流内部不同的丢弃级别报文进行不同概率的丢弃。

对于接收的报文,实际应用时,WRED低门限百分比建议从50%开始取值,根据不同颜色的丢弃优先级逐级调整。一般推荐绿色报文设置的丢弃概率比较小,高、低门限值比较大;黄色报文次之;红色报文设置的丢弃概率最大,高、低门限值最小。
在这里插入图片描述

WRED队列最大长度的设置
队列不能设置过短。如果某队列过短,缓存空间过小,容易造成丢包,流量即使速率不大也容纳不下。队列越短,容忍的突发量越小。队列越大,容忍的突发量越大。

队列也不能设置过长。如果队列太长,时延过大。尤其对于TCP应用,通信两端会预测网络拥塞情况,在发送完一个报文后,启动超时定期器等待对方应答,如果在定时器超时前没有等到应答,发送方会重发报文。如果报文在网络中被缓存的时间过长,不丢弃与丢弃没有区别。

推荐高优先级队列(CS7、CS6、EF)的长度设置为10ms * 队列输出带宽;低优先级队列的长度设置为100ms * 队列输出带宽。

4.3.1、WRED配置

1、配置基于队列的WRED
(1).创建一个丢弃模板
命令:drop-profile drop-profile-name

(可选)指定当前WRED丢弃模板基于DSCP优先级或IP优先级进行丢弃。
命令:wred { dscp | ip-precedence }

配置基于DSCP优先级或IP优先级的WRED参数。

  • 配置基于DSCP优先级的WRED参数。
    dscp { dscp-value1 [ to dscp-value2 ] } &<1-10> low-limit low-limit-percentage high-limit high-limit-percentage discard-percentage discard-percentage
  • 配置基于IP优先级的WRED参数。
    ip-precedence { ip-precedence-value1 [ to ip-precedence-value2 ] } &<1-10> low-limit low-limit-percentage high-limit high-limit-percentage discard-percentage discard-percentage

(2).应用丢弃模板
进入队列模板视图。
命令:qos queue-profile queue-profile-name

在队列模板中为指定队列配置WFQ调度模式。
命令:schedule wfq start-queue-index [ to end-queue-index ]

在队列模板中为指定队列绑定丢弃模板。
命令:queue { start-queue-index [ to end-queue-index ] } &<1–10> drop-profile drop-profile-name

进入需要配置拥塞避免的接口视图或子接口视图。
命令:interface interface-type interface-number[.subinterface-number ]

在接口或子接口下应用队列模板。
命令:qos queue-profile queue-profile-name

案例配置:
创建队列模板queue-profile1,配置各队列的调度模式。

[RouterA] qos queue-profile queue-profile1
[RouterA-qos-queue-profile-queue-profile1] schedule pq 5 wfq 3 to 4

应用队列模板
在队列模板中绑定丢弃模板。

[RouterA-qos-queue-profile-queue-profile1] queue 4 drop-profile video
[RouterA-qos-queue-profile-queue-profile1] queue 3 drop-profile data

把队列模板应用到RouterA的接口GE3/0/0上。

[RouterA] interface gigabitethernet 3/0/0
[RouterA-GigabitEthernet3/0/0] qos queue-profile queue-profile1

查看在接口上应用的队列模板信息。

[RouterA] display qos queue-profile queue-profile1

查看在接口上应用的WRED丢弃模板信息。

[RouterA] display drop-profile video
[RouterA] display drop-profile data

2、配置MQC实现拥塞避免
(1).配置丢弃模板

[Huawei]drop-profile AFW           //定义丢弃模板为AF11
[Huawei-drop-profile-AFW]wred dscp       //基于dscp丢弃(默认基于IPP)
#定义dscp af21的数据流最小门限30%,最高门限95%,丢弃概率30%
[Huawei-drop-profile-AFW]dscp af21 low-limit 30 high-limit 95 discard-percentage 30

(2).配置流分类
(3).配置流行为 流行为必须已经配置了queue af或queue wfq。

[Huawei]traffic behavior AFW
[Huawei-behavior-AFW]drop-profile AFW           //流行为下调用WRED

(4).配置流策略
(5).应用流策略

4.2、 队列缓存对时延和抖动的影响

1、队列缓存对时延的影响:

当设备收到报文时,将报文放入缓存,网络不拥塞时,报文能被及时转发,不会在缓存中产生堆积。这种情况下报文在缓存中的时间为μs级,延迟时间可以忽略不计。

当网络拥塞时,报文在缓存中产生堆积,被延迟处理,延迟时间会大幅增加。从报文进入缓存到报文被调度出去的时间间隔称为缓存时延(也称为队列时延)。

缓存时延的大小主要取决于队列的缓存长度以及该队列获得的输出带宽,可以使用如下公式计算缓存时延的最大值:

缓存时延最大值 = 队列缓存长度÷队列输出带宽

队列缓存长度单位是Byte;队列输出带宽即队列整形速率,单位是bit/s,因此上述公式可表达为:

缓存时延最大值 = 队列缓存长度×8÷队列整形速率

从上述公式可以看出,缓存越大,缓存时延越大。

2、队列缓存对抖动的影响

抖动,也叫做延时的变化,是指同一业务流中不同分组所呈现的时延不同。数据包离开发送端时,是按照一定的间隔均匀发送,然而在通过网络时,这一均匀的间隔因数据包经历不同的延迟而遭到破坏,从而产生抖动。抖动会对语音、视频流等实时业务造成影响,分组到达时间的差异将在话音或视像中造成断续。为了解决抖动问题,通常语音/视频的接收终端会有去抖动缓存机制,但如果网络抖动过于严重,超出了接收终端的容忍度,依然会导致语音或视像的失真和断续。

网络抖动严重的原因主要是IP网络路由状态频繁变化,使得各数据包分别经由不同物理路由到达;或者网络节点流量拥塞,数据包在各节点缓存时间过长,使得数据包到达接收端的时间差较大。其中,后者是较为常见的原因。

根据抖动的定义可知:抖动=时延差。时延差越大,则抖动越大。那么,如果把时延都控制的很小,那时延差也就得到控制。即,通过控制时延,可间接控制抖动。例如,把时延控制在5µs之内,那么时延差也就控制在5µs,即抖动也控制在5µs之内。

缓存越大,缓存时延越大。那么,适当控制缓存长度,可控制时延,从而控制抖动。

3、队列缓存的设置

队列不能设置过短。如果某队列过短,缓存空间过小,流量即使速率不大也容纳不下,容易造成丢包,从而给使用TCP协议传输的业务带来抖动。

队列也不能设置过长。如果队列太长,时延过大。尤其对于TCP应用,通信两端会预测网络拥塞情况,在发送完一个报文后,启动超时定期器等待对方应答,如果在定时器超时前没有等到应答,发送方会重发报文。如果报文在网络中被缓存的时间过长,不丢弃与丢弃没有区别。

“队列缓存对时延的影响”中介绍过:

缓存时延最大值 = 队列缓存长度×8÷队列整形速率

此公式可推断出:

队列缓存长度(Byte) =队列整形速率(bit/s)×业务能容忍的最大时延(s)÷8

低优先级业务的时延通常要求≤100ms,高优先级业务的时延要求≤10ms。结合上述公式,推荐高优先级队列(CS7、CS6、EF)的长度设置为10ms×队列整形速率;低优先级队列的长度设置为100ms×队列整形速率。

5、基于DiffServ模型的QoS组成结构

DiffServ模型的QoS组成

  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

0与1之旅

创作不易请给予一点帮助和鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值