主动队列管理AQM
前一篇文章介绍了TCP的拥塞控制方法,但是并没有和网络层采取的策略联系起来。其实,它们之间有着密切的关系。
例如,假定一个路由器对某些分组的处理时间特别长,那么这就可能使这些分组中的数据部分经过很长时间才能到达终点,结果引起发送方对这些报文段的重传。根据前面所学习的内容,重传会使TCP连接的发送端认为在网络中发生了拥塞。于是在TCP的发送端就采取了拥塞控制措施,但实际上网络并没有发生拥塞。
网络层的策略对TCP拥塞控制影响最大的就是路由器的分组丢弃策略。在最简单的情况下,路由器的队列通常都是按照“先进先出”的规则处理到来的分组。由于队列长度总是有限的,因此当队列已满时,以后再到达的所有分组将被丢弃,这就叫做尾部丢弃策略。
路由器的尾部丢弃往往会导致一连串分组的丢失,这就使发送方出现超时重传,使TCP进入拥塞控制的慢开始状态,结果使TCP连接的发送方突然把数据的发送速率降低到很小的数值。更为严重的是,在网络中通常有很多的TCP连接(它们有不同的源点和终点),这些连接中的报文段通常是复用在网络层的IP数据报中传送。在这种情况下,若发生了路由器中的尾部丢弃,就可能会同时影响到很多条TCP连接,结果使这许多TCP连接在同一时间突然都进入到慢开始状态。这在TCP的术语中称为全局同步。全局同步使得全网的通信量突然下降了很多,而在网络恢复正常后,其通信量又突然增大很多。
为了避免发生网络中的全局同步现象,在1998年提出了主动队列管理AQM。所谓“主动”就是不要等到路由器的队列长度已经到达最大值时才丢弃后面的分组,这样太被动了。应当在队列长度达到某个值得警惕的数值时(即当网络有了某些拥塞征兆时),就主动丢弃到达的分组。这样就提醒发送方放慢发送速率,因而有可能使网络拥塞的程度减轻,甚至不出现网络拥塞。AQM可以有不同实现方法,其中曾流行多年的就是随机早期检测RED(Random Early Detection)。
实现RED时需要使路由器维持两个参数,即队列长度最小门限和最大门限。当每一个分组到达时,RED就按照规定的算法先计算当前的平均队列长度。
(1)若平均队列长度小于最小门限,则把新到达的分组放入队列进行排队
(2)若平均队列长度超过最小门限,则把新到达的分组丢弃
(3)若平均队列长度在最小门限和最大门限之间,则按照某一丢弃概率P把新到达的分组丢弃
由此可见,RED不是等到已经发生网络拥塞后才把所有在队列尾部的分组全部丢弃,而是在检测到网络拥塞的早期征兆时(即路由器的平均队列长度达到一定数值时),就以概率P丢弃个别的分组,让拥塞控制只在个别的TCP连接上进行,因而避免发生全局性的拥塞控制。