拥塞避免
拥塞避免(Congestion Avoidance)是指通过监视网络资源(如队列或内存缓冲区)的使用情况,在拥塞发生或有加剧的趋势时主动丢弃报文,通过调整网络的流量来解除网络过载的一种流控机制。
拥塞避免常用的两种丢弃报文方式为:尾部丢包策略和WRED。
传统的尾部丢包策略
传统的丢包策略采用尾部丢弃(Tail-Drop)的方法。当队列的长度达到最大值后,所有新入队列的报文(缓存在队列尾部)都将被丢弃。
这种丢弃策略会引发TCP全局同步现象,导致TCP连接始终无法建立。所谓TCP全局同步现象如图,三种颜色表示三条TCP连接,当同时丢弃多个TCP连接的报文时,将造成多个TCP连接同时进入拥塞避免和慢启动状态而导致流量降低,之后又会在某个时间同时出现流量高峰,如此反复,使网络流量忽大忽小。
图5-1 尾部丢包示意图
WRED
为避免TCP全局同步现象,出现了RED(Random Early Detection)技术。RED通过随机地丢弃数据报文,让多个TCP连接不同时降低发送速度,从而避免了TCP的全局同步现象。使TCP速率及网络流量都趋于稳定。
图5-2 RED算法示意图
基于RED技术,设备实现了WRED(Weighted Random Early Detection)。
流队列支持基于DSCP或IP优先级进行WRED丢弃。每一种优先级都可以独立设置报文丢包的上下门限及丢包率。当队列中报文的总长度达到丢弃的下限时,开始丢包。随着队列中报文总长度的增加,丢包率不断增加,最高丢包率不超过设置的丢包率。直至队列中报文的总长度达到丢弃的上限,报文全部丢弃。这样按照一定的丢弃概率主动丢弃队列中的报文,从而在一定程度上避免拥塞问题。