外观
一句话答案
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 + 34. 快速恢复(Fast Recovery)
快速重传后进入快速恢复,cwnd 从 ssthresh 开始线性增长
(不回到 1,比超时重传的惩罚轻)
超时重传:ssthresh = cwnd/2,cwnd 重置为 1(最严重的惩罚)追问与易错
追问方向:
- 超时重传的超时时间怎么确定?
- 滑动窗口和拥塞窗口的关系?
- 流量控制和拥塞控制的区别?
易错点:
- ❌ TCP 重传就是固定间隔重发——有指数退避
- ❌ 流量控制和拥塞控制一样——前者端到端后者网络
💡 记忆锚点
TCP可靠传输六件套口诀:"编号确认重传窗口,流控拥控两手都有"。序列号给每个字节编号,ACK确认收到,超时/快速重传补漏,滑动窗口批量发送。流量控制看对端能力(rwnd),拥塞控制看网络承受力(cwnd),实际发送量取两者最小值。