摘要

  • 在 classful 路由里,看到一个 Class A 子网可能被解释成看到了整个父网,父网中其他地址于是不会再走默认路由。
  • 因而,开放地址池不是注册机构的单点动作,而是对提供者、客户域、同伴连接、聚合边界与空洞丢弃策略的一次联动迁移。
  • RFC 2036 记录的是条件、推演和建议,不是事故统计;后来的 Historic 状态也不能补出当年真实部署的发生率。

默认路由还在,包却不再找它

RFC 2036 讨论的建议很具体:由 IANA 经委托注册机构,把当时未分配的 Class A 空间拆成无类前缀投入使用。此前的保守做法,是把许多 Class C 网络拼成与旧类别仍相容的 superblock。CIDR 已经出现在地址政策中,但底层设备和域内协议仍可沿用 classful 假设。

这种兼容层让一类提供者暂时避开了彻底迁移。他们不携带全网路由,只导入一条默认路由;连续的 classful 地址块,则由同伴提供者做 proxy aggregation。只要新分配仍尊重类别边界,这个安排虽然不理想,却未必立即出错。

从 Class A 父网切下一块之后,语义变了。路由器同时看到默认路由和父网中的一个子网时,classful 结构可能把这条子网路由提升为整个 Class A 网络的可达性。发往同一父网其他部分的流量,不一定继续匹配默认路由。问题并不是“有没有默认”,而是默认在选路之前已经被一个错误扩大的网络认知遮住。

所以 RFC 2036 的硬结论落在提供者身上:即使只靠默认路由,也必须使用 classless 路由。过去由上游或同伴代做聚合的办法不够了。一个注册分配决定,改变了转发正确性的最低软件能力。

子网默认需要掉头

非传输客户域面临的配置方向甚至与过去相反。对于按类别对齐或由完整 classful 网络组成的 superblock,显式 subnet default 不应指向提供者,否则边界可能成环。可若客户拿到的是从 Class A 父网切出的无类前缀,同时内部仍运行 classful IGP,RFC 2036 要求 Class A 的 subnet default 沿普通默认路由指向提供者。

这是一条例外通道,不是永久安全证明。客户的显式子网可达信息可能泄漏给提供者,迫使提供者替它生成正确聚合。若提供者按注册分配的整块做 proxy aggregation,再把未部署组成部分的流量送回客户,包会在客户与提供者之间循环。若提供者只显式路由已部署部分,发往空洞的流量又会沿默认路径穿过互联网,直到遇到没有默认路由的节点才被丢弃。

因此文档要求客户为分配块内所有未部署部分设置 sink subnet route,并建议提供者按注册分配边界保守聚合。聚合与 sink 不是同一份回执:聚合说明向外发布了覆盖范围,sink 才限制覆盖范围内的空洞不会继续寻找出口。配置文件里出现两者,也不等于运行 FIB 和实际包路径已经执行。

多宿主把局部兼容变成传递条件

完全断开的域可以继续使用 classful IGP,不把错误传播到外部。只有一个外联、且严格遵守默认方向的客户,也有一个受限例外。但一旦多宿主,不同提供者可能分别发布同一 Class A 父网的不同组成部分,客户内部就必须保存真实前缀长度。

同伴连接进一步把要求传给邻居。RFC 2036 给出一个结构性例子:两个 classless 的 stub X、Y 通过一个 classful 域 Z 相连。X 把父网的一块告诉 Z;Z 把它理解成完整 Class A 网络,再告诉 Y。Y 原来从自己的提供者学到的默认路由被覆盖,所有属于这个父网的流量都被送往 Z,再转去 X;X 作为非传输 stub,只能丢弃非本地流量。

这说明“本域已升级”并不构成闭环证据。只要外部同伴抹掉前缀长度,兼容性失败仍会反向改变本域的选路。新增一条备线或对等连接,也可能让昨天安全的单宿主例外今天失效。

地址池成为部署杠杆

RFC 2036 建议首批分配优先给已经运行 classless 域内协议的网络,或无外联、以及单宿主到 classless 提供者且愿意正确指向 subnet default 的 classful 网络。厂商产品需要明确区分 classless/classful 模式,并让 subnet default 可选择跟随普通默认或落入 sink。主机配置也应逐步从“类别、子网、主机”三段式,转向明确的本地网络前缀与主机地址。

一个月后发布的 RFC 2050 在分配侧说得更直接:地址使用以 VLSM 和 classless 技术为前提,基于 classful 使用方式提出的申请不予考虑。这能证明当时的行政指导开始与技术前提对齐,却不能证明每个收到地址的网络已经完成迁移。

压力背景来自已于 1995 年结束的 ALE 工作组。其正式章程覆盖 IPv4 剩余寿命预测、利用率、分配政策、路由数量、回收与重编号。RFC 2036 转述 ALE 对 Class C 未分配池消耗的担忧,并指出 Class A 上半部仍占当时 IPv4 地址的约四分之一。它没有附上 ALE 的原始时间序列,更没有把预测写成已发生结果。

Historic 是后来判断,不是遗失的部署数据库

RFC 2036 发布时是 Informational,如今为 Historic,RFC Editor 当前没有列出勘误。RFC 4632 在 2006 年将它历史化,理由是 CIDR 已全面部署,而且从历史 Class A 空间作无类分配已有六年多经验。这份后继文档支持一个有限结论:标准共同体当时已把这项转型视为完成的历史问题。

但它没有列出具体提供者、产品版本、故障次数、成功率或清障过程,也没有证明 RFC 2036 本身促成了结果。RFC 4632 另保留一项长期架构规则:生成聚合路由的域,必须把“匹配聚合、却不匹配任何更具体路由”的包送往 null,以免空洞造成环路。这是 RFC 2036 所担心的 sink 问题进入通用 CIDR 架构后的表达。

今天的 IANA IPv4 地址空间表已不再呈现 1996 年那片未分配上半区;2009 年的最后 /8 选择机制和 2012 年的耗尽后政策记录封闭了库存背景。它们不是 RFC 2036 部署成败的替代数据。

要还原一次真正的启用,至少应分开六份回执:注册分配的精确前缀;提供者收到的默认、具体路由与策略;客户 IGP、subnet default 与边界交换;聚合触发条件及每个空洞的 sink;每个同伴保存的前缀长度;部署与未部署目的地址的真实 next hop 或丢弃点。

Heng Lu 的 running-code primacy 在这里不是否定注册记录,而是限定记录的证明力。分配记录在协调层是真实的;路由选择和包路径在执行层是真实的。只有前缀含义逐跳不丢,地址库存才真正变成可达资源。

来源