摘要

  • RFC 5320 把外层 IPv4 分片纳入控制回路:出口可回报观察,入口用 SEAL_ID 活跃窗口判断相关性,再让新的 S_MSS 代际约束下一批 SEAL 段。
  • 可信凭据必须拆开记录探测意图、32 位或 16 位身份模式、首片观察、参数更新、IPv4 重组、SEAL 重组、上层移交与文档仅为 Experimental 的制度边界。

它测到了一次受限,而不是整条路径

传统路径 MTU 发现把 DF 置位,期待过大的报文被丢弃,并期待 ICMP 把原因送回来。现实里,过滤器可能吞掉 ICMP,攻击者也可能伪造它;隧道入口还未必适合替每个内层源逐一翻译所有错误。

SEAL 采取另一种实验思路。外层 IPv4 通常保持 DF=0,让虚拟拓扑中的路由器可以分片。出口发现分片后向入口报告,入口逐步缩小后续 SEAL 段,直到分片现象消退。

这项设计把“损伤”变成了“测量”,却没有把测量升级为判决。一个首片只说明某个报文在某处遇到了更窄的边界。它不告诉你是哪条链路,不保证路径保持不变,也不说明其余分片是否到达。把“已接受分片报告”显示成“路径验证成功”,就是让一条局部证据承担了它从未获得的权限。

NAT 会把身份合同从 32 位缩成 16 位

普通模式下,SEAL_ID 由两半组成:SEAL 头内的 16 位 ID Extension 是高位,外层 IPv4 Identification 是低位。入口为每个出口的软状态随机初始化,再按模 2^32 递增。这既缓解高速隧道中 16 位空间的冲突,也帮助端点关联近期报文、分段与回报。

经过 IPv4 NAT 时,合同必须改变。转换器可能改写外层 Identification,端点因而不能再声称两半构成稳定的端到端身份。NAT 模式只把 16 位扩展字段当作 SEAL_ID,按模 2^16 递增,并给外层 Identification 写入随机值。

凭据必须明确记录所用模式。NAT 改写之后再拼出一个 32 位数字,会制造一项从未存在过的身份事实。反过来,把所有部署都压成 16 位,又会丢掉普通模式确实产生的证据。即使匹配完全正确,它证明的也只是“这条反馈与当前发送窗口有关”,不是载荷已经正确交付,更不是路径获得了密码学认证。

S_MRU 与 S_MSS 管理不同的责任

入口为每个出口保留两个软状态量。S_MRU 初始不超过 2 KB,限定出口被要求重组的规模;S_MSS 限定一个 SEAL 段的规模,其初值由底层 IPv4 接口 MTU 扣除外层开销,并在计算中受到 S_MRU/8 下界约束。

把两者合并成一个“隧道 MTU”,会抹去协议的关键分工。前者描述重建责任,后者描述发送颗粒。分片报告改变 S_MSS,不等于内层报文的身份或内层源看到的接口 MTU同时改变。若一个不可分片的内层报文仍然太大,入口可以丢弃它并向原始源返回 PTB;那又是另一项事实。

因此,决策账本应分别保留接口 MTU、各层开销、S_MRU、S_MSS 数值及其代际、内层长度、可分片性、所选动作,以及哪条反馈批准了下一代参数。

三种切分不能塞进一个计数器

SEAL 可以把中间层报文切成最多八个不重叠的段。非末段长度相等,末段不更大;More Segments 位和三位段号描述顺序。出口在向上移交之前恢复原始中间层报文。

这不是内层 IPv4 分片,也不是路径路由器对外层 IPv4 封装的分片。内层分片、SEAL 分段和外层分片分别由不同主体执行,使用不同身份,在不同位置重组,并触发不同的修复动作。

名为 fragments 的总计数器无法解释任何决定。运维者必须知道看见的是哪一层的片段。外层 IPv4 重组成功,也不能代替 SEAL 重建;SEAL 重建成功,也不能代替上层接收。证据链不能跨越这些边界自动填空。

R 与 A 提出了不同的问题

入口在零号段设置 R=1,表示希望出口在发生外层 IPv4 分片时报告。设置 A=1 则请求确认。显式探测可以携带数据,也可以是带 No Next Header 的 NULL 报文;它的 SEAL_ID 会进入待处理发送窗口。

如果 R 与 A 同时设置并发生分片,出口发送一个 Fragmentation Needed,而不是两份相互独立的成功证明。同一响应可满足两种请求,接收者仍需保存发送该报文的原始意图。

没有报告也含糊不清。未请求确认时,出口可以对分片报告限速;探测可能丢失,响应也可能丢失,或者路径确实没有分片。沉默本身不能在这些分支中选择答案。

一个过小的首片可能误导 MTU 判断

裸 ICMP 只是软提示:它容易伪造,所引用的原报文信息也可能不足。由 SEAL 封装并落在当前窗口内的反馈具有更强的关联性,但仍未必暴露真正的约束链路 MTU。

路由器可能产生异常短小的首片,也就是 runt fragmentation。若直接把首片长度当作链路上限,系统会学到错误值。RFC 5320 因而采用迭代搜索:缩小参数,以新代际发送,再观察结果。单次数字没有永久权威。

同一代际中也只有第一条适用报告可以改变 S_MSS。其余回报描述的是旧设置下的同一现实,不应被连续解读为新的缩小命令。调整之后,入口要等到新参数下的流量和反馈出现,才有资格再作决定。

nonce 限定关联范围,不签署路径

nonce、身份字段与近期窗口让入口不必服从任意 ICMP。相比无上下文的错误消息,这是一项实质改进。然而,SEAL 头在不使用 IPsec 时可能仍是明文,二层完整性也只覆盖有限邻接范围。它们没有共同生成一份端到端路径证明。

面板上准确的说法是“反馈已关联到仍然活跃的发送记录”。旁边还要带上 NAT 模式、软状态 epoch、窗口、大小代际与探测类型。把这句话替换成“路径已认证”,是在用时间相关性冒充安全保证。

出口有权在回报之后放弃重组

出口维护重组水位,处理缺失、重复、乱序和资源压力。15 秒超时限制它等待一组片段的时间。即使入口收到过有效反馈,不完整集合仍可能过期或因内存压力被丢弃。

所以需要逐格记录:封装到达、外层 IPv4 重组、SEAL 段重建、报文交给上层、最终结果被观察。控制回路成功降低了分片频率,并不等于这一个报文完成了应用交付。

Experimental 也是一条不可越过的边界

RFC 5320 于 2010 年 2 月以 Independent Submission Stream 的 Experimental 文档发布。IESG 说明明确指出,它没有经过通常的 IETF 共识流程。SEAL_PROTO、SEAL_PORT 与 SEAL_OPTION 是实验用途值,文本也要求不得在已发货产品或普通部署中使用。

后来关于 IPv4 Identification、分片、PMTUD 和 DPLPMTUD 的 RFC 可以提供评估背景,但不会追溯性地把 SEAL 变成标准。RFC 编号证明文档存在,不是生产授权书。可控实验必须声明范围、端点、回滚与隔离条件。

一份最小但足够解释决定的凭据

每次决策至少记录时间、入口与出口、32 位或 16 位模式、软状态 epoch、SEAL_ID、R、A、NULL 或数据、发送大小、活跃窗口、S_MRU、S_MSS 数值与代际、观察到的首片、反馈来源、批准的变化,以及两层重组和上层移交的独立结果。

自适应系统会消除教会它的症状。若只保留最后一个数值,不保留产生它的证据,网络会越来越安静,决策却越来越无法解释。分片信号的价值,恰恰来自不把它冒充为最终判决。

来源