摘要
- 累积 ACK 对此前全部字节作出稳定承诺;SACK 块只报告接收方此刻声称缓存的区间,之后可能撤回。
- 发送方因此保留原数据,把多次局部报告组合成自己的记分板,并在既有拥塞约束内选择重传。
- D-SACK 能报告重复到达,却不能证明原因或指定反应。TCP 共享了更好的证据,没有把行动权交给接收方。
已经报告、仍不能删除的字节
接收方等待字节 5000,却已经缓存 [5500,9000)。SACK 把这座“岛”告诉发送方,使它不必重发整个窗口。
但发送方不能因此删除 5500 之后的数据。接收方可能因内存压力丢弃先前报告的内容;超时发生时,旧报告也可能已经失效。只有累积 ACK 越过该区间,双方才对最终交付拥有同一种证据。
SACK 的力量来自两种陈述并存:提示足以改变策略,承诺才足以结束保管责任。
不被新选项削弱的旧承诺
RFC 793 规定 ACK X 表示小于 X 的字节都已到达,X 是下一个所需字节。它能维护有序字节流,也能让发送方最终释放缓冲。
这条边界看不见首个缺口后的数据。多个相同 ACK 无法区分单段丢失、多段丢失与乱序。协议需要额外观察,而不是改变原承诺。
RFC 1072 在 1988 年提出首个选择确认方案,但该形式没有成为共同部署;RFC 6247 后来把它列为 Historic。发表标准与形成共同实践并不是同一事件。
永远装不下整条队列的报告
RFC 2018 在 1996 年修订设计。双方只在 SYN 中用 SACK-Permitted 协商能力;每个块以两个 32 位序列号标出左右边界,普通 ACK 的含义不变。
TCP 选项只有四十字节。单独使用最多报告四块,带时间戳时通常只有三块。接收方可能拥有更多离散区间,所以先放最新片段改变的块,并在后续 ACK 中重复近期块,以抵抗回程丢失。
任何一份报告都不是完整清单。发送方把有限、重叠、可能丢失的视图合成为本地模型。
撤回不是协议漏洞
RFC 2018 明确称 SACK 信息为 advisory。接收方可以 reneging,也就是丢弃先前报告的字节。普通恢复时,发送方可以暂不重传已报告区间,却必须保存原件直到累积确认推进。
重传计时器到期后,发送方要准备旧标记已经不可靠。回到累积语义正是可选机制的安全阀:丰富证据失效时,基本承诺仍然存在。
RFC 6675 把保守记分板放在发送方。报告更新“还有多少数据在网中”的估计,由发送方选择下一段。接收方提供坐标,不提供命令。
重复到达没有唯一解释
RFC 2883 让 D-SACK 报告重复数据。它可能指向乱序、ACK 丢失、网络复制或过早超时,却不能单独确定其中哪一种发生。
规范没有规定唯一反应,还提醒发送方不能天然信任接收报告。诊断能力增强,不等于因果已被证明。
更准的地图没有创造带宽
RFC 5681 保留拥塞控制义务,RFC 2018 要求 SACK 恢复继续遵守。知道应补哪段,只能帮助使用既有窗口,不能扩大窗口。
这些文档证明语义与边界,不证明全球统一部署日期或每条路径相同的收益。SACK 也不能证明丢失位置、原因或报告者身份。它的历史贡献,是让可修正证据参与共同协议,同时拒绝把证据升级为收据和权力。
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance
