摘要
- RFC 1326 描述了相互封装:X 在一处装进 Y,尚未解封又在另一处装进 X。每一步都能符合本地链路要求,整个循环却没有共同上限。
- 若新外层没有继承旧层跳数,真正经历多轮循环的内包会一次次获得新的外层寿命。包头增长触及 MTU 后,分片把“变大”改造成“变多”。
- 传递跳数、窥视内层和禁止某些嵌套都只能覆盖部分场景。关键不在于相信哪台网关,而在于所有边界是否共同消耗一个不可重置的预算。
被藏起来的计数器
普通路由环路有一个朴素的终点:数据包每经过一跳,计数减少,归零后被丢弃。RFC 1326 讨论的危险条件不是没有计数器,而是连续封装没有保存上一层包头里的跳数信息。
旧数值可能完好地留在包中,但它已经成为新包的载荷。外部网络只读取最新包头。若每次封装都填写一份新的外层跳数,正在起作用的计数器便反复从头开始。内层记录的是旧旅程,外层决定的是下一步;两者不再是一条单调减少的证据链。
因此,一个非零的外层跳数只能说明当前封套还可走多远。它不能说明原始数据包已经进入多少个隧道,也不能证明它正在接近出口。把可见字段当作整个对象的履历,就是把信封状态误认成信件命运。
两座各自正确的桥
封装本来解决异构互联。协议 X 的包要穿过只理解 Y 的骨干网,入口路由器加上 Y 包头,把它送往出口;出口去掉 Y,原来的 X 包继续前进。中间网络无需理解内层协议。
RFC 1326 关心的是关系反过来也成立的环境:某处运行 X over Y,另一处运行 Y over X。文中举出 IP over AppleTalk 与 AppleTalk over IP,并预期 IP、CLNP、IPX、DECNET 和私有协议之间会出现更多组合。
一段暂时错误的路由即可把两种桥接串成循环。X 先成为 Y<X>。它没有到达预期出口,却来到需要穿过 X 网络的另一入口,于是又成为 X<Y<X>>。回到第一类边界后,它变成 Y<X<Y<X>>>。
每台设备都可能诚实地说:下一段链路不理解载荷,所以我添加了它能理解的包头。但这份记录只证明封装动作发生,不证明前进、解封或到达。系统错误恰恰生长在多项局部事实之间。
MTU 把增长变成繁殖
每一圈先增加的是长度。包头逐层累积,直到封装后的对象无法装进链路的 Maximum Transmission Unit。随后产生的不是一个更大的包,而是多个分片。每个分片仍处在同一套路由关系里,可以继续绕行、继续加包头,再次触及尺寸边界。
RFC 1326 所说的指数式“packet explosion”描述的是这种递推机制,并不是爆炸现场,也不是已记录的网络攻击。一个对象产生多个后代,后代重复相同转换,数量便可能快于包头层数增长。
更棘手的是容量竞争。循环分片可能填满链路,使路由更新或管理报文被丢弃。错误数据流不只消耗资源,还会压制本可让控制系统发现并修正环路的反馈。此时故障开始削弱自身的自动恢复条件。
原文也说,环路一旦打破,残余包会很快排空。这是一项机理判断,不是对某个真实网络的修复记录。改变路由、流量消退与用户确认恢复,仍是三类证据。
“看得更深”仍然有边界
第一种修复思路是把跳数传进新包头。若两种协议都有兼容字段,共同预算便可继续减少。但 RFC 1326 指出,X.25 和 SMDS 等包头没有跳数;不同协议的取值范围也不同。AppleTalk 最多 16 跳,IP 可表达至 256。为了适配较小范围而压低数值,可能终止环路,也可能制造一条超过 16 跳的正常 IP 路径黑洞。
第二种办法是检查内层。在给 Y<X> 再套 X 之前,设备可发现里面已有 X 并丢弃。然而未知包头会中断解析,加密会遮住内层,网络协议还可能装在传输层协议之上。更重要的是,同一种包头出现两次也可能是合法嵌套。重复是线索,不是判决。
第三种回应是组合多项约束:避免相互封装、禁止嵌套的相互封装、适当保存跳数,并在可行处检查包头。它没有伪装成普适算法。RFC 1326 的状态是 Informational,而且明确表示未讨论安全问题;后来的文章不能凭空把架构风险改写成攻击事实。
后来的协议把两种寿命分开
RFC 2003 后来规范 IP-in-IP。隧道属于转发动作时,封装器先把内层 TTL 减一;TTL 为零的报文不得再封装。若源地址等于封装器自身或隧道目的,也要拒绝特定循环情形。这些是定义清楚的 IP 规则,不是所有混合协议拓扑的安全证明。
RFC 2473 在 IPv6 隧道里显式区分两种量。原始 hop limit 计算原包转发;Tunnel Encapsulation Limit 计算还允许增加多少层嵌套。其值为零时,包在离开当前隧道前不得再进入另一个隧道。
重要的不是多了一个更大的数字,而是数字绑定到了正确事件。转发一跳与新增一层不是同一动作,不能用同一份局部观察替代。RFC 2473 还保留了分片警告:已分片的隧道包再次分片,会使分片数翻倍。后来的标准没有抹去 1992 年的发现,而是为它补上可验证的独立预算。
来源
- RFC 1326 — Mutual Encapsulation Considered Dangerous
- RFC Editor 的 RFC 1326 记录
- RFC 2003 — IP Encapsulation within IP
- RFC 2473 — Generic Packet Tunneling in IPv6 Specification
- Minimum Initial Specification, Localized Future Decision, and Voluntary Adoption
- On Reality Layers, Symbolic Power, and Why Clarity Feels So Hostile
- Running-Code Primacy
这些来源证明文档状态、所述机制与后续协议响应;不证明 1992 年真实发生过此类爆发,也不证明当前隧道、恶意行为者、厂商缺陷、部署比例、实际损害或修复成功。
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance
