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:

  • 丢弃概率分母,用于设定平均队列长度接近高限时的最大丢包概率
  • 值大意味着丢包率小

最新文章

  1. 航旅事业群面试(li)
  2. MySQL表结构及数据的备份
  3. MVC 3.0 Tree
  4. C# 通过WebService方式 IIS发布网站 上传文件到服务器
  5. angularJS中的$apply(),$digest(),$watch()
  6. uniq-sort-awk
  7. [leetcode]_Remove Nth Node From End of List
  8. android 的生命周期自我理解
  9. iOS开发——UI篇Swift篇&玩转UItableView(二)高级功能
  10. 【转】Eclipse中一键调用javah生成jni的头文件
  11. 又优化了一下 Android ListView 异步加载图片
  12. storyboard页面跳转传值
  13. 【NO.12-2】jmeter-执行脚本
  14. 高性能分布式执行框架——Ray
  15. django从0到1搭建网站
  16. 重装了Devexpress后项目报Dll引用找不到问题解决办法
  17. 【PAT】B1069 微博转发抽奖(20 分)
  18. docker 安装完mysql 后客户端无法访问
  19. JAVA第十周《网络编程》学习内容总结
  20. Python3基础 raise + 指定类型异常+异常的解释 产生特定类型异常

热门文章

  1. jQuery的事件绑定和解绑
  2. XML布局之路
  3. LVM逻辑卷的管理和使用
  4. poj 1159 Palindrome 【LCS】
  5. csv文件已经python内置csv模块
  6. 说说application/x-www-form-urlencoded和application/json的区别
  7. 【洛谷P2258】子矩阵
  8. HDU 1275 两车追及或相遇问题(相遇和追及公式)
  9. iOS中break、continue、return三者的区别
  10. NHibernate学习过程笔记