【计算机网络】拥塞控制算法

拥塞窗口cwnd

  • 发送方维持一个叫做拥塞窗口cwnd (congestion window)的状态变量。
  • 拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞窗口。(如果再考虑到接收方的接收能力,那么发送窗口还可能小于拥塞窗口。)
  • 发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。
  • 只要发送方没有按时收到应当到达的确认报文,就可以猜想网络可能出现了拥塞
拥塞窗口cwnd的大小相关算法 慢启动
  • 慢启动应用于连接刚刚建立,开始传输数据时。
    以一个很小的报文段数量开始发送数据,每收到一个报文段的确认,则cwnd数量翻倍++。(乘2方式增加)
  • 为了防止拥塞窗口cwnd增长过大引起网络拥塞,还需要设置一个慢开始门限 ssthresh状态变量。慢开始门限ssthresh的用法如下:
    当cwnd < ssthresh时,使用上述的慢开始算法。
    当cwnd>ssthresh时,停止使用慢开始算法而改用拥塞避免算法。
    当cwnd=ssthresh时,既可使用慢开始算法,也可使用拥塞避免算法。
  • 慢启动门限,如果慢启动过程发送的报文段数量大小达到了慢启动门限,则进入拥塞避免。
拥塞避免
  • 当CWND值达到慢启动阈值,开始使用拥塞避免,每收到一组报文段的确认,则对CWND+1(加法增大)
  • 如何设置新的ssthresh
    无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有按时收到确认),就要把慢开始门限ssthresh 设置为出现拥塞时的发送方窗口值的一半(但不能小于2)。然后把拥塞窗口cwnd重新设置为1,执行慢开始算法。
    这样做的目的就是要迅速减少主机发送到网络中的分组数,使得发生拥塞的路由器有足够时间把队列中积压的分组处理完毕。
快速重传
收到3个重复的确认执行快速重传
【计算机网络】拥塞控制算法
文章图片

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

    推荐阅读