具有不同路由前缀长度的下一跳之间的 ECMP

网络工程 路由 转变 ecmp
2022-02-22 23:44:56

我有一个关于 ECMP 的基本问题,说我有一个 /20 路由和一个 /16 到主机的路由,两者都是可达的,可以在不同前缀长度之间进行 ECMP 负载平衡还是类似,硬件首先确定通过的路由LPM 然后只应用 ECMP?我的意思不仅仅是关于硬件,这种方法在原则上有什么问题吗?一般的硬件能力是什么样的?像 Broadcom 的 ASICS 等。如果这是合理的,他们是否支持这一点?

没有什么隐藏的东西,我在一家网络公司工作,只是学习路由相关的东西,想了解一下。我刚收到这个问题,在这种情况下是什么阻止了 ECMP?为什么你认为它是随机的?由于我的公司使用这些芯片,所以我问了这个问题。

1个回答

问题 1:我有一个关于 ECMP 的基本问题,说我有一个 /20 路由和一个 /16 到主机的路由,两者都是可达的,是否可以在不同前缀长度之间进行 ECMP 负载平衡,或者是这样,硬件首先确定通过 LPM 的路由,然后只应用 ECMP?

引用rfc 1812,IPv4 路由器的要求,第 2.2.5.2 节

路由器在转发流量时必须使用最具体的匹配路由(最长匹配网络前缀)。

一旦路由器为目的地选择了最长的匹配前缀(使用 rfc 所谓的“修剪规则”),它必须选择下一跳来转发流量。此时发生 ECMP(或“负载拆分”)......

引用rfc 1812,IPv4 路由器的要求,第 5.2.4.3 节下一跳地址

从概念上讲,任何路由查找算法都是从一组候选路由开始的,这些路由包含 FIB 的全部内容。该算法由一系列步骤组成,这些步骤从集合中丢弃路由。这些步骤称为修剪规则。通常,当算法终止时,集合中只剩下一条路线。如果该集合变为空,则该数据包将被丢弃,因为目的地不可到达。当一个以上的路由留在集合中时,算法也可能终止。在这种情况下,路由器可以任意丢弃除其中一个之外的所有路由,或者可以通过选择最近最少使用的路由来执行“负载拆分”。


问题2:它如何导致循环?你能详细解释一下吗?

假设...

  • 假设下面的 R1、R2 和 R3 都在全网状对等体中相互运行 iBGP,并且它们运行 OSPF 以覆盖其 iBGP 前缀的下一跳路由
  • R1 通过 S1/0 使用 OSPF E2 下一跳宣布到 10.1.0.0/20 的 iBGP 路由
  • R3 通过 S3/0 使用 OSPF E2 下一跳宣布到 10.1.0.0/16 的 iBGP 路由
  • 假设 R1:S1/0 和 R3:S3/0 的 OSPF E2 指标相同
  • R2 在 R2:S2/0 上接收到 10.1.15.0 的数据包

图表...

                S1/0       S1/2   S2/1     S2/3   S3/2    S3/0
Static Route to    +------+         +------+        +------+       Static Route to
10.1.0.0/20 <------|  R1  |---------|  R2  |--------|  R3  |-----> 10.1.0.0/16
                   +------+         +------+        +------+
                                        | S2/0
                                        |
                                        
                                        ^
                                        ^
                                        | Ingress packet to 10.1.15.1
                                        |
  • 如果 R1、R2 和 R3在 ECMP 算法之前没有选择最长前缀匹配,则 R2 可以使用 ECMP 随机选择是将 10.1.15.1 转发到 R2:S2/1 还是 R2:S2/3。当 R3:S3/2 收到 10.1.15.1 的数据包时,可以将其转发回 R2:2/3。
  • 如果 R1、R2 和 R3 先选择最长前缀匹配,则 R2 将始终将 10.1.15.1 转发到 R2:S2/1。

问题3:所以我看到你说硬件真的不能不做。这适用于所有类型的芯片吗?

这适用于处理 IP 转发的各种芯片。如果硅供应商希望出售他们的芯片,则需要遵守 RFC 的相关部分。