将计算机思维故事化——之计算机网络TCP拥塞控制算法

互联网各主机彼此通信的背后,有无数的信息在互相发送,来往忙碌。为了形象化这个过程,可以引入中国古代信息传递的经典景象——奏章。奏章是古代各层官员向帝王进言陈事的文书,驿卒携带奏章前往京城,为地方官员传递奏章,同时从京城带回该奏章的批复。


在战争爆发或自然灾害等国事紧急时,奏章频传,地方官员常常不能在第一时间内得到京城的批复,主要原因有两点

第一,大量传递奏章的驿卒都赶往京城,交通出现拥挤,一定程度上增加了驿卒往返的时间;

第二,皇帝批阅奏章速度有限,面对过多的奏章无法做到及时地批复。

【在计算机网络通讯中,为了缓解这两个问题,分别引入“拥塞控制”和“流量控制”两种服务:拥塞控制考虑的是整体网络的负载,防止过多的数据注入网络,避免通信时延的增加;流量控制则抑制发送端发送数据的速率,以便接收端来得及接收】


在这里,仅仅讨论如何缓解第一种问题(即交通拥挤)带来的麻烦。因特网的标准定义中有四种拥塞控制办法来处理这个问题。

【当出现拥塞时,发送端并不能了解到拥塞发生的细节,对于通信连接的发送端而言,拥塞往往表现在通信时延的增加,不能在期望时间内得到反馈确认】


在国事紧急时期刚开始时,中央规定:第一天,各层官员每天只能上呈一封奏章。皇帝自然可以从容地批复所有奏章,并让驿卒带回批复,地方官员看到第一天的一封奏章得到批复,心领神会地在第二天上呈两封奏章,同理,如果第二天晚上两封都得到了批复,表明第三天可以上呈四封,以此类推……

【这个算法叫做“慢开始算法”,每天上呈奏章数被称为“拥塞窗口(cwnd)”,初始时,先令拥塞窗口cwnd=1,每经过一个传输轮次(即往返时延RTT)且收到确认,拥塞窗口大小cwnd就会加倍】


随着一天天过去,地方官员上呈奏章数目呈指数增长,前往京城的驿卒也越来越多——快马飞驰,扰民伤民——京城的交通情况有了恶化的苗头,于是朝中治安重臣开始实施新规定:一旦每天上呈的奏章数达到了上限值,在得到皇帝的批复后,次日可上呈的奏章数不再翻倍,而是只增加一封。这样,虽然每天赶往京城的驿卒数还在增长,却不再像前段时间那样指数增长了。

【这个算法叫“拥塞避免算法”,当拥塞窗口大小按指数增长达到上限值(这个值与当前网络状态有关,被称为“阙值(ssthresh)”)时,每经过一个传输轮次(即往返时延RTT)且收到确认,拥塞窗口大小cwnd就加1,而不是加倍】


新规定执行后,赶往京城的驿卒在缓慢增加,直到某天,京城终于出现了交通拥挤的情况,马如龟速,以致于驿卒在一天之内不能带回奏章的批复,地方官员到了晚上还见不到驿卒回来,知道京城交通出现了问题,而问题的原因就在于自己每天派出的驿卒太多。很聪明的是,次日他们又会重新按照一天一封的规定上呈奏章;而对于治安重臣,京城交通拥挤也应该解决,于是开始反思自己执法过程的漏洞,最后得出的结论是:上限值的大小设置不恰当,于是决定设为此时驿卒数(即奏章数)的一半

这样,地方官员又重新开始了一天一封的“指数增长阶段”,而治安重臣也设定了新的上限值。总之,新的一轮“指数增长-线性增长”又开始了。

【当网络出现拥塞时,无论是在“慢开始算法”阶段还是在“拥塞避免算法”阶段,只要发送端没有按时收到确认,网络就把阙值(ssthresh)设置为发生拥塞时发送端拥塞窗口(cwnd)的一半,然后把拥塞窗口(cwnd)重新初始化为1,重新执行慢开始算法】


后来,由于京城交通拥挤常发生,所以地方官员只有等到晚上,才知道京城交通发生了拥挤,所以希望能有个小小的预知。如此,治安重臣想出了办法,因其了解京城交通状况,可以提前判断驿卒是否可以当晚带回批复。当了解到某驿卒不能赶回时,他便派遣自己辖下的驿卒,三人一组,出京城直奔地方,告知地方官员不必再等晚上的批复了

【这个算法叫做“快重传”,当发送端收到接受端连续三个确认信息时,表明网络已经出现了拥塞,而发送端不必再等待自己预期中的计时器超时】


一旦地方官员提前得到了消息,知道驿卒又多了,京城又堵了。地方官员又会郁闷地在次日开始一天一封的“指数增长阶段”。同时,治安重臣也考虑到地方官员大量奏章上呈的愿望,也折衷地想了另一个办法:在修改上限值为拥挤时驿卒数一半的同时,让地方官员不必重新从一天一封开始,而是让每天上呈的奏章数跟新上限值一样,这样直接跳过“指数增长”阶段,直接进入“线性增长”阶段。

【这个算法叫做“快恢复算法”,当发送端收到接受端连续三个确认信息时,即网络发生拥塞时,网络把阙值(ssthresh)设置为出现拥塞时发送端拥塞窗口大小(cwnd)的一半的同时,对拥塞窗口大小(cwnd)也同样操作,从而直接执行“拥塞避免算法”,使拥塞窗口大小线性增加】


以上就是标准互联网定义中TCP拥塞控制的四种算法(慢开始算法、拥塞避免算法、快重传算法、快恢复算法),其中慢开始算法、拥塞避免算法是拥塞控制的基础,快重传算法、快恢复算法是前二者的改进



* 思维碰撞,不要忘了与好友分享!未来将推出“将计算机思维故事化”系列,谢谢大家的关注!*


你可能感兴趣的:(tcp,网络,算法,拥塞控制,通讯)