QOS-配置拥塞避免机制
2018年7月7日
20:29
- 尾丢弃及其导致的问题:
- 队列满时路由器进行尾丢弃,即新到的所有数据包都全部丢弃
- 丢弃的结果造成高延迟、高抖动、丧失服务保证、TCP全局同步、TCP饿死等问题,从而导致应用超时、数据重传和实时业务不可用等一系列问题
TCP全局同步:
- 没有差别的丢弃会造成所有TCP流的报文几乎在同一时刻丢弃,TCP又几乎在同一时刻重传。
- TCP窗口会在几乎同一时刻缩小,然后又几乎同一时刻增大
- 这将造成所有TCP连接的流量以相同的“频率”持续震荡。TCP全局同步的结果是TCP传输效率急剧下降,并且带宽的平均利用率大大降低。
解决方法:
- 增加队列长度可以减少丢弃,但无法从根本上解决问题
- 队列长度受限于资源,不能无限制增加
- 增加队列长度也增加了报文的平均延迟和抖动
- 在尾丢弃发生前,使不同TCP连接的报文在不同时刻被丢弃,则各个TCP连接的流量震荡就不会同步。
RED介绍:
- RED(随机早期检测)可以有效防止TCP全局同步。其做法是在队列满之前就对已入队的报文进行随机丢弃
- RED的特点在于“早期”和“随机”,这使得不同的流量在不同的时刻以“无规律”的方式丢弃,从而有效避免了所有的TCP连接发生同步震荡。
- Low-Limit:最低丢弃门限,平均队列长度超过门限时,RED开始丢弃报文,值越低,队列越早开始丢弃报文
- High-Limit:最高丢弃门限,平均队列长度超过此门限时,RED将丢弃所有到来的报文。
- Pmax:最大丢弃概率,即RED丢弃报文条件下报文被丢弃的最大概率,这个值通常不为100%。
- 当前平均队列长度小于Low-Limit时,不丢弃报文
- 当前平均队列长度超过High-Limit时,丢弃所有到来的报文
- 当前平均队列长度在Low-Limit和High-Limit之间时,开始随机丢弃到来的报文。
WRED的原理:
引入:RED很好地解决了TCP全局同步和“饿死”等问题,但由于不能感知业务类型,对报文的丢弃不分轻重稳急,因此并没有解决重要和紧急报文被丢弃的问题。
概念:WRED(加权随机早期检测)它允许不同优先级的报文配置不同的RED参数,从而保证了不同重要程度的报文获得不同的服务,可以DSCP和IP Precedence参数。
- WRED可以对每个优先级分别设定最低丢弃门限、最高丢弃门限和最大丢弃概率。
- 最低丢弃门限越小意味着该队列的报文越早被丢弃,在其他条件相同时总体被丢弃的报文就越多。
- 对AF类型的报文,每一队报文有三个丢弃优先级,可以分别设定其对应不同的底限,从而体现出在丢包概率上的差异。
- EF类型的报文应该保证其具有最小的丢包概率和区间
WRED配置:
基于接口的WRED配置命令:
在接口上使能WRED:
配置计算平均队列长度的指数:
配置各优先级的对应参数:
基于队列的WRED表配置WRED表:
在系统视图下配置WRED表:
配置计算平均队列长度的指数:
配置WRED表的其他参数:
在接口或端口组视图下应用WRED表:
其他类型WRED表的配置命令:
进入WRED表视图:
配置计算平均队列长度的指数:
配置WRED表的其他参数:
在接口或端口组视图下应用WRED表:
WRED显示和维护命令:
显示WRED表:
Weighting-constant:(1~16默认为9)
- 该指数为权重因子,表征了平均队列长度对实际队列度变化的敏感程度
- 较大的n值将使平均队列长度在当前队列长度变化时具有较大的“惯性”
Discard-probability:
- 丢弃概率分母,用于设定平均队列长度接近高限时的最大丢包概率
- 值大意味着丢包率小