【计算机网络】第3章:传输层—TCP 拥塞控制
目录
一、PPT
二、总结
TCP 拥塞控制详解
⭐ 核心机制与算法
1. 慢启动(Slow Start)
2. 拥塞避免(Congestion Avoidance)
3. 快速重传(Fast Retransmit)
4. 快速恢复(Fast Recovery)
🔧 关键参数与行为
🌟 现代优化算法
CUBIC(Linux 默认算法)
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 拥塞控制通过 动态调整发送窗口(慢启动探测 → 拥塞避免维稳 → 快重传/快恢复止损),在公平性与效率之间取得平衡,确保网络高吞吐、低延迟、高可靠性。