RFC 4379 - 2. Motivation
2. 动机 (Motivation)
当一条 LSP 无法递送用户流量时, 该故障并不总能被 MPLS 控制平面检测到. 因此需要提供一种工具, 使用户能够在合理的时间内检测出此类流量 "黑洞" 或错误路由, 并提供一种隔离故障的机制.
本文档描述一种可实现上述目标的机制. 该机制仿照 ping/traceroute 范式: ping (ICMP echo request [ICMP]) 用于连通性检查, traceroute 用于逐跳的故障定位以及路径追踪. 本文档为测试 MPLS LSP 规定了 "ping" 模式与 "traceroute" 模式.
基本思想是验证: 属于某个特定转发等价类 (Forwarding Equivalence Class, FEC) 的分组, 其 MPLS 路径是否确实终结于作为该 FEC 出口的标签交换路由器 (Label Switching Router, LSR). 本文档提议, 通过沿与其他属于该 FEC 的分组相同的数据路径发送一个分组 (称为 "MPLS echo request") 来执行该测试. MPLS echo request 还携带有关其 MPLS 路径正被验证的 FEC 的信息. 该 echo request 的转发方式与属于该 FEC 的任何其他分组相同. 在 "ping" 模式 (基本连通性检查) 下, 分组应当到达路径末端, 此时它被送到出口 LSR 的控制平面, 由后者验证其是否确实是该 FEC 的出口. 在 "traceroute" 模式 (故障隔离) 下, 分组被送到每个 transit LSR 的控制平面, 由后者执行各种检查以确认其确实是该路径的 transit LSR; 该 LSR 还返回有助于对照数据平面检查控制平面的进一步信息, 即转发行为与路由协议所确定的路径是否一致.
使用这些工具的一种方式是周期性地 ping 一个 FEC 以确保连通性. 若 ping 失败, 则可发起 traceroute 以确定故障所在. 也可以周期性地对 FEC 执行 traceroute 以验证转发与控制平面一致; 但这会给 transit LSR 带来更大的负担, 因此应谨慎使用.
2.1. 127/8 地址范围的使用 (Use of Address Range 127/8)
如上所述, LSP ping 旨在作为一种诊断工具. 它旨在使基于 MPLS 的服务的提供者能够隔离网络故障. 特别是, LSP ping 需要诊断控制平面与数据平面不同步的情形. 为此, 它仅根据标签栈来路由 MPLS echo request 分组. 也就是说, IP 目的地址从不用于转发决策. 事实上, MPLS echo request 分组的发送方可能事先并不知道 LSP 末端路由器的地址.
基于 MPLS 的服务的提供者还需要能够追踪一条 LSP 可能经过的所有路径. 由于大多数 MPLS 服务基于 IP 单播转发, 这些路径受到等价多路径 (Equal-Cost Multi-Path, ECMP) 负载分担的影响.
由此产生以下需求:
-
尽管所涉及的 LSP 可能以未知的方式发生故障, 诊断分组被投递给某个 MPLS 服务用户的可能仍 MUST 被控制在最低限度.
-
若 LSP 发生故障以致其提前终止, 该诊断分组 MUST NOT 被 IP 转发.
-
因此需要 (REQUIRED) 一种使诊断分组发生变化, 从而遍历所有 ECMP 路径的手段.
显然, 使用普通的单播地址无法满足前两项需求中的任何一项. 曾考虑过若干其他地址方案, 包括一段私有地址空间 (由网络运营者决定) 以及新指定的 IPv4 链路本地地址. 使用私有地址空间被认为是无效的, 因为最主要的基于 MPLS 的服务是 IPv4 虚拟专用网络 (Virtual Private Network, VPN), 而 VPN 常常使用私有地址.
IPv4 链路本地地址更具吸引力, 因为其可被转发的范围受到限制. 然而, 如果使用该范围内的地址, 一个从故障 LSP 中 "逃逸" 出来的诊断分组的第一个接收方, 仍有可能在其收到该分组的接口上恰好被分配了该地址, 从而错误地接收到这样一个分组. 此外, IPv4 链路本地地址范围直到最近才被分配. 许多已部署的路由器会把目的地址属于该范围的分组向默认路由转发.
为 IPv4 选择 127/8 范围, 并为 IPv6 选择以 IPv4 映射 IPv6 地址 (IPv4-mapped IPv6 address) 形式嵌入的同一范围, 原因有若干.
RFC 1122 将 127/8 分配为 "Internal host loopback address" (内部主机环回地址), 并指出: "Addresses of this form MUST NOT appear outside a host." (这种形式的地址 MUST NOT 出现在主机之外.) 因此, 主机的默认行为是丢弃此类分组. 这有助于确保: 若诊断分组被错误地导向某台主机, 它将被静默丢弃.
RFC 1812 [RFC1812] 指出:
除非经由环回接口, 路由器 SHOULD NOT 转发任何目的地址位于网络 127 上的分组. 路由器 MAY 提供一个开关, 允许网络管理者禁用这些检查. 若提供此类开关, 其默认行为 MUST 是执行这些检查.
这有助于确保诊断分组永远不会被 IP 转发.
127/8 地址范围提供 16M 个地址, 在变化地址以遍历 ECMP 路径方面具有很大的灵活性. 最后, 作为一项实现上的优化, 127/8 为识别可能的 LSP 分组提供了一种简便手段.