摘要
- 当后段才发现前段状态需要修正时,Presto 把一个不带应用负载的 pseudo-segment 注入 RMT 流水线入口,让普通前向逻辑完成“向后写”。
- 伪报文段是传输控制工件,不是重传的用户数据。它的来源和状态变更不能替代 DMA、主机通知、套接字返回与应用确认。
把逆向依赖变成新事件
CPU 可以在处理一次 TCP 事件时多次访问内存;RMT 却要求 packet header vector 依次穿过固定 stage,状态只能在所属 stage 访问。Presto 论文以乱序重组说明这个矛盾:真实报文段填上缺口后,应把 next-seq 推到连续区间末端,并回收 avail。但是否闭合只有在下游检查 ooo-head 后才知道,而那两个状态位于更早的 stage。
Presto 不让真实报文段再跑一遍,而是 mirror 一个合成记录回入口。它没有 payload,只编码刚刚连成一体的序列范围。流水线把它当作普通的 in-order segment,既有逻辑因此推进 next-seq、减少 avail 并清除乱序区间。后段的结论由此变成一次新的前向事件。
这解释了伪报文段的权威边界:它足以修改 TCP state,却没有再次携带用户字节,也没有证明应用读取、解析或提交了结果。
推测、验证与修复各有收据
基础接收窗逻辑会先乐观推进 next-seq,稍后更新 avail 并执行最终窗口检查。若发送方越过已公布窗口,报文段被丢弃,控制面恢复连接状态;恢复期间,负的 avail 会拒绝后续报文段,并向发送方通告零窗口。论文明确限定:payload 只有通过最终验证后才被接受。
伪报文段也不是一次发出就算成功。拥塞丢弃它时,乱序区间仍保留,下一次 trigger 会重新注入;论文称之为 eventual consistency。若中间已有有序流量推进窗口,普通 overlap trimming 会删除过时前缀,避免重复记账。真正的完成条件是目标状态收敛,而不是“生成了一个伪报文段”。
DMA 与应用结果之间仍有两道边界
Presto 可以把收到的 payload 直接 DMA 到主机内存,乱序数据也不例外。另一个 Application Notification 模块告诉 libPresto:哪个最高连续 buffer offset 已可供应用消费。缺口闭合时,通知甚至可以早于随后伪报文段完成状态合并。
这不是矛盾,而是分层。DMA 证明字节写入某个缓冲区;notification 证明库暴露了一段连续数据;socket 另有返回;应用是否实际读取并形成持久效果,还需要应用自己的收据。TCP ACK 同样只证明传输层事实,不能自动证明存储、解析或业务完成。
该成果在 ACM SIGCOMM 2026 发表,DOI 为 10.1145/3789240.3829111。公开仓库与作者在 APNIC 的说明提供了复核入口,但不等于独立复测、生产部署或普遍兼容。
可审计记录应分别保存真实报文段身份、推测、下游验证、纠错 trigger、伪报文段来源和 epoch、状态 mutation、重传/重组、DMA、主机通知、socket 结果、应用收据和 rollback。
来源
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance

