了解TCP的拥塞控制

说明

本文基于《计算机网络》(第6版)进行总结

正文

概念

      在某段时间,若网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏,这种情况就叫做拥塞 —— ∑对资源的需求 > 可用资源

      拥塞控制与流量控制的关系密切,但也存在差别。所谓拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提,就是网络中能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素

      拥塞控制从大的方面看,可以分为开环控制闭环控制两种方法。

      开环控制:在设计网络时实现将有关发生拥塞的因素考虑周到,力求网络在工作时不产生拥塞。但一旦整个系统运行起来,就不再中途进行改正了。

      闭环控制:基于反馈环路的概念,不同的措施:

  1. 监测网络系统以便监测到拥塞在何时、何处发生。
  2. 把拥塞发生的信息传送到可采取行动的地方
  3. 调整网络系统的运行以解决出现的问题

控制方法

慢开始和拥塞避免

      发送方维持一个叫做一个拥塞窗口cwnd(congestion window)的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态在变化。发送方让自己的发送窗口等于拥塞窗口

      发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。

慢开始算法:在开始发送报文段时,先把拥塞窗口cwnd设置为一个最大报文段MSS的数值。而在每收到一个对新的报文段的确认后,把拥塞窗口增加至多一个MSS的数值,逐步增大发送方的拥塞窗口cwnd
为方便说明原理,用报文段的个数作为窗口大小的单位

这里写图片描述

通过图例,可以看到每经过一个传输轮次,拥塞窗口cwnd就加倍
传输轮次:一个传输轮次时间就是往返时间RTT,强调把拥塞窗口cwnd所允许发送的报文段都连续发送出去,并受到了对己发送的最后一个字节的确认

为了防止拥塞窗口cwnd增长过大引起网路拥塞,还需要设置一个慢开始门限ssthresh状态变量,用法:
当cwnd < ssthresh时,使用慢开始算法
当cwnd > ssthresh时,停止使用慢开始算法而改用拥塞避免算法
当cwnd = ssthresh时,既可以使用慢开始算法,也可以使用拥塞避免算法

拥塞避免算法: 让拥塞窗口cwnd缓慢地增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍。这样,拥塞窗口cwnd按线性规律缓慢地增长。

无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有按时收到确认),就要把慢开始门限ssthresh设置为出现拥塞时的发送窗口值的一半(但不能小于2)。然后把拥塞窗口cwnd重新设置为1,执行慢开始算法。这样做的目的就是要迅速减少主机发送到网络中的分组数,使得发生拥塞的路由器有足够时间把队列中积压的分组处理完毕

这里写图片描述

乘法减小:指不论在慢开始阶段还是拥塞避免阶段,只要出现超时,就把慢开始门限值ssthresh减半。即设置为当前的拥塞窗口的一半,与此同时,执行慢开始算法。

加法增大:指执行拥塞避免算法后,使用拥塞窗口缓慢增大,以防止网络过早出现拥塞。两种算法结合起来称为AIMD算法

快重传和快恢复

算法提出基于的情况:如果发送方设置的超时计时器时限已到但还没有收到确认,那么很可能是网络出现拥塞,致使报文段在网络中的某处被丢弃。之前使用拥塞避免算法。

使用快重传算法:要求接受方每收到一个失序的报文段后就立即发出重复确认而不要等待自己发送数据时才进行捎带确认

快重传算法规定,发送方只哟啊一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必等待为报文段设置的重传计时器到期。由于发送方能尽早重传未被确认的报文段,因此采用快重传后可以使整个网络的吞吐量提高约20%

这里写图片描述

与快重传配合使用的还有快恢复算法,其过程有以下两个要点:
      (1)当发送方连续收到三个重复确认时,就执行“乘法减小”算法,把慢开始门限ssthresh减半。这是为了预防网络发生拥塞。请注意,接下来不执行慢开始算法。
      (2)由于发送方现在认为网络很可能没有放生拥塞(如果网络发生了严重的拥塞,就不会一连有好几个报文段连续到达接受方,也就不会导致接收方连续发送重复确认),因此与慢开始不同之处是现在不执行慢开始算法(即拥塞窗口cwnd现在不设置为1),而是把cwnd值设置为慢开始门限ssthresh减半后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大

这里写图片描述

在采用快恢复算法时,慢开始算法只是在TCP连接建立时和网络出现超时时才使用

      由于接受方的缓存空间是有限的,接受方根据自己接受能力设定了接受窗口rwnd,并把这个窗口值写入TCP首部中的窗口字段,传送给发送方。
接受窗口又称通知窗口(advertised window)。因此,从接受方对发送方的流量控制角度考虑,发送方的发送窗口一定不能超过对方给出的接受窗口值rwnd

                  发送方窗口的上限值 = Min [rwnd, cwnd]

当rwnd < cwnd时,是接受方的接受能力限制发送方窗口的最大值
当rwnd > cwnd时,则是网络的拥塞限制发送窗口的最大值

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值