Skip to content

从确认缺口到有界分组发送 ​

完成本任务,你应能给出四份彼此不混淆的账本:哪些发送已确认、哪些发送被推断丢失、出口什么时候有字节预算、各流拿到了多少服务。前两份是固定路径QUIC恢复片段,后两份是独立的教学出口调度;它们组合成明确的包选择与准入过程,不声称实现完整协议栈。

先读多流重组和信用与最终大小,保留包身份/流偏移的区别。四个新入口依次是包号与ACK、判丢与探测、DRR、令牌桶。

任务一:从六个包号恢复一帧ACK ​

输入:客户端已在Application空间发送0至12;服务器成功处理2、3、4、7、8、12。把它写成降序闭区间,填入Largest、First Range、Range Count和每组Gap/Range;再只看这些字段解回集合。

核对:区间为[12,12]、[7,8]、[2,4];Largest=12,First=0,Count=2,两组为(2,1)、(1,2)。第一处三个缺号9/10/11对应Gap2,第二处两个缺号5/6对应Gap1。字段不能直接当作区间里的包数。

后续ACK只列[12,12],发送者不能把2/3/4/7/8改回未确认。把同号ACK改放在Handshake空间,也不能清除Application记录。迁移题:若实际只发送0和2,缺少1无需补发;若收到确认1,完整有限发送历史能检测出协议错误。

再检验Largest=3、First=4,及Largest=3、First=0、后续Gap=2这两种输入。两者均计算出负包号,须在更改发送状态前拒绝,不能用整数绕回挽救。

任务二:先估计时间,再分开两种计时器 ​

握手、地址验证已完成,固定路径,max_ack_delay=25ms。对三次合法新样本(raw RTT, decoded delay)=(100,10),(140,25),(90,20),逐次列min_rtt、调整样本、SRTT、RTTVAR。

核对:首次(100,100,100,50);第二次(100,115,101.875,41.25);第三次(90,90,100.390625,33.90625)。第三次不能扣20而得到70;V始终使用更新前的S。最后基础PTO为261.015625ms。修改第二次延迟为40,握手已确认后仍先截到25,因此该行结果不变。

现在另开快照:S=100、latest=80、V=20、D=25、G=1ms。本空间没有主动跳号,PN20..25在0/10/20/30/40/50ms连续发出,110ms只新确认23,给定估计已经包含这次更新。假定随后直到探测前没有其他新发送。

核对:阈值112.5ms,基础PTO205ms。110时20满足包号差3而判丢,23被确认;122.5和132.5分别判丢21、22。24/25没有更晚已确认包,不能套ACK驱动时间阈值。255时探测26,不因此把24/25清空;无反馈后退避间隔410,下一PTO为665ms。

迁移题:若140ms提前发出引发确认的PN26,基础PTO期限随之改为345ms,而不是沿用255。若PN23来自另一个空间,则本空间不能用它制造20的号差证据。

任务三:按字节服务两条持续积压的流 ​

A包长恒500B,B包长恒1500B,量子都为1000B,初始活跃次序A、B,余量0。两流始终有足够多包。每轮先A再B,写出前三轮的本轮字节、余量、累计字节。

核对:A每轮1000、余量0;B依次0/1500/1500,余量1000/500/0;累计分别(1000,0)、(2000,1500)、(3000,3000)。第二轮刚做完A而未做B时差为2000,说明“小于1500”的界只能用于对齐的完整轮末。

从每轮“旧余量+量子=发送字节+新余量”推出k轮服务式。迁移量子为1000/2000,B前三轮改成1500/1500/3000,最终3000:6000。把某流队列暂时清空时,必须清零余量,不能再对跨越这次清空的整个期间套用持续积压恒等式。

成本反例:单个1500B包配Q=1,需要1500次访问才发送;Q≥本流最大包长时,每次非空访问至少发送一包,才能把访问管理工作记到包上。

任务四:让已选次序通过一个共享桶 ​

先独立检查三包FIFO:0秒到达1500/1000/500B,桶B=2000B,r=1000B/s,初态满、下游瞬时接收。整形放行时刻0/0.5/1秒。若改成到达即计量、不合格丢弃,则同一0秒接受第一和第三包,拒绝第二包;失败不扣令牌。

再取任务三DRR选出的前六包A500、A500、A500、A500、B1500、A500,预先全部排好,交给一个同参数共享桶。核对放行时刻0、0、0、0、1.5、2秒。用余额不超过2000、补充率1000,证明任意区间准入字节至多2000+1000×区间秒数;区间按(s,t]计完整包,初始突发另计入包含0的区间。

迁移桶容量为1000:1500B包永远无法满足严格准入。正确终点是报告“包长超容量”,由已规定策略拒绝或重新分组,而非定时器一直续期。共享桶按FIFO保留DRR已选次序,但没有提供每流独立桶或远端送达时限。

本地复算 ​

下载纯Python核验器,普通模式运行即可输出上述状态及测试计数;程序无联网和外部依赖,使用有理数避免资格时刻舍入。它在-O模式下明确拒绝运行,防止断言被删除后误报成功。

测试覆盖小包号集合的编解码、非法字段原子拒绝、RTT更新与计时器轨迹、整形和计量的区间预算、DRR持续积压与空队列清零。穷举只覆盖写明的有限域,不能据此宣称真实QUIC网络一致性认证或所有调度器实现正确。

回到从确认缺口到有界分组发送学习路线,按算错的账本返回对应页。