3. Design of the QUIC Transmission Machinery (QUIC 传输机制设计)
QUIC 中的所有传输都使用数据包级别的头部 (Packet-Level Header) 发送, 该头部指示加密级别 (Encryption Level) 并包含数据包序列号 (Packet Sequence Number, 以下称为数据包号 Packet Number). 加密级别指示数据包号空间 (Packet Number Space), 如 [QUIC-TRANSPORT] 的第 12.3 节所述. 在连接的生命周期内, 数据包号在数据包号空间内永远不会重复. 数据包号在空间内以单调递增的顺序 (Monotonically Increasing Order) 发送, 防止歧义. 允许某些数据包号永远不被使用, 留下有意的间隙 (Intentional Gaps).
这种设计消除了区分传输和重传之间的需要; 这消除了 QUIC 对 TCP 丢包检测机制解释中的显著复杂性.
QUIC 数据包可以包含多种不同类型的帧 (Frames). 恢复机制 (Recovery Mechanisms) 确保需要可靠传输的数据和帧被确认或声明丢失, 并在必要时在新数据包中发送. 数据包中包含的帧类型会影响恢复和拥塞控制逻辑 (Recovery and Congestion Control Logic):
-
所有数据包都会被确认, 尽管不包含确认触发帧 (Ack-Eliciting Frames) 的数据包只会与确认触发数据包一起被确认.
-
包含 CRYPTO 帧的长头部数据包 (Long Header Packets) 对 QUIC 握手的性能至关重要, 并使用更短的计时器进行确认.
-
包含除 ACK 或 CONNECTION_CLOSE 帧之外的其他帧的数据包会计入拥塞控制限制 (Congestion Control Limits), 并被视为在途 (In Flight).
-
PADDING 帧使数据包贡献在途字节数 (Bytes in Flight), 而不会直接引发确认发送.