Congestion Avoidence

Case Study:Router Interface Congestion
router接口的外出队列满的时候
1> 以后进来的packets都被drop
2>packets 的丢弃可能会导致严重的应用性能的衰减
3> 默认,router进行tail dropping(尾丢弃)
4> 如果配置了WFQ,就可以使用更加智能化的dropping scheme
 
 
Case Study:Tail-Drop Flaws( 缺点)
1>TCP synchronization
2>TCP starvation( 饿死)
3>High delay and jitter
4>No differentiated drop
5>Poor feedback to TCP
 
TCP Synchronization:
TCP Starvation,Delay,and Jitter:
 
Delay: 一个长的队列导致packets排队很长时间,进行导致delay
Starve( 饿死):多个aggressive flows长时间的占用队列,使后边的包不能发送,starve.
Jitter: 传送的速度一会快一会慢.buffer不断的变化.
 
 
Conclusion:
Tail dropping 这种丢弃机制应该避免.
实现的方法是:
在接口接近congestion时就开始丢弃packets , 从而降低TCP会话的速率.因为TCP流量占总的internet的流量的80%,它的速率的降低也就意味着congestion的减少,从而可以不使用tail dropping.
 
 
Case Study:Random Early Detection(RED)
RED 是在队列满之前就开始随机的丢弃packets的机制.
RED 丢弃packets的概率会越来越大
RED 优点:
1> 使TCP会话速率降到匹配输出链路带宽
2> 使平均的队列大小比最大队列长度小得多
 
RED Profile:
Before RED:
After RED:
Case Study:Weighted Random Early Detection
WRED 对每一个wight使用不同的RED原型.
每一个RED原型使用以下三个值来标识:
1>Minimum threshold
2>Maximum threshold
3>Maximum drop probability
Weight 可以是:
1>Ip precedence( 支持8RED原型)
2>DSCP( 支持64RED原型)
 
WRED 丢弃更多的不重要的packets,weight值低的.
 
WRED Profiles:
IP Precedence and Class Selector Profiles:
1> 当平均队列大小>20,IP优先级为0的包就开始被丢弃了
2> 当平均队列大小>22,IP优先级为1的包就开始被丢弃了
................
3> 当平均队列大小>35,IP优先级为7的包就开始被丢弃了
4> 当平均队列大小>37,RSVP流开始被丢弃了
5> 当平均队列大小>40, 所有包就都被丢弃
 
 
DSCP-Based WRED(Expedited Forwarding, 加速转发):
DSCP-Based WRED(Assured Forwarding, 保证转发):
WRED Building Blocks:
最后一步,WRED还要反馈一下平均的队列长度,因为在指定minimum threshold,maximum threshold时都是平均队列长度为单位的threshold ( ).
 
WRED and DWRED Configuration:
Router(config-if)#random-detect  {prec-based | dscp-based}
1> 默认启用基于 IP 优先级的 WRED,prec-based
2> 默认的 WRED 原型被使用
3>Nondistributed WRED 不能与 fancy queueing( 高级队列 ) 一同使用 , 而只能使用 FIFO 队列 .
4>WRED 可以分布式的运行于 VIP-based(Versatile Interface Processor, 通用接口处理器 , 只有高端的设备才有 ) 接口 , 这就是 DWRED( 分布式 WRED). 类似于 dCEF.
5>DWRED 可以与 DWFQ 一同使用 .
 
Changing the WRED Profile:
Router(config-if)#random-detect precedence {precedence} {min-threshold} {max-threshold} {mark-prob-denominator}
改变特定的 IP 优先级的 WRED 原型
Min-threshold max-threshold 都是平均队列大小为单位的 threshold ( )
最大丢弃概率 (maximum drop probability): 1/mark-prob-denominator
配置命令中的 mark-prob-denominator 是上述公式中的分母 , 它用来计算出最大丢弃概率
将所有的 IP 优先级的 RED 原型都配置成相同的 , 就可以将 WRED 变为 RED.
 
 
Changing WRED Sensitivity to Bursts:
Router(config-if)#random-detect exponential-weighting-constant {n}
Exponential-weighting-constant: 指数权重常量
 
WRED 使用平均队列大小决定当前的 WRED mode(no drop,ramdom drop,full drop)
一个高的 N 值允许一个 short bursts:
n 很大时 , 计算出来的新的平均队列大小就比较小 , 进而越远离于 maximum-threshold, 所以它的 ramdom-drop 范围可以很大 , 而不至于到 full-drop, 即可突发量比较大 .
一个低的 N 值使 WRED bursts 更加敏感 , 不允许几乎很小的 bursts
同样 , n 很小时 , 计算出来的新的平均队列大小就比较大 , 进而越接近 maximum-threshold, 所以它的 ramdom-drop 范围就会比较小 , 即可突发量比较小 .
N 值默认为 9, 则新的平均队列大小为 :
这个命令最终实现的是改变计算最新的平均队列大小
 
 
Configuring DSCP-Based WRED:
Router(config-if)#random-detect {prec-based | dscp-based}
选择 WRED mode, 默认为 Precedence-based WRED
DSCP-based WRED 使用 64 profiles
 
Changing the WRED Profile:
Router(config-if)#random-detect dscp {dscp} {min-threshold} {max-threshold} {mark-prob-denominator}
改变特定 DSCP 值的 RED 原型
Mark-prob-denominator 为最大丢弃概率的公式分母
最大丢弃概率 =1/mark-prob-denominator
 
WRED Case Study:
WRED Configuration:
1> 开启 WRED 默认配置
2> 微调 WRED 配置
!
Interface serial 0/1/0    : 此处使用了 VIP
 Ip address 200.200.14.250 255.255.255.252
 Random-detect
 Random-detect precedence 0 10 25 10
 Random-detect precedence 1 20 35 10
 Random-detect precedence 2 15 25 10
 Random-detect precedence 3 25 35 10
 Random-detect precedence 4 1 2 1
 Random-detect precedence 5 35 40 10
 Random-detect precedence 6 30 40 10
 Random-detect precedence 7 30 40 10
!
 
WRED Monitoring:
Show interface
显示当前使用的队列 / 丢弃机制
显示 WRED 参数 (VIP only)
Show queueing
显示每个接口的 RED 原型
Show queue
显示接口的外出队列
 
Show interface random-detect
显示 RED 统计信息 (VIP only)
WRED Caveats( 警告 ) and Restrictions:
1> 因为相同的策略被应用到所有的 flows , 一个单一的 nonadaptive flow 可能会垄断整个接口的 buffer 资源
2> TCP 占据 80% 的流量时 ,WRED 是合适的
3> 对非 TCP 流量只能进行速率限制
4>Non-distributed WRED 不能与 PQ,CQ WFQ 兼容实现
 
 
 
Case Study:Flow-based Weighted Random Early Detection
1>RED 对所有数据流一视同仁 , 不区分的丢弃 .
2>WRED 根据不同的优先级来区分 packets, 但它不能区分不同的数据流的 packets
3>Aggressive flows 可能会垄断整个队列 , 进而使用其它的 flows 饿死 . 如当一个优先级很高的 aggresive flows 占据着队列 , 其它的 flows 只能被饿死 .
4>Flow-based WRED 用于追踪数据流 , WRED 的追踪优先级不同 .
4>Flow-based WRED 优先丢弃 aggressive flows.
 
Types of Flows:
Robust flows: 数据流能通过降低速率来适应 packets 的丢失 .(WRED 对这种流很有效 )
Fragile flows( 脆弱的流 ): 不能适应 packets 的丢失 , 占用 buffer 比较小 .(WRED 不应该被使用 )
Nonadaptive flows: 不能适应 packet 的丢失 (WRED 对这种流的处理效率很低 ), 高的 , 持续的 buffer 占用 .
 
Flow-Based WRED Objective:
Flow-Based WRED 对于上述三种不同的活动流分配了不同的丢弃速率 :
1>Robust: 正常的丢弃速率
2>Fragile: 非常少的丢弃速率
3>Nonadaptive: 非常高的丢弃速率
 
Flow-Based WRED Building Blocks:
 
Flow-Based WRED Configuration:
Router(config-if)#random detect flow
IOS 12.0(3)T 以后的版本支持此命令
在特定接口上配置实现 flow-based weighted random early detectoin
VIP-based 接口上取消 distirbuted WRED
取消所有的队列 , 转为 FIFO 队列 .
 
Tuning Flow-Based WRED:
Router(config-if)#random-detect flow average-depth-factor {scaling factor}
指定 scaling factor , 用于从平均 per-flow 队列大小计算最大 per-flow 队列大小 .
默认为 4
 
Router(config-if)#random-detect flow count {number}
指定 Flow-based WRED 最多追踪多少数据流
默认为 256
 
 
Flow-Based WRED Monitoring:
标准的 WRED 命令 :
Show interface
Show queueing
Show queue
Show interfaces random-detect
显示 flow 参数 :
Show queueing ramdom-detect
 
Benefits of Flow-Based WRED:
1> 原来 WED 处理是根据优先级的 , 因为一个 flow 可以有多个不同的优先级 , 它们又是同时发送的 , 你能够丢弃一些优先级低的 packets, flow 的其它 packets 还在 , 它们从整休上看还是 aggressive flow.
2>Flow-Based WRED 是根据 flow 来处理的 , 如果这个 flow aggressive , Flow-based WRED 会将整个 flow 丢弃 , 而不只是其中某些 packets.
3> 阻止一个单一的数据流垄断整个接口 buffer 资源 .
4>Flow-based WRED 惩罚 aggressive UPD flows.
 
 
Drawbacks of Flow-based WRED:
1>Flow-based WRED 不是分布式的
2> 只能与 FIFO 队列一同使用
3> 可预测性差

本文出自 “SENSE” 博客,转载请与作者联系!

你可能感兴趣的:(职场,休闲,qos,CCIE)