了解用于在 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 中术语 “每数据包负载均衡” 等同于其他供应商可能称之为 “按流负载 均衡”)。有关更多信息 ,请参阅配置每个数据包的负载平衡 。
-
随机数据包负载平衡 – 为每个数据包随机选择下一跃点。此方法适用于具有聚合以太网接口和 ECMP 路径的 MPC 线卡的 MX 路由器。要配置按数据包随机喷射负载均衡,请在层次结构级别包含
per-packet
语句[edit interfaces aex aggregated-ether-options load-balance]
。有关详细信息,请参阅示例:配置聚合以太网负载平衡 。 -
按数据包随机喷雾负载均衡 – 当自适应负载均衡选项失败时,每数据包随机喷雾负载均衡是最后的手段。它确保 ECMP 的成员在不考虑带宽的情况下均匀加载。每个数据包会导致数据包重新排序,因此仅当应用程序吸收重新排序时,才建议使用。按数据包随机喷射可消除因软件错误而导致的流量不平衡,数据包哈希除外。
从 Junos OS 版本 20.2R1 开始,您可以在具有 MPC10E(MPC10E-15C-MRATE 和 MPC10E-10C-MRATE)线卡的 MX240、MX480 和 MX960 路由器以及具有 MX2K-MPC11E 线卡的 MX2010 和 MX2020 路由器上配置按数据包随机负载平衡。
-
自适应负载平衡 - 自适应负载平衡 (ALB) 是一种通过使用反馈机制在聚合以太网捆绑包中的链路和等价多路径 (ECMP) 下一跃点上分配流量来纠正真正流量不平衡的方法。当数据包流的流量速率差异很大时,ALB 会优化流量分配。ALB 使用反馈机制,通过调整 AE 捆绑包中链路上的带宽和数据包流来纠正流量负载不平衡。
-
聚合以太网捆绑包的多个数据包转发引擎上的 ALB
从 Junos OS 20.1R1 版开始,在 MX 系列 MPC 上的聚合以太网捆绑包上,ALB 在同一线卡上的多个入口数据包转发引擎 (PFE) 之间均匀地重新分配流量。在早期版本中,ALB 仅限于单个 PFE,同时在 AE 捆绑包中重新分配流量。这影响了灵活性和冗余性。默认情况下,ALB 处于禁用状态。
您可以通过在层次结构级别设置
adaptive
[edit interfaces ae-interface aggregated-ether-options load-balance]
语句来配置 ALB。有关详细信息 ,请参阅配置自适应负载平衡 。
-
用于 ECMP 下一跃点的多个 PFE 上的 ALB
从 Junos OS 20.1R1 版开始,您可以为跨同一线卡上多个入口 PFE 的 ECMP 下一跃点配置 ALB,以实现流量和冗余的均匀分配。在早期版本中,用于 ECMP 下一跃点的 ALB 仅限于单个 PFE。这种限制影响了灵活性和冗余。ALB 动态监控每个流量相对于整体 ECMP 链路负载水平贡献的流量负载,然后在达到阈值时采取纠正措施。
您可以通过在层次结构级别下
[edit chassis]
配置ecmp-alb
命令来为 ECMP 下一跃点配置 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 中的 IPv4,GRE
有效负载(内部 IPv4:源端口和目标端口、IP 地址);对称
GRE 密钥
GRE 协议 = IPv4
来源地址和目的地址;对称
协议
DSCP(已禁用)
传入接口索引(已禁用)
IPv4 中的 IPv6,GRE
有效负载(内部 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 及更高版本)
流量类(禁用)
传入接口索引(已禁用)
IPv6 中的 IPv4,GRE(Junos 18.3 及更高版本)
有效负载(内部 IPv4:源端口和目标端口、IP 地址);对称
GRE 密钥
GRE 协议 = IPv4
来源地址和目的地址;对称
下一个标题
流标签(Junos 18.3 及更高版本)
流量类(禁用)
传入接口索引(已禁用)
IPv6 中的 IPv6,GRE(Junos 18.3 及更高版本)
有效负载(内部 IPv6:源和目标端口、IP 地址);对称
GRE 密钥
GRE 协议 = IPv6
来源地址和目的地址;对称
下一个标题
流标签(Junos 18.3 及更高版本)
流量类(禁用)
传入接口索引(已禁用)
IPv6、GRE(Junos 18.3 及更高版本中的 MPLS)
有效负载(内部 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 及更高版本)
流量类(禁用)
传入接口索引(已禁用)
用于多服务的哈希字段
家族多服务散列配置适用于以 、 vpls
或 bridge
形式family ccc
进入路由器的数据包。该列表显示了散列计算中用于非分段数据包的字段。默认情况下,除非另有说明,否则在哈希计算中使用该字段。另外,在注明的情况下,哈希中使用的 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 成员链路的目标静态接口分布。 在默认哈希计算中包括封装的 PPPoE 有效负载的 MPLS 的源、目标和 MAC。 |
14.2R3 |
增加 LAG 和 MC-LAG 的扩展。 |
14.2R2 |
提供具有 10G、40G 和 100G 链路的聚合以太网捆绑包。 |
14.1R1 |
将 aeX 接口创建与 增加聚合以太网接口名称空间。 为 ECMP 下一跃点提供自适应负载平衡。 |
13.3R1 |
包括自适应、按数据包随机和定期重新平衡负载平衡的增强功能。 |
11.4R1 |
提供跨 ECMP 下一跃点的负载共享。 |