TL;DR
TCP 面向连接,提供可靠、有序、流量控制与拥塞控制,适合 HTTP/HTTPS、数据库、文件传输;UDP 无连接,不保证可靠与顺序,但头部小、延迟低,适合 DNS、视频通话、实时游戏、NTP。选型就看三点:丢包是否致命、顺序是否重要、延迟有多敏感。
核心对比
| 维度 | TCP | UDP |
|---|---|---|
| 连接建立 | 三次握手(SYN/SYN-ACK/ACK) | 无握手,直接发数据报 |
| 可靠性 | 确认与重传,保证到达 | 不保证到达 |
| 顺序 | 字节流,保证有序 | 不保证顺序 |
| 头部开销 | 20–60 字节 | 8 字节 |
| 流量/拥塞控制 | 有 | 无 |
| 常见协议 | HTTP 80、HTTPS 443、SSH 22、SMTP 25、MySQL 3306 | DNS 53、NTP 123、DHCP 67/68、RTP、QUIC 443 |
怎么选
- 要可靠传输:用 TCP;要低延迟+可靠兼得:用基于 UDP 的 QUIC(HTTP/3);
- 实时性优先、可容忍少量丢包:UDP(音视频、游戏);
- 无状态小查询:DNS 用 UDP,失败后重发;
- 需要多路复用、0-RTT 握手、连接迁移:QUIC 比 TCP 更合适。
常见问题
TCP 一定比 UDP 慢吗?
不一定。TCP 的额外开销来自握手与拥塞控制;对单次小请求差异很小,对长连接和流式传输,TCP 的可靠机制反而能减少应用层重传。
DNS 为什么用 UDP?
DNS 查询通常一个请求一个包,UDP 无连接开销最小;查询响应超过 512 字节时会回退到 TCP(或使用 EDNS(0) 扩展)。
HTTP/3 为什么基于 UDP?
HTTP/3 使用 QUIC,QUIC 在 UDP 上自己实现可靠传输、0-RTT 握手、多路复用和连接迁移,解决了 TCP 的队头阻塞问题。
来源
- RFC 793(TCP)、RFC 768(UDP)、RFC 9000(QUIC)、RFC 9114(HTTP/3),2026-08-04 访问
- MDN Web Docs: HTTP 传输层说明,2026-08-04 访问