Administrator
Published on 2025-03-12 / 3 Visits
0
0

TCP 拥塞控制步骤详解

TCP拥塞控制通过动态调整拥塞窗口(cwnd)来适应网络状况,避免数据过载。其核心步骤可分为以下几个阶段:


1. 慢启动(Slow Start)

  • 目的:初始阶段探测可用带宽,快速提升发送速率。
  • 规则
    • 初始拥塞窗口(cwnd)通常为1个MSS(最大报文段大小)。
    • 每收到一个ACK,cwnd增加1个MSS(指数增长,每个RTT窗口翻倍)。
    • 当cwnd达到慢启动阈值(ssthresh)时,进入拥塞避免阶段。
    • 若检测到丢包(超时或重复ACK),退出慢启动:
      • 将ssthresh更新为当前cwnd的一半(至少2个MSS)。
      • 根据丢包类型决定后续操作(见步骤3、4)。

2. 拥塞避免(Congestion Avoidance)

  • 目的:谨慎增加窗口,避免触发拥塞。
  • 规则
    • 每收到一个ACK,cwnd增加 ( \frac{1}{cwnd} ) 个MSS(线性增长,每个RTT窗口增加1个MSS)。
    • 持续探测带宽,直到检测到丢包。
    • 若发生丢包
      • 调整ssthresh为当前cwnd的一半。
      • 根据丢包类型处理(见步骤3、4)。

3. 超时重传(处理严重拥塞)

  • 触发条件:数据包超时未收到ACK(表明网络拥塞严重)。
  • 操作
    • 将cwnd重置为1个MSS,重新进入慢启动阶段。
    • 更新ssthresh为超时前cwnd的一半。

4. 快速重传与快速恢复(处理轻微拥塞)

  • 触发条件:收到3个重复ACK(表明部分数据包丢失,但网络仍有吞吐能力)。
  • 操作
    1. 快速重传:立即重传丢失的报文,无需等待超时。
    2. 快速恢复
      • 更新ssthresh为当前cwnd的一半。
      • 将cwnd设为 ( ssthresh + 3 )(补偿已确认的3个重复ACK)。
      • 每收到一个重复ACK,cwnd增加1个MSS。
      • 当收到新数据的ACK:将cwnd设为ssthresh,进入拥塞避免阶段。

总结流程

  1. 初始阶段为慢启动,cwnd指数增长至ssthresh。
  2. 达到ssthresh后转为拥塞避免,cwnd线性增长。
  3. 丢包时
    • 超时:cwnd=1,ssthresh=cwnd/2,重启慢启动。
    • 3个重复ACK:快速重传,进入快速恢复,调整ssthresh和cwnd后进入拥塞避免。

关键点

  • ssthresh:动态阈值,决定慢启动与拥塞避免的切换。
  • Reno vs Tahoe:Tahoe在丢包时无论类型均重置cwnd=1;Reno引入快速恢复,减少性能波动。
  • 公平性:通过AIMD(加性增、乘性减)平衡不同连接的带宽竞争。

这一机制使得TCP能够在高效利用带宽的同时,主动适应网络变化,维持全局稳定性。


Comment