摘要

  • RFC 1953 把一条点到点链路的标签空间交给下游端管理,下游向上游发送不要求确认的 Redirect;接收方可以忽略其中任何或全部绑定建议。
  • 标签绑定是一份租约:必须刷新才会延续;同一流出现冲突标签时,设备不猜谁更可信,而是回到默认 IP 转发;邻接状态不一致的重定向一律丢弃。
  • 安装捷径可以没有回执,回收标签却必须有 Reclaim Ack,表明流已解绑、标签可再次使用。文档同时明确没有讨论安全问题。

沙漏归零后的那一个包

两台相邻设备之间,本来就有一条能够工作的 IP 路径。某一时刻,下游交换设备发现一组报文可以使用缓存的转发结果,于是向上游提出:今后遇到这组流,请附上我指定的二层标签。上游若接受,后续报文可以少做一遍网络层查找。

几秒后,标签租期耗尽。下一份报文仍然有路可走,它重新经过默认转发。捷径消失,路由没有消失。

这正是 Ipsilon Flow Management Protocol 最值得保留的历史细节。RFC 1953 发布于 1996 年 5 月,类别为 Informational。IESG 的说明没有把它包装成共识:这是一个私有 IPv4 流协议,不是 IETF 工作组的成果,也不是标准轨文档,未必经过标准轨通常具备的广泛审查。

因此,文档的价值来自它把一个可运行方案公开到可以检查,而不是来自编号本身。它不证明部署规模、商业成败或后来标准的血缘。它让我们看到,当 ATM 的交换速度对路由器形成强烈诱惑时,一群工程师如何试图把 IP 决策缓存到一条相邻链路,同时保留默认路径。

先定义“这一流”,再谈加速

IFMP 所称的流,是在路由或逻辑处理策略上相关的一系列报文。流类型规定哪些不变的头部字段参与识别;不同类型按包含关系排列,以便做最具体匹配。

一种类型没有流标识,只改变封装。另一种适用于 TCP、UDP,包含地址、协议和端口。更粗的一种不含端口。这个层级说明“流”不是天然存在的对象,而是设备根据选定字段划出的执行范围。

字段匹配可以很好地回答“哪批报文使用同一处理”,却回答不了“谁是这个应用”“哪个自然人有权发送”“机构是否批准了这项策略”。分类键越短,越依赖设备先前保存的上下文。效率来自省略,而省略必须以状态仍然正确为前提。

RFC 1953 因而在重定向之前安排了邻接状态机。双方通过 SYN、SYNACK、ACK 和 RSTACK 交换本端实例、对对端实例的认识、对端身份以及下一条预期序号。链路或节点重新起来时,实例号必须改变;零不是有效实例。

只有邻接进入同步状态后,才可以发送重定向消息。接收者要把源地址、发送实例和对端实例与本端保存状态比较,任何失配都必须丢弃。重定向序号每条加一并按 2^32 回绕,链路重置时归零。

这是一种“最近一次链路生命”的区分,不是密码学身份。文档的 Security Considerations 只有一个明确边界:安全问题没有讨论。校验和能发现传输错误,实例号能隔开旧状态,IP 地址能帮助确认预期邻居,但三者都不能证明机构身份、授权或恶意攻击不存在。

标签由下游挑,执行权留在上游

IFMP 把一条链路的两个方向分开处理。某个方向上的下游端管理将要收到的标签空间,再向上游发送 Redirect,请对方把某个标签附到某个流上。

资源归属很清楚:真正接收这个短号码的一端负责选择它。标签不需要跨全网唯一,只需在这一个方向、这一条链路的共同状态里有意义。

但下游只有提议权。上游可以忽略 Redirect 中任意一个或全部元素。Redirect 本身也没有确认消息。上游决定接受时,才会在之后的报文上附标签,而且可以随时停止,最迟也必须在租期结束时停止。

这是把责任放在执行点。下游知道自己的标签容量,上游知道自己将怎样改变出站报文。任何一方都不能只凭“我发过消息”宣称另一方已经执行。

Label Range 更进一步暴露本地边界。若请求标签超出接收链路能处理的范围,设备可以返回最小值和最大值。它是能力说明,不是全球号码登记簿。同一个数字在别的链路上可以有完全不同的含义。

冲突时,别选一条更漂亮的谎言

Redirect 带有以秒为单位、不得为零的 Lifetime。租期届满前,只有再次收到完全相同的 Redirect 才能续期。对已经重定向的同一流,如果新消息给出相同标签,计时器重置;若标签不同,新请求被忽略,旧捷径也不再保留,流量回到默认状态。

协议没有设计复杂的“真假标签仲裁”。两端记忆出现矛盾时,最快的路不再值得信任,普通 IP 转发重新成为最小共同语言。

这种退路看似保守,却保护了系统的可逆性。优化经常在长期运行后变成依赖:慢路径没有测试、告警只关心命中率、业务甚至把缓存键当成身份。一旦如此,取消优化就不再只是变慢,而会改变意义。

RFC 1953 的基础机制拒绝这种倒置。租期、实例变化、序号错位、对端变化、冲突绑定或主动回收,都可以结束快捷状态;流的定义和默认路由仍在标签之下。

ATM 上省掉的字段,藏进了哪里

RFC 1954 把 IFMP 的标签具体映射到 ATM 的 VPI/VCI。控制消息仍走默认封装;某些重定向流则省去反复出现的 IPv4 字段,其中一种还不再传送最初的传输层端口字段。

这些信息并没有从系统中消失。它们被转移到双方共同持有的绑定里。报文能变短,是因为设备已经记住了怎样还原处理上下文。

因此,压缩头部与标签转发不是对 IP 语义的废除。它们是一次状态交易:先通过完整信息做决定,再用本地短标识执行。状态失效时,短标识也必须失去效力。RFC 1483 所给出的默认 ATM 封装构成了这个回退背景,而不是一条被快捷方式永久替代的旧路。

为什么释放比安装更需要回执

Redirect 没有确认,这是有意的不对称。接收方拒绝一次性能优化不会破坏连通性,发送方也不能把请求当成承诺。

Reclaim 不同。下游要求上游解除某流与标签的绑定,把流送回默认转发,并释放标签。操作完成后,每个 Reclaim 都必须得到 Reclaim Ack。即便流未知,也要按请求内容回答。若实际绑定的是另一个标签,接收方要解除真实绑定,并在确认里报告那个实际标签。

确认表示流已经解绑、标签已经空闲;如果条件允许,还应等使用该标签的排队数据发送完再确认。这不是端到端交付证明,却是标签可以安全复用所需的局部完成证据。

设计的逻辑很漂亮:创建优化可以投机,因为拒绝安全;销毁旧含义并复用号码不能靠猜,因为两个含义重叠会把报文送进错误上下文。请求释放与完成释放不是同一件事。

不把后来者写成唯一继承人

IFMP 属于把 IP 控制与 ATM 交换结合的一批尝试。Ipsilon 的 GSMP 用不对称的控制器/交换机关系建立连接、管理端口和读取统计。Cisco 同期的 Tag Switching 同样区分控制与转发,却支持多种标签分配方式,并把按路由拓扑创建绑定放在更突出的位置。

后来,MPLS 架构和 LDP 让标签绑定、转发等价类以及控制/转发分离进入更广泛的标准体系。这些文档证明标签交换是一个持久的工程问题域,却不能证明 RFC 1953 直接导致 MPLS,也不能把 LDP 的规则倒写成 IFMP 的规则。

更可靠的历史问题不是“谁发明了最终赢家”,而是各方案如何分配权力。谁拥有标签空间?谁能建议使用?谁可拒绝?状态活多久?重启后如何识别旧消息?怎样证明一个号码已可复用?失败时还有没有普通路径?RFC 1953 对这些问题给出了很具体的一组答案。

标签只是符号,转发才是事实

Heng Lu 关于 running code 的论述提供了一条后来的阅读准则。规范中的 Redirect 是一类消息;线路上抓到 Redirect,只能证明邻居提出过绑定。只有接收设备的实际报文行为,才能证明它接受并执行。标签出现、状态存在和转发发生,是三层不同的证据。

“最小初始规范”的视角解释了 IFMP 为什么不需要中央标签权威。两端必须共同理解流类型、实例、序号、租期、标签范围与回收回执;至于是否接受某个优化,则留给操作自己出口的设备。共同规则足以互通,却不夺走本地拒绝权。

“现实层”提醒我们,一个报文带着标签,不代表当前一定有有效绑定;一端保存绑定,也不代表另一端仍处于同一邻接生命;状态曾经同步,也不代表重启后仍然有效。符号可以比操作现实活得更久,所以系统必须让过期和回退成为可执行动作。

交换机递来一条捷径,路由器仍可拒绝。互联网最有生命力的设计,往往不是让快速路径永不失败,而是让失败仍然回到一条双方都懂的路。

来源与边界

文档身份和核心机制来自 RFC 1953 的 RFC Editor 记录与 RFC 1953 正文。ATM 实现边界来自 RFC 1954及其引用的 RFC 1483。交换机控制背景取自 RFC 1987 的记录。同期与后来的有限比较依据 RFC 2105、RFC 3031和 RFC 5036。分析框架来自 Running-Code Primacy、Minimum Initial Specification与 Reality Layers。

这些来源支持协议文本和有限架构比较,不支持部署比例、实测性能、商业成败、普遍互通、密码学安全或从 IFMP 到 MPLS 的单一路线。