路由器如何决定在分段路由中将哪些分段推送到数据包上?
在分段路由网络中,节点可以将一个或多个分段推送到数据包上,以创建精确的转发路径。如果数据包仅遵循最短路径,则 Junos OS 会自动确定正确的分段。如果路径涉及流量工程(流量工程),则可以手动配置分段或根据流量工程约束自动计算分段。您还可以使用集中式控制器来计算此信息。
必备知识
我们假设读者已阅读标题为 什么是网络中的分段路由和源数据包路由?、 分段路由支持哪些功能和设计?和什么是 分段路由网络中的源路由?的主题,以及这些主题的先决条件。
在分段路由网络中,Junos OS 通过自动计算和手册配置相结合,确定创建转发指令所需的 SR-MPLS 或 SRv6 分段。路径可以利用单个 MPLS 标签或 SRv6 地址,也可以利用分段堆栈。
本文档简要介绍了所有选项。然后在单独的文档中更详细地解释这些选项。本文档使用 SR-MPLS 示例,但您可以将相同的概念应用于 SRv6。
SPF 最短路径和 Flex 算法最短路径
如果您的唯一要求是流量遵循 IS-IS 或 OSPF 计量最短路径到达远程路由器,则 Junos OS 只需使用与该指令关联的分段。这会自动发生,并且对于常规拓扑和灵活算法 (Flex Algo) 拓扑都是如此。
对于默认完整拓扑,Junos OS 在其 inet.3 表(对于 SR-MPLS)或 inet6.3 表(对于 SRv6)中将有一个完整的 SR 隧道网格。
回想一下,inet.3 和 inet6.3 表存储在此设备上进入的所有操作标签交换路径 (LSP)。默认情况下,BGP 使用此表作为解析 BGP 协议下一跃点的潜在方法。这些表中的每个隧道都包含有关最短路径段的信息,必须将其推送到数据包上,以便将流量传输到隧道的目的位置。
如果您选择在网络中启用任何 Flex Algo 拓扑,则 Junos OS 还会为该拓扑中的所有设备创建单独的全 LSP 网格。根据您启用此功能的方式,每个拓扑都可以在每个 Junos OS 路由器上有一个自己的等效 inet.3 表,并使用全网状的最短路径隧道到拓扑中每个其他路由器。
要理解此概念,请参阅下面的 图 1 和 CLI 输出 1。首先, 图 1 显示了一个由 10 台路由器组成的网络,编号从 R1 到 R10。每个路由器都有一个格式为 192.168.1.x 的环路 IPv4 地址,其中 X 是路由器编号。
在所有设备上启用基本 SR-MPLS 部署后,下面的 CLI 输出 1 重点介绍路由器 R1 的 inet.3 路由表。它向网络中的所有其他设备显示 LSP 的全网状网络。如果您在网络中的每个节点上配置最短路径分段,则系统会自动在每个 SR-MPLS 设备上创建此全网状隧道。
输出 1: 在所有路由器上启用基本 SR-MPLS 部署后,R1 的 inet.3 表显示了到所有其他路由器的标签交换路径的全网状结构
user@R1> show route table inet.3
inet.3: 9 destinations, 9 routes (9 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
192.168.1.2/32 *[L-ISIS/14] 00:06:45, metric 100
> to 10.1.2.2 via ge-0/0/0.0
192.168.1.3/32 *[L-ISIS/14] 00:02:18, metric 200
> to 10.1.2.2 via ge-0/0/0.0, Push 300403
192.168.1.4/32 *[L-ISIS/14] 00:02:18, metric 300
> to 10.1.2.2 via ge-0/0/0.0, Push 300404
192.168.1.5/32 *[L-ISIS/14] 00:02:18, metric 400
> to 10.1.2.2 via ge-0/0/0.0, Push 300405
192.168.1.6/32 *[L-ISIS/14] 00:06:45, metric 100
> to 10.1.6.6 via ge-0/0/2.0
192.168.1.7/32 *[L-ISIS/14] 00:02:18, metric 200
to 10.1.2.2 via ge-0/0/0.0, Push 300407
> to 10.1.6.6 via ge-0/0/2.0, Push 300407
192.168.1.8/32 *[L-ISIS/14] 00:02:18, metric 300
> to 10.1.2.2 via ge-0/0/0.0, Push 300408
to 10.1.6.6 via ge-0/0/2.0, Push 300408
192.168.1.9/32 *[L-ISIS/14] 00:02:18, metric 400
> to 10.1.2.2 via ge-0/0/0.0, Push 300409
to 10.1.6.6 via ge-0/0/2.0, Push 300409
192.168.1.10/32 *[L-ISIS/14] 00:02:18, metric 500
> to 10.1.2.2 via ge-0/0/0.0, Push 300410
to 10.1.6.6 via ge-0/0/2.0, Push 300410
每个 LSP 都包含一个传出传输标签。标签表示按照最短路径到达该远程路由器的指令。SR-MPLS 会自动计算,无需在 R1 上进行额外配置。
例如,输出包含目标地址为 192.168.1.5 的到 R5 的入口 LSP。如果 R1 学习了协议下一跃点为 192.168.1.5 的 BGP 前缀,则 R1 会将前缀解析为此 LSP。因此,R1 会自动使用与该隧道关联的最短路径段。在这种情况下,R1 将推送一个 SR-MPLS 传输标签 300405。当您沿着最短路径向 R5 发送流量时,R2 收到的标签。
独立于拓扑的无环路备用备用路径和避免微环路
当您启用拓扑无关无环路备用 (TI-LFA) 或运行微环路避免时,会产生类似的自动结果。除了代表到远程设备的最短路径的分段外,分段路由还提供将流量直接从一台特定路由器转发到下一跳邻居的分段。通过组合最短路径分段和直接下一跳分段,您可以在网络中创建任意路径。此方法可防止在网络融合事件期间可能发生的临时环路。TI-LFA 使用这两种分段类型来计算和构建备用路径。
当 SPF 计算到目标链路或路由器的最佳路径时,TI-LFA 会重新运行 SPF 以确定防止本地链路或相邻路由器故障的备用路径。TI-LFA 计算出路径后,便会自动确定此路径上所需的分段堆栈。此堆栈的范围可以从单个最短路径段到一系列更复杂的逐跳指令。无论哪种方式,这都无需任何额外的用户干预即可实现。
图 2 显示了 R4 出现故障的六台路由器。
在 TI-LFA 网络中,R3 通过计算绕 R4 路由的备用路径来为此事件做好准备。然而,R3 还确定了 R8 和 R9 都是环路的潜在来源。为避免出现此问题,R3 会自动将第二个分段推送到指示网络将流量发送到 R10 的数据包上。然后,数据包可以从 R10 安全地传送到 R5。这些分段是自动计算和推送的,除了启用 TI-LFA 外,不需要额外的用户干预。避免微回路也是如此。如果拓扑发生变化,SPF 会计算出新的最佳路径。如果微环路避免策略检测到新路径上可能出现短暂的微环路,则 Junos OS 会自动将必要的分段推送到数据包上,以确保数据包到达目的地。
使用手动用户分段配置的流量工程
Junos OS 可提供多种方法来确定为流量工程路径写入数据包的分段。最简单但可扩展性最差的方法是,用户手动创建通向远程路由器的隧道,然后配置该路径所需的 MPLS 标签或 SRv6 地址。在这种情况下,路由器实际上不会检查分段是否有效和正确。有些细分市场根本没有做广告,也无法验证准确性。在这种情况下,Junos OS 只需按照您的指示操作,并将您指定的任何内容写入数据包。
图 3 显示了这方面的一个示例。使用与 10 台路由器相同的拓扑结构,它将向您介绍称为分段列表的 Junos OS 配置结构。通过定义命名分段列表,可以定义应写入数据包的精确分段。然后,您可以在创建 SR-流量工程标签交换路径时参考分段列表。
该示例使用 SR-MPLS,但 SRv6 的概念相同。
protocols {
source-packet-routing {
segment-list PATH_R1_R5_EXPLICIT_LABELS {
HOP_1 label 1004012;
HOP_2 label 1004023;
HOP_3 label 1004034;
HOP_4 label 1004045;
}
}
}
此方法易于配置,但与所有静态路径一样,无法对拓扑变化做出反应。如果分段表示的某个链路或节点发生故障,则整个路径都会失败。此选项的另一个缺点是它无法从本质上识别路径上的故障。但是,您可以启用名为无缝 BFD (S-BFD) 的新版本双向转发检测 (BFD),用于主动监控路径。这会在检测到故障时关闭路径,使您能够转移到另一个备用路径或辅助路径。
通过手动用户配置和 IP 查找进行流量工程
一种更具可扩展性的流量工程方法是配置流量工程路径必须采用的必要 IP 跃点。例如,路径可以组合路径中设备的环路 IP 地址和网络接口地址。然后,Junos OS 可以将这些地址转换为最短路径指令和直接下一跳指令,然后计算该分段所需的 MPLS 标签或 SRv6 地址。
图 4 演示了这个概念。
protocols {
source-packet-routing {
segment-list PATH_R1_R10_INTERFACE_IP {
auto-translate;
HOP_1 ip-address 10.1.6.6;
HOP_2 ip-address 10.6.7.7;
HOP_3 ip-address 10.7.8.8;
HOP_4 ip-address 10.8.9.9;
HOP_5 ip-address 10.9.10.10;
}
}
}
这与 图 3 中的示例类似,不同之处在于这次命名分段列表直接引用接口 IP 地址和环路 IP 地址。在 SR-流量工程 LSP 中使用此分段列表时,Junos OS 会自动将 IP 地址转换为所需的分段。请注意,此方法仍然需要您手动定义路径。因此,此路径无法响应此路径中任何设备的故障。不过,与在配置中显式定义分段值相比,将 IP 自动转换为分段确实会引入少量动态行为。
使用动态路径计算的流量工程
一种更具可扩展性的方法是根据一组流量工程约束动态计算路径。然后,Junos OS 将计算计算出的路径的正确分段。此选项使用 RSVP 使用的约束最短路径优先 (CSPF) 算法版本。该算法称为分布式 CSPF (D-CSPF)。该名称反映了该协议可以在网络中的任何路由器上运行的事实。这与使用集中式控制器的选项形成鲜明对比。
D-CSPF 提供了 RSVP 中的一些流量工程约束,例如管理员组和共享风险链路组。此外,它还包括特定于分段路由的约束,例如限制推送到数据包的最大分段数,或专门使用支持本地修复的链路。D-CSPF 还可以考虑替代的最短路径指标,例如流量工程指标或延迟指标。Junos OS 将一组约束收集到一个称为计算配置文件的对象中。然后,可以将这组约束一致地应用于任何需要这些约束的流量工程路径。
图 5 简要介绍了这个概念。
protocols {
source-packet-routing {
compute-profile ONLY_USE_HIGH_PRIORITY {
admin-group include HIGH_PRIORITY;
maximum-segment-list-depth 6;
metric-type {
te;
}
}
}
}
图 5 显示了网络中的每个链路都已使用两个管理组之一进行标记,分别称为 HIGH_PRIORITY 和 BEST_EFFORT。该图还显示了基本计算配置文件的配置,该配置文件计算的路径仅考虑使用管理员组HIGH_PRIORITY标记的链接。此示例还说明,您可以在一个计算配置文件对象中包含其他流量工程约束。定义计算配置文件后,可以通过两种方式使用此对象。第一个选项是使用手动定义的目标端点在隧道内引用它。在这种情况下,尽管端点是手动配置的,但其他所有内容都由 Junos OS 动态计算,包括路径和分段列表。如果拓扑发生变化,Junos OS 会自动计算新路径和新分段列表。第二个选项是引用计算配置文件作为按需下一跃点 (ODN) 部署的一部分。此功能不需要您手动定义每个隧道端点。相反,Junos OS 可动态构建指向任何有效 BGP 协议下一跃点的新隧道。
在这两种情况下,结果都是 Junos OS 决定应写入数据包的分段。
使用集中式控制器进行流量工程
您可以使用中央控制器来计算和创建段列表。控制器还为您提供前面提到的所有流量工程选项:创建具有显式分段或 IP 跃点的手册路径,以及基于流量工程约束的动态路径。此外,控制器还提供各种强大的功能,如拓扑可见性、图形路径可见性、带宽约束和路由域之间的流量工程。控制器确定隧道应采用的路径后,控制器将查找与该路径关联的分段,然后将此信息直接写入该路径的入口路由器的数据平面。这条路径可以轻松跨越域边界。入口路由器不需要识别路径中的每个分段。入口路由器只需要知道应写入数据包的 MPLS 标签或 IPv6 地址,以及流量的直接下一跃点。
进一步阅读
以上部分是分段路由流量工程的一些基本概念。请继续关注即将发布的修订中有关分段路由流量工程的详细文档更新。
如果您已阅读本系列中关于分段路由的所有四个主题,那么您现在就可以详细探索 SR-MPLS 和 SRv6了。