“对照QUIC的PTO与阈值判丢,同样需要分清观察和推断,但具体动作不同:新包号可辨别每次发送,ACK Delay参与RTT校正,PTO探测也不把旧未确认包一律判丢。不能把本页TCP的一秒建议…”
形式陈述
限定恢复状态,先区分两种闹钟
沿用QUIC包号与ACK区间:确认属于某一空间、某次发送,较大包号表示较晚发送。本页采用RFC 9002推荐阈值,讨论握手已确认、路径固定、地址验证已完成的Application空间;所有主例发送包都含引发确认的帧。排除握手防死锁、密钥丢弃、迁移和完整拥塞控制,给出的是可复算恢复片段。[1, §§5、6]
发送端保留每个在途包的包号
ack-eliciting(引发确认)包含ACK、PADDING、CONNECTION_CLOSE之外的至少一种帧;STREAM或PING都满足。纯ACK包不会仅为自己触发一轮ACK,避免无限确认相互追逐。一般在途定义还包含PADDING包;本页所有包均引发确认,因而无需另拆这条分支。[1, §2]
RTT估计要扣哪一段等待
记最新原始样本为
ACK Delay只描述Largest对应的接收端等待,不分别描述帧中每个包。首次样本设
最后使用更新前的
顺序依据RFC 9002附录A.7及已验证勘误7539。原版§5.3把更新
有更晚包获确认,才启动这两种判丢证据
以下号差公式限定发送端在本空间按连续包号发送,没有主动跳号;ACK页允许跳号是协议的一般能力,这里收窄为RFC 9002附录A.10注明的前提。令
主例计时器粒度
若实际只发送20和25,中间21至24被主动跳过,号差5只隔着一次真实后继发送,不能算成五次重排机会。支持这种发送策略时,需要记录实际发送次序或另行调整相应阈值;本文的连续号检查器不覆盖这条扩展。
PTO安排探测,不把沉默变成送达事实
如果没有更早的时间阈值任务,且仍有引发确认的包在途,本页场景的探测基础间隔为
PTO期限按本空间最后一个引发确认包的发送时刻加
PTO到期本身不证明此前所有包丢失;本页始终选择发送探测的分支。RFC另在无数据可发的特殊收尾讨论了放弃在途包的替代策略,不能把它误当一般到期规则。时间阈值计时器有优先权:存在已记录的loss_time时,不同时把PTO当作先执行的任务。
直觉
观察到后来者,和完全没声音,提供不同信息
若包23已经被确认,而包20仍没确认,至少知道某个后来发送的包走通了。发送端允许一定乱序,然后按号差或等待时间推断20丢失。这个推断能被一个很迟的20推翻,因此阈值不是物理故障证明。
若最后只剩24、25没有确认,就没有“更晚包已到”的证据。等待PTO后发出26,可以让对端再次给出可用反馈。若25其实早已到达而ACK丢失,这次探测同样能帮助恢复;不必先断言数据路径丢了25。
例子与边界
三个RTT样本逐行更新
取
| 样本 | 原始L | 更新后M | 使用R | 更新后S | 更新后V |
|---|---|---|---|---|---|
| 首次 | 100 | 100 | 100 | 100 | 50 |
| 第二次 | 140 | 100 | 115 | 101.875 | 41.25 |
| 第三次 | 90 | 90 | 90 | 100.390625 | 33.90625 |
第二次
如果第二次ACK仍只重复已经确认的Largest,不能再生成同一个包的第二份RTT样本。ACK一次列出十个新包,也不表示要把十个发送时刻各算一次带同样ACK Delay的样本。
包号阈值、时间阈值和尾部探测
以下另开一个已更新估计的快照,与上表不是同一组估计:
| 时刻ms | 事件 | 从在途移除 | 仍未确认且在途 |
|---|---|---|---|
| 110 | ACK23,包号差达到3 | 23确认;20判丢 | 21、22、24、25 |
| 122.5 | 最早loss_time | 21判丢 | 22、24、25 |
| 132.5 | 下一loss_time | 22判丢 | 24、25 |
| 255 | 最后发送50,加基础PTO205 | 不因此移除24、25 | 24、25及新探测26 |
110时21的年龄100,22的年龄90,都未达到112.5。24、25的包号大于已确认最大23,后面两次时间阈值仍不适用。255时用26发探测;若仍没有新确认,退避后的间隔是410,下一PTO为
这个表刻意延后了丢失信息的再次发送。实际发送器可以更早按窗口、节奏和应用优先级补发;一旦有新的引发确认包发送,就要重算相应PTO期限,而不能沿用表里的255。
遗漏的边界会怎样破坏结论
把Handshake空间的ACK12拿来与Application包9比较,会造出虚假的号差3;包号阈值始终在同一空间内。路径迁移后仍把旧路径最小RTT直接当作新路径下界,也超出本页固定路径假设。
探测包增加网络负载,须进入在途字节账本。PTO探测有拥塞窗口特例,但不由此取消连接流量信用、地址验证或应用数据边界。一次PTO也不是持续拥塞判据;完整控制器还要按RFC的另一组条件决定窗口如何变化。
推论与应用
恢复哪个信息,要查帧语义
丢失一个包,只是对那次发送的判断。若同一STREAM区间已经由另一个包确认,就不必因旧包判丢再发送一份;流被RESET后也不继续补普通数据。ACK帧本身不按原样重传,新的ACK可以重新表达当前接收状态。恢复队列因此需要“信息仍有必要吗”的查询,而不只是复制旧包字节。[3, §13.3]
最简单的有限实现收到ACK后扫描
把可发送和应该何时发送分别记账
恢复逻辑产生候选信息,DRR可在教学发送器里选择哪个队列先服务,令牌桶可对出口聚合字节设置时间预算。这两项不是QUIC强制调度算法。本文也不把令牌可用误当拥塞窗口可用:实际发送仍须同时满足采用的各项限制。
参考资料
[1] Jana Iyengar、Ian Swett,RFC 9002: QUIC Loss Detection and Congestion Control,2021,§2定义,§§5.1–5.3及附录A.7的RTT更新,§§6.1–6.2和附录A.8–A.10的判丢与探测计时。
[2] RFC Editor,RFC 9002勘误7539,Verified,2023-06-13核定:波动项必须在平滑RTT更新前计算。本文数字与附录A.7一致。
[3] Jana Iyengar、Martin Thomson,RFC 9000 §13.3: Retransmission of Information,2021:按信息与帧类型恢复,而非复用原包号。