QUIC:为什么 HTTP/3 选择在 UDP 上重新造一套传输协议?

TL;DR

QUIC 在 UDP 之上重新提供可靠传输、TLS、多流复用、流量控制与连接迁移,减少队头阻塞并适应移动网络变化。

QUIC 在 UDP 之上重新提供可靠传输、TLS、多流复用、流量控制与连接迁移,减少队头阻塞并适应移动网络变化。

QUIC:为什么 HTTP/3 选择在 UDP 上重新造一套传输协议?

QUIC 是一种建立在 UDP 之上的现代传输协议,但它并不是简单地“把 TCP 换成 UDP”。它重新设计了连接建立、可靠传输、加密、多路复用和连接迁移,希望减少传统传输协议在移动网络和高延迟链路上的固定成本。

最直观的变化是流。一个 QUIC 连接里可以承载多个相互独立的流;某个流丢包时,其他流不必像 HTTP/2 over TCP 那样等待同一条字节流恢复。这减少了队头阻塞。QUIC 还把 TLS 1.3 握手纳入连接建立流程,通常可以更快完成安全协商。

UDP 只提供数据报承载,不负责可靠性、顺序和拥塞控制,所以 QUIC 自己补上了这些机制。它会确认数据、重传丢失包、控制发送窗口,并区分连接级和流级的流量。连接还可以使用连接 ID 标识,而不是把四元组作为唯一身份,这使手机从 Wi-Fi 切到蜂窝网络时有机会继续保持连接。

这些灵活性带来实现复杂度。QUIC 加密了大量传输元数据,中间设备不再像过去那样容易观察和处理;服务器要管理连接 ID、密钥更新、0-RTT 的重放风险、流量控制和拥塞控制。UDP 被限速或阻断的网络,也可能让 QUIC 退回其他协议。

理解 QUIC 的关键不是记住“HTTP/3 使用 UDP”,而是看到一套位于应用与网络之间的新边界:它利用 UDP 获得部署灵活性,再在用户空间重新提供可靠、安全、可迁移的传输语义。HTTP/3 因此可以把请求流与连接管理组合得更贴近现代网络。

QUIC 还把连接级流量控制与流级流量控制分开:一个流不能无限占用整个连接,连接也不能因为某个流的窗口太小而完全失去推进。对于浏览器加载多个资源、实时应用和服务间 RPC,这种粒度让应用可以把优先级和取消动作表达得更清楚。

资料来源:RFC 9000:QUIC: A UDP-Based Multiplexed and Secure Transport

KEEP READING