网络协议 之 QUIC

Date
Created
Oct 13, 2025 09:02 AM
Descrption
不断探索
Tags
CoolThing
计算机网络
notion image
QUIC 是一个非常重要且有趣的网络协议。我会从它的诞生原因讲起,逐步深入到其核心特性和工作原理。

一、 QUIC 是什么?为什么需要它?

QUIC 的全称是 Quick UDP Internet Connections
要理解 QUIC,首先要明白我们当前互联网主要使用的两种传输层协议:
  1. TCP:可靠、有序,但建立连接慢(三次握手),存在“队头阻塞”问题。
  1. UDP:无连接、快速、不可靠,但简单灵活。
HTTP/1.1 和 HTTP/2 都基于 TCP,这导致它们继承了 TCP 的所有优点和缺点。随着网络应用对性能和安全性要求的提高,TCP 的某些缺点变得越来越突出:
  • 建立连接延迟高:TCP 三次握手 + TLS 加密握手 = 至少 2-3 个 RTT(往返时间)才能开始传输数据。
  • 队头阻塞:在同一个 TCP 连接中,如果有一个数据包丢失,后续的所有数据包都必须等待这个丢失的包重传成功,即使它们属于不同的 HTTP 请求。
  • 网络迁移问题:你的手机从 WiFi 切换到 4G/5G 时,IP 地址变了,所有的 TCP 连接都会中断,需要重新建立。
QUIC 的目标就是解决这些问题。 它的核心思想是:在 UDP 的基础上,重新实现 TCP 的可靠性、拥塞控制等机制,并深度集成现代安全特性(TLS 1.3)。

二、 QUIC 的核心特性与优势

1. 极快的连接建立(0-RTT 或 1-RTT)

这是 QUIC 最著名的特性。
  • 首次连接(1-RTT):QUIC 将加密和传输握手合并在一起。首次连接时,客户端发送一个包含“客户端你好”的初始数据包,服务器回复即可完成密钥交换和连接建立,仅需 1 个 RTT。相比之下,TCP+TLS 需要 2-3 个 RTT。
  • 再次连接(0-RTT):如果客户端之前连接过某个服务器,它可以直接在第一个数据包中就携带应用数据(如 HTTP 请求),实现 0-RTT 的延迟。这极大地提升了网页加载等场景的速度。

2. 彻底解决队头阻塞

QUIC 在单个物理连接内部创建了多个独立的逻辑流
  • 每个 HTTP 请求/响应都可以在自己的流上传输。
  • 即使流 A 的一个数据包丢失了,需要重传,也只会阻塞流 A 自身
  • 流 B、流 C 的数据包可以继续被处理和交付给应用层。
比喻:
  • TCP 像一条单车道隧道,一辆车(数据包)抛锚,后面所有车都得等着。
  • QUIC 像一条多车道高速公路,一条车道发生事故,其他车道的交通不受影响。

3. 无缝的连接迁移

QUIC 连接不再用传统的“四元组”(源IP、源端口、目标IP、目标端口)来标识,而是使用一个全局唯一的 Connection ID
  • 当你的网络切换(如 WiFi -> 5G),IP 地址改变时,QUIC 连接可以保持不断。
  • 应用程序(如视频通话、在线游戏)完全感知不到网络底层的变化,用户体验无缝衔接。

4. 前向纠错

QUIC 有一个可选的 FEC 机制。它可以通过发送冗余数据(如数据包 A 和 B 的异或值),使得在丢失个别数据包时,接收方能够立即恢复出原始数据,而无需等待重传,进一步降低延迟。

5. 原生加密与安全

安全不是 QUIC 的可选项,而是强制项
  • 几乎所有的 QUIC 数据包头部和载荷都是加密的。
  • 它使用 TLS 1.3 作为其加密基础。
  • 加密不仅保证了隐私,还防止了中间网络设备(如路由器、防火墙)的篡改和协议僵化。

三、 QUIC 与 HTTP/3 的关系

这是一个非常重要的概念:
  • QUIC:是一个传输层协议,可以看作是“TCP 2.0”。它不仅可以承载 HTTP,未来还可以承载其他应用层协议(如 DNS over QUIC)。
  • HTTP/3:是 HTTP 协议的一个新版本,它将 HTTP 的语义(请求、响应、头部等)映射到 QUIC 之上
所以,关系是:HTTP/3 = HTTP 语义 over QUIC 传输

四、 工作流程简图

下图清晰地展示了从 HTTP/1 到 HTTP/3 的演进,以及 QUIC 如何解决队头阻塞问题:
flowchart TD subgraph A [HTTP/1.1] A1[连接1 请求1] A2[连接1 请求2<br>(等待请求1响应)] end subgraph B [HTTP/2] B1[“流1 帧1(丢失)”] --> B2[流2 帧1] B2 --> B3[流1 帧1(重传)] B3 --> B4[流2 帧2<br>(被队头阻塞)] end subgraph C [HTTP/3 over QUIC] C1[“流1 包1(丢失)”] --> C2[流2 包1] C2 --> C3[流2 包2] C3 --> C4[流1 包1(重传)] end A --> B --> C

五、 挑战与现状

  • 部署与支持:需要客户端和服务器同时支持。目前主流浏览器(Chrome, Firefox, Edge, Safari)和大型网站(Google, Facebook, Cloudflare)都已支持 HTTP/3。
  • 网络中间件干扰:一些旧的网络设备(如防火墙)可能会错误地处理或阻止不常见的 UDP 流量。
  • CPU 开销:由于在用户空间实现且全部加密,QUIC 的 CPU 消耗目前略高于 TCP。

总结

特性
TCP/TLS
QUIC
握手延迟
2-3 RTT
1 RTT(首次),0 RTT(再次)
队头阻塞
(在应用层/流级别)
连接迁移
不支持
支持
加密
可选(TLS)
强制(集成 TLS 1.3)
底层传输
基于 IP
基于 UDP
QUIC 是近几十年来传输层协议最重要的一次革新,它从设计之初就充分考虑了现代网络环境的需求(移动、安全、低延迟),是未来互联网,特别是 HTTP/3 的基石。