【计算机网络】第3章:传输层—TCP 拥塞控制
摘要: TCP拥塞控制通过动态调整发送窗口(cwnd)平衡网络效率与公平性。核心机制包括:慢启动(指数增长探测带宽)、拥塞避免(线性增长防过载)、快速重传(3次重复ACK立即重传)和快速恢复(减半窗口维持吞吐)。经典算法如Tahoe/Reno采用“加性增、乘性减”原则,现代优化算法如CUBIC(三次函数增长)和BBR(主动测量带宽/RTT)进一步适应高带宽网络。目标是通过保守启动、快速响应丢包,实
目录
BBR(Bottleneck Bandwidth and RTT)
一、PPT




















二、总结
TCP 拥塞控制详解
核心目标:防止网络因过载而崩溃,公平分配带宽资源,最大化网络吞吐量。
核心思想:通过动态调整发送速率(拥塞窗口 cwnd)探测网络容量上限。
⭐ 核心机制与算法
1. 慢启动(Slow Start)
-
目的:初始阶段快速探测可用带宽。
-
机制:
-
cwnd初始值 = 1 MSS(最大报文段大小)。 -
每收到 1 个 ACK,
cwnd指数增长(cwnd *= 2)。 -
增长上限:达到 慢启动阈值(ssthresh) 后进入拥塞避免。
-
-
触发场景:
-
新连接建立时
-
超时重传(RTO)后
-
2. 拥塞避免(Congestion Avoidance)
-
目的:接近网络容量时转为线性增长,避免拥塞。
-
机制:
-
每收到 1 个 ACK,
cwnd线性增长(cwnd += 1/cwnd→ 约每 RTT 增加 1 MSS)。
-
-
退出条件:
-
发生丢包(超时或收到 3 个重复 ACK)
-
3. 快速重传(Fast Retransmit)
-
触发条件:收到 3 个重复 ACK(即发送方连续收到 4 个相同 ACK)。
-
行为:
-
立即重传丢失报文,无需等待超时。
-
进入 快速恢复 阶段(避免降为慢启动)。
-
4. 快速恢复(Fast Recovery)
-
目的:在部分丢包时维持较高吞吐量。
-
机制:
-
将
ssthresh设为max(cwnd/2, 2 MSS)(减半窗口)。 -
cwnd = ssthresh + 3 MSS(补偿已确认的 3 个重复 ACK)。 -
每收到一个重复 ACK,
cwnd += 1 MSS(维持窗口大小)。 -
收到新数据的 ACK 后,将
cwnd设为ssthresh,退出快速恢复。
-
✅ 经典算法组合:以上 4 步统称为 Tahoe(含慢启动+拥塞避免)和 Reno(增加快重传+快恢复)。
🔧 关键参数与行为
| 参数 | 作用 | 调整时机 |
|---|---|---|
cwnd |
发送方可发送的最大数据量(动态调整) | 根据 ACK 或丢包事件更新 |
ssthresh |
慢启动与拥塞避免的切换阈值 | 丢包时设为 max(cwnd/2, 2) |
| 丢包判定 | 超时重传 → 网络严重拥塞 | 直接重置 cwnd=1,进入慢启动 |
| 3 个重复 ACK → 部分丢包 | 触发快重传+快速恢复 |
🌟 现代优化算法
CUBIC(Linux 默认算法)
-
用 三次函数 替代线性增长,更公平且适应高带宽延迟积(BDP)网络。
-
核心特点:
-
窗口增长与 时间 而非 ACK 数量相关。
-
在拥塞避免阶段更平滑地逼近最大容量。
-
BBR(Bottleneck Bandwidth and RTT)
-
主动测量网络路径的 最大带宽(BtlBw) 和 最小 RTT,动态调整发送速率。
-
避免传统算法依赖丢包作为拥塞信号(在高丢包率网络中更高效)。
📊 拥塞控制流程总结

💡 核心设计原则
-
保守启动:初始
cwnd较小,避免冲击网络。 -
加性增,乘性减(AIMD):
-
增长阶段:线性/指数增加带宽利用率(公平性)。
-
减少阶段:乘性降窗快速响应拥塞(稳定性)。
-
-
快速响应:通过重复 ACK 尽早检测丢包,减少超时等待。
总结一句话:TCP 拥塞控制通过 动态调整发送窗口(慢启动探测 → 拥塞避免维稳 → 快重传/快恢复止损),在公平性与效率之间取得平衡,确保网络高吞吐、低延迟、高可靠性。
更多推荐
所有评论(0)