有人可以为我提供一个示例,说明等价多路径路由如何使用散列来决定哪个数据包去哪个?我为此道歉,但我在网上找到的只是 ECMP 的定义。
ECMP 使用散列技术的示例
当多个输出(等成本)路径可用于将数据包转发到同一网络目的地时,就会发生 ECMP。
散列函数必须将信息从传入数据包映射到输出接口。
例如,让我为此编写一个说明性的过于简单的散列函数:
1) 用 ifIndex 描绘每个输出接口,如下所示:
- Fa0:ifIndex 1
- Fa1:ifIndex 2
- Fa2:ifIndex 3
接口数量:3
2) 给定目的 IP 地址 ABCD,取最低有效字节 D。
示例:IP = 1.0.0.5,D = 5
3)将D的值除以接口数,取余数,然后加1。
D = 5
Number of interfaces = 3
Remainder plus 1: 5 % 3 + 1 = 3
4) 使用结果作为 ifIndex 并将数据包扔到它的接口。
示例:对于 IP 1.0.0.5,将数据包写入输出接口 Fa2(ifIndex=3)。
负载平衡可以(在 Cisco 设备上)配置为每个数据包或每个目的地。
引用自负载平衡如何工作?
对于进程交换——负载均衡是基于每个数据包的
对于快速切换——负载均衡基于每个目的地
更详细的,在同一篇文章中:
Per-Destination and Per-Packet Load Balancing
您可以将负载平衡设置为按目的地或按数据包工作。Per-destination 负载均衡是指路由器根据目的地址分配数据包。给定到同一网络的两条路径,该网络上目的地 1 的所有数据包都通过第一条路径,该网络上目的地 2 的所有数据包都通过第二条路径,依此类推。这保留了数据包顺序,潜在地不均衡地使用链路。如果一台主机接收大部分流量,则所有数据包都使用一条链路,从而使其他链路上的带宽未使用。更多的目标地址会导致更多的同等使用链接。为了实现更平等使用的链接,使用 IOS 软件为每个目标地址构建一个路由缓存条目,而不是每个目标网络,就像只有一条路径存在的情况一样。因此,同一目标网络上不同主机的流量可以使用不同的路径。这种方法的缺点是,对于承载数千个目标主机流量的核心骨干路由器,维护缓存的内存和处理要求变得非常苛刻。
按数据包负载平衡意味着路由器通过第一条路径为 destination1 发送一个数据包,通过第二条路径为(相同的)destination1 发送第二个数据包,依此类推。每包负载均衡保证所有链路的负载相等。但是,由于网络中可能存在差异延迟,因此数据包可能会无序到达目的地。在 Cisco IOS 软件中,除 11.1CC 版本外,每个数据包负载平衡确实禁用了路由缓存转发加速,因为路由缓存信息包括传出接口。对于按数据包负载平衡,转发过程通过查找路由表并选择最少使用的接口来确定每个数据包的传出接口。这确保了链接的平等利用,但这是一项处理器密集型任务,会影响整体转发性能。这种按数据包负载平衡的形式不太适合高速接口。
按目的地或按数据包进行负载平衡取决于用于 IP 数据包的交换方案的类型。默认情况下,在大多数 Cisco 路由器上,接口下启用了快速交换。这是一种按目标进行负载平衡的需求缓存方案。