Skip to content
进阶

一句话答案

TCP 靠序列号+确认应答+超时重传+滑动窗口+流量控制+拥塞控制保证可靠传输。

核心要点

流量控制(Flow Control):防止发送方发太快,接收方来不及处理

机制:滑动窗口(Sliding Window)

接收方在 ACK 中告知自己的接收窗口大小(rwnd)
发送方的发送量不超过 min(cwnd, rwnd)

当接收方缓冲区满时(rwnd=0):
  → 发送方停止发送
  → 接收方缓冲区有空间后发送 Window Update 通知
  → 接收方不主动通知时,发送方定时发 1 字节探测包(ZWP,零窗口探测)

拥塞控制(Congestion Control):防止发送方将网络打满

四个算法(协同工作):

1. 慢启动(Slow Start)

初始:cwnd = 1 MSS(最大报文段)
每收到一个 ACK:cwnd += 1 MSS(指数增长)
直到 cwnd 达到 ssthresh(慢启动阈值)

2. 拥塞避免(Congestion Avoidance)

cwnd > ssthresh 后切换到拥塞避免
每个 RTT:cwnd += 1 MSS(线性增长,更保守)

3. 快速重传(Fast Retransmit)

收到 3 个重复 ACK → 不等超时,立即重传丢失的报文段
同时:ssthresh = cwnd/2,cwnd = ssthresh + 3

4. 快速恢复(Fast Recovery)

快速重传后进入快速恢复,cwnd 从 ssthresh 开始线性增长
(不回到 1,比超时重传的惩罚轻)

超时重传:ssthresh = cwnd/2,cwnd 重置为 1(最严重的惩罚)
追问与易错

追问方向:

  • 超时重传的超时时间怎么确定?
  • 滑动窗口和拥塞窗口的关系?
  • 流量控制和拥塞控制的区别?

易错点:

  • ❌ TCP 重传就是固定间隔重发——有指数退避
  • ❌ 流量控制和拥塞控制一样——前者端到端后者网络

💡 记忆锚点

TCP可靠传输六件套口诀:"编号确认重传窗口,流控拥控两手都有"。序列号给每个字节编号,ACK确认收到,超时/快速重传补漏,滑动窗口批量发送。流量控制看对端能力(rwnd),拥塞控制看网络承受力(cwnd),实际发送量取两者最小值。