3.6 TCP 拥塞控制详解

📅 发布时间:2026/7/6 12:23:11 👁️ 浏览次数:
3.6 TCP 拥塞控制详解
一、为什么需要 TCP 拥塞控制当大量主机同时向网络发送数据时路由器的处理能力和链路带宽会出现不足导致数据包排队、丢失、延迟增大这种现象称为网络拥塞。如果没有控制机制网络会出现严重拥塞崩溃吞吐量急剧下降。TCP 拥塞控制的作用让发送方根据网络拥堵程度自动调整发送速率既高效利用带宽又不造成网络拥堵。二、先弄懂这些基础名词1. MSS最大分段大小一个 TCP 报文段中数据部分的最大长度不包含头部。简单理解一次能发送的 “一包数据” 的大小。2. cwnd拥塞窗口发送方根据网络拥塞程度限制的发送窗口。cwnd 的大小直接决定了发送方最多能发多少数据网络顺畅 → cwnd 变大网络拥堵 → cwnd 变小3. ssthresh慢启动阈值一个用于切换算法阶段的阈值单位通常是 MSS。cwnd ssthresh → 使用慢启动cwnd ssthresh → 使用拥塞避免4. RTT往返时间一个数据包从发送方发出到接收方的确认报文返回发送方所花费的时间。5. ACK确认报文接收方收到数据后回复给发送方的 “已收到” 信号。重复的 ACK 通常代表数据包丢失。6. 丢包数据包在路由器中因拥堵被丢弃是 TCP 判断网络拥塞的重要依据。三、经典 TCP 拥塞控制四个阶段1. 慢启动Slow Start刚建立连接或发生超时重传后进入此阶段。初始 cwnd 1 个 MSS每收到一个 ACKcwnd 1结果cwnd 呈指数增长快速探测网络可用带宽退出条件cwnd ≥ ssthresh → 进入拥塞避免发生丢包 → 进入拥塞恢复一句话总结从小开始快速试探网络能承受多大流量。2. 拥塞避免Congestion Avoidance慢启动增长过快容易突然引发拥塞因此超过阈值后改为缓慢增长。每经过一个 RTTcwnd 1cwnd 呈线性增长更加谨慎退出条件收到 3 个重复 ACK 或超时判定拥塞。一句话总结小心增加发送量避免突然拥塞。3. 快速重传Fast Retransmit发送方连续收到3 个重复的 ACK说明某个数据包已丢失不必等待计时器超时。立即重传丢失的报文段减少等待时间提高传输效率一句话总结发现丢包不等超时立刻重发。4. 快速恢复Fast Recovery快速重传之后不直接退回慢启动从头开始而是适度降速。设置 ssthresh cwnd / 2cwnd 置为新的 ssthresh进入拥塞避免阶段线性增长一句话总结拥塞后窗口减半不从头开始保证平滑。四、核心原则AIMD 加性增乘性减所有经典 TCP 拥塞控制都遵循这一规则加性增网络空闲时线性增加窗口温和探测乘性减网络拥塞时窗口直接减半快速退让这一机制保证了 TCP 在竞争环境中稳定、公平。五、现代拥塞控制优化1. ECN 显式拥塞通告传统 TCP 只能通过丢包感知拥塞代价高。ECN 让路由器在队列即将溢出时直接在 IP 头部标记拥塞状态接收方通过 ACK 告知发送方网络即将拥堵请降低速率。优势不丢包也能感知拥塞减少重传降低延迟。2. 基于时延的拥塞控制代表算法Vegas、BBR。不再只依靠丢包判断拥塞而是通过RTT 变化判断队列是否排队严重延迟上升 → 路由器排队变长 → 主动降速延迟稳定 → 维持或小幅提速优势在高带宽、长延迟网络中效率更高延迟更低。六、TCP 公平性公平性多个 TCP 连接共享同一条瓶颈链路时应能公平分配带宽。经典 TCPReno使用 AIMD天生具有较好公平性新型算法如 BBR对丢包不敏感可能抢占更多带宽现代协议设计需要在 “高速” 和 “公平” 之间平衡七、全文总结TCP 拥塞控制是互联网能够稳定运行的核心机制之一整体流程可以概括为连接开始慢启动指数增长快速探测网络超过阈值拥塞避免线性增长谨慎发送检测丢包快速重传 快速恢复窗口减半现代优化ECN 提前预警、基于时延控制更智能高效理解这套机制就能真正掌握 TCP 运输层的核心设计思想。