信息技术大学
TCP 可靠传输
计算机基础面试八股 · 第 1 章 计算机网络
按 空格/→ 演示下一步
全部页面点击任意一页,跳回舞台从这页播放
信息技术大学
TCP 可靠传输
计算机基础面试八股 · 第 1 章 计算机网络
序列号与确认应答机制
可靠传输的地基:每个字节都有编号,每个收到的数据都要被确认。
字节编号
序列号按字节计数,接收端据此排序与去重
确认应答
ACK 携带下一个期望字节号,含义是「此前全收到」
累积确认
确认号之前的字节视为全部送达,中间丢失必须重传
超时重传与快速重传
丢包靠重传补救:超时重传兜底,快速重传靠重复 ACK 提前触发。
超时重传
RTO 内没等到 ACK 就重发,RTO 按 RTT 动态自适应
快速重传
收到 3 个重复 ACK 立即重发,不等超时
SACK 选项
告知已收到的不连续区间,只补真正缺失的段
重传时机自测
点击作答
发送方连续收到 3 个重复 ACK,最合理的动作是?
滑动窗口与流量控制
发多少不由发送方说了算:接收方用窗口广告控制发送速率,防止收不动。
滑动窗口
窗口内字节可连续发送,收到 ACK 窗口向前滑
流量控制
接收方用 rwnd 通告剩余缓冲,发送方不得超出
零窗口僵局
窗口归零后靠零窗口探测报文唤醒恢复
水龙头接水对应 →流量控制
放多快看桶还剩多少空间(rwnd),桶满了就关小龙头
拥塞控制四算法(慢启动/
流量控制管接收端,拥塞控制管网络:探测可用带宽,拥塞了就退让。
慢启动
cwnd 从小值指数翻倍,快速试探可用带宽
拥塞避免
越过 ssthresh 后每个 RTT 线性加一,谨慎爬坡
快重传/快恢复
3 个重复 ACK 触发重传,cwnd 减半而非归一
超时退让
真正超时才把 cwnd 打回 1,重新慢启动
拥塞后的两种退让
同样是给网络让路,快恢复与超时退让的力度完全不同。
快恢复
- 收到 3 个重复 ACK 触发
- cwnd 减半后线性增长
- 链路仍在,不必推倒重来
超时退让
- RTO 内无任何 ACK 触发
- cwnd 归 1 重新慢启动
- 网络疑似瘫痪,保守处理
快恢复是点刹车,超时是急刹——力度不同,本质都是给网络让路。
糊涂窗口综合征
每边都「省着用」,结果一次只传几个字节:小窗口让头部开销吞噬有效数据。
现象
窗口被蚕食到几十字节,传输效率暴跌
接收端对策
窗口过小时通告 0,攒到能收一个完整段再开门
发送端对策
Nagle 算法攒小包,凑够 MSS 或收到 ACK 再发
本节要点
- ✓序列号 + 确认应答是可靠的基石
- ✓快重传靠重复 ACK,超时重传是兜底
- ✓rwnd 管接收端,cwnd 管网络拥塞
- ✓慢启动指数、拥塞避免线性、快恢复减半
延伸主题:画一张 cwnd 锯齿图查一查 BBR 的思路
课后思考
先自己回答,再展开参考答案——能讲出来才算真懂。
1流量控制与拥塞控制都在限制发送速度,它们防的对象有什么不同?
参考答案流量控制防接收端缓冲溢出,窗口大小看 rwnd;拥塞控制防网络路径过载,窗口看 cwnd。实际发送量取两者中较小值。
2为什么快速重传后只需把 cwnd 减半,而超时却要退回慢启动?
参考答案三个重复 ACK 说明后续段仍在到达,链路没有瘫,减半即可;超时意味着连 ACK 都收不到,网络可能严重拥塞,必须保守地从头探测。
3Nagle 算法为什么会拖慢小包交互场景,怎么关掉?
参考答案Nagle 攒包等凑满 MSS,交互式场景(如输入回显)会引入攒包等待延迟;设置 TCP_NODELAY 关闭,用一点带宽效率换即时性。