文章
从What、Why、When和How等角度阐述QUIC
目录
- 1️⃣ What:QUIC 是什么?
- 并且 额外集成了 TLS 1.3(这是关键差异点)。
- 2️⃣ Why:为什么要 QUIC?
- 2.1 TCP 的核心痛点
- ❌ 1. 连接建立慢(RTT 多)
- 在移动网络 / 跨国网络下,这个延迟是灾难性的。
- ❌ 2. 队头阻塞(Head-of-Line Blocking)
- ❌ 3. 内核协议,演进极慢
- 2.2 QUIC 的设计目标
- 3️⃣ When:什么时候该用 QUIC?
- 3.1 QUIC 适合的场景
- ✅ Web 访问(HTTP/3)
- ✅ 移动网络 / 弱网环境
- ✅ 实时应用
- 3.2 不适合 QUIC 的场景
- ❌ 内网高可靠、低延迟
- ❌ 老旧网络设备
- 4️⃣ How:QUIC 是怎么做到的?
- 这是技术精华部分。
- 4.1 基于 UDP,但“不是 UDP”
- 4.2 流级别的多路复用(无队头阻塞)
- ➡ 真正解决了 HTTP/2 over TCP 的队头阻塞
- 4.3 连接建立:1-RTT / 0-RTT
- 4.4 Connection ID:连接 ≠ 五元组
- 4.5 强制加密(TLS 1.3 内建)
- 5️⃣ 一句话总结
1️⃣ What:QUIC 是什么?#
QUIC(Quick UDP Internet Connections) 是一种 基于 UDP 的传输层协议,最早由 Google 提出,后来标准化为 IETF QUIC,并作为 HTTP/3 的底层传输协议。 一句话定义:
QUIC = 在 UDP 之上实现的、集成了可靠传输 + 拥塞控制 + TLS 加密的“用户态传输协议” 它本质上做了三件事:
| TCP 负责的 | QUIC 也负责 |
|---|---|
| 可靠性(重传、有序) | ✅ |
| 拥塞控制 | ✅ |
| 流量控制 | ✅ |
| 连接管理 | ✅ |
并且 额外集成了 TLS 1.3(这是关键差异点)。#
2️⃣ Why:为什么要 QUIC?#
这是核心问题:TCP 不行了吗? 答案是:TCP 在现代互联网场景下“太慢、太僵硬、太难改”。
2.1 TCP 的核心痛点#
❌ 1. 连接建立慢(RTT 多)#
以 HTTPS 为例:
TCP 三次握手 -> 1 RTT
TLS 握手 -> 1~2 RTT
HTTP 请求开始 -> 至少 2~3 RTT
在移动网络 / 跨国网络下,这个延迟是灾难性的。#
❌ 2. 队头阻塞(Head-of-Line Blocking)#
TCP 是 字节流:
丢了一个包 → 后面的全部等着
即使是不同 HTTP 请求,也会互相拖累。
HTTP/2 虽然有多路复用,但底层还是 TCP,一丢包全卡。
❌ 3. 内核协议,演进极慢#
TCP 在 操作系统内核:
- 改一个算法 → 升级内核
- 中间盒(NAT、防火墙)“假设 TCP 行为” ➡ 创新几乎不可能
2.2 QUIC 的设计目标#
QUIC 的目标非常明确:
把 TCP + TLS + HTTP/2 的痛点一次性解决 具体来说:
| 目标 | 对应手段 |
|---|---|
| 减少 RTT | 0-RTT / 1-RTT 建连 |
| 消除队头阻塞 | 流级别可靠性 |
| 更快演进 | 用户态 + UDP |
| 更安全 | 强制加密(TLS 1.3) |
| 移动友好 | Connection ID |
3️⃣ When:什么时候该用 QUIC?#
3.1 QUIC 适合的场景#
一句话:高延迟、高丢包、强实时性、跨网络切换 典型场景:
✅ Web 访问(HTTP/3)#
- Cloudflare
- YouTube
QUIC + HTTP/3 已经是“事实标准”
✅ 移动网络 / 弱网环境#
- 4G / 5G
- 地铁、电梯
- WiFi ↔ 蜂窝切换
✅ 实时应用#
- 实时音视频(WebRTC)
- 在线游戏
- 远程桌面
3.2 不适合 QUIC 的场景#
理性说,它不是银弹:
❌ 内网高可靠、低延迟#
- 数据中心内部
- RDMA / TCP already fine
❌ 老旧网络设备#
- UDP 被限流 / 丢弃
- 企业防火墙
4️⃣ How:QUIC 是怎么做到的?#
这是技术精华部分。#
4.1 基于 UDP,但“不是 UDP”#
QUIC 只是借用了 UDP 的壳:
应用
└─ QUIC
├─ 可靠性
├─ 拥塞控制
├─ 流量控制
├─ 加密(TLS 1.3)
UDP
IP
UDP 的作用只有两个:
- 绕过内核 TCP
- 避开中间盒限制
4.2 流级别的多路复用(无队头阻塞)#
TCP:
一个字节流
QUIC:
多个 Stream(独立重传)
Stream A 丢包 ❌
Stream B、C 正常继续 ✅
➡ 真正解决了 HTTP/2 over TCP 的队头阻塞#
4.3 连接建立:1-RTT / 0-RTT#
| 协议 | 首次连接 |
|---|---|
| TCP + TLS | 2~3 RTT |
| QUIC | 1 RTT |
| QUIC(已缓存) | 0 RTT |
0-RTT:客户端直接带数据发请求 (代价是要处理重放攻击)
4.4 Connection ID:连接 ≠ 五元组#
TCP 连接绑定:
(src IP, src port, dst IP, dst port)
QUIC 使用:
Connection ID
结果:
- 手机从 WiFi 切到 5G
- IP / Port 变化
- 连接不断 ➡ 对移动设备是“质变级提升”
4.5 强制加密(TLS 1.3 内建)#
QUIC 的特点:
- 没有明文模式
- 包头可见极少信息
- 中间设备无法篡改 安全性和一致性远高于 TCP + TLS 拼装方案。
5️⃣ 一句话总结#
QUIC 是一个在 UDP 之上、用户态实现的现代传输协议,通过流级多路复用、快速建连、连接迁移和内建 TLS,系统性解决了 TCP 在高延迟、弱网和移动场景下的性能与演进问题,并成为 HTTP/3 的基础。