【学习总结】网络-TCP拥塞控制

tcp拥塞控制

  • 出现拥塞的条件:

    • 对资源需求的总和>可用资源。
  • 后果

    • 网络中许多资源同时呈现供应不足 -- 网络性能变坏 -- 网络吞吐量将随着输入负荷增大而下降。
  • 定义:

    • 拥塞控制,可以防止过多数据注入网络,以使网络中的路由器或链路不致过载。

为什么有了滑动窗口还需要有拥塞窗口?

  • 滑动窗口是对发送接收双方的流量控制,如果中间的网络设备的转发性能达到极限是无法感知到的,而tcp除了针对自身的收发能力做调整,还根据整体的网络情况做调整,所以有了拥塞窗口。

tcp拥塞控制与流量控制的区别

  • 概述:

    • 拥塞控制:全局性;流量控制:点对点。
  • 详述:

    • 拥塞控制是让网络能够承受现有的网络负荷,是一个全局性的过程,涉及所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素。
    • 流量控制是指点对点的通信量的控制,即接收端控制发送端,它所要做的是抑制发送端发送数据的速率,以便使得接收端来得及接收。

tcp拥塞控制的算法

  • 拥塞控制的算法:慢开始、拥塞避免,快重传,快恢复。

慢开始和拥塞控制

  • 图示:慢开始 -- 拥塞避免算法 -- 网络拥塞的处理 -- 慢开始 -- 拥塞避免算法 -- ...

  • 慢开始详述:

    • 以最大报文段长度MSS为拥塞窗口cwnd的增长单位。
    • 初始零拥塞窗口cwnd=1,然后每经过一个传输轮次(往返时延RTT),拥塞窗口都呈指数增大。
    • 规定一个慢开始门限ssthread-slow start thread
    • 一直增大拥塞窗口cwnd,直到慢开始门限ssthread,然后改用拥塞避免算法。
  • 拥塞避免算法详述:

    • 加法增大:发送端的拥塞窗口cwnd每次经过一个传输轮次,就只增大一个MSS大小,即按照线性规律缓慢增大。
    • 乘法减小:当出现网络拥塞(即一次超时)时,令慢开始门限ssthread减小为当前cwnd的一半,但不小于2
      • 注意:更新慢开始门限,参考值是当前cwnd的一半,不是当前门限的一半!
    • cwnd不同大小时,执行不同算法:
      • cwnd<ssthread:慢开始
      • cwnd=ssthread:可以慢开始,也可以拥塞避免(通常做法)
      • cwnd>ssthread:拥塞避免
  • 网络拥塞的处理

    • 更新ssthread值
    • 拥塞窗口重新设置为1,并重新开始执行慢开始算法。
      • 目的:迅速减少主机发送到网络中的分组数,使得发生拥塞的路由器有足够的时间把队列中积压的分组处理完。

快重传和快恢复

  • 图示:在慢开始和拥塞避免基础上改进,慢开始 -- 快重传 -- (跳过慢开始)快恢复 -- 拥塞避免 --

  • 快重传

    • 快重传:使用了冗余ACK来检查丢包的发生。
    • 当发送方连续收到三个重复的ACK报文时,直接重传对方尚未收到的报文段,而不必等待重传计时器超时。
    • 注:快重传并非取消重传计时器,而是在某些情况下,可更早地重传丢失的报文段。
  • 快恢复

    • 当发送端收到连续三个冗余ACK(即重复确认)时,先乘法减小,把慢开始门限ssthread减小为出现拥塞时发送方cwnd的一半。
    • 不同之处:跳过了cwnd=1起始的慢开始过程,而是将cwnd的值设置为慢开始门限ssthread改变后的值,然后开始执行拥塞避免算法(加法增大)
    • 跳过了cwnd=1起始的慢开始过程,因此称为快恢复。

综述

  • 拥塞控制中,发送方发送窗口的大小 = min(接收端窗口rwnd, 拥塞窗口cwnd)
  • 慢开始、拥塞避免、快重传、快恢复是同时应用在拥塞控制机制之中的
    • 当发送方检测到超时:慢开始和拥塞避免;
    • 当发送方接受到冗余ACK时:快重传和快恢复。

END

原文地址:https://www.cnblogs.com/anliux/p/12873372.html