拥塞控制是一个全局性过程,目的是防止过多的数据注入网络。
- 拥塞条件:对资源需求的总和 > 可用资源。
拥塞控制方法
发送方维持一个拥塞窗口 cwnd (congestion window),其大小取决于网络的拥塞程度。 发送窗口上限 = 。
1. 慢开始 (Slow-start)
- 初始
cwnd = 1(或较小值)。 - 每收到一个对新报文段的确认,
cwnd加 1。 - 经过一个传输轮次 (RTT),
cwnd指数倍增。 - 当
cwnd >= ssthresh时,改用拥塞避免算法。
2. 拥塞避免 (Congestion Avoidance)
- 每经过一个 RTT,
cwnd加 1(加法增大)。 - 目的是使拥塞窗口线性缓慢增长。
3. 乘法减小 (Multiplicative Decrease)
- 无论是在慢开始还是拥塞避免阶段,只要出现超时(网络拥塞):
ssthresh设为出现拥塞时窗口值的一半(但不小于 2)。cwnd重新设置为 1。- 执行慢开始算法。
4. 快重传与快恢复 (Fast Retransmit & Fast Recovery)
- 快重传:接收方收到失序报文段立即发送重复确认。发送方收到三个重复确认(共四个相同的 ACK)时,立即重传缺失报文,不等待超时。
- 快恢复:
- 当收到三个重复确认时,执行乘法减小,
ssthresh减半。 - 不执行慢开始,而是将
cwnd设为ssthresh减半后的数值(或减半后的数值 + 3)。 - 执行拥塞避免算法(加法增大)。
- 当收到三个重复确认时,执行乘法减小,