QUIC 协议之所以能在性能上全面超越 TCP,是因为它从设计之初就针对现代互联网(尤其是移动互联网和延迟敏感型应用)的痛点进行了“降维打击”。
它的快主要体现在以下 四个核心维度:
1. 握手延迟的大幅降低(0-RTT / 1-RTT)
这是 QUIC 最直观的优势。
-
传统 TCP + TLS 1.2:需要先进行 TCP 三次握手,再进行 TLS 握手。在发送第一个字节的业务数据前,通常需要 3 个 RTT(往返时间)。
-
QUIC:它将传输握手和加密握手合并。
- 首次连接:只需要 1 个 RTT 即可完成建连并发送数据。
- 再次连接 (0-RTT) :由于客户端缓存了服务端的参数,可以在握手包里直接带上请求数据。实现 0 毫秒延迟开跑。
2. 彻底解决“队头阻塞” (Head-of-Line Blocking)
这是 QUIC 相比 HTTP/2 (基于 TCP) 的最大改进。
- TCP 的缺陷:TCP 保证数据的绝对有序。如果一个连接中包含 10 个资源(多路复用),只要其中一个包在网络中丢了,TCP 必须等重传成功后,才会把后续已经到达的包交给上层。
- QUIC 的方案:QUIC 虽然也支持多路复用,但它是在 UDP 基础上实现的。每个流(Stream)之间是相互独立的。如果 Stream A 丢包了,只会阻塞 Stream A,Stream B/C 的数据依然可以立即交给应用层。
3. 连接迁移 (Connection Migration)
在移动端,当你从 Wi-Fi 切换到 5G 时,你的 IP 地址会发生变化。
- TCP 的痛苦:TCP 依赖“五元组”(源IP、源端口、目的IP、目的端口、协议)标识连接。IP 一变,连接必断,必须重新进行三次握手。
- QUIC 的优雅:QUIC 使用一个 64 位的 Connection ID 来标识连接。只要 ID 没变,即便 IP 和端口变了,连接依然可以无缝继续。你甚至感知不到网络切换带来的停顿。
4. 更高效的拥塞控制与重传
QUIC 在应用层实现了拥塞控制,这让它比内核级的 TCP 迭代更快、更灵活:
- 更多的单调递增序列号:在 TCP 中,重传包和原始包的序列号是一样的,接收方容易搞混。QUIC 每个包的 Packet Number 都是唯一的,这让 RTT 的计算极其精准。
- 选择性确认 (SACK) :QUIC 默认支持更多的 SACK 区块,能更清晰地告诉发送方哪些包丢了,从而减少不必要的重传。
- 可插拔设计:QUIC 允许在应用层直接更换算法(如从 Cubic 换成 BBRv3),而不需要升级操作系统内核。
总结对照表
| 特性 | TCP + TLS | QUIC (HTTP/3) | 性能提升点 |
|---|---|---|---|
| 建连耗时 | 2-3 RTT | 0-1 RTT | 减少首包延迟 |
| 队头阻塞 | 存在(连接级别) | 不存在(流级别) | 提高弱网下的吞吐 |
| 网络切换 | 必须重新连接 | 连接迁移(CID) | 提升移动端稳定性 |
| 迭代速度 | 依赖内核更新(慢) | 应用层更新(快) | 快速应用最新优化算法 |
一句话总结: QUIC 通过“握手合并”、“绕过 TCP 队头阻塞”和“连接 ID”技术,把互联网协议从 90 年代的“稳重”模式切换到了 21 世纪的“竞速”模式。