外观
一句话答案
拥塞控制四阶段:慢启动(指数增)→拥塞避免(线性增)→快重传(3 个重复 ACK)→快恢复(ssthresh 减半)。
核心要点
| 维度 | TCP | UDP |
|---|---|---|
| 连接 | 面向连接(三次握手建立,四次挥手释放) | 无连接(直接发送) |
| 可靠性 | 可靠(ACK 确认、重传、有序交付) | 不可靠(尽力而为,不保证到达/顺序) |
| 传输方式 | 字节流(无消息边界) | 数据报(有消息边界,保留边界) |
| 流量控制 | 有(滑动窗口) | 无 |
| 拥塞控制 | 有(慢启动、拥塞避免等) | 无 |
| 头部大小 | 20~60 字节(较大) | 8 字节(固定,极小) |
| 速度 | 慢(建立连接 + 各种控制机制) | 快(无连接、无控制) |
| 适用场景 | HTTP/HTTPS、FTP、数据库连接 | DNS、视频直播、在线游戏、QUIC |
记忆要点:
- TCP = 打电话(先拨号建立连接,说完话挂断)→ 可靠但慢
- UDP = 发短信/广播(直接发,不管对方收没收到)→ 快但不可靠
UDP 适用场景的选择原因:
- 视频直播/语音通话:允许少量丢包(画面模糊比卡顿好),实时性 > 可靠性
- DNS:查询响应小且快,超时了重发一次即可,无需 TCP 的连接开销
- 游戏:网络游戏位置同步,最新数据覆盖旧数据,中间帧丢了没关系
追问与易错
追问方向:
- 慢启动和拥塞避免的区别?
- 快重传为什么是 3 个重复 ACK?
- BBR 算法了解吗?
易错点:
- ❌ 拥塞控制就是限速——是动态调整发送速率
- ❌ 拥塞窗口只增不减——丢包时会大幅减小
💡 记忆锚点
拥塞控制像开车上高速:慢启动是踩油门加速(指数涨),到限速牌(ssthresh)后匀速(线性涨)。看到前方连续刹车灯(3个重复ACK)赶紧减速一半(快恢复),真出了事故(超时)直接停下来从头加速(cwnd回1)。