UDP 与 QUIC
UDP 常被误解为“不可靠所以没用”。面试主线:UDP 的真实定位、QUIC 为什么在 UDP 上重建 TCP。
UDP 特性
| 维度 | UDP | TCP |
|---|---|---|
| 连接 | 无连接(发就完了) | 三次握手 |
| 可靠性 | 不保证(可能丢、乱序) | 可靠传输 |
| 开销 | 头部 8 字节 | 头部 20+ 字节 + 状态 |
| 拥塞控制 | 无 | 有 |
| 适用 | 实时性优先 | 可靠性优先 |
UDP 的价值:把可靠性决策交给应用。需要低延迟、可容忍丢失的场景,TCP 的重传和拥塞控制反而是负担。
UDP 应用场景
| 场景 | 为什么用 UDP |
|---|---|
| 视频/语音通话 | 丢几帧无所谓,延迟不能忍(TCP 重传反而更卡) |
| 游戏 | 状态同步,旧包没意义 |
| DNS 查询 | 一问一答,快;大响应自动切 TCP |
| 日志上报 | 可丢,别阻塞 |
| QUIC | 见下 |
QUIC:UDP 上的“TCP 重做”
QUIC: 在 UDP 上重做 TCP + TLS + 多路复用
QUIC 解决的三个 TCP 老大难:
| 问题 | QUIC 方案 |
|---|---|
| 队头阻塞(TCP 层) | 多流独立:一个流丢包不影响其他流 |
| 握手慢(TCP+TLS 两次往返) | TLS 1.3 内置,1-RTT/0-RTT |
| 移动网络切换断连 | 连接 ID 不依赖 IP,换网不断 |
HTTP/3 = QUIC + HTTP 语义:传输层换 QUIC,应用层还是 HTTP。
面试话术:QUIC 不是推翻 TCP,而是绕开 TCP 的内核实现限制,把可靠性、加密、多路复用合到用户态一个协议里,能快速迭代。
面试追问
- UDP 什么时候用? 实时性优先、可容忍丢失:音视频、游戏、日志。可靠性应用自己管
- QUIC 解决什么? TCP 三痛点:传输层队头阻塞、握手慢、连接迁移难
- QUIC 怎么做到多流? 流级独立:丢包只重传该流,其他流不受影响(TCP 是整个连接一起堵)
- HTTP/3 和 QUIC 的关系? HTTP/3 是跑在 QUIC 上的 HTTP。QUIC 是传输层,HTTP 语义不变
- QUIC 为什么不基于 TCP? TCP 实现在内核,迭代慢。UDP 之上用户态实现,快速演进