5月27日 22:51
TCP 和 UDP 的主要区别是什么?
答案速览
TCP 面向连接、可靠传输、一对一通信,代价是延迟高、开销大;UDP 无连接、不保证可靠、支持一对多,优势是快。面试中一句话总结:要可靠选 TCP,要速度选 UDP。
核心区别
| 维度 | TCP | UDP |
|---|---|---|
| 连接 | 三次握手建立,四次挥手断开 | 无连接,直接发 |
| 可靠性 | 确认应答+重传+校验,保证不丢不重不乱 | 尽力交付,可能丢包乱序 |
| 传输方式 | 面向字节流 | 面向报文,保留边界 |
| 流量/拥塞控制 | 滑动窗口+慢启动+拥塞避免 | 无 |
| 通信模式 | 仅一对一 | 一对一/一对多/多对多 |
| 首部开销 | 最少 20 字节 | 固定 8 字节 |
理解的关键不在背表,而在为什么:TCP 的每一个"可靠"特性(确认、重传、序号、窗口)都是有代价的——更多握手、更大首部、更低效率。UDP 丢掉这些,换来的是简单和快速。
适用场景怎么选
- TCP:HTTP/HTTPS、FTP、SSH、数据库连接——数据不能丢的场景
- UDP:视频会议、直播、在线游戏、DNS 查询——延迟比完整性更重要的场景
面试常见的陷阱题:DNS 既用 UDP 又用 TCP,为什么? 普通查询用 UDP(快),响应超过 512 字节或区域传输时切 TCP(可靠)。这说明选协议不是非此即彼,而是按场景取舍。
面试追问
- 三次握手为什么不能两次?——两次无法确认客户端接收能力,可能产生死连接
- 为什么视频通话用 UDP 而不重传丢包?——重传到达时画面已经过了,不如跳过
- QUIC 为什么基于 UDP 而不是 TCP?——TCP 的握手和拥塞控制内核实现,无法快速迭代;UDP 在用户态可实现同等可靠性和更快的连接建立