负载平衡 MPLS 流量
基于 MPLS 标签配置负载平衡
对于受支持平台上的 MPLS 流,基于每个数据包进行负载平衡。熵或随机分布对于将数据包均匀分布到下一跃点至关重要。默认情况下,当使用负载平衡来帮助分配流量时,Junos OS 会采用哈希算法来选择要安装到转表中的下一跃点地址。每当目标的下一跃点集发生变化时,都会通过哈希算法重新选择下一跃点地址。您可以配置如何使用哈希算法在一组等价标签交换路径 (LSP) 之间对流量进行负载均衡。
为了确保 VPLS 和 VPWS 流量的熵,Junos OS 可以根据来自 IP 报头的数据和多达三个 MPLS 标签(即所谓的顶级标签)创建哈希。
在某些情况下,随着使用标签的网络功能数量的增加(如 MPLS 快速重新路由以及 RFC 3107、RSVP 和 VPN),前三个标签中的数据可能会变为静态,因此不足以成为熵的来源。因此,负载平衡可能会变得倾斜,或者无序数据包传递的发生率可能会上升。对于这些情况,可以使用标签堆栈底部的标签(有关资格,请参见下面的表 1)。顶部标签和底部标签不能同时使用。
MPC 卡不支持常规哈希密钥配置。要使基于 MPC 的哈希密钥配置有效,您需要一个 enhanced-hash-key
配置。
当满足以下条件时,负载平衡用于均匀分配流量:
通过不同接口到同一目标有多个等价下一跃点。
聚合接口上只有一个下一跃点。
LSP 倾向于通过随机选择一个等价下一跃点并独占地使用它来平衡其放置位置。随机选择在每个传输路由器上独立进行,单独比较内部网关协议 (IGP) 指标。不考虑带宽或拥塞级别。
此功能适用于聚合以太网和聚合 SONET/SDH 接口以及多个等价 MPLS 下一跃点。此外,仅在 T 系列、MX 系列、M120 和 M320 路由器上,您可以为第 2 层以太网伪线上的 IPv4 流量配置负载平衡。您还可以根据 IP 信息为以太网伪线配置负载平衡。在哈希密钥中包含 IP 信息的选项为以太网电路交叉连接 (CCC) 连接提供支持。
要根据 MPLS 标签信息进行负载平衡,请配置以下 family mpls
语句:
[edit forwarding-options hash-key] family mpls { all-labels; bottom-label-1; bottom-label-2; bottom-label-3; label-1; label-2; label-3; no-labels; no-label-1-exp; payload { ether-pseudowire; ip { disable; layer-3-only; port-data { destination-lsb; destination-msb; source-lsb; source-msb; } } } }
您可以在以下层次结构级别包含此语句:
[edit forwarding-options hash-key]
表 1 提供了有关所有可能的 MPLS LSP 负载平衡选项的详细信息。
陈述 |
支持的平台 |
MPLS LSP 负载平衡选项 |
---|---|---|
|
MX 系列和 PTX 系列 |
在 Junos OS 19.1R1 版之前,哈希键中最多包含 8 个 MPLS 标签,用于识别数据包转发引擎中流的唯一性。在 PTX 系列路由器上,默认情况下会设置此值。 从 Junos OS 19.1R1 版开始,对于具有 MPC 和 MIC 接口的 MX 系列路由器,哈希键中最多包含 16 个传入 MPLS 标签。 |
|
带 DPC(I 芯片)的 MX 系列。在 M10i、M7i 和 M120 上不受支持。 |
使用最底部的标签来计算哈希键,例如,如果顶部标签没有为所需的熵水平提供足够的变量。 |
|
带 DPC(I 芯片)的 MX 系列。在 M10i、M7i 和 M120 上不受支持。 |
使用底部的第二个标签来计算哈希键,例如,如果顶部标签没有为所需的熵水平提供足够的变量。 |
|
带 DPC(I 芯片)的 MX 系列。在 M10i、M7i 和 M120 上不受支持。 |
使用底部的第三个标签来计算哈希键,例如,如果顶部标签没有为所需的熵水平提供足够的变量。 |
|
M 系列、MX 系列、T 系列 |
在哈希键中包含第一个标签。对单标签数据包使用此选项。 |
|
M 系列、MX 系列、T 系列 |
在哈希键中包含第二个标签。您还必须配置该 |
|
M 系列、MX 系列、T 系列 |
在哈希键中包含第三个标签。您还必须配置选项 |
|
到期日期介于 2020 年 2 月 6 日至 2020 年 6 月 30 日之间的全部 |
从哈希键中排除 MPLS 标签。 |
|
M 系列、MX 系列、T 系列 |
从哈希键中排除顶部标签的 EXP 位。您还必须配置该 对于第 2 层 VPN,路由器可能会遇到数据包重新排序问题。当突发流量推动客户流量带宽超过其限制时,流量可能会在中途受到影响。因此,数据包可能会重新排序。通过从哈希键中排除 EXP 位,可以避免此重新排序问题。 |
|
到期日期介于 2020 年 2 月 6 日至 2020 年 6 月 30 日之间的全部 |
允许您配置要包含在哈希密钥中的 IP 数据包有效负载的哪些部分。对于 PTX 系列数据包传输路由器,默认情况下会设置此值。 |
|
PTX 系列 |
从哈希密钥中排除 IP 有效负载。 |
|
M120、M320、MX 系列、T 系列 |
通过第 2 层以太网伪线对 IPv4 流量进行负载平衡。 |
|
到期日期介于 2020 年 2 月 6 日至 2020 年 6 月 30 日之间的全部 |
在哈希键中包含 IPv4 或 IPv6 地址。还必须配置 |
|
到期日期介于 2020 年 2 月 6 日至 2020 年 6 月 30 日之间的全部 |
在哈希键中仅包含第 3 层 IP 信息。从哈希键中排除所有 |
|
M 系列、MX 系列、T 系列 |
包括源端口和目标端口字段信息。默认情况下,哈希键中使用源端口和目标端口字段的最高有效字节和最低有效字节。若要选择要在哈希键中使用的特定字节,请在层次结构级别包含 |
|
M 系列、MX 系列、T 系列 |
在哈希键中包含目标端口的最低有效字节。可以与任何其他 |
|
M 系列、MX 系列、T 系列 |
在哈希键中包含目标端口的最高有效字节。可以与任何其他 |
|
M 系列、MX 系列、T 系列 |
在哈希键中包含源端口的最低有效字节。可以与任何其他 |
|
M 系列、MX 系列、T 系列 |
在哈希键中包含源端口的最高有效字节。可以与任何其他 |
以下示例说明了配置 MPLS LSP 负载平衡的方法:
要在哈希键中包含 IP 地址和第一个标签,请执行以下操作:
对于 M 系列、MX 系列和 T 系列路由器,请在层次结构级别配置
label-1
[edit forwarding-options hash-key family mpls]
语句和ip
语句选项payload
:[edit forwarding-options hash-key family mpls] label-1; payload { ip; }
对于 PTX 系列数据包传输路由器,默认情况下会配置和
all-labels
ip payload
选项,因此无需进行任何配置。
(仅限 M320 和 T 系列路由器)要在哈希键中包含 IP 地址以及第一个和第二个标签,请在层次结构级别配置
label-1
[edit forwarding-options hash-key family mpls]
语句的payload
andlabel-2
选项和ip
选项:[edit forwarding-options hash-key family mpls] label-1; label-2; payload { ip; }
注:您只能在 M320 和 T 系列路由器上包含此语句组合。如果将它们包含在 M 系列多服务边缘路由器上,则哈希密钥中仅使用第一个 MPLS 标签和 IP 有效负载。
对于 T 系列路由器,通过在层次结构级别包含
label-1
、label-2
和label-3
选项[edit forwarding-options hash-key family mpls]
来确保适当的负载平衡:[edit forwarding-options hash-key family mpls] label-1; label-2; label-3;
(仅限 M 系列、MX 系列和 T 系列路由器)对于第 2 层 VPN,路由器可能会遇到数据包重新排序问题。当突发流量推动客户流量带宽超过其限制时,流量可能会在中途受到影响。因此,数据包可能会重新排序。通过从哈希键中排除 EXP 位,可以避免此重新排序问题。要从哈希计算中排除第一个标签的 EXP 位,请在层次结构级别包含
no-label-1-exp
以下语句[edit forwarding-options hash-key family mpls]
:[edit forwarding-options hash-key family mpls] label-1; no-label-1-exp; payload { ip; }
示例:负载平衡的 MPLS 网络
将多个 RSVP LSP 配置到同一出口路由器时,系统会选择指标最低的 LSP,并传输所有流量。如果所有 LSP 具有相同的指标,则会随机选择其中一个 LSP,并通过该 LSP 转发所有流量。要在所有 LSP 之间平均分配流量,您可以根据配置的负载平衡类型在入口或中继路由器上配置负载平衡。
图 1 说明了将四个 LSP 配置到同一出口路由器的 MPLS 网络 (R0)。在入口路由器 R1上配置负载平衡。示例网络使用开放最短路径优先 (OSPF) 作为具有 OSPF 区域 0.0.0.0的内部网关协议 (IGP)。受限最短路径优先 (CSPF) LSP 需要 IGP,这是 Junos OS 的默认设置。此外,示例网络使用策略来创建 BGP 流量。
中显示的 图 1 网络由以下组件组成:
采用 AS 65432 的全网状内部 BGP (IBGP) 拓扑
在所有路由器上启用 MPLS 和 RSVP
路由器 R1 上的发送静态策略, R0 允许在网络中播发新路由
和 R0之间有 4 个单向 LSP,和 R1之间R1R0有一个反向 LSP,允许双向流量
在入口路由器上配置的负载平衡 R1
中显示的 图 1 网络是 BGP 全网状网络。由于路由反射器和联合不用于传播 BGP 获知的路由,因此每个路由器都必须与运行 BGP 的其他路由器进行 BGP 会话。
负载平衡 MPLS 网络的路由器配置
目的
本主题中的配置适用于 负载平衡网络拓扑中所示的示例网络中的六个负载平衡路由器。
操作
要显示路由器的配置,请使用以下 Junos OS CLI 操作模式命令:
user@host> show configuration | no-more
示例输出 1
以下配置输出适用于边缘路由器 R6。
user@R6> show configuration | no-more [...Output truncated...] interfaces { fe-0/1/2 { unit 0 { family inet { address 10.0.16.14/30; } family mpls; #MPLS enabled on relevant interfaces } } fe-1/3/0 { unit 0 { family inet { address 10.10.12.1/24; } } } fxp0 { unit 0 { family inet { address 192.168.70.148/21; } } } lo0 { unit 0 { family inet { address 192.168.6.1/32; } } } } routing-options { static { [...Output truncated...] router-id 192.168.6.1; #Manually configured RID autonomous-system 65432; #Full mesh IBGP } } protocols { rsvp { interface fe-0/1/2.0; interface fxp0.0 { disable; } } mpls { interface fe-0/1/2.0; interface fxp0.0 { disable; } } bgp { group internal { type internal; local-address 192.168.6.1; neighbor 192.168.1.1; neighbor 192.168.2.1; neighbor 192.168.4.1; neighbor 192.168.9.1; neighbor 192.168.0.1; } } ospf { #IGP enabled traffic-engineering; area 0.0.0.0 { interface fe-0/1/2.0; interface fe-1/3/0.0; interface lo0.0 { passive; #Ensures protocols do not run over this interface } } } }
示例输出 2
以下配置输出适用于入口路由器 R1。
user@R1> show configuration | no-more [...Output truncated...] interfaces { fe-0/1/0 { unit 0 { family inet { address 10.0.12.13/30; } family mpls; #MPLS enabled on relevant interfaces } } fe-0/1/2 { unit 0 { family inet { address 10.0.16.13/30; } family mpls; } } fxp0 { unit 0 { family inet { address 192.168.70.143/21; } } } lo0 { unit 0 { family inet { address 192.168.1.1/32; } } } } routing-options { static { [...Output truncated...] route 100.100.1.0/24 reject; #Static route for send-statics policy } router-id 192.168.1.1; #Manually configured RID autonomous-system 65432; #Full mesh IBGP forwarding-table { export lbpp; #Routes exported to forwarding table } } protocols { rsvp { interface fe-0/1/0.0; interface fe-0/1/2.0; interface fxp0.0 { disable; } } mpls { label-switched-path lsp 1 { #First LSP to 192.168.0.1; # Destination of the LSP install 10.0.90.14/32 active; # The prefix is installed in the primary via-r4; # inet.0 routing table } label-switched-path lsp2 { to 192.168.0.1; install 10.0.90.14/32 active; primary via-r2; } label-switched-path lsp3 { to 192.168.0.1; install 10.0.90.14/32 active; primary via-r2; } label-switched-path lsp4 { to 192.168.0.1; install 10.0.90.14/32 active; primary via-r4; } path via-r2 { #Primary path to spread traffic across interfaces 10.0.29.2 loose; } path via-r4 { 10.0.24.2 loose; } interface fe-0/1/0.0; interface fe-0/1/2.0; interface fxp0.0 { disable; } } bgp { export send-statics; #Allows advertising of a new route group internal { type internal; local-address 192.168.1.1; neighbor 192.168.2.1; neighbor 192.168.4.1; neighbor 192.168.9.1; neighbor 192.168.6.1; neighbor 192.168.0.1; } } ospf { #IGP enabled traffic-engineering; area 0.0.0.0 { interface fe-0/1/0.0; interface fe-0/1/2.0; interface lo0.0 { passive; #Ensures protocols do not run over this interface } } } } policy-options { #Load balancing policy policy-statement lbpp { then { load-balance per-packet; } } policy-statement send-statics { #Static route policy term statics { from { route-filter 100.100.1.0/24 exact; } then accept; } } }
示例输出 3
以下配置输出适用于 中转路由器 R2。
user@R2> show configuration | no-more [...Output truncated...] interfaces { so-0/0/1 { unit 0 { family inet { address 10.0.24.1/30; } family mpls; #MPLS enabled on relevant interfaces } } so-0/0/2 { unit 0 { family inet { address 10.0.29.1/30; } family mpls; } } fe-0/1/0 { unit 0 { family inet { address 10.0.12.14/30; } family mpls; } } fxp0 { unit 0 { family inet { address 192.168.70.144/21; } } } lo0 { unit 0 { family inet { address 192.168.2.1/32; } } } } routing-options { static { [...Output truncated...] router-id 192.168.2.1; #Manually configured RID autonomous-system 65432; #Full mesh IBGP } } protocols { rsvp { interface so-0/0/1.0; interface fe-0/1/0.0; interface so-0/0/2.0; interface fxp0.0 { disable; } } mpls { interface fe-0/1/0.0; interface so-0/0/1.0; interface so-0/0/2.0; interface fxp0.0 { disable; } } bgp { group internal { type internal; local-address 192.168.2.1; neighbor 192.168.1.1; neighbor 192.168.4.1; neighbor 192.168.9.1; neighbor 192.168.6.1; neighbor 192.168.0.1; } } ospf { #IGP enabled traffic-engineering; area 0.0.0.0 { interface fe-0/1/0.0; interface so-0/0/1.0; interface so-0/0/2.0; interface lo0.0 { passive; #Ensures protocols do not run over this interface } } } }
示例输出 4
以下配置输出适用于 中转路由器 R4。
user@R4> show configuration | no-more [...Output truncated...] interfaces { so-0/0/1 { unit 0 { family inet { address 10.0.24.2/30; } family mpls; # MPLS enabled on relevant interfaces } } so-0/0/3 { unit 0 { family inet { address 10.0.49.1/30; } family mpls; } } fxp0 { unit 0 { family inet { address 192.168.70.146/21; } } } lo0 { unit 0 { family inet { address 192.168.4.1/32; } } } } routing-options { static { [...Output truncated...] router-id 192.168.4.1; #Manually configured RID autonomous-system 65432; #Full mesh IBGP } protocols { rsvp { interface so-0/0/1.0; interface so-0/0/3.0; interface fxp0.0 { disable; } } mpls { interface so-0/0/1.0; interface so-0/0/3.0; interface fxp0.0 { disable; } } bgp { group internal { type internal; local-address 192.168.4.1; neighbor 192.168.1.1; neighbor 192.168.2.1; neighbor 192.168.9.1; neighbor 192.168.6.1; neighbor 192.168.0.1; } } ospf { #IGP enabled traffic-engineering; area 0.0.0.0 { interface so-0/0/1.0; interface so-0/0/3.0; interface lo0.0 { passive; #Ensures protocols do not run over this interface } } } }
示例输出 5
以下配置输出适用于 中转路由器 R9。
user@R9> show configuration | no-more [...Output truncated...] interfaces { so-0/0/2 { unit 0 { family inet { address 10.0.29.2/30; } family mpls; #MPLS enabled on relevant interfaces } } so-0/0/3 { unit 0 { family inet { address 10.0.49.2/30; } family mpls; } } fe-0/1/0 { unit 0 { family inet { address 10.0.90.13/30; } family mpls; } } fxp0 { unit 0 { family inet { address 192.168.69.206/21; } } } lo0 { unit 0 { family inet { address 192.168.9.1/32; } } } } routing-options { static { [...Output truncated...] router-id 192.168.9. 1; #Manually configured RID autonomous-system 65432; #Full mesh IBGP } protocols { rsvp { interface so-0/0/2.0; interface so-0/0/3.0; interface fe-0/1/0.0; interface fxp0.0 { disable; } } mpls { interface so-0/0/2.0; interface so-0/0/3.0; interface fe-0/1/0.0; interface fxp0.0 { disable; } } bgp { group internal { type internal; local-address 192.168.9.1; neighbor 192.168.1.1; neighbor 192.168.2.1; neighbor 192.168.4.1; neighbor 192.168.0.1; neighbor 192.168.6.1; } } ospf { #IGP enabled traffic-engineering; area 0.0.0.0 { interface so-0/0/2.0; interface so-0/0/3.0; interface fe-0/1/0.0; interface lo0.0 { passive; #Ensures protocols do not run over this interface } } } }
示例输出 6
以下配置输出适用于出口路由器 R0。
user@R0> show configuration | no-more [...Output truncated...] interfaces { fe-0/1/0 { unit 0 { family inet { address 10.0.90.14/30; } family mpls; #MPLS enabled on relevant interfaces } } fe-1/3/0 { unit 0 { family inet { address 10.10.11.1/24; } } fxp0 { unit 0 { family inet { address 192.168.69.207/21; } } } lo0 { unit 0 { family inet { address 192.168.0.1/32; } } } } routing-options { static { [...Output truncated...] route 100.100.10.0/24 reject; #Static route for send-statics policy } router-id 192.168.0.1; #Manually configured RID autonomous-system 65432; #Full mesh IBGP } protocols { rsvp { interface fe-0/1/0.0; interface fe-1/3/0.0; interface fxp0.0 { disable; } } mpls { label-switched-path r0-r6 { to 192.168.6.1; } interface fe-0/1/0.0; interface fe-1/3/0.0; interface fxp0.0 { disable; } } bgp { group internal { type internal; local-address 192.168.0.1; export send-statics; #Allows advertising of a new route neighbor 192.168.9.1; neighbor 192.168.6.1; neighbor 192.168.1.1; neighbor 192.168.2.1; neighbor 192.168.4.1; } } ospf { #IGP enabled traffic-engineering; area 0.0.0.0 { interface fe-0/1/0.0; interface fe-1/3/0.0; interface lo0.0 { passive; #Ensures protocols do not run over this interface } } } } policy-options { policy-statement send-statics { term statics { from { route-filter 100.100.10.0/24 exact; } then accept; } } }
意义
示例输出 1 到 6 显示了示例网络中所有六个路由器的基本接口、路由选项、协议和策略选项配置,如示例所示 :负载平衡的 MPLS 网络。
网络中的所有路由器都启用了 MPLS、RSVP 和 BGP。OSPF 配置为 IGP,相关接口具有基本 IP 信息和 MPLS 支持。
此外,所有路由器都在层次结构级别手动 [edit routing-options]
配置路由器 ID (RID),以避免出现重复的 RID 问题。该 passive
语句包含在 OSPF 配置中,以确保协议不会通过环路 (lo0) 接口运行,并且环路 (lo0) 接口在整个网络中正确播发。
示例输出 1、3、4 和 5 R6用于 、 R2、 R4并 R9 显示传输标签交换路由器的基本配置。基本配置包括为 MPLS 启用的所有接口、手动配置的 RID 以及相关协议(RSVP、MPLS、BGP 和 OSPF)。
入口路由器 R1 的示例输出 2 显示了基本配置以及 4 个 LSP(lsp1 通过 lsp4) 配置为 R0. 这四个 LSP 配置了不同的主路径,用于指定松散跳通 for 和 、 以及 R2 到 和 lsp3lsp2 。lsp4lsp1R4
要创建流量, R1 具有静态路由(100.100.1.0/24) 在 [edit routing-options static route]
层次结构级别配置。前缀包含在层次结构级别的发送静态策略 [edit policy-options send statics]
中,因此路由可以成为 BGP 路由。
此外,在 入口路由器 R1上,使用选项配置 per-packet 负载平衡,并在层次结构级别导出 [edit routing-options forwarding-table]
策略。
出口路由器R0的示例输出 6 显示了一个用于R6创建双向流量的 LSP (r0-r6)。OSPF 需要双向 LSP 可访问性,然后才能将 LSP 播发到 IGP。尽管 LSP 已播发到 IGP 中,但不会通过 LSP 发生你好消息或路由更新,只会通过 LSP 发送用户流量。路由器使用 IGP 数据库的本地副本来验证双向可访问性。
此外, R0 还具有静态路由(100.100.10.0/24) 在 [edit routing-options static route]
层次结构级别配置。前缀包含在层次结构级别的发送静态策略 [edit policy-options send statics]
中,因此路由可以成为 BGP 路由。
基于 ACX 系列路由器上的 MPLS 标签配置负载平衡
表 2 提供了有关所有可能的 MPLS LSP 负载平衡选项的详细信息。
ACX 系列路由器可以在 MPLS 中按数据包进行负载平衡。可以对 IP 报头和最多三个 MPLS 标签上的信息执行负载平衡,从而更均匀地将 MPLS 流量分配到下一跃点。默认情况下,此功能在支持的平台上处于启用状态,不需要配置。
当聚合接口或 LAG 捆绑包上有单个下一跃点时,负载均衡用于均匀分配流量。仅 LAG 接口支持使用 MPLS 标签进行负载平衡,等价多路径 (ECMP) 链路不支持。
默认情况下,当使用负载平衡来帮助分配流量时,Junos OS 会采用哈希算法来选择要安装到转表中的下一跃点地址。每当目标的下一跃点集发生任何更改时,都会通过哈希算法重新选择下一跃点地址。您可以配置如何使用散列算法对聚合以太网 (ae) 接口中接口之间的流量进行负载均衡。
LSP 倾向于通过随机选择接口捆绑包中的一个 ae-
接口并以独占方式使用它来平衡其位置的负载。随机选择在每个传输路由器上独立进行,单独比较内部网关协议 (IGP) 指标。不考虑带宽或拥塞级别。
在 ACX 系列路由器上,不支持虚拟专用 LAN 服务 (VPLS)、L2 电路和第 2 层虚拟专用网络 (L2VPN) 的标记交换路径 (LSP) 上的负载平衡。
要根据 MPLS 标签信息进行负载平衡,请配置以下 family mpls
语句:
[edit forwarding-options hash-key] family mpls { all-labels; label-1; label-2; label-3; no-labels; payload { ether-pseudowire; ip { layer-3-only; port-data { destination-lsb; destination-msb; source-lsb; source-msb; } } } }
您可以在层次结构级别包含 [edit forwarding-options hash-key]
此语句。
配置有效负载 ip ()user@host#
set forwarding-options hash-key family mpls payload ip 时,必须配置 layer-3-only
和 port-data
。
如果没有适当的哈希键配置,负载平衡功能可能会导致不可预测的行为。
对于第 2 层 VPN/伪线隧道终止,最多可使用两个标签进行哈希处理,并且可以选择有效负载 MAC 目标和源地址。这些控件可用于在上述哈希键配置下支持家族 MPLS 中的以太伪线旋钮。但是,由于 ACX2000 和 ACX4000 也支持 TDM 伪线,因此只有在不使用 TDM 伪线时才需要使用以太网-伪线旋钮。
对于第 3 层 VPN 隧道终止,最多使用两个标签来表示有效负载 IP 源和目标地址,并且可以选择第 4 层源端口和目标端口。这些控件可用于在上述哈希键配置下支持系列 MPLS 中的 IP 端口数据旋钮。但是,由于无法单独选择第 4 层端口 MSB 和 LSB,因此将分别选择其中一个目标 lsb 或目标 msb 旋钮或源 lsb 或源 msb 旋钮中的一个。
对于 LSR 案例,最多使用三个标签进行哈希处理。如果在解析前三个标签时看到 BOS,BCM 将检查有效负载的第一个半字节 - 如果半字节为 4,则有效负载被视为 IPv4,如果第一个半字节为 6,则有效负载被视为 IPv6,在这种情况下,有效负载源和目标 IP 地址可以推测用于哈希。这些控件可用于在哈希密钥配置下支持家族 MPLS 中的 IP 端口数据旋钮。但是,在 LSR 情况下,第 4 层端口不能用于散列,并且仅第 3 层旋钮适用。BCM 不声明支持对三个 MPLS 标签之外的字段进行哈希处理。对于 LSR,不会对单个伪线会话进行负载平衡,因为特定于该会话的所有流量都将带有相同的一组 MPLS 标签。
对于更多数量的 MPLS 会话,即至少 10 个会话,LSR AE 接口上可以实现负载平衡。这适用于 CCC/VPLS/L3VPN。在使用第 3 层 VPN 的情况量可能不会在成员链路上平均分配,因为第 3 层地址(以及标签)也会被考虑在哈希输入函数中。
对于 LER 场景,在ACX5048和ACX5096的情况下,可以通过在“系列 mpls”层次结构下配置有效负载选项来基于第 3 层和第 4 层字段进行哈希处理。LER 上的哈希不是基于标签。对于第 3 层服务,必须将有效负载提及为“仅限第 3 层”,如果是第 4 层服务,则必须指定“端口数据”。您还可以在 LER 路由器上配置哈希密钥时提及标签计数。
LER 和 LSR 负载平衡行为适用于 CCC/VPLS/第 3 层 VPN 和其他 IP MPLS 场景。
此功能适用于聚合以太网和聚合 SONET/SDH 接口。此外,您还可以为第 2 层以太网伪线上的 IPv4 流量配置负载平衡。您还可以根据 IP 信息为以太网伪线配置负载平衡。在哈希密钥中包含 IP 信息的选项为以太网电路交叉连接 (CCC) 连接提供支持。
陈述 |
MPLS LSP 负载平衡选项 |
---|---|
|
在哈希键中包含第一个标签。对单标签数据包使用此选项。 |
|
在哈希键中包含第二个标签。您还必须配置该 |
|
在哈希键中包含第三个标签。您还必须配置选项 |
|
从哈希键中排除 MPLS 标签。 |
|
允许您配置要包含在哈希密钥中的 IP 数据包有效负载的哪些部分。对于 PTX 系列数据包传输交换机,默认情况下会设置此值。 |
|
从哈希密钥中排除 IP 有效负载。 |
|
通过第 2 层以太网伪线对 IPv4 流量进行负载平衡。 |
|
在哈希键中包含 IPv4 或 IPv6 地址。还必须配置 |
|
在哈希键中仅包含第 3 层 IP 信息。从哈希键中排除所有 |
|
包括源端口和目标端口字段信息。默认情况下,哈希键中使用源端口和目标端口字段的最高有效字节和最低有效字节。若要选择要在哈希键中使用的特定字节,请在层次结构级别包含 |
|
在哈希键中包含目标端口的最低有效字节。可以与任何其他 |
|
在哈希键中包含目标端口的最高有效字节。可以与任何其他 |
|
在哈希键中包含源端口的最低有效字节。可以与任何其他 |
|
在哈希键中包含源端口的最高有效字节。可以与任何其他 |
要在哈希键中包含 IP 地址和第一个标签,请在层次结构级别配置label-1
[edit forwarding-options hash-key family mpls]
语句和ip
语句选项payload
:
[edit forwarding-options hash-key family mpls] label-1; payload { ip; }
要在哈希键中包含 IP 地址以及第一个和第二个标签,请在层次结构级别配置label-1
[edit forwarding-options hash-key family mpls]
语句的 payload
and label-2
选项和ip
选项:
[edit forwarding-options hash-key family mpls] label-1; label-2; payload { ip; }
通过在层次结构级别包含 label-1
、 label-2
和label-3
[edit forwarding-options hash-key family mpls]
选项来确保适当的负载平衡:
[edit forwarding-options hash-key family mpls] label-1; label-2; label-3;
MPLS 封装的有效负载负载平衡概述
路由器可以在 MPLS 中基于每个数据包进行负载平衡。可以对 IP 报头和最多三个 MPLS 标签中的信息执行负载平衡,从而将 MPLS 流量更均匀地分配到下一跃点。
当满足以下条件时,负载平衡用于均匀分配流量:
通过不同接口到同一目标有多个等价下一跃点。
聚合接口上只有一个下一跃点。
默认情况下,当使用负载平衡来帮助分配流量时,将使用哈希算法来选择要安装到转发表中的下一跃点地址。每当目标的下一跃点集发生任何更改时,都会通过哈希算法重新选择下一跃点地址。
对于多个传输层网络(例如通过 MPLS 的以太网或以太网伪线),哈希算法需要超越有效负载的外部标头,进入内部标头以生成均匀分布。为了确定内部封装,PFE 依赖于固定有效载荷处是否存在某些代码或编号;例如,存在有效负载类型 0X800 或 IPv4 数据包的协议编号 4。在 Junos OS 中,您可以配置 zero-control-word
选项以指示 MPLS 以太网伪线有效负载中以太网帧的开始时间。在看到此控制字(即四个字节,数值全为零)时,哈希生成器假定以太网帧的开头位于 MPLS 以太网伪线数据包中控制字的末尾。
对于基于 DPC I 芯片的卡,请在层次结构级别配置 zero-control-word
选项 [edit forwarding-options hash-key family mpls ether-pseudowire]
;对于 MPC 卡,请在层次结构级别配置 zero-control-word
选项 [edit forwarding-options enhanced-hash-key family mpls ether-pseudowire]
。
配置 MPLS 封装的有效负载以实现负载平衡
默认情况下,当使用负载平衡来帮助分配流量时,将使用哈希算法来选择要安装到转发表中的下一跃点地址。每当目标的下一跃点集发生任何更改时,都会通过哈希算法重新选择下一跃点地址。配置选项 zero-control-word
以指示 MPLS 以太网伪线有效负载中以太网帧的开始。在看到此控制字(四个字节的数值全为零)时,哈希生成器假定以太网帧的开头位于 MPLS 以太网-伪线数据包中控制字的末尾。
在开始配置 MPLS 封装的有效负载以实现负载平衡之前,请配置路由和信令协议。
要配置 MPLS 封装的有效负载以实现负载平衡,请执行以下操作:
zero-control-word
以指示 MPLS 以太网伪线有效负载中以太网帧的开始。 对于基于 DPC I 芯片的卡,请在层次结构级别配置选项
zero-control-word
[edit forwarding-options hash-key family mpls ether-pseudowire]
。[edit forwarding-options hash-key family mpls ether-pseudowire] user@host# set zero-control-word
对于 MPC 卡,请在
[edit forwarding-options enhanced-hash-key family mpls ether-pseudowire]
层次结构级别配置选项zero-control-word
。[edit forwarding-options enhanced-hash-key family mpls ether-pseudowire] user@host# set zero-control-word
基于策略的多路径路由概述
分段路由网络的核心中可以有多个传输协议。您可以将分段路由 SR-TE LDP 或 RSVP 路由与 SR-TE IP 路由组合在一起,并在路由信息库(也称为路由表)中安装多路径路由。然后,您可以通过策略配置使用多路径路由引导选择性服务流量。
- 了解基于策略的多路径路由
- 基于策略的多路径路由的优势
- 用于路由解析的基于策略的多路径路由
- 使用基于策略的多路径路由的示例路由解析
- 服务等级 (CoS) 转发策略的增强
- 策略匹配协议的增强功能
- 配置基于策略的多路径路由对网络性能的影响
了解基于策略的多路径路由
网络中有不同的传输协议,例如 IGP(标记为 IGP、RSVP、LDP 和分段路由流量工程 (SR-TE) 协议),用于解析服务流量。但是,不能结合使用传输协议来解析服务流量。引入基于策略的多路径功能后,您可以将分段路由流量工程 (SR-TE) LDP 或 RSVP 路由与 SR-TE IP 路由组合在一起,以创建安装在路由信息库中的多路径路由。您可以通过策略配置解析通过多路径路由的 BGP 服务路由,并针对不同的前缀以不同的方式引导流量。
多路径路由组合了用于负载平衡的路由条目的下一跃点。多路径路由条目的所有支持路由必须位于同一路由信息库中。当支持路由位于不同的路由信息库下时,可以使用配置语句将 rib-group
路由条目添加到特定路由信息库。
您可以使用策略配置多路径路由,以选择其下一跃点要组合在一起的路由列表。在层次结构级别将[edit routing-options rib routing-table-name]
语句与policy
语句一起包含policy-multipath
时,将创建基于策略的多路径路由。
IP 和 IPv6 协议都支持基于策略的多路径功能,并且可以在 [edit routing-instances]
层次结构级别下进行配置。
例如:
[edit routing-options] user@host# set rib inet.3 policy-multipath policy example-policy [edit policy-options] user@host# set policy-statement example-policy from example-conditions user@host# set policy-options policy-statement example-policy then accept
配置的策略将应用于给定前缀的每个路由条目。仅当多个路由(包括活动路由)通过策略时,才会创建多路径路由。策略中配置的任何操作命令(例如 apply)都将使用活动路由进行评估。对于非活动路由,将应用策略来检查路由是否可以参与多路径路由。多路径路由继承活动路由的所有属性。可以使用多路径策略配置修改这些属性。
基于策略的多路径路由的优势
-
提供组合核心网络协议的灵活性,以引导选择性流量。
-
通过使用多路径路由的加权等价多路径优化网络性能。
用于路由解析的基于策略的多路径路由
您可以将分段路由流量工程 (SR-TE) LDP 或 RSVP 路由与 SR-TE IP 路由组合在一起,并在路由信息库中安装多路径路由。基于策略的多路径路由不是路由信息库中的活动条目。通过策略配置生成多路径路由时,它用于解析协议下一跃点,而不是活动路由。多路径路由下一跃点是通过合并每个组成路由的下一跃点的网关来创建的。
为路由解析配置基于策略的多路径路由时,请考虑以下事项:
-
如果多路径路由的成员路由指向路由器下一跃点以外的下一跃点或将下一跃点转发到路由器下一跃点的间接下一跃点,则忽略此类下一跃点。
-
如果组成路由指向间接下一跃点,则会合并来自转发下一跃点的网关,并忽略间接下一跃点。
-
如果网关总数超过
maximum-ecmp
设备上支持的网关总数,则仅maximum-ecmp
保留网关,忽略所有其他网关。 -
权重较低的网关优先。当其中一个成员路由具有间接下一跃点的单列表,并且每个下一跃点都指向转发下一跃点时,间接下一跃点和转发下一跃点都可以有权重值。在这种情况下,网关的权重值将更新,以反映权重在两个级别的综合效应。
使用基于策略的多路径路由的示例路由解析
举例来说,假设目标 1 0.1.1.1/32 存在分段路由流量工程 LSP、标签 IS-IS 路由和 LDP LSP,如下面的输出所示:
10.1.1.1/32 *[SPRING-TE/8] 00:00:58, metric 1, metric2 30 > to 10.13.1.2 via ge-0/0/1.1, Push 33333, Push 801005, Push 801006(top) [L-ISIS/14] 1w0d 00:15:57, metric 10 > to 10.12.1.1 via ge-0/0/0.1 to 10.22.1.1 via ge-0/0/0.2 to 10.23.1.1 via ge-0/0/0.3 to 10.24.1.1 via ge-0/0/0.4 to 10.25.1.1 via ge-0/0/0.5 to 10.13.1.2 via ge-0/0/1.1, Push 801001, Push 801005(top) [LDP/19] 1w0d 00:09:27, metric 1 > to 10.12.1.1 via ge-0/0/0.1 to 10.22.1.1 via ge-0/0/0.2 to 10.23.1.1 via ge-0/0/0.3 to 10.24.1.1 via ge-0/0/0.4 to 10.25.1.1 via ge-0/0/0.5 to 10.13.1.2 via ge-0/0/1.1, Push 801001, Push 801005(top)
此处,分段路由 LSP 是指向 10.1.1.1 目标的活动路由条目,默认情况下,只有此路由用于解析超过 10.1.1.1 的任何服务。
当需要使用多个协议来解析服务路由时,可以通过配置 策略多路径 来组合这些协议来实现此目的。例如,如果服务解析需要分段路由和 LDP 路径,policy-multipath
则必须为前缀 10.1.1.1 配置隔离路由和 LDP 路由的组合。
例如:
[edit policy-options] user@host# set rib inet.3 policy-multipath policy example-policy user@host# set policy-statement abc term 1 from protocol spring-te user@host# set policy-statement abc term 1 from protocol ldp user@host# set policy-statement abc term 1 from route-filter 10.1.1.1/32 exact user@host# set policy-statement abc term 1 then accept
使用此配置,您可以为前缀 10.1.1.1/32 创建基于策略的多路径路由,该路由使用分段路由和 LDP 协议的组成路由条目。
您可以使用命令输出查看 show route
多路径路由,如下所示:
10.1.1.1/32 *[SPRING-TE/8] 00:10:28, metric 1, metric2 30 > to 10.13.1.2 via ge-0/0/1.1, Push 33333, Push 801005, Push 801006(top) [L-ISIS/14] 1w0d 00:25:27, metric 10 > to 10.12.1.1 via ge-0/0/0.1 to 10.22.1.1 via ge-0/0/0.2 to 10.23.1.1 via ge-0/0/0.3 to 10.24.1.1 via ge-0/0/0.4 to 10.25.1.1 via ge-0/0/0.5 to 10.13.1.2 via ge-0/0/1.1, Push 801001, Push 801005(top) [LDP/19] 1w0d 00:18:57, metric 1 > to 10.12.1.1 via ge-0/0/0.1 to 10.22.1.1 via ge-0/0/0.2 to 10.23.1.1 via ge-0/0/0.3 to 10.24.1.1 via ge-0/0/0.4 to 10.25.1.1 via ge-0/0/0.5 to 10.13.1.2 via ge-0/0/1.1, Push 801001, Push 801005(top) [Multipath/8] 00:03:13, metric 1, metric2 30 > to 10.12.1.1 via ge-0/0/0.1 to 10.22.1.1 via ge-0/0/0.2 to 10.23.1.1 via ge-0/0/0.3 to 10.24.1.1 via ge-0/0/0.4 to 10.25.1.1 via ge-0/0/0.5 to 10.13.1.2 via ge-0/0/1.1, Push 33333, Push 801005, Push 801006(top) to 10.13.1.2 via ge-0/0/1.1, Push 801001, Push 801005(top)
您可以从命令输出中看到,多路径路由结合了分段路由和 LDP 路径的下一跃点。多路径路由它不处于活动状态,默认情况下,路由首选项和指标与活动路由相同。
对于基于 poilcy 的多路径路由,可以使用以下组合:但是,我们无法创建 LDP/L-ISIS 的多路径,因为活动路由不是多路径的一部分。
-
分段路由流量工程 LSP 和 LDP LSP。
-
分段路由流量工程 LSP 和标签 IS-IS 路径。
-
分段路由流量工程 LSP、LDP LSP 和标签 IS-IS 路径。
但是,您无法创建 LDP 的多路径路由并标注 IS-IS,因为活动路由不是多路径路由的一部分。
在相同配置下,假设有一个静态路由 1.2.3.4/32 配置了协议下一跃点 10.1.1.1,则使用分段路由流量工程 LSP 和 LDP LSP 上的多路径路由解析此路由。
例如:
10.1.3.4/32 *[Static/5] 00:00:12, metric2 1 to 10.12.1.1 via ge-0/0/0.1 > to 10.22.1.1 via ge-0/0/0.2 to 10.23.1.1 via ge-0/0/0.3 to 10.24.1.1 via ge-0/0/0.4 to 10.25.1.1 via ge-0/0/0.5 to 10.13.1.2 via ge-0/0/1.1, Push 33333, Push 801005, Push 801006(top) to 10.13.1.2 via ge-0/0/1.1, Push 801001, Push 801005(top)
服务等级 (CoS) 转发策略的增强
对于基于服务等级的转发,必须使用 forwarding-policy next-hop-map
配置语句。
在 Junos OS 19.1R1 版之前,基于服务等级的转发支持匹配条件包括:
-
next-hop— 根据传出接口或下一跃点地址匹配下一跃点。
-
lsp-next-hop- 使用 LSP 名称的正则表达式匹配命名的 LSP。
-
non-lsp-next-hop— 匹配所有没有 LSP 名称的 LSP。
借助基于策略的多路径路由功能,您还可以匹配所有下一跃点,而不为某些前缀添加标签。为此,必须在层次结构级别启用[edit class-of-service forwarding-policy next-hop-map map-name forwarding-class forwarding-class-name
该non-labelled-next-hop
选项。
例如:
[edit] class-of-service { forwarding-policy { next-hop-map abc { forwarding-class best-effort { non-labelled-next-hop; } } } }
策略匹配协议的增强功能
在 Junos OS 19.1R1 版之前,当您使用策略通过层次结构级别的语句[edit policy-options policy-statement statement-name]
匹配from protocol
协议时,所有协议路由(已标记和未标记)都将匹配。借助基于策略的多路径路由功能,您可以专门匹配标记的协议路由。
用于匹配标记协议的选项)包括:
-
l-isis— 匹配标记的 IS-IS 路由。该
isis
选项匹配 IS-IS 路由,不包括标签 IS-IS 路由。 -
l-ospf— 匹配标记的 OSPF 路由。该
ospf
选项匹配所有 OSPF 路由,包括 OSPFv2、OSPFv3 和标签 OSPF。
例如:
[edit] policy-options { policy-statement abc { from protocol [ l-ospf l-isis ]; } }
配置基于策略的多路径路由对网络性能的影响
配置基于策略的多路径路由时,路由信息库中的路由更改会导致对策略进行评估,以检查是否需要创建多路径路由。由于此功能要求成员路由必须位于同一路由信息库中,因此该 rib-group
语句用于合并来自不同路由信息库的路由。在应用程序级别配置语句会增加 rib-group
系统中的路由数。
当路由信息库中有许多路由时,路由的不断变化会导致重新评估多路径策略。这可能会影响网络性能。建议仅在需要时配置基于策略的多路径路由功能。
了解 MPLS 流量的基于 IP 的过滤和选择性端口镜像
在 MPLS 数据包中,IP 报头紧跟在 MPLS 报头之后。基于 IP 的过滤功能提供了一种深度检测机制,其中最多可以检测内部有效负载的 8 个 MPLS 标签,以启用基于 IP 参数的 MPLS 流量过滤。过滤后的 MPLS 流量还可以通过端口镜像到监控设备,以便在核心 MPLS 网络中提供基于网络的服务。
基于 IP 的 MPLS 流量过滤
在 Junos OS 18.4R1 版之前,MPLS 系列过滤器不支持基于 IP 参数进行过滤。引入基于 IP 的过滤功能后,您可以根据源地址和目标地址、第 4 层协议类型以及源和目标端口等 IP 参数,对带有 MPLS 标记的 IPv4 和 IPv6 数据包应用入站和出站过滤器。
基于 IP 的过滤功能使您能够在接口入口处过滤 MPLS 数据包,其中过滤是使用 MPLS 数据包内部有效负载上的匹配条件完成的。然后,可以使用逻辑隧道将选择性 MPLS 流量端口镜像到远程监控设备。
为了支持基于 IP 的过滤,添加了额外的匹配条件,允许对 MPLS 数据包进行深度检测,以便在应用适当的过滤器之前,使用第 3 层和第 4 层标头解析内部有效负载。
仅 MPLS 标记的 IPv4 和 IPv6 数据包支持基于 IP 的过滤功能。换句话说,仅当 IP 有效负载紧跟在 MPLS 标签之后时,MPLS 过滤器才会匹配 IP 参数。
在其他情况下,如果 MPLS 有效负载包括伪线、inet 和 inet6 以外的协议或其他封装(如第 2 层 VPN 或 VPLS),则不支持基于 IP 的过滤功能。
为基于 IP 的 MPLS 流量过滤添加了以下匹配条件:
IPv4 源地址
IPv4 目标地址
IPv6 源地址
IPv6 目标地址
协议
源端口
目标端口
源 IPv4 前缀列表
目标 IPv4 前缀列表
源 IPv6 前缀列表
目标 IPv6 前缀列表
基于 IP 的 MPLS 流量过滤支持以下匹配组合:
源地址和目标地址与 IPv4 和 IPv6 前缀列表匹配条件。
源和目标端口地址和协议类型与 IPv4 和 IPv6 前缀列表的条件匹配。
MPLS 流量的选择性端口镜像
端口镜像是除了对数据包进行正常处理和转发之外,还可以将数据包镜像到配置的目标的功能。端口镜像作为防火墙过滤器的操作应用,防火墙过滤器应用于任何接口的入口或出口。同样,选择性端口镜像功能提供了使用逻辑隧道将基于 IP 参数过滤的 MPLS 流量镜像到镜像目标的功能。
要启用选择性端口镜像,除了现有的 counter
、 accept
和discard
操作之外,还要在[edit firewall family mpls filter filter-nameterm term-name then]
层次结构级别配置其他操作:
port-mirror
port-mirror-instance
Port Mirroring
该 port-mirror
操作可在设备上启用全局端口镜像,这适用于所有数据包转发引擎 (PFE) 和关联的接口。
对于 MPLS 系列过滤器,将为全局端口镜像启用该 port-mirror
操作。
Port Mirroring Instance
该 port-mirror-instance
操作使您能够使用输入采样和端口镜像输出目标的不同属性自定义每个实例,而不必使用单个系统范围的配置进行端口镜像。
通过在层次结构级别包含instance port-mirror-instance-name
[edit forwarding-options port-mirror]
语句,您只能为每个灵活 PIC 集中器 (FPC) 配置两个端口镜像实例。然后,您可以将各个端口镜像实例与 FPC、PIC 或(转发引擎板 (FEB) )关联,具体取决于设备硬件。
对于 MPLS 系列过滤器, port-mirror-instance
仅为端口镜像实例启用该操作。
对于和port-mirror
port-mirror-instance
操作,必须使用第 2 层系列而不是第 3 层系列 MPLS(第 3 层)启用输出接口,选择性端口镜像功能才能正常工作。
配置示例
基于 IP 的过滤配置
[edit firewall family mpls filter mpls-filter] term ipv4-term { from { ip-version { ipv4 { source-address { 10.10.10.10/24; } destination-address { 20.20.20.20/24; } protocol tcp { source-port 100; destination-port 200; } soure-prefix-list ipv4-source-users; destination-prefix-list ipv4-destination-users; } } exp 1; } then port-mirror; then accept; then count; } term ipv6-term { from { ip-version { ipv6 { source-address { 2000::1/128; } destination-address { 3000::1/128; } protocol tcp { source-port 100; destination-port 200; } source-prefix-list ipv6-source-users; destination-prefix-list ipv6-destination-users; } } exp 1; } then port-mirror-instance port-mirror-instance1; then accept; then count; }
[edit policy-options] prefix-list ipv4-source-users { 172.16.1.16/28; 172.16.2.16/28; } prefix-list ipv6-source-users { 2001::1/128; 3001::1/128; }
[edit interfaces] xe-0/0/1 { unit 0 { family inet { address 100.100.100.1/30; } family mpls { filter { input mpls-filter; } } } }
选择性端口镜像配置
[edit forwarding-options] port-mirroring { input { rate 2; run-length 4; maximum-packet-length 500; } family any { output { interface xe-2/0/2.0; } } }
[edit forwarding-options] port-mirroring { instance { port-mirror-instance1 { input { rate 3; run-length 5; maximum-packet-length 500; } family any { output { interface xe-2/0/2.0; } } } } }
输出接口 xe-2/0/2.0
是针对第 2 层系列而非系列 MPLS 配置的。
对于和port-mirror
port-mirror-instance
操作,必须使用第 2 层系列而不是第 3 层系列 MPLS(第 3 层)启用输出接口,选择性端口镜像功能才能正常工作。
镜像目标配置
[edit interfaces] xe-2/0/2 { vlan-tagging; encapsulation extended-vlan-bridge; unit 0 { vlan-id 600; } }
[edit bridge-domains] bd { domain-type bridge; interface xe-2/0/2.0; }
变更历史表
是否支持某项功能取决于您使用的平台和版本。 使用 Feature Explorer 查看您使用的平台是否支持某项功能。