FreeBSD下IPFW的RED功能

Posted on 五月 13, 2009
Filed Under Unix, 网络 | Leave a Comment

随机早期检测 (RANDOM EARLY DETECTION)

随机早期检测(以下简称RED)是一种拥塞减除算法(也包含一些功能协议)。它的功用是通过保证数据队列不致于排满来避免网络阻塞。它的实现方式是不断地计算队列的长度,并拿它与设定的两个阀值(一个最小值和一个最大值)进行比较。

如果队列平均长度小于最小阀值,那么就不动作,自然也没有数据包会丢失。
如果这个值超过了最大阀值,那么所有新抵达的数据包就会被丢弃。
而如果这个值处于这两者之间(关键在这里),那么RED就会按照由队列长度中得到的一些信息来决定丢弃什么包。

笼统地讲,当队列长度趋近于最大值时,就会有越来越多的包会被丢弃。RED会从这些连接中随机地抽取包来丢弃。占用较大带宽的连接被丢包的可能性要大。

RED特别对避免一种叫“全局同步降速”的情形很有用,同时也能增强容纳突发流量的能力。

“全局同步降速”是指在网络阴塞时,由于一般是所有连接都有丢包现象发生,进而会导致这些连接都中断,最后整体流量会迅速下降的情形。例如:一个路由器正承载10个FTP连接,当发生阻塞时,每个连接都会有丢包(按FIFO排队),这样10个连接都会中断,最后总流量急剧下降。

显然这不是我们所想要的情况,这种现象的发生会导致我们的带宽不能始终被充分利用。

RED解决这一问题的方法是:有选择地选取一些连接来丢包,而不是平均对待。占用较大带宽的连接会有较高的机会被选中丢包。这样高流量的连接就会被减速,也就避免了拥塞的发生,同时也不会出现“全局同步降速”问题。

另外,由于RED是在数据包队列未满的时候就开始丢包,这使得系统增强了应对突发流量的能力。当有突发流量进入时,队列始终是有空间来容纳新进的数据包。

RED只能用于有处理拥塞能力的传输协议,也即它适合被用于TCP而不适合UDP或ICMP协议。

拥塞通知(ECN)

ECN与RED一起工作,它的功用是通知两台正在通过一个有拥塞的网络通信的主机有拥塞发生。RED在ECN作用下会采用在数据报头将相关位置位而不是丢包的办法来处理拥塞。这一方法的前提是正在发包的主机也要支持ECN,能读懂这个拥塞信息并相应主动减少流量。 关于ECN的祥情,请参阅RFC 3168。

Comments

Leave a Reply