TCP 可靠传输与拥塞控制
TCP 可靠的两个层面:可靠传输(不丢不错不乱,端到端)和拥塞控制(不把网络打爆,全局)。面试主线:可靠靠什么、窗口怎么动、拥塞算法演进。
可靠传输机制
| 机制 | 作用 |
|---|---|
| 序列号 + 确认 | 排序、去重、丢包检测 |
| 超时重传 | 没收到 ACK 就重发(RTO 动态估算) |
| 快速重传 | 收到 3 个重复 ACK 立即重发(不等超时) |
| 累计确认 | ACK n 表示 n 之前全收到(简化) |
快速重传是优化重点:丢包不用等超时(超时太慢),3 个重复 ACK 就触发重发。
滑动窗口
滑动窗口: 窗口内可发, ACK 后右移
- 窗口大小 = 接收方可用缓冲区(流量控制):接收方告诉发送方“我还能收多少”
- 发送方窗口内的报文可以连续发(不用逐包等确认),提高吞吐
- 流量控制 vs 拥塞控制:流量控制是接收方能力(端到端),拥塞控制是网络能力(全局)
- 窗口为 0 时发送方停止,等接收方窗口更新通告
拥塞控制四阶段
拥塞控制: 慢启动探路, 拥塞避免巡航, 丢包减半
| 阶段 | 机制 | 目的 |
|---|---|---|
| 慢启动 | cwnd 从 1 指数增长 | 快速探测可用带宽 |
| 拥塞避免 | 到 ssthresh 后线性增长 | 避免打爆网络 |
| 快速重传/恢复 | 3 重复 ACK 触发,cwnd 减半 | 丢包不从头再来 |
| 超时重传 | 超时触发,回到慢启动 | 严重拥塞彻底退让 |
关键判断:超时 = 严重拥塞(cwnd 归 1);3 个重复 ACK = 轻度丢包(cwnd 减半)。不同丢包信号不同退让幅度。
BBR(Google):不再以丢包为拥塞信号(丢包可能只是缓冲),改用带宽和延迟测量(BDP 探测),在高速长距网络明显优于传统算法。考点了解级:知道“基于测量而非丢包”即可。
面试追问
- TCP 怎么保证可靠? 序列号 + 确认 + 重传(超时/快速重传)+ 窗口。四件套
- 快速重传为什么快? 3 个重复 ACK 立即重发,不等超时(RTO 可能上百毫秒)
- 流量控制和拥塞控制的区别? 流量控制管接收方缓冲(端到端),拥塞控制管网(全局)。窗口 = min(接收窗口, 拥塞窗口)
- 慢启动为什么指数增长? 快速探测带宽:网络好就快速冲,丢包再退让
- 超时和重复 ACK 的区别? 超时是严重拥塞(归 1 重来),重复 ACK 是轻度丢包(减半恢复)