Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

了解 MX 系列路由器上负载平衡流量的算法

当在设备的入口接口接收数据包时,数据包转发引擎 (PFE) 会执行查找以识别转发下一跳跃。如果到同一下一跃点目标有多个等价路径 (ECMP),则入口 PFE 可配置为在下一跃点之间分配流量。同样,聚合接口的成员链路(例如聚合以太网)之间可能需要分配流量。选择实际转发下一跳跃基于选定数据包标头字段和多个内部字段(例如接口索引)的散列计算 结果。您可以配置散列算法使用的一些字段。

  • 对于具有模块化端口集中器 (MPC) 和类型 5 的 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) 线卡和 MX2010 和 MX2020 线卡的 MX480 MX240 MX960 MX2020 路由器上配置每个数据包随机负载平衡。

此外,它还提供了几个额外的配置选项:

  • 每插槽散 列功能配置 – 此方法基于每个 PIC 插槽的唯一负载平衡散列值,仅适用于带 DPCE 和 MS-DPC 线卡的 M120、M320 和 MX 系列路由器。

  • 对称负载平衡 – 此方法在 802.3ad LAG 上提供对称负载平衡。用于对称负载平衡的散列设置在层次结构 interface 级别。它可确保给定双工信息流在两个方向遍历相同设备,且在 MX 系列路由器上可用。

MX MPC 和 T 系列 5 类 FPC 具体要求

MX MPC 和 T Series 5 类FPC 上的散列计算算法为具有交换第 3 层地址或第 4 层传输端口的数据包生成相同的结果。例如,源地址为 192.0.2.1 和目标地址 203.0.113.1 的数据包的散列计算结果与源地址为 203.0.113.1 和目标地址 192.0.2.1 的数据包的散列计算结果相同。

为避免可能的数据包重新排序,第 4 层传输协议端口永远不会在散列计算中用于分段的 IPv4 数据包。对于信息流的第一个分片(由标头中的位标识)和所有后续分片(由非零分片偏差标识) 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 层端口。在 层次结构级别配置 选项,禁用包含 PPPoE 内部数据包 no-payload forwarding-options enhanced-hash-key family multiservice 字段。

  • 对于 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(禁用)

    • 传入接口索引(禁用)

  • MPLS IPv4、GRE 中的

    • 有效负载(内部MPLS:顶部标签)

    • GRE 密钥

      GRE 协议 = MPLS

    • 源地址和目标地址;对称

    • 协议

    • DSCP(禁用)

    • 传入接口索引(禁用)

  • 17.2 和更高版本Junos IPv4、L2TPv2

    通过配置 选项,可以启用包括 L2TPv2 隧道 ID 和会话 forwarding-options enhanced-hash-key family inet l2tp-tunnel-session-identifier ID。请注意瞻博网络,默认情况下,建议不启用此选项。这是因为 L2TP 会话标识基于目标 UDP 端口匹配 (1701),并且此端口不能专用于 L2TP 传输,因此从数据包提取隧道和会话 ID 字段可能并非总是准确。

    • 会话 ID

    • 隧道 ID

    • 源端口和目标端口

    • 源地址和目标地址;对称

    • 协议 (UDP)

    • DSCP(禁用)

    • 传入接口索引(禁用)

用于通过 IPv6 发送的 GRE 流量的散列字段

列表显示非分片数据包的散列计算中使用的字段。默认情况下,除非另有说明,否则在散列计算中会使用字段。另请注意,散列中使用的 IP 和端口字段是对称的,也就是说,交换字段不会更改散列结果。

  • IPv6、GRE

    • GRE 密钥

    • 源地址和目标地址;对称

    • 下一个标题

    • 流标签(Junos 18.3 和更高版本)

    • 信息流类(禁用)

    • 传入接口索引(禁用)

  • IPv6、GRE 中的 IPv4(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 和更高版本)

    • 信息流类(禁用)

    • 传入接口索引(禁用)

  • MPLS IPv6、GRE 中Junos 18.3 和更高版本)

    • 有效负载(内部MPLS:顶部标签);对称

    • GRE 密钥

      GRE 协议 = MPLS

    • 源地址和目标地址;对称

    • 下一个标题

    • 流标签

    • 信息流类(禁用)

    • 传入接口索引(禁用)

用于 IPv4 的散列字段

列表显示非分片数据包的散列计算中使用的字段,但已标记的除外。默认情况下,除非另有说明,否则在散列计算中会使用字段。另请注意,IP 和端口字段散列是对称的,也就是说,交换字段不会更改散列结果。

  • IPv4、非 TCP 或 UDP 或者数据包分片

    • 源地址和目标地址;对称

    • 协议

    • DSCP(禁用)

    • 传入接口索引(禁用)

  • IPv4、TCP 和 UDP、非分段数据包

    • 源端口和目标端口;对称

    • 源地址和目标地址;对称

    • 协议

    • DSCP(禁用)

    • 传入接口索引(禁用)

  • IPv4、PPTP

    • GRE 密钥的 16 个最小明显位

    • 源地址和目标地址;对称

    • 协议

    • DSCP(禁用)

    • 传入接口索引(禁用)

  • IPv4、GTP、到目标端口 2152 的 UDP 流量

    可在 选项中启用包括 GPRS 通道协议 (GTP) 通道端点标识符 forwarding-options enhanced-hash-key family inet gtp-tunnel-endpoint-identifier (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

    可在层次结构级别启用包括 GPRS 通道协议 (GTP) 通道端点标识符 forwarding-options enhanced-hash-key family inet gtp-tunnel-endpoint-identifier (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 18.3 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 18.3 Junos的散列字段

列表显示非分片数据包的散列计算中使用的字段。默认情况下,除非另有说明,否则在散列计算中会使用字段。另请注意,散列中使用的 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(禁用)

    • 传入接口索引(禁用)

用于从 MPLS 14.1 Junos 18.3 Junos的哈希字段

列表显示非分片数据包的散列计算中使用的字段。默认情况下,除非另有说明,否则在散列计算中会使用字段。另请注意,散列中使用的 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 位)

    • 传入接口索引(禁用)

MX 系列Junos的散列计算和负载平衡更新列表

表 1:MX系列路由器的更新列表

Junos Release

Change

18.3R1

默认散列计算中包含 IPv6 流标签、内部 GRE 标头和内部 PPPoE。

将MPLS标签堆栈深度提高至 16 个标签。

17.2R1

L2TP 封装 IPv4 和 IPv6 数据包的负载平衡。

16.1R1

包括带控制单词的 EoMPLS 有效负载哈希。

引入仅源和基于目标散列。

15.1R1

在 AE 成员链路中提供有针对性的静态接口分配。

包括数据包的源、MPLS MAC,在默认散列计算中封装的 PPPoE 有效负载。

14.2R3

增加 LAG 和 MC-LAG 的扩展。

14.2R2

提供聚合以太网捆绑包以及 10G、40G 和 100G 链路。

14.1R1

从 中分离 aeX 接口创建 ch agg eth dev

增加聚合以太网接口名称空间。

为 ECMP 下一跃点提供自适应负载平衡。

13.3R1

包括自适应、按数据包随机和定期平衡负载平衡的增强功能。

11.4R1

提供 ECMP 下一跃点之间的负载共享。