了解用于在 MX 系列路由器上均衡流量的算法
在设备的入口接口上收到数据包时,数据包转发引擎 (PFE) 会执行查找以识别转发的下一跃点。如果到同一下一跃点目标的多个等价路径 (ECMP),则可以将入口 PFE 配置为在下一跃点之间分配流。同样,可能需要在聚合以太网等聚合接口的成员链路之间分配流量。实际转发下一跃点的选择基于对所选数据包标头字段和多个内部字段(如 接口索引)的哈希计算结果。您可以配置散列算法使用的一些字段。
对于具有模块化端口集中器 (MPC) 和 5 类 FPC 的 MX 系列路由器,请在层级配置支持的流量类型的
forwarding-options enhanced-hash-key
哈希。有关默认情况下包含哪些字段的详细信息,适用于哪些流量家族,请参见下方。在 Junos OS 18.3R1 版中,已更改计算增强散列的默认方法,以改进作为家族多服务传输的 IP 隧道、IPv6 流和 PPPoE 有效负载的平均信息量。可以通过设置各自的 no-命令来禁用这些默认值。
对于具有 DPC 的 MX 系列路由器,请在层级配置支持的流量类型的
forwarding-options hash-key
哈希。
Junos 支持不同类型的负载平衡。
-
按前缀负载平衡 – 每个前缀仅映射到一个转发下一跃点。
-
按数据包负载平衡 – 活动路由中某个目标的所有下一跃点地址均安装在转发表中(Junos 中 按数据包 负载平衡的术语等同于其他供应商可能称为 “按流 负载平衡”的术语)。有关更多信息 ,请参阅配置按数据包负载平衡 。
-
随机数据包负载平衡 – 为每个数据包随机选择下一跃点。使用 MPC 线卡的 MX 路由器可以使用此方法,用于聚合以太网接口和 ECMP 路径。要配置按数据包随机喷发负载平衡,请在
per-packet
层次结构级别添加语句[edit interfaces aex aggregated-ether-options load-balance]
。有关更多信息,请参阅示例:配置聚合以太网负载平衡 。 -
按数据包随机喷洒负载平衡 – 当自适应负载平衡选项失败时,按数据包随机喷洒负载平衡是最后的手段。它可以确保 ECMP 的成员平均负载,而无需考虑带宽。每个数据包会导致数据包重新订购,因此只有在应用同意重新订购的情况下,才建议使用。按数据包随机喷洒可消除因软件错误而导致的流量失衡(数据包散列除外)。
从 Junos OS 20.2R1 版开始,您可以使用 MX2K-MPC11E 线卡以及 MX2010 和 MX2020 线卡在 MX240、MX480 和 MX960 路由器上配置按数据包的随机负载平衡。
-
自适应负载平衡 - 自适应负载平衡 (ALB) 是一种纠正真实流量失衡的方法,该方法使用反馈机制在聚合以太网捆绑包中的链路之间分配流量,并在等价多路径 (ECMP) 下一跃点上分配流量。当数据包流的流量速率存在很大差异时,ALB 会优化流量分配。ALB 使用反馈机制,通过调整 AE 捆绑包内链路上的带宽和数据包流来纠正流量负载不平衡。
-
聚合以太网捆绑包的多个数据包转发引擎上的 ALB
从 Junos OS 20.1R1 版开始,在 MX 系列 MPC 上,在聚合以太网捆绑包上,ALB 可以跨同一线卡上的多个入口数据包转发引擎 (PFE) 均匀重新分配流量。在早期版本中,ALB 仅限于单个 PFE,同时在 AE 捆绑包中重新分配流量。这会影响灵活性和冗余。ALB 默认处于禁用状态。
您可以通过在
[edit interfaces ae-interface aggregated-ether-options load-balance]
层次结构级别设置adaptive
语句来配置 ALB。有关更多信息 ,请参阅配置自适应负载平衡 。
-
用于 ECMP 下一跃点的多个 PFE 上的 ALB
从 Junos OS 20.1R1 版开始,您可以为跨同一线卡上的多个入口 PFE 的 ECMP 下一跳配置 ALB,以均匀分配流量和冗余。在早期版本中,用于 ECMP 下一跃点的 ALB 仅限于单个 PFE。这种限制会影响灵活性和冗余。ALB 会动态监控每个流与整体 ECMP 链路负载级别相关的流量负载,然后在达到阈值时采取纠正措施。
您可以通过在层次结构级别下
[edit chassis]
配置命令来为 ECMP 下一跃点配置ecmp-alb
ALB。有关更多信息 ,请参阅 ecmp-alb 。
注意:ALB 适用于位于同一线卡上的多个 PFE。驻留在不同线卡上的 PFE 不支持此功能。
对于位于不同线卡上的 PFE,入口流量可能会导致出口端口负载不均匀,即使启用了 ALB。
-
还提供了几个其他配置选项:
每个插槽的哈希功能配置 – 此方法基于每个 PIC 插槽的唯一、负载平衡哈希值,仅适用于带有 DPCE 和 MS-DPC 线卡的 M120、M320 和 MX 系列路由器。
对称负载平衡 – 此方法在 802.3ad LAG 上提供对称负载平衡。用于对称负载平衡的哈希在
interface
层次结构级别设置。它可以确保给定的双工流量在两个方向上遍历相同的设备,并在 MX 系列路由器上可用。
MX MPC 和 T 系列 5 类 FPC 规格
MX MPC 和 T 系列 5 类 FPC 上的散列计算算法对具有交换第 3 层地址或第 4 层传输端口的数据包产生相同的结果。例如,源地址为 192.0.2.1 和目标地址为 203.0.113.1 的数据包的散列计算结果与源地址为 203.0.113.1 和目标地址为 192.0.2.1 的数据包的散列计算结果相同。
为了避免数据包重新排序,分片 IPv4 数据包从不使用第 4 层传输协议端口。这适用于由 more fragment
标头中的位标识的流的第一个分片,以及由非零分片偏移标识的所有后续分片。始终通过同一下一跃点转发第一个分片和后续分片。
Junos 18.3R1 及更高版本的散列算法
在大多数情况下,将第 3 层和第 4 层字段信息包括在散列计算中,产生的结果足以保证流量的公平分配。但是,在 IP-in-IP 或 GRE 隧道等情况下,仅第 3 层和第 4 层字段信息可能不足以生成具有足够平均信息量的散列以用于负载平衡。例如,在 MX 系列路由器传输 GRE 流的部署中,GRE 封装隧道通常作为具有相同源和目标以及相同 GRE 密钥的单个流进行。随着隧道上的流量增加,胖流也显著增加了链路利用率的不平衡。另一个例子是,当 MX PE 路由器用作用户边缘部署中的 VPLS PE 设备时,路由器会将宽带订阅者的流量从接入设备回传到中央宽带网络网关 (BNG)。在这种情况下,只有订阅者 MAC 地址和 BNG 路由器 MAC 地址可用于散列。但由于 BNG MAC 较少,订阅者 MAC 相对较少,典型的第 3 层和第 4 层字段不足以创建哈希以实现最佳负载平衡。
因此,对于具有 Trio MPC 并运行 Junos OS 18.3R1 或更高版本的 MX 系列路由器,默认 enhanced-hash-key
计算已发生变化。此处列出了更改摘要:
对于 GRE 数据包,如果外部 IP 数据包不是分片数据包(第一个分片或任何后续分片),而内部数据包是 IPv4 或 IPv6,则除了外部源地址和目标地址外,还使用内部数据包的源地址和目的地址进行散列计算。如果内部 IP 数据包的协议是 TCP 或 UDP,并且内部 IP 数据包不是分片(第一个分片或任何后续分片),则也会包含内部数据包的第 4 层端口。同样,如果外部 IP 数据包不是分片数据包,而内部数据包为 MPLS,则哈希计算中包含内部顶部标签。
对于 PPPoE 数据包,如果内部数据包是 IPv4 或 IPv6,则包括内部数据包的源地址和目的地址。如果内部 IP 数据包的协议为 TCP 或 UDP,并且内部 IP 数据包不是分片,则包含第 4 层端口。通过在层次结构级别配置
no-payload
选项forwarding-options enhanced-hash-key family multiservice
,可以禁用包含 PPPoE 内部数据包字段。对于 IPv6,哈希计算中包含 IPv6 标头流标签字段。 RFC 6437 介绍了 IPv6 标头中的 20 位流标签字段。在
no-flow-label
层次结构中forwarding-options enhanced-hash-key family inet6
设置选项以禁用新的默认值。
哈希字段用于通过 IPv4 发送的 GRE 流量
这些列表显示了在 Junos 18.3R1 及更高版本中为非分片数据包的哈希计算中使用的字段。默认情况下,该字段用于哈希计算,除非另有说明。此外,在哈希中使用的 IP 和端口字段是对称的,即交换字段不会更改哈希结果。
IPv4、GRE
GRE 密钥
源地址和目标地址;对称
协议
DSCP(禁用)
传入接口索引(禁用)
IPv4、GRE 中的 IPv4
有效负载(内部 IPv4:源端口和目标端口、IP 地址);对称
GRE 密钥
GRE 协议 = IPv4
源地址和目标地址;对称
协议
DSCP(禁用)
传入接口索引(禁用)
IPv4、GRE 中的 IPv6
有效负载(内部 IPv6:源和目标端口、IP 地址);对称
GRE 密钥
GRE 协议 = IPv6
源地址和目标地址;对称
协议
DSCP(禁用)
传入接口索引(禁用)
IPv4、GRE 中的 MPLS
有效负载(内部 MPLS:顶部标签)
GRE 密钥
GRE 协议 = MPLS
源地址和目标地址;对称
协议
DSCP(禁用)
传入接口索引(禁用)
Junos 17.2 及更高版本中使用的 IPv4、L2TPv2
通过配置
forwarding-options enhanced-hash-key family inet l2tp-tunnel-session-identifier
选项,可以启用包括 L2TPv2 隧道 ID 和会话 ID。请注意,瞻博网络不建议默认启用此选项。这是因为 L2TP 会话识别基于目标 UDP 端口匹配 (1701),并且此端口可能不会专门用于 L2TP 传输,因此从数据包中提取隧道和会话 ID 字段可能并不总是准确。会话 ID
隧道 ID
源端口和目标端口
源地址和目标地址;对称
协议 (UDP)
DSCP(禁用)
传入接口索引(禁用)
哈希字段用于通过 IPv6 发送的 GRE 流量
该列表显示了非分片数据包散列计算中使用的字段。默认情况下,该字段用于哈希计算,除非另有说明。此外,在哈希中使用的 IP 和端口字段是对称的,即交换字段不会更改哈希结果。
IPv6、GRE
GRE 密钥
源地址和目标地址;对称
下一个标头
流标签(Junos 18.3 及更高版本)
流量类(禁用)
传入接口索引(禁用)
IPv4 在 IPv6、GRE 中(Junos 18.3 及更高版本)
有效负载(内部 IPv4:源端口和目标端口、IP 地址);对称
GRE 密钥
GRE 协议 = IPv4
源地址和目标地址;对称
下一个标头
流标签(Junos 18.3 及更高版本)
流量类(禁用)
传入接口索引(禁用)
IPv6、GRE 中的 IPv6(Junos 18.3 及更高版本)
有效负载(内部 IPv6:源和目标端口、IP 地址);对称
GRE 密钥
GRE 协议 = IPv6
源地址和目标地址;对称
下一个标头
流标签(Junos 18.3 及更高版本)
流量类(禁用)
传入接口索引(禁用)
IPv6、GRE 中的 MPLS(Junos 18.3 及更高版本)
有效负载(内部 MPLS:顶部标签);对称
GRE 密钥
GRE 协议 = MPLS
源地址和目标地址;对称
下一个标头
流标签
流量类(禁用)
传入接口索引(禁用)
用于 IPv4 的散列字段
该列表显示非分片数据包散列计算中使用的字段,但指出的情况除外。默认情况下,该字段用于哈希计算,除非另有说明。此外,如果指出,IP 字段和端口字段散列是对称的,即交换字段不会更改散列结果。
IPv4,而非 TCP、UDP 或分片数据包
源地址和目标地址;对称
协议
DSCP(禁用)
传入接口索引(禁用)
IPv4、TCP 和 UDP、非分片数据包
源端口和目标端口;对称
源地址和目标地址;对称
协议
DSCP(禁用)
传入接口索引(禁用)
IPv4、PPTP
GRE 密钥的 16 个最小重要位
源地址和目标地址;对称
协议
DSCP(禁用)
传入接口索引(禁用)
到目标端口 2152 的 IPv4、GTP、UDP 流量
可通过选项启用
forwarding-options enhanced-hash-key family inet gtp-tunnel-endpoint-identifier
包含 GPRS 隧道协议 (GTP) 隧道端点标识符 (TEID)。请注意,瞻博网络不建议默认启用此选项。这是因为 GTP 会话识别基于目标 UDP 端口匹配 (2152),并且此端口可能并非专门用于 GTP 传输,因此从数据包提取 TEID 字段可能并不总是准确。GTP TEID(禁用)
源端口和目标端口
源地址和目标地址;对称
协议
DSCP(禁用)
传入接口索引(禁用)
用于 IPv6 的散列字段
该列表显示非分片数据包散列计算中使用的字段,但指出的情况除外。默认情况下,该字段用于哈希计算,除非另有说明。此外,如果指出,IP 字段和端口字段散列是对称的,即交换字段不会更改散列结果。
IPv6、非 TCP 和 UDP 数据包,或者由发起方分片的 TCP 和 UDP 数据包
源地址和目标地址;对称
下一个标头
流标签(Junos 18.3 及更高版本)
流量类(禁用)
传入接口索引(禁用)
IPv6、非分片 TCP 和 UDP 数据包
源端口和目标端口;对称
源地址和目标地址;对称
下一个标头
流标签(Junos 18.3 及更高版本)
流量类(禁用)
传入接口索引(禁用)
IPv6、PPTP
GRE 密钥的 16 个最小重要位
源地址和目标地址;对称
下一个标头
流标签(Junos 18.3 及更高版本)
流量类(禁用)
传入接口索引(禁用)
IPv6、GTP
可以在层级启用
forwarding-options enhanced-hash-key family inet gtp-tunnel-endpoint-identifier
GPRS 隧道协议 (GTP) 隧道端点标识符 (TEID)。请注意,瞻博网络不建议默认启用此选项。这是因为 GTP 会话识别基于目标 UDP 端口匹配 (2152),并且此端口可能并非专门用于 GTP 传输,因此从数据包提取 TEID 字段可能并不总是准确。GTP TEID(默认禁用;在
forwarding-options enhanced-hash-key family inet gtp-tunnel-endpoint-identifier
层级启用。源端口和目标端口
源地址和目标地址;对称
下一个标头
流标签(Junos 18.3 及更高版本)
流量类(禁用)
传入接口索引(禁用)
用于多服务的散列字段
家族多服务散列配置适用于进入路由器的数据包,如、family ccc
vpls
或bridge
。该列表显示了非分片数据包散列计算中使用的字段。默认情况下,该字段用于哈希计算,除非另有说明。此外,在哈希中使用的 IP 和端口字段是对称的,即交换字段不会更改哈希结果。
以太网,非 IP 或非 MPLS
如果配置了负载信息,将从未标记的数据包或带有最多两个 VLAN 标记的数据包中提取。
外部 802.1p(禁用)
源和目标 MAC;对称
传入接口索引(禁用)
以太网、IPv4
有效负载(内部 IPv4:源端口和目标端口、IP 地址);对称
外部 802.1p(禁用)
源和目标 MAC;对称
传入接口索引(禁用)
以太网、IPv6
有效负载(内部 IPv6:源和目标端口、IP 地址);对称
外部 802.1p(禁用)
源和目标 MAC;对称
传入接口索引(禁用)
以太网,MPLS
有效负载(内部 MPLS:顶部标签加上内部 IPv4 和 IPv6 字段);对称。有关相关信息,请参阅下方 用于 MPLS、Junos 18.3 及更高版本的哈希字段。
外部 802.1p(禁用)
源和目标 MAC;对称
传入接口索引(禁用)
PPPoE 中的 IPv4(数据包)
有效负载(内部 IPv4:源端口和目标端口、IP 地址);对称
PPP 协议 IPv4 版本 0x1,类型 0x1
外部 802.1p(禁用)
源和目标 MAC;对称
传入接口索引(禁用)
PPPoE 中的 IPv6(数据包)
有效负载(内部 IPv6:源和目标端口、IP 地址);对称
PPP 协议 IPv6 版本 0x1,类型 0x1
外部 802.1p(禁用)
源和目标 MAC;对称
传入接口索引(禁用)
用于 MPLS、Junos 18.3 及更高版本的散列字段
该列表显示了非分片数据包散列计算中使用的字段。默认情况下,该字段用于哈希计算,除非另有说明。此外,在哈希中使用的 IP 和端口字段是对称的,即交换字段不会更改哈希结果。
MPLS、封装 IPv4 或 IPv6
-
有效负载(内部 IPv4:源端口和目标端口、IP 地址);对称
-
有效负载(内部 IPv6:源端口和目标端口、IP 地址、下一标头);对称
-
标签 1..16(20 位)
-
外部标签 EXP(禁用)
传入接口索引(禁用)
-
以太网伪线中的 MPLS、IPv4 或 IPv6
有效负载(以太网伪线中的 IPv4/IPv6)
-
标签 2..16(20 位)
-
外部标签 EXP(禁用)
-
标签 1(20 位)
传入接口索引(禁用)
-
MPLS、以太网伪线中的 MPLS
-
有效负载(以太网伪线中的 MPLS 标签堆栈条目的两个顶标签)
-
标签 2..16(20 位)
-
外部标签 EXP(禁用)
-
标签 1(20 位)
-
传入接口索引(禁用)
-
MPLS,平均信息量标签
当检测到平均信息量标签时,不会处理有效负载字段,并且指示器不会包含在散列计算中
-
标签 1..16(20 位)
-
外部标签 EXP(禁用)
传入接口索引(禁用)
-
从 Junos 14.1 到 Junos 18.3,用于 MPLS 的散列字段
该列表显示了非分片数据包散列计算中使用的字段。默认情况下,该字段用于哈希计算,除非另有说明。此外,在哈希中使用的 IP 和端口字段是对称的,即交换字段不会更改哈希结果。
MPLS、封装 IPv4 或 IPv6
有效负载(内部 IPv4:源端口和目标端口、IP 地址);对称
有效负载(内部 IPv6:源端口和目标端口、IP 地址、下一标头);对称
标签 2.8(20 位)
外部标签 EXP(禁用)
标签 1(20 位)
传入接口索引(禁用)
以太网伪线中的 MPLS、IPv4 或 IPv6
有效负载(以太网伪线中的 IPv4/IPv6)
标签 2.8(20 位)
外部标签 EXP(禁用)
标签 1(20 位)
传入接口索引(禁用)
-
MPLS、以太网伪线中的 MPLS
-
有效负载(以太网伪线中的 MPLS 标签堆栈条目的两个顶标签)
-
标签 2..16(20 位)
-
外部标签 EXP(禁用)
-
标签 1(20 位)
-
传入接口索引(禁用)
-
MPLS,平均信息量标签
当检测到平均信息量标签时,不会处理有效负载字段,并且指示器不会包含在散列计算中
标签 2.8(20 位)
外部标签 EXP(禁用)
标签 1(20 位)
传入接口索引(禁用)
带 MPC 的 MX 系列路由器的哈希计算和负载平衡的 Junos 更新列表
Junos Release |
Change |
18.3R1 |
在默认散列计算中包括 IPv6 流标签、内部 GRE 标头和内部 PPPoE。 将 MPLS 标签堆栈深度增加到 16 个标签。 |
17.2R1 |
L2TP 封装 IPv4 和 IPv6 数据包的负载平衡。 |
16.1R1 |
包含带控制字的 EoMPLS 有效负载哈希。 引入仅源和仅基于目标的散列。 |
15.1R1 |
在 AE 成员链路中提供静态接口的定向分布。 在默认散列计算中包括 MPLS 封装 PPPoE 有效负载的源、目标和 MAC。 |
14.2R3 |
增加 LAG 和 MC-LAG 的扩展。 |
14.2R2 |
提供包含 10G、40G 和 100G 链路的聚合以太网捆绑包。 |
14.1R1 |
将接口创建与 增加聚合以太网接口名称空间。 为 ECMP 下一跃点提供自适应负载平衡。 |
13.3R1 |
包括自适应、按数据包随机和定期重新平衡负载平衡的增强功能。 |
11.4R1 |
提供跨 ECMP 下一跃点的负载共享。 |