LSP 路由
MPLS 和路由表
IGP 和 BGP 将其路由信息存储在 inet.0 路由表(主 IP 路由表)中。如果配置了 traffic-engineering bgp
命令,从而仅允许 BGP 使用 MPLS 路径转发流量,则 MPLS 路径信息将存储在单独的路由表 inet.3 中。只有 BGP 访问 inet.3 路由表。BGP 使用 inet.0 和 inet.3 来解析下一跃点地址。如果配置了 traffic-engineering bgp-igp
命令,从而允许 IGP 使用 MPLS 路径转发流量,则 MPLS 路径信息将存储在 inet.0 路由表中。图 1 (并 图 2 说明了两种流量工程配置中的路由表。
inet.3 路由表包含每个 LSP 出口路由器的主机地址。此路由表在入口路由器上用于将数据包路由到目标出口路由器。BGP 使用入口路由器上的 inet.3 路由表来帮助解析下一跃点地址。
MPLS 还维护一个 MPLS 路径路由表 (mpls.0),其中包含每个 LSP 中下一个标签交换路由器的列表。此路由表在传输路由器上用于将数据包沿 LSP 路由到下一个路由器。
通常,LSP 中的出口路由器不会查询 mpls.0 路由表。(此路由器不需要咨询 mpls.0,因为 LSP 中的倒数第二个路由器要么将数据包的标签更改为值 0,要么弹出标签。无论哪种情况,出口路由器都会将其作为 IPv4 数据包转发,并查询 IP 路由表 inet.0 以确定如何转发数据包。
当中转或出口路由器收到 MPLS 数据包时,MPLS 转发表中的信息用于确定 LSP 中的下一个中转路由器或确定此路由器是否为出口路由器。
当 BGP 解析下一跃点前缀时,它会检查 inet.0 和 inet.3 路由表,寻找具有最低优先级的下一跃点。如果它在两个路由表中找到具有相同优先级的下一跃点条目,BGP 将首选 inet.3 路由表中的条目。
通常,BGP 会在 inet.3 路由表中选择下一跃点条目,因为它们的首选项始终低于 OSPF 和 IS-IS 下一跃点首选项。配置 LSP 时,您可以覆盖 MPLS LSP 的默认首选项,这可能会改变下一跃点选择过程。
当 BGP 从 inet.3 路由表中选择下一跃点条目时,它会将该 LSP 安装到数据包转发引擎的转表中,从而使发往下一跃点的数据包进入并沿 LSP 传输。如果 LSP 已删除或出现故障,则会从 inet.3 路由表和转发表中删除路径,BGP 将恢复为使用 inet.0 路由表中的下一跃点。
快速重新路由概述
快速重新路由为 LSP 路径提供冗余。启用快速重新路由时,将预先计算并沿 LSP 预先建立绕行。如果当前 LSP 路径上发生网络故障,流量会快速路由到其中一个绕行点。 图 3 说明了从路由器 A 到路由器 F 的 LSP,显示了已建立的绕道。每个绕行都由上游节点建立,以避免指向直接下游节点和直接下游节点本身的链接。每次绕道都可能遍历图中未显示的一个或多个标签交换路由器(或交换机)。
快速重新路由可保护流量,防止入口和出口路由器(或交换机)之间出现任何单点故障。如果在扩展的快速重新路由方案中出现故障,设备将失去对通过故障链路连接的所有对等方的可访问性。这会导致流量中断,因为设备之间的 BGP 会话会关闭。如果 LSP 中存在多个故障,则快速重新路由本身可能会失败。此外,快速重新路由不能防止入口或出口路由器发生故障。
如果节点检测到下游链路出现故障(使用特定于链路层的活动检测机制)或下游节点出现故障(例如,使用 RSVP 邻居 你好 协议),则该节点会迅速将流量切换到绕行路线,同时向入口路由器发出链路或节点故障的信号。 图 4 说明了路由器 B 和路由器 C 之间的链路出现故障时绕道而行的情况。
如果网络拓扑不够丰富(没有足够的路由器与其他路由器有足够的链接),则某些弯路可能不会成功。例如,从路由器 A 绕行到路由器 C 无法 图 3 遍历链路 A-B 和路由器 B。如果无法找到这样的路径,则不会绕行。
请注意,在节点将流量切换到绕行后,它可能会很快再次将流量切换到新计算的绕行。这是因为最初的绕行路线可能不是最佳路线。为了尽快重新路由,节点会将流量切换到初始绕行,而无需先验证绕行是否有效。进行切换后,节点将重新计算绕行。如果节点确定初始绕行仍然有效,则流量将继续流过此绕行。如果节点确定初始绕行不再有效,它将再次将流量切换到新计算的绕行。
如果在节点将流量切换到初始绕行后发出 show
命令,节点可能会指示流量仍在流经原始 LSP。这种情况是暂时的,应该迅速纠正。
快速重新路由绕行生效所需的时间取决于两个独立的时间间隔:
检测链路或节点故障的时间量 - 此间隔在很大程度上取决于正在使用的链路层和故障的性质。例如,SONET/SDH 链路上的故障检测通常比千兆以太网链路上的故障检测快得多,而且两者都比路由器故障检测快得多。
将流量拼接到绕行路线所需的时间 — 此操作由数据包转发引擎执行,只需很少的时间即可将流量拼接到绕行路线上。所需时间可能因切换到绕道的 LSP 数量而异。
快速重新路由是减少数据包丢失的短期补丁。由于绕行计算可能无法保留足够的带宽,因此绕行可能会在备用链路上引入拥塞。入口路由器是唯一完全了解 LSP 策略约束的路由器,因此也是唯一能够提供足够的长期备用路径的路由器。
绕行是通过使用 RSVP 创建的,与所有 RSVP 会话一样,它们需要网络中的额外状态和开销。因此,每个节点最多为每个启用了快速重新路由的 LSP 建立一个绕行。为每个 LSP 创建多个绕道会增加开销,但没有任何实际目的。
为了进一步减少网络开销,每次绕行都会尝试在发生故障的节点或链路后尽快合并回 LSP。如果可以考虑通过路由器节点传输 n 的 LSP,则可以创建 n – 1 弯路。例如,在 中 图 5,绕道会尝试在路由器 D 而不是路由器 E 或路由器 F 处合并回 LSP。合并回 LSP 会使绕道可伸缩性问题更易于管理。如果拓扑限制阻止绕行快速合并回 LSP,则绕行会自动与其他绕行合并。
配置快速重新路由
快速重新路由提供了一种机制,用于在 LSP 中的节点或链路发生故障时自动重新路由 LSP 上的流量,从而减少通过 LSP 传输的数据包的丢失。
要在 LSP 上配置快速重新路由,请在入口路由器(或交换机)上添加 fast-reroute
以下语句:
fast-reroute { (bandwidth bps | bandwidth-percent percentage); (exclude [ group-names ] | no-exclude ); hop-limit number; (include-all [ group-names ] | no-include-all); (include-any [ group-names ] | no-include-any); }
您可以在以下层次结构级别包含此语句:
[edit protocols mpls label-switched-path lsp-name]
[edit logical-systems logical-system-name protocols mpls label-switched-path lsp-name]
您无需在 LSP 的传输和出口路由器(或交换机)上配置快速重新路由。启用快速重新路由后,入口路由器(或交换机)会向所有下游路由器(或交换机)发出信号,表明 LSP 上已启用快速重新路由,并且每个下游路由器都会尽力为 LSP 设置绕行。如果下游路由器不支持快速重新路由,它将忽略设置绕道的请求并继续支持 LSP。不支持快速重新路由的路由器将导致某些绕道失败,但对 LSP 没有影响。
要启用 PFE 快速重新路由,请在流量可能重新路由的每个路由器上使用该语句在 load-balance per-packet
层次结构级别配置 [edit policy-options policy-statement policy-name then]
路由策略语句。另 请参阅在 RSVP LSP 之间配置负载平衡。
默认情况下,不会为重新路由的路径保留带宽。要为重新路由的路径分配带宽,请包含 bandwidth
语句或 bandwidth-percent
语句。一次只能包含其中一个语句。如果未包括 bandwidth
语句或 bandwidth-percent
语句,则缺省设置是不为绕行路径保留带宽。
包含 bandwidth
该语句时,可以指定要为绕行路径保留的特定带宽量(以位/秒 [bps] 为单位)。带宽不必与为 LSP 分配的带宽相同。
使用该语句指定 bandwidth-percent
带宽百分比时,绕行路径带宽的计算方法是将带宽百分比乘以为主流量工程 LSP 配置的带宽。有关如何为流量工程 LSP 配置带宽的信息,请参阅 配置流量工程 LSP。
跳数限制约束定义与 LSP 本身相比,绕道允许遍历的路由器数量。默认情况下,跃点限制设置为 6。例如,如果一个 LSP 遍历 4 个路由器,则 LSP 的任何绕道最多可以是 10(即 4 + 6)个路由器跃点,包括入口和出口路由器。
默认情况下,当 CSPF 确定备用路径时,绕行将继承与其父 LSP 相同的管理(着色)组约束。管理组(也称为链接着色或资源类)是手动分配的属性,用于描述链接的“颜色”,以便具有相同颜色的链接在概念上属于同一类。如果在配置父 LSP 时指定 include-any
语句,则备用会话遍历的所有链路必须至少在组列表中找到一种颜色。如果在配置父 LSP 时指定 include-all
语句,则备用会话遍历的所有链路都必须具有组列表中找到的所有颜色。如果在配置父 LSP 时指定 exclude
语句,则所有链接都不得具有在组列表中找到的颜色。有关管理组约束的详细信息,请参阅 为 LSP 配置管理组。
绕行合并流程
本节介绍路由器用于确定当路由器从具有相同会话和发送方模板对象的不同接口接收路径消息时选择哪个 LSP 的过程。发生这种情况时,路由器需要合并路径状态。
路由器采用以下过程来确定何时以及如何合并路径状态:
当所有路径消息都不包含快速重新路由或绕行对象时,或者当路由器是 LSP 的出口时,不需要合并。消息根据 RSVP 流量工程进行处理。
否则,路由器 必须 记录路径状态以及传入接口。如果路径消息不共享相同的传出接口和下一跃点路由器,路由器会将其视为独立的 LSP,不会合并它们。
对于共享相同传出接口和下一跃点路由器的所有路径消息,路由器使用以下过程选择最终 LSP:
如果只有一个 LSP 源自此节点,请选择它作为最终 LSP。
如果只有一个 LSP 包含快速重新路由对象,请选择它作为最终 LSP。
如果有多个 LSP,并且其中一些具有绕行对象,请从最终 LSP 选择过程中消除那些包含绕行对象的 LSP。
如果保留了几个最终 LSP 候选项(即,仍有绕道 LSP 和受保护的 LSP),请选择具有快速重新路由对象的 LSP。
如果所有 LSP 都没有快速重新路由对象,请选择没有绕行对象的 LSP。如果所有 LSP 都有绕行对象,请全部选择它们。
在剩余的 LSP 候选项中,请排除那些遍历其他 LSP 避免的节点的候选者。
如果仍保留多个候选 LSP,请选择具有最短显式路由对象 (ERO) 路径长度的 LSP。如果多个 LSP 具有相同的路径长度,请随机选择一个。
识别最终 LSP 后,路由器必须仅传输与此 LSP 对应的路径消息。所有其他 LSP 都被视为在此节点合并。
绕行计算
计算和设置绕道在每个节点上独立完成。在节点上,如果 LSP 启用了快速重新路由,并且可以识别下游链路或节点,则路由器将使用本地流量工程数据库中的信息执行约束最短路径优先 (CSPF) 计算。因此,绕道依赖于支持流量工程扩展的 IGP。没有流量工程数据库,就无法建立绕道。
CSPF 最初尝试查找跳过下一个下游节点的路径。尝试查找此路径可防止节点或链路中的下游故障。如果节点跳过路径不可用,CSPF 将尝试在下一个下游节点的备用链路上查找路径。尝试查找备用链路只能防止链路中的下游故障。绕道计算第一次可能不会成功。如果计算失败,路由器大约每刷新间隔重新计算一次绕行,直到计算成功。每个绕行的 RSVP 指标设置为 10,000 到 19,999 范围内的值。
快速重新路由路径优化
快速重新路由保护路径是不确定的。特定节点的实际保护路径取决于计算快速重新路由路径时 LSP 的历史记录和网络拓扑。缺乏确定性行为可能会导致网络中出现多次链路抖动后的操作困难和路径优化不佳。即使在小型网络中,经过几次链路抖动后,快速重新路由路径也可以遍历任意数量的节点,并且可以无限期地保持该状态。这是低效的,使网络的可预测性降低。
快速重新路由优化解决了这一缺陷。它提供了一个全局路径优化计时器,允许您优化所有启用了快速重新路由并启动并运行的绕行路径的 LSP。计时器值可以根据预期的 RE 处理负载而变化。
快速重新路由优化算法仅基于 IGP 指标。只要新路径的 IGP 指标低于旧路径的 IGP 指标,CSPF 结果就会被接受,即使新路径可能更拥塞(更高的带宽利用率)或遍历更多跃点。
根据 RFC 4090,对于 LSP 隧道的 RSVP-TE 的快速重新路由扩展,当计算并接受新路径以进行快速重新路由优化时,首先销毁现有绕行,然后建立新的绕行。为了防止流量丢失,主动保护流量的绕行没有优化。
为快速重新路由路径配置优化间隔
您可以通过配置快速重新路由优化计时器来启用路径优化以实现快速重新路由。优化计时器会触发定期优化过程,该过程会重新计算快速重新路由绕行 LSP,以便更有效地使用网络资源。
要启用快速重新路由路径优化,请使用语句的 fast-reroute
优化计时器选项指定秒数:
fast-reroute seconds;
您可以在以下层次结构级别包含此语句:
[edit protocols rsvp]
[edit logical-systems logical-system-name protocols rsvp]
将与 LSP 相关的路由添加到 inet.3 或 inet6.3 路由表
默认情况下,通向出口路由器的主机路由安装在 inet.3 或 inet6.3 路由表中。(主机路由地址是您在语句中 to
配置的地址。安装主机路由允许 BGP 执行下一跃点解析。它还可以防止主机路由干扰从动态路由协议获知并存储在 inet.0 或 inet6.0 路由表中的前缀。
与 inet.0 或 inet6.0 表中的路由不同,inet.3 或 inet6.3 表中的路由不会复制到数据包转发引擎,因此它们不会直接导致系统转发表中的更改。不能通过这些路由使用 ping
or traceroute
命令。inet.3 或 inet6.3 的唯一用途是允许 BGP 执行下一跃点解析。要检查 inet.3 或 inet6.3 表,请使用 show route table inet.3
或 show route table inet6.3
命令。
要将其他路由注入 inet.3 或 inet6.3 路由表,请包含以下 install
语句:
install { destination-prefix <active>; }
您可以在以下层次结构级别包含此语句:
[edit protocols mpls label-switched-path lsp-name]
[edit protocols mpls static-label-switched-path lsp-name]
[edit logical-systems logical-system-name protocols mpls label-switched-path lsp-name]
[edit logical-systems logical-system-name protocols mpls static-label-switched-path lsp-name]
建立 LSP 时,指定的路由将作为别名安装到路由表中。安装其他路由允许 BGP 解析指定前缀内的下一跃点,并将这些下一跃点的其他流量定向到特定的 LSP。
active
在语句中包含install
选项会将指定的前缀安装到 inet.0 或 inet6.0 路由表中,这是主转发表。结果是只要建立 LSP,就会在转发表中安装一个路由,这意味着您可以 ping 或跟踪路由。请谨慎使用此选项,因为这种类型的前缀与静态路由非常相似。
您可以将别名路由用于具有多个地址用作 BGP 下一跃点的路由器,或者用于不支持 MPLS 的路由器。在这两种情况下,LSP 都可以配置到本地域中另一个支持 MPLS 的系统,然后充当“边界”路由器。然后,LSP 在边界路由器上终止,第 3 层转发从该路由器将数据包带到真正的下一跃点路由器。
在互连的情况下,域的边界路由器可以充当代理路由器,如果边界路由器未将 BGP 下一跃点设置为自身,则可以通告互连的前缀。
如果接入点 (POP) 的路由器不支持 MPLS,则支持 MPLS 的一台路由器(例如,核心路由器)可以充当整个 POP 的代理,并且可以注入一组覆盖 POP 的前缀。因此,POP 中的所有路由器都可以将自己播发为内部 BGP (IBGP) 下一跃点,流量可以跟随 LSP 到达核心路由器。这意味着正常的 IGP 路由将在 POP 中占上风。
不能对 inet.3 或 inet6.3 路由表中的路由使用 ping
or traceroute
命令。
对于 BGP 下一跃点分辨率,路由是在 inet.0/inet6.0 还是 inet.3/inet6.3 中没有区别;选择匹配度最佳(最长掩码)的路径。在多个最佳匹配路由中,选择具有最高优先级值的路由。
静态 LSP 不支持该 install destination-prefix active
语句。为静态 LSP 配置语句 install destination-prefix active
时,MPLS 路由不会安装到 inet.0 路由表中。