跳到主要内容

3. QUIC 传输机制的设计

QUIC 中的所有传输都会随包级头部一起发送, 该头部指示加密级别 (encryption level), 并包含一个包序列号 (下文称为包号). 如 [QUIC-TRANSPORT] 的 Section 12.3 所述, 加密级别指示包号空间 (packet number space). 在一个连接的生命周期内, 包号在同一个包号空间中绝不会重复. 包号在一个空间内按单调递增顺序发送, 从而避免歧义. 允许某些包号永不使用, 从而留下有意设置的空隙.

这种设计免除了在传输和重传之间进行消歧的需要. 这消除了 QUIC 在解释 TCP 丢包检测机制时的大量复杂性.

QUIC 包可以包含多个不同类型的帧. 恢复机制确保需要可靠交付的数据和帧会被确认, 或被声明为丢失并按需在新包中发送. 包中包含的帧类型会影响恢复和拥塞控制逻辑:

  • 所有包都会被确认, 但不包含 ack-eliciting 帧的包只会随 ack-eliciting 包一起被确认.

  • 包含 CRYPTO 帧的长头部包对 QUIC 握手性能至关重要, 并使用更短的定时器进行确认.

  • 包含 ACK 或 CONNECTION_CLOSE 帧以外帧的包会计入拥塞控制限制, 并被视为在途 (in flight).

  • PADDING 帧会使包计入在途字节数 (bytes in flight), 但不会直接触发确认发送.