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

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


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

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

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

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


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

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


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

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


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

这样,尽管每天赶往京城的驿卒数还在增长。却不再像前段时间那样指数增长了。

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


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

这样。地方官员又又一次開始了一天一封的“指数增长阶段”,而治安重臣也设定了新的上限值。

总之。新的一轮“指数增长-线性增长”又開始了。

【当网络出现拥塞时。不管是在“慢開始算法”阶段还是在“拥塞避免算法”阶段,仅仅要发送端没有按时收到确认,网络就把阙值(ssthresh)设置为发生拥塞时发送端拥塞窗体(cwnd)的一半,然后把拥塞窗体(cwnd)又一次初始化为1,又一次运行慢開始算法】


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

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


一旦地方官员提前得到了消息。知道驿卒又多了,京城又堵了。地方官员又会郁闷地在次日開始一天一封的“指数增长阶段”。

同一时候,治安重臣也考虑到地方官员大量奏章上呈的愿望,也折衷地想了还有一个办法:在改动上限值为拥挤时驿卒数一半的同一时候。让地方官员不必又一次从一天一封開始,而是让每天上呈的奏章数跟新上限值一样。这样直接跳过“指数增长”阶段,直接进入“线性增长”阶段。

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


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



* 思维碰撞,不要忘了与好友分享!

未来将推出“将计算机思维故事化”系列。谢谢大家的关注!

*


posted @ 2017-08-20 20:14  jzdwajue  阅读(698)  评论(0编辑  收藏  举报