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_rttloss_detection_timer,pto_counttime_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. 所有变量名、函数名和算法逻辑均保持原始形式, 以确保实现准确性和一致性.