1. QUIC 数据包与头部压缩 (QPACK)

QUIC 协议定义了自己的数据包格式,它位于 UDP 报文之上。为了在 UDP 空间内高效工作,QUIC 实现了自己的握手、可靠性保证和流量控制。

同时,HTTP/3 使用 QPACK(Quick Protocol Header Compression)来高效压缩 HTTP 头部信息,这比 HTTP/2 的 HPACK 更加优化,能够避免队头阻塞问题。

  • QUIC 数据包头包含连接 ID 和包号
  • QPACK 优化了动态和静态表的使用
  • 数据包号用于丢失检测和重传
📦
// QUIC Packet Structure:
UDP Datagram {
  QUIC Header {
    Connection ID (CID),
    Packet Number (PN)
  }
  QUIC Frames {
    STREAM Frame (Data),
    ACK Frame (Acknowledge)
  }
}

2. 连接标识符 (CID) 与网络迁移

QUIC 引入了连接 ID (CID) 的概念,这是一个随机生成的标识符,用于标识客户端和服务器之间的会话,而不是依赖传统的 IP 地址和端口。

CID 的使用是实现连接迁移的关键。即使用户的 IP 地址或端口发生变化(例如切换网络),会话仍能通过 CID 保持活动状态,从而实现无缝连接。

  • 会话识别独立于网络五元组 (5-tuple)
  • 实现了会话保持和重连
  • 是移动设备和物联网 (IoT) 的理想选择
🆔
// Network Change:
(IP1:Port1) → (IP2:Port2)
QUIC: CID remains 4A-3C-B9-F2
TCP: Connection State Lost

3. TLS 1.3 原生集成:加密即服务

QUIC 将 TLS 1.3 握手直接集成到其连接建立过程中。这意味着加密不再是上层应用的可选项,而是协议固有的组成部分。

这种集成消除了 TCP + TLS 握手的复杂性,并且是实现 0-RTT 的技术前提。所有 QUIC 帧都经过认证,并且大部分都已加密,提供了强大的安全保证。

  • TLS 握手与连接握手合二为一
  • 强制使用 TLS 1.3 及以上版本
  • 提供前向保密性 (Forward Secrecy)
🔒
// Handshake Steps:
1. ClientHello (Includes QUIC parameters)
2. Server sends Encrypted Extensions
3. Client & Server exchange traffic keys
4. Data flows (1-RTT or 0-RTT)
Detecting Protocol...