拥塞控制是一个全局性过程,目的是防止过多的数据注入网络。

  • 拥塞条件:对资源需求的总和 > 可用资源。

拥塞控制方法

发送方维持一个拥塞窗口 cwnd (congestion window),其大小取决于网络的拥塞程度。 发送窗口上限 =

1. 慢开始 (Slow-start)

重点

  • 初始 cwnd = 1 (或较小值)。
  • 每收到一个对新报文段的确认,cwnd 加 1。
  • 经过一个传输轮次 (RTT),cwnd 指数倍增
  • cwnd >= ssthresh 时,改用拥塞避免算法。

2. 拥塞避免 (Congestion Avoidance)

  • 每经过一个 RTT,cwnd 加 1(加法增大)。
  • 目的是使拥塞窗口线性缓慢增长。

3. 乘法减小 (Multiplicative Decrease)

  • 无论是在慢开始还是拥塞避免阶段,只要出现超时(网络拥塞):
    1. ssthresh 设为出现拥塞时窗口值的一半(但不小于 2)。
    2. cwnd 重新设置为 1。
    3. 执行慢开始算法。

4. 快重传与快恢复 (Fast Retransmit & Fast Recovery)

重点

  • 快重传:接收方收到失序报文段立即发送重复确认。发送方收到三个重复确认(共四个相同的 ACK)时,立即重传缺失报文,不等待超时。
  • 快恢复
    1. 当收到三个重复确认时,执行乘法减小,ssthresh 减半。
    2. 不执行慢开始,而是将 cwnd 设为 ssthresh 减半后的数值(或减半后的数值 + 3)。
    3. 执行拥塞避免算法(加法增大)。