QUIC(Quick UDP Internet Connections,快速UDP互联网连接)协议是一项由Google最初提出,后由IETF标准化的新型传输层网络协议。

它被设计为替代TCP+TLS的下一代互联网传输协议,旨在为现代互联网应用提供更快、更可靠、更安全的连接。QUIC也是驱动下一代HTTP协议——HTTP/3的核心。

TCP的问题

传统上,可靠的连接都构建在TCP之上。但是TCP存在一些难以解决的根本性问题:

  1. 队头阻塞(Head-of-Line Blocking): 在HTTP/2中,虽然引入了多路复用技术,允许在单个TCP连接上同时传输多个流(Stream),但TCP本身并不知道这些流的存在。如果其中一个流的数据包丢失,整个TCP连接必须等待该数据包重传,导致所有流都被阻塞。
  2. 连接建立延迟高: TCP连接需要进行三次握手,而安全的HTTPS连接还需要额外的TLS握手。这个过程通常需要2-3个RTT(Round-Trip Time),延迟显著。
  3. 连接迁移困难: TCP连接由四元组(源IP、源端口、目标IP、目标端口)唯一标识。当用户的网络环境变化时(例如从Wi-Fi切换到蜂窝网络),IP地址会改变,导致TCP连接中断,需要重新建立。

QUIC选择在UDP之上实现,将传输控制的逻辑从内核空间转移到用户空间,从而获得了更大的灵活性来解决这些问题。

核心特性

解决队头阻塞

QUIC实现了真正意义上的多路复用。它在单个QUIC连接中支持多个独立的流(Stream)。每个流都有自己的流量控制和可靠性保障机制。

  • 工作原理: 当一个流的数据包丢失时,只有该流需要等待重传,其他并行的流可以继续传输数据。这从根本上解决了TCP层面的队头阻塞问题。
+--------------------------------------------------+
|                   QUIC Connection                |
| +---------+ +---------+ +---------+ +---------+  |
| | Stream 1| | Stream 2| | Stream 3| | Stream 4|  |
| | (CSS)   | | (JS)    | | (HTML)  | | (Image) |  |
| +---------+ +---------+ +---------+ +---------+  |
+--------------------------------------------------+
|                        UDP                       |
+--------------------------------------------------+

如果Stream 4的数据包丢失,Stream 1, 2, 3 不会受到影响。

快速连接建立

QUIC将传输层握手和加密握手(基于TLS 1.3)合并,大大减少了连接建立所需的时间。

  • 1-RTT: 对于新连接,客户端和服务器在一次往返中就能完成握手,交换必要的加密和传输参数。
  • 0-RTT: 对于已经建立过连接的客户端,服务器可以将一些会话信息缓存起来。客户端在下一次连接时,可以直接在第一个数据包中携带加密的应用数据,实现零往返时间的连接建立。这极大地提升了“热启动”的速度。

对比TCP+TLS:

  • TCP+TLS 1.2: TCP Handshake (1 RTT) + TLS Handshake (2 RTT) = 3 RTT
  • QUIC: Handshake (1 RTT)Resumed Handshake (0 RTT)

连接迁移

QUIC不使用IP和端口四元组来标识连接,而是引入了一个连接ID(Connection ID, CID)。CID是一个由端点选择的唯一标识符。

  • 工作原理: 只要CID保持不变,即使客户端的IP地址或端口发生变化(例如,从Wi-Fi切换到4G),连接依然能够维持。QUIC客户端只需向服务器发送一个包含相同CID但来自新IP地址的数据包,服务器就能识别并继续与该客户端通信,无需重新建立连接。

这个特性对于移动设备用户体验的提升至关重要。

安全性

安全是QUIC的内置特性,而非可选项。

  • TLS 1.3集成: QUIC强制使用TLS 1.3进行加密。与TCP+TLS的组合不同,QUIC的数据包头部信息(如包序号)也被加密。
  • 防止协议僵化: 加密更多的协议元数据,可以有效防止中间设备(如防火墙、NAT)解析、修改甚至阻止新协议的部署。

可插拔的拥塞控制

QUIC将拥塞控制算法的实现移到了用户空间,这意味着可以更快速地部署和迭代新的算法。

  • 灵活性: 不再依赖于操作系统的内核更新,应用程序可以根据自身需求选择或实现最适合的拥塞控制策略(例如Google的BBR算法)。
  • 更丰富的信令: QUIC提供了比TCP更丰富的信令,例如每个数据包(包括重传包)都有新的包序号,这使得RTT的计算更加精确。它还明确区分了ACK延迟,帮助发送方更好地判断网络状况。

QUIC的现状

2021年5月,QUIC正式被标准化为RFC 9000系列。如今QUIC已经得到了业界的广泛支持:

  • 主流浏览器: Google Chrome、Mozilla Firefox、Apple Safari和Microsoft Edge等主流浏览器均已默认支持QUIC和HTTP/3。
  • 大型互联网公司: Google、Cloudflare、Facebook(Meta)等大型科技公司已经大规模部署QUIC,为其全球用户提供服务。
  • 生态系统不断扩大: 越来越多的CDN服务商、服务器软件(如Nginx、Caddy)和网络设备开始支持QUIC协议。

QUIC的应用场景

  • Web浏览与HTTP/3
  • 视频流媒体服务
  • 在线游戏与实时通信(RTC)
  • API与微服务通信
  • IoT与移动应用