Appendix B. 拥塞控制伪代码 (Congestion Control Pseudocode)
本附录描述第 7 节中所述拥塞控制器 (congestion controller) 的一个示例实现.
伪代码用于说明 QUIC 丢包检测 (loss detection) 和拥塞控制 (congestion control) 的一种可实现结构. 变量名、函数名和常量名保持英文, 因为它们对应规范中的算法状态. 中文说明仅解释这些变量在拥塞窗口、慢启动、恢复期、ECN 反馈和丢包处理中的作用.
B.1. 相关常量 (Constants of Interest)
- kInitialWindow: 默认初始拥塞窗口 (initial congestion window)
- kMinimumWindow: 最小拥塞窗口 (minimum congestion window)
- kLossReductionFactor: 拥塞窗口缩减因子 (congestion window reduction factor, 推荐值: 0.5)
- kPersistentCongestionThreshold: 持续拥塞时长阈值 (persistent congestion duration, 推荐值: 3)
B.2. 相关变量 (Variables of Interest)
- max_datagram_size: 当前最大负载大小 (maximum payload size)
- ecn_ce_counters[kPacketNumberSpace]: ECN-CE 计数器值
- bytes_in_flight: 在途数据包 (in-flight packets) 的总字节数
- congestion_window: 允许在途的最大字节数
- congestion_recovery_start_time: 拥塞恢复期开始时间
- ssthresh: 慢启动阈值 (slow start threshold)
B.3-B.9. 算法函数 (Algorithm Functions)
实现拥塞控制算法 (congestion control algorithm) 的函数:
- B.3. Initialization: 初始化拥塞控制变量
- B.4. On Packet Sent: 更新在途字节数 (bytes in flight)
- B.5. On Packet Acknowledgment: 处理已确认数据包
- B.6. On New Congestion Event: 处理拥塞检测
- B.7. Process ECN Information: 处理 ECN feedback
- B.8. On Packets Lost: 处理数据包丢失
- B.9. Removing Discarded Packets: 更新已丢弃数据包对应的在途字节数
注意: 完整伪代码实现请参阅官方 RFC 9002 文档 Appendix B.
实现者应将该伪代码与正文中的规范性要求一起阅读. 如果伪代码和正文描述出现解释差异, 应以正文的 MUST、SHOULD 和相关算法说明为准.