QUIC 协议概述

QUIC(Quick UDP Internet Connections,快速UDP网络连接)是近年来网络传输层最具革命性的协议之一。它由 Google 于 2012 年首次提出,旨在解决传统 TCP 协议在现代网络环境下面临的根本性限制。如今,QUIC 已被 IETF 标准化(RFC 9000),并作为 HTTP/3 的底层传输协议,全球已有约 70% 的网络流量在使用 QUIC。

本文将从 QUIC 的诞生背景、核心特性、工作原理、应用场景和未来展望等多个维度,全面深入地解析这一现代传输协议。

一、为什么需要 QUIC?

1.1 TCP 的"中年危机"

TCP(传输控制协议)自 20 世纪 90 年代互联网兴起以来,一直是网络传输的基石。它在有线网络、固定设备占主导的时代表现卓越,但随着移动互联网、物联网和实时应用的爆发式增长,TCP 的"年龄"开始显现出问题。

问题一:中间设备僵化

TCP 协议使用历史悠久,大量中间设备(防火墙、NAT 网关、负载均衡器等)对其形成了依赖。例如:

  • 某些防火墙只允许通过 80 和 443 端口
  • NAT 网关在转换网络地址时可能重写传输层头部
  • 整流器和代理会删除它们不认识的 TCP 选项字段

这意味着,任何对 TCP 协议的改进或扩展,都很容易被这些僵化的中间设备干扰或阻断,导致优化方案难以部署。

问题二:操作系统内核僵化

TCP 协议栈通常实现在操作系统内核中。虽然应用程序可以快速迭代更新,但 TCP 的改进需要等待操作系统升级------移动设备可能滞后数年,PC 端更是如此(至今仍有 Windows XP 用户)。这导致即使有优秀的特性如 TCP Fast Open(2013 年提出),也迟迟无法得到广泛支持。

问题三:连接建立延迟大

传统的 HTTPS 连接需要经历 TCP 三次握手 + TLS 握手:

  • TCP 三次握手:1.5 个 RTT(往返时间)
  • TLS 1.2 完全握手:至少 2 个 RTT
  • 完整 HTTPS 连接建立:约 3 个 RTT

对于短连接场景(如移动 App 的 API 调用、网页资源加载),这样的延迟对用户体验影响显著。

问题四:队头阻塞

TCP 为了保证数据的顺序交付,引入了"队头阻塞"问题:如果一个数据包丢失,后续已到达的所有数据都必须等待该包重传完成,即使它们属于完全不同的请求。在高丢包率的移动网络中,这个问题尤为严重。HTTP/2 虽然实现了多路复用,但所有请求共享同一个 TCP 连接,一个流的丢包会阻塞其他所有流。

1.2 为什么选择 UDP?

面对这些瓶颈,理想方案是"原地升级"TCP,但内核僵化和中间设备干扰使得这条路几乎走不通。于是 Google 的工程师们做出了一个大胆的决定:放弃 TCP,基于 UDP 重新设计一个传输协议

为什么是 UDP?

  • UDP 没有连接概念,无三次握手,天生低延迟
  • UDP 是用户态可完全控制的,协议改进无需升级内核或等待系统更新
  • 几乎所有现代操作系统都原生支持 UDP,部署成本低
  • UDP 本身不关心可靠性、顺序、拥塞控制------这些功能可以在用户态按需实现

QUIC 正是在此思路下诞生的:在 UDP 之上,重新实现一个"更好的 TCP"

二、QUIC 协议概述

2.1 定义与定位

QUIC(Quick UDP Internet Connections)是一个基于 UDP 的传输层协议,由 Google 设计并于 2013 年公开,2015 年提交给 IETF 进行标准化。2021 年,IETF 正式发布了 QUIC 标准 RFC 9000。

QUIC 的核心定位是:在用户态提供一个集连接管理、可靠传输、拥塞控制、加密安全于一体的现代传输协议

QUIC 的协议栈位置

复制代码
┌─────────────────────────────────────────────┐
│               HTTP/3 (应用层)                │
├─────────────────────────────────────────────┤
│              QUIC (传输层)                   │
│   (可靠传输 + 拥塞控制 + 安全加密 + 多流)        │
├─────────────────────────────────────────────┤
│                UDP (传输层)                  │
├─────────────────────────────────────────────┤
│                 IP (网络层)                  │
└─────────────────────────────────────────────┘

2.2 QUIC 与 HTTP/3 的关系

严格来说,QUIC 是传输层协议 ,而 HTTP/3 是基于 QUIC 的应用层协议。两者关系类似 TCP 之于 HTTP/2。

正是因为 QUIC 提供了多流并发、低延迟握手等特性,HTTP/3 才能彻底解决 HTTP/2 遗留的队头阻塞问题,实现真正的并行传输。

三、QUIC 的核心特性

QUIC 的卓越性能源于其五大核心设计。

3.1 连接建立低延迟(0-RTT 握手)

这是 QUIC 最显著的性能优势。

首次连接(1-RTT)

与传统 TCP+TLS 需要 2-3 个 RTT 不同,QUIC 将传输层握手和 TLS 1.3 加密握手合并为一次交换。客户端只需发送一个数据包,服务器即可响应,连接即建立------耗时仅 1 个 RTT

再次连接(0-RTT)

QUIC 支持连接恢复。如果客户端和服务器之前建立过连接,客户端可以直接发送加密的应用数据,无需等待服务器的任何握手响应。这使得后续连接的建立延迟几乎降为零。

对比

连接类型 握手次数
TCP + TLS 1.2 3 个 RTT
TCP + TLS 1.3 2 个 RTT
QUIC(首次) 1 个 RTT
QUIC(再次) 0 个 RTT

3.2 多路复用 & 解决队头阻塞

这是 QUIC 相对于 HTTP/2 最关键的改进。

HTTP/2 的遗留问题 :HTTP/2 在同一 TCP 连接上实现了多路复用,多个请求可以并行发送。但 TCP 层仍然是单连接的字节流------如果某个数据包丢失,TCP 会阻塞整个连接,直到重传完成。这意味着一个慢请求会影响所有其他请求。

QUIC 的解决方案 :QUIC 引入了"流(Stream)"的概念:

  • 一个 QUIC 连接可承载多个独立的数据流
  • 每个流有自己的传输状态(发送/接收窗口、丢包重传状态)
  • 一个流的数据丢失,只阻塞该流本身,其他流不受影响

简单来说:TCP 是"单车道"上所有车辆排队;QUIC 是"多车道",每条车道独立通行。

3.3 连接迁移(Connection Migration)

这是 QUIC 为移动网络设计的核心特性。

TCP 的局限 :TCP 连接由四元组 源IP:源端口 --- 目标IP:目标端口 唯一标识。当手机从 WiFi 切换到蜂窝网络时,IP 地址改变→TCP 连接中断,所有请求必须重连。

QUIC 的创新 :QUIC 引入 Connection ID(连接 ID)。这是一个由客户端生成的 64 位随机数,在连接生命周期内保持不变。网络切换时,即使 IP/端口改变,只要 Connection ID 不变,连接就可以继续。

因此,用户在 WiFi 与 5G 之间切换时,QUIC 连接不会中断------对上层应用完全透明。

3.4 内置 TLS 1.3 加密

QUIC 在设计之初就内置了安全机制,强制使用 TLS 1.3 进行加密。

特点

  • 所有 QUIC 数据包(包括部分控制信息)全部加密
  • 相比 TCP+TLS(仅加密应用数据),QUIC 提供了更强的隐私保护
  • 协议头部也经过加密,中间设备无法查看传输控制信息

这给传统网络管理带来了挑战,但对用户来说意味着更强的安全保护。

3.5 可插拔的拥塞控制

TCP 的拥塞控制算法由操作系统内核决定,更新需升级系统。QUIC 在应用层实现拥塞控制,允许:

  • 应用程序自由选择算法(CUBIC、BBR、Reno、PCC 等)
  • 不同连接使用不同算法
  • 无需重启服务即可变更算法

这使开发者能根据场景选择最优方案:卫星链路用 BBR,数据中心内用 CUBIC。Google 的 BBR 算法最初就是在 QUIC 上进行实验并验证的。

四、QUIC 的工作原理

4.1 连接建立流程

QUIC 连接建立过程结合了传输握手和加密握手。

复制代码
客户端                          服务器
   |                              |
   |----- Initial (CHLO) -------->|  (包含加密参数 + 应用数据)
   |                              |
   |<---- Initial + SHLO ---------|  (服务器响应)
   |                              |
   |<---- 加密的应用数据 -----------|  (1-RTT 可发数据)

关键设计:客户端的第一个数据包就可以携带应用数据(0-RTT 场景),无需等待服务器响应------这在 TCP/TLS 中无法实现。

4.2 Packet Number 与重传

QUIC 使用严格递增的 Packet Number(包编号)解决了 TCP 的重传歧义问题。

TCP 的问题:TCP 重传数据包时序列号保持不变。收到 ACK 时无法区分它是针对原始包还是重传包的响应,导致 RTT 计算不准确。

QUIC 的解决

  • 每个数据包的 Packet Number 严格递增
  • 重传包的 Packet Number 是新值(更大)
  • 通过 Packet Number 可唯一确定该包的发送时间,RTT 计算精确无歧义

4.3 流(Stream)与帧(Frame)

QUIC 的传输单位是,不同帧类型承载不同数据:

  • STREAM 帧:携带流数据
  • ACK 帧:确认收到的包
  • CRYPTO 帧:携带 TLS 握手数据
  • PING 帧:检测连接活性
  • CONNECTION_CLOSE 帧:关闭连接

一个 UDP 数据包可包含多个帧,实现连接的多路复用。

五、部署现状与全球数据

5.1 浏览器支持

主流浏览器已全面支持 QUIC/HTTP/3:

  • Chrome:全面支持,使用率极高
  • Safari:全面支持(Apple 是 QUIC 工作组的核心成员)
  • 两大浏览器合计占据全球 85% 市场份额

Chrome 用户倾向于在后续连接中切换到 QUIC,而 Safari 用户的首次连接往往就使用 QUIC。

5.2 全球部署数据

根据 APNIC(亚太网络信息中心)的 2025 年全球测量数据:

指标 数据
QUIC 使用率 约 70% 的网络流量
DNS 影响 因需新增 HTTPS 记录,DNS 查询量增加 33%
普及速度 远超当年的 IPv6

主要用户平台

  • Google(YouTube、Search、Gmail)
  • Meta(Facebook、Instagram)
  • Netflix、Amazon 等视频流服务

QUIC 的普及速度极快,TCP 可能在几年内被逐步取代。

六、对网络生态的影响

6.1 挑战

QUIC 的全面加密特性给传统网络管理带来挑战:

挑战 描述
流量管理失效 传统 QoS、流量整形、应用识别无法看到加密内容
负载均衡复杂 需基于 Connection ID 而非 IP 进行流量分配
合法监听困难 网络监管无法解析传输层信息

6.2 机遇

从积极角度看:

  • 网络中立性增强:运营商无法根据流量内容进行差异化处理
  • 应用层主导:Google、Meta、Netflix 等大型平台完全掌握传输控制权
  • 创新加速:协议迭代无需等待操作系统和网络设备更新

这代表一种应用服务商主导的互联网模式------ISP 和电信运营商将被"商品化",只负责基础带宽服务。

七、如何开始使用 QUIC?

7.1 Web 应用(CDN 开启)

在阿里云 CDN 或 CloudFlare 等服务中,只需在控制台一键开启 QUIC 协议即可。客户端支持的浏览器会自动使用 HTTP/3 访问。

验证方法:打开 Chrome 开发者工具 → Network → Protocol 列显示 "h3" 或 "h3-29" 即表示使用了 QUIC。

7.2 自研应用

如需在自研应用中使用 QUIC,需集成支持 QUIC 的网络库:

  • MsQuic(微软):C 实现,跨平台
  • LSQUIC(LiteSpeed):C 实现,Web 服务器优化
  • quiche(Cloudflare):Rust 实现,提供 C API
  • ngtcp2(纯 C):轻量级 QUIC 库
  • Cronet(Google):Chromium 网络栈,支持 Android/iOS

7.3 OpenSSL QUIC 支持

OpenSSL 3.2+ 已官方支持 QUIC。核心概念:

  • Connection SSL 对象:代表 QUIC 连接
  • Stream SSL 对象:代表连接内的独立流
  • 与 TLS 相比最大差异 :时间管理------QUIC 需要定期调用 SSL_handle_events() 处理超时

八、总结与展望

8.1 QUIC vs TCP:终极对比

特性 TCP QUIC
实现位置 内核态 用户态
连接建立 2-3 RTT 0-1 RTT
队头阻塞 存在 不存在
加密 可选(TLS 附加) 强制(TLS 1.3 内置)
连接迁移 不支持 支持(Connection ID)
拥塞控制 内核固定 可插拔、用户态可改
协议迭代 需升级 OS 仅更新应用
硬件加速 成熟(TSO、LRO) 有限

8.2 未来展望

  • WebTransport:基于 QUIC 的新 Web API,支持不可靠数据报和双向流,为游戏、直播等实时应用提供新可能
  • 更广泛的应用 :DNS over QUIC、SMB over QUIC 等1, 2
  • 多路径传输:同时利用 WiFi + 蜂窝网络提升带宽
  • TCP 的最终归宿:TCP 不太可能完全消失,但在面向公众的 Web 服务中,QUIC 正快速成为新标准

小结:QUIC 不仅是对 TCP 的性能优化,更是对传输层协议的重新思考。它将可靠性、安全性、低延迟从操作系统内核"解放"到应用层,让网络协议能够跟上互联网业务创新的速度。对于开发者来说,了解 QUIC 已经是面向未来的必修课。

相关推荐
万法若空6 小时前
MsQuic 开发入门教程
quic
SoStraw11 天前
基于P2P开发一个聊天桌面软件
p2p·quic·文件共享·打洞·通信·文件传输·聊天软件
SoStraw12 天前
基于p2p通信开发一个聊天通信软件
p2p·加密·quic·打洞·穿透·传输·聊天
yueqc12 个月前
计算机网络(二):HTTPDNS、IPv6、QUIC
计算机网络·quic·ipv6·httpdns
七夜zippoe4 个月前
HTTP协议深度解析与实现:从请求响应到HTTP/3的完整指南
python·网络协议·http·quic·帧结构
蜂蜜黄油呀土豆4 个月前
深入了解计算机网络中的传输层:TCP 和 UDP
tcp/ip·计算机网络·quic·拥塞控制
haibindev4 个月前
【终极踩坑指南】Windows 10上MsQuic证书加载失败?坑不在证书,而在Schannel!
直播·http3·quic·流媒体
liulilittle8 个月前
HTTP/3.0:网络通信的技术革新与性能飞跃
网络·网络协议·http·https·quic·流媒体·通信
DogDaoDao9 个月前
深入解析quiche开源项目:从QUIC协议到云原生实践
音视频·实时音视频·tcp·quic·视频直播·流媒体协议·quiche