HTTP/3 与 QUIC:把传输搬到 UDP 之上
更新时间:2026-09-17。网络协议域·应用层(QUIC 本身是传输)。它解决 HTTP/2 遗留的 TCP 层队头阻塞与握手延迟;UDP 基础见 UDP 协议,加密见 TLS 1.3。
HTTP/3 不再基于 TCP,而是基于 QUIC——一个运行在 UDP 之上、由 Google 提出、IETF 标准化的现代传输协议。QUIC 在用户态把"可靠传输 + 拥塞控制 + TLS 1.3 加密 + 多路复用"全部重做了一遍,因此 HTTP/3 天然是加密的、握手更快、且没有 TCP 层队头阻塞。
一、为什么要在 UDP 上重造
TCP 实现在操作系统内核和中间盒(NAT、防火墙、负载均衡)里,演进极慢:想改拥塞控制、想让流互不影响,几十年的存量设备不会配合。UDP 报文载荷对中间盒基本透明、只按四元组转发,于是在 UDP 载荷里实现一整套可由应用升级的传输,既能快速迭代,又能绕过中间盒僵化(ossification)。
HTTP/1.1/2: HTTP ── TLS ── TCP ── IP
HTTP/3: HTTP/3 ── QUIC(内含 TLS 1.3 + 可靠 + 拥塞)── UDP ── IP二、核心特性
1. Stream 独立可靠:真正无队头阻塞
QUIC 在一个连接内提供多条独立 stream,每个 stream 自己保证可靠和按序,但 stream 之间不互相等待:
- HTTP/2 里一个 TCP 段丢失会卡住所有 stream(TCP 层 HOL)。
- QUIC 里某个 stream 的包丢了,只阻塞那条 stream 的交付,其他 stream 已到的数据照常上送。
- 这在弱网、移动网络(丢包常见)下显著降低尾延迟。
2. 内置 TLS 1.3,握手 1-RTT / 0-RTT
QUIC 把加密握手与传输握手合并,默认全程加密(甚至头部也部分加密):
- 首次连接通常 1-RTT 完成"连接 + 加密",比 TCP 握手(1 RTT) + 经典 TLS(1~2 RTT) 更短。
- 会话恢复时可 0-RTT:在第一个包里就携带应用数据,代价是早期数据有重放风险(只用于幂等安全请求,见方法幂等)。
3. 连接迁移(Connection ID)
TCP 连接由四元组(源/目的 IP、端口)唯一标识,手机从 WiFi 切到蜂窝、IP 一变连接就断。QUIC 连接由与传输地址解耦的 Connection ID 标识:
- IP/端口变化时,凭 Connection ID 服务器仍认出同一连接,会话不中断、无需重新握手。
- 这对移动场景体验提升明显。
4. 用户态可演进
拥塞控制(BBR、CUBIC 可插拔)、丢包检测(更精确的 RACK 式时间判定)、前向纠错等都在应用/库(如 quiche、lsquic、各浏览器/CDN 内置)里升级,不依赖操作系统更新。
三、QPACK 头部压缩
HTTP/2 的 HPACK 依赖单条 TCP 的严格有序才能维护动态表;QUIC 流可能乱序,HTTP/3 改用 QPACK:静态/动态表加霍夫曼编码,但通过特殊的控制流(编码流)和"已知插入计数"让头部块可以在乱序、有依赖的情况下安全引用动态表,兼顾压缩率与无队头阻塞。
四、代价与权衡
| 方面 | 说明 |
|---|---|
| CPU | 用户态加解密与协议处理比内核 TCP 更吃 CPU(虽有 GSO/GRO、offload 优化) |
| UDP 生态 | 部分网络封 UDP、QoS/监控传统上只认 TCP,需要显式放行 UDP/443 |
| 可观测性 | 载荷全加密,传统中间设备看不到 HTTP 信息,抓包调试更难(需密钥日志) |
| CPU/状态 | 无状态的 L4 负载均衡要支持 Connection ID 路由(同连接的包可能来自不同 IP) |
| 回退 | UDP 不通时客户端回退 HTTPS over TCP(HTTP/2/1.1),由 Alt-Svc 通告 h3 |
五、怎么知道站点支持
服务器通过 HTTP 响应头 Alt-Svc: h3=":443" 告诉客户端"本服务还有 HTTP/3 可用",客户端后续用 QUIC/UDP 443 连接;也可在 HTTPS DNS 记录(h3)中发现。抓包看到的是 UDP 而非 TCP 443,初始 QUIC包被加密且不超过约 1200 字节(为避免IP 分片)。
六、与性能主线的关系
QUIC 的很多设计(连接建立延迟、丢包恢复、拥塞控制)本质是性能优化:0-RTT 省 RTT、流独立降尾延迟、连接迁移消除切换中断。它与本站 零拷贝、TCP 拥塞控制关注的"更低延迟、更高吞吐"同源,只是把战场从内核 TCP 移到了用户态 UDP。
相关阅读
HTTP/2 的 TCP 层 HOL 由本篇消除,UDP 是承载、IP 分片/MTU 解释 1200 字节初始包,握手安全见 TLS 1.3。
总结
HTTP/3 基于 QUIC——在 UDP 之上由用户态实现可靠传输、可插拔拥塞控制与内置 TLS 1.3:多 stream 各自可靠从而消除 HTTP/2 的 TCP 层队头阻塞,连接+加密握手合并做到 1-RTT、恢复 0-RTT,靠与四元组解耦的 Connection ID 实现网络切换不断连,并用 QPACK 替代 HPACK;代价是更高 CPU、需放行 UDP、加密带来观测难度,并保留向 HTTP/2 回退。