跳到主要内容

Appendix A. 丢失恢复伪代码 (Loss Recovery Pseudocode)

本附录描述 Section 6 中所述丢失检测机制的一个示例实现.

本节中的伪代码片段按 Code Components 许可; 见版权声明.


A.1. 跟踪已发送分组 (Tracking Sent Packets)

为正确实现拥塞控制, QUIC 发送方会跟踪每个触发确认的分组, 直到该分组被确认或丢失.

A.1.1. 已发送分组字段 (Sent Packet Fields)

每个已发送分组跟踪的关键字段:

  • packet_number: 分组编号
  • ack_eliciting: 分组是否需要确认
  • in_flight: 分组是否计入在途字节数
  • sent_bytes: 已发送字节数
  • time_sent: 分组发送时的时间戳

A.2. 相关常量 (Constants of Interest)

  • kPacketThreshold: 最大分组重排序 (推荐值: 3)
  • kTimeThreshold: 最大时间重排序 (推荐值: 9/8)
  • kGranularity: 定时器粒度 (推荐值: 1 ms)
  • kInitialRtt: 初始 RTT 值 (推荐值: 333 ms)
  • kPacketNumberSpace: 分组编号空间的枚举

A.3. 相关变量 (Variables of Interest)

丢失恢复的关键变量:

  • latest_rtt, smoothed_rtt, rttvar, min_rtt
  • loss_detection_timer, pto_count
  • time_of_last_ack_eliciting_packet[kPacketNumberSpace]
  • largest_acked_packet[kPacketNumberSpace]
  • sent_packets[kPacketNumberSpace]

A.4-A.11. 算法函数 (Algorithm Functions)

以下函数实现丢失恢复算法:

  • A.4. Initialization: 初始化丢失检测变量
  • A.5. On Sending a Packet: 存储分组信息
  • A.6. On Receiving a Datagram: 处理反放大限制解除
  • A.7. On Receiving an Acknowledgment: 处理 ACK 帧
  • A.8. Setting the Loss Detection Timer: 配置定时器
  • A.9. On Timeout: 处理定时器到期
  • A.10. Detecting Lost Packets: 识别丢失分组
  • A.11. Upon Dropping Keys: 处理密钥丢弃

注意: 完整伪代码实现请参考官方 RFC 9002 文档 Appendix A. 所有变量名、函数名和算法逻辑均保持原始形式, 以确保实现准确性和一致性.