摘要

  • RFC 3034 把一串只交换 DLCI、不会递减 MPLS TTL 的 Frame Relay LSR 定义为“非 TTL 段”,由边界一次核算核心设备没有逐跳扣除的跳数。
  • LDP Hop Count 可被传播到单播入口,供入口在放行前扣减;这个数是控制面声明,不是逐包路径观测,更不是送达回执。

问题不是交换机不会转发,而是它只会转发。收到一帧后,它查找输入 DLCI,换成输出 DLCI,再送往下一接口。这个流水线完成了 Frame Relay 的核心工作,却没有路由器通常具备的 TTL 减一操作。设备一旦承担 MPLS 标签交换,局部正确的 DLCI 替换便不足以维持全路径的环路与范围约束。

2001 年 1 月发布的 RFC 3034 以 Proposed Standard 身份接受了这个硬件现实。它没有假设核心突然多出一条指令,而是把连续的这类设备视为非 TTL 段,把原本逐跳发生的扣减移到段的边界。

真正参与查表的标签住在 DLCI 里

在 Frame Relay 链路上,当前 MPLS 标签的值放在链路层头部的 DLCI 字段。其余标签以及当前栈项的其他字段仍由通用 MPLS 封装承载。核心 FR-LSR 直接用 DLCI 查表,写入输出 DLCI,然后继续发送。

因此,同一个逻辑标签栈被分开表达:决定交换动作的值在 Frame Relay 头部,TTL 等字段则仍在栈顶项中有效。到达异构链路边界时,LSR 要先还原逻辑栈,执行标签操作,再按下一条链路重新编码。相邻两跳的字节形式可以不同,逻辑状态却是连续的。

如果出口弹出的是最后一枚标签,栈本身没有显式说明随后是哪种网络层协议,只能从标签绑定推断。绑定因此同时规定了有限范围内的解析和转发含义,但它不是发送者身份、路由授权、实际穿越某条电路或最终送达的证明。

没有改写计数器的跳点仍然消耗范围

MPLS TTL 既要抑制环路,也要限制报文传播范围。若五台 Frame Relay 交换机永远按零跳计算,报文离开它们时会比经过五台普通路由器多保留五份寿命。每次 DLCI 替换都正确,并不能弥补整体边界被放大的事实。

RFC 3034 用 输出 TTL = 输入 TTL - d 描述计算,d 由输入封装、转发封装与输出封装共同决定。同层 Frame Relay 核心交换取零,因为整段费用在边界结算;普通 MPLS 转发通常取一;进入非 TTL Frame Relay 段时,可以一次取该段传播来的总跳数。

单播把有意义的段长向入口传播,由入口在报文进段前扣除。多播则把段长送向出口,在那里完成相应扣减。位置随转发方式改变,目标不变:不具备 TTL 指令的硬件不能让自身占用的路径凭空消失。

TTL 不够时,入口必须在进段前拒绝

预先扣减让入口能够在第一次 DLCI 交换之前作决定。如果已知段长表明单播报文会在抵达出口前耗尽 TTL,入口不得把带标签的报文送进非 TTL 段。

它应依照标签栈规则尝试返回 ICMP 错误,或改为无标签转发,并按 IP 转发更新 TTL。若输入 TTL 已经等于一,则只能走错误处理路径。

这里的“尝试”不能被抹掉。生成 ICMP 不等于源端收到 ICMP;转交无标签路径也不等于目的端收到报文。入口留下的证据,只能证明它依据某个 TTL 和段长作过某项边界决策。

Hop Count 是控制面合成值,不是路径遥测

LDP 标签绑定可携带 Hop Count 对象,为边界计算提供段长。收到已知下游跳数的 FR-LSR 在向上游通告前加一;未知值仍保持未知。如果递增后超过上限,它不得继续传播绑定,而要报告错误。

有序控制会等待下游映射,再把递增后的跳数连同绑定送给上游。独立控制可以先发一个 Hop Count 未知的绑定,等下游状态就绪后再更新。若 LDP 没有给出跳数或明确标为未知,RFC 3034 所述计算使用一作为默认段长。

默认一不是测出了一跳,只是在缺少有效长度时规定行为。即使数值已知,它也是由路由状态与标签分发消息逐级合成的声明,不证明所有交换机此刻在线,不证明特定报文走过这条序列,也不证明出口已经收到它。

路由一变,旧算式也必须失效

上游已经持有绑定,并不意味着段长永久不变。独立控制可能把未知改成已知,路由计算也可能选中新的下一跳。新的下游绑定若改变跳数,FR-LSR 必须把递增后的新值继续向入口传播。若结果超过上限,还必须向上游撤销该 FEC 的相关标签,不能让环路检测依赖一个无法表示的数。

失败同样会撤销权威。下游请求无法满足时,为上游请求临时创建的绑定应被销毁,并通知请求者撤回。LDP 会话丢失后,通过该连接学到的绑定必须全部丢弃。宽松保留也只有在路由和 Hop Count 满足 RFC 条件时才可复用旧绑定。

所以,标签信息库里“有一行”不是路径可用证明。还要知道它来自哪次会话、下游依赖是否仍存在、数值是否对应当前路由,以及更新是否已经到达入口。

迁就硬件没有消除证据层次

充当 LSR 的 Frame Relay 交换机需要分配和维护标签,也要作为对等体参加相应网络层路由协议。与此同时,传统 Frame Relay 控制与标签交换控制仍可在同一设备和接口上独立运行,只共享 DLCI 空间划分等有限资源;二者组合后的具体操作不在 RFC 范围内。

这套设计是工程妥协,不是把控制符号升级为运行事实。路由选择下游,LDP 声明长度,入口执行扣减,核心交换 DLCI,出口呈现结果。每一步都有自己的收据。RFC 3034 因核心做不到而移动了工作,却没有把真实路径一并搬进 Hop Count 数字。

来源

Lu Heng 并非 RFC 3034 或相关标准的作者,也未为其背书;本文仅明确披露地借用其文章作为分析框架。