1. QUIC:UDP 驱动的新一代传输层

HTTP/3 的核心在于 QUIC (Quick UDP Internet Connections) 协议。它放弃了传统 TCP,转而使用 UDP 传输,并在应用层实现了可靠性、流控制和拥塞控制。

这种转变使连接建立更快,并在协议内部集成了加密。

  • 完全集成 TLS 1.3 加密
  • 自定义的拥塞控制算法
  • 解决操作系统内核限制
🚀
Protocol Flow:

Client (UDP) → Server (UDP)

TLS 1.3 Handshake

Data Exchange (QUIC Streams)

2. 0-RTT:握手即完成连接

在首次访问后,QUIC 允许客户端使用缓存的安全参数,在极少数情况下实现 0-RTT (Zero Round-Trip Time) 连接建立。

这意味着您在发送连接请求的同时即可发送应用数据,大大减少了网络延迟,尤其对于重复访问用户,加载几乎是瞬时的。

  • 消除了 TCP 的 3 次握手
  • 消除了 TLS 的 2-4 次握手
  • 提高了缓存重连速度
⏱️
// TCP+TLS 1.2 Handshake:

Client→SYN (1-RTT)

Client→Data (3-RTT)

// QUIC+TLS 1.3 Handshake:

Client→Data (0-RTT)

3. 消除队头阻塞(HoL Blocking)

在 TCP 和 HTTP/2 中,如果一个数据包丢失,整个连接上的所有流都会被暂停,等待该数据包重传。这被称为队头阻塞(HoL Blocking)。

QUIC 协议内部使用独立的流(Streams)来传输数据,一个流的阻塞不会影响其他流,实现了真正的并行传输,提高了复杂网站的稳定性和速度。

  • 流之间相互独立
  • 数据包丢失影响范围极小
  • 提高弱网络环境下的表现
🔗
TCP: Stream A Blocked | Stream B Paused | Stream C Paused

QUIC: Stream A (OK) | Stream B (Lost/Paused) | Stream C (OK)

4. 连接迁移:移动网络不断线

QUIC 连接不依赖于传统的 IP 地址和端口对。它使用一个 Connection ID (CID) 来识别连接。

当用户在移动中,从 Wi-Fi 切换到蜂窝数据,或 IP 地址发生变化时,QUIC 连接可以继续保持活跃,无需重新建立会话,大大改善了移动用户体验。

  • 会话在 IP 变化时保持不变
  • 极大地改善了移动设备体验
  • 透明地切换网络接口
📱
User: (Wi-Fi: 10.0.0.2) → (4G: 192.168.1.5)

QUIC: Connection ID ABC is maintained.

TCP: Connection dropped and restarted.

5. QPACK:高效的头部压缩

HTTP/2 使用 HPACK 进行头部压缩。由于 QUIC 的流是独立的(为了解决 HoL 阻塞),如果直接沿用 HPACK,可能会导致压缩状态混乱。因此,HTTP/3 引入了 QPACK 协议。

QPACK 针对 QUIC 协议进行了优化,允许在牺牲一点点压缩效率的前提下,实现头部字段的无阻塞传输,进一步提升了连接的并行性和性能。

  • 专为 QUIC 的独立流设计
  • 避免头部压缩带来的 HoL 阻塞
  • 在性能和并行性之间取得平衡
📦
// Header Frame Transmission:

Client sends Header Index (Dynamic)

Server Decodes Header (Non-Blocking)

// Avoids the need to wait for previous streams to complete.
Detecting Protocol...