问题 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 的相关部分。