TCP 拥塞控制机制详解
TCP 拥塞控制是网络稳定性的关键机制,防止网络拥塞导致的数据包丢失和性能下降。
拥塞控制的四个核心算法
1. 慢启动(Slow Start)
- 初始状态:cwnd(拥塞窗口)初始化为 1 个 MSS(最大报文段大小)
- 指数增长:每收到一个 ACK,cwnd 加倍,每经过一个 RTT,cwnd 翻倍
- 阈值触发:当 cwnd 达到 ssthresh(慢启动阈值)时,进入拥塞避免阶段
- 目的:快速探测网络可用带宽,避免一开始就发送大量数据导致拥塞
2. 拥塞避免(Congestion Avoidance)
- 线性增长:每经过一个 RTT,cwnd 增加 1 个 MSS
- 保守策略:增长速度比慢启动慢,避免突然导致网络拥塞
- 触发条件:cwnd ≥ ssthresh 时进入此阶段
3. 快重传(Fast Retransmit)
- 触发条件:收到 3 个重复 ACK(duplicate ACK)
- 立即重传:不等待 RTO(重传超时)到期,立即重传丢失的报文段
- 原因:重复 ACK 表明中间报文段丢失,但后续报文段已到达
4. 快恢复(Fast Recovery)
- cwnd 调整:将 cwnd 设置为 ssthresh + 3 × MSS
- ssthresh 更新:ssthresh = cwnd / 2
- 后续处理:每收到一个重复 ACK,cwnd 加 1;收到新数据的 ACK 时,cwnd = ssthresh,进入拥塞避免
拥塞发生时的处理
- 超时重传:ssthresh = cwnd / 2,cwnd = 1,重新进入慢启动
- 快重传触发:ssthresh = cwnd / 2,cwnd = ssthresh,进入快恢复
相关问题
- 慢启动和拥塞避免的区别是什么?
- 为什么需要 3 个重复 ACK 才触发快重传?
- 如何优化 TCP 拥塞控制以提高网络性能?