ECMP
ECMP
- 总结一下就是从源到目的多条路径都认成等价的可达,然后把目的数据包平均的从每个地址送出去(这样是不是要求全网都要开启ECMP)
- ECMP是指,到达一个目的地有多条相同度量值的路由项(路由路径),这样就可以使用不超过3条这样的路径来转发流量。ECMP最大的特点是实现了等值情况下,多路径负载均衡和链路备份的目的,在静态路由和OSPF中基本上都支持ECMP功能。但是实际情况是,各路径的带宽、时延和可靠性等不一样,把Cost认可成一样,不能很好地利用带宽,尤其在路径间差异大时,效果会非常不理想。例如,路由器两个出口,两路径,一个带宽是100M,一个是2M,如果部署是ECMP,则网络总带宽只能达到4M的利用率。(在RFC2991中讨论了一般的多路径路由。每一封包多路径路由的负载平衡通常不适用因为大辐变化的延迟、数据包重新排序,以及可以破坏许多互联网协定运作的最大传输单元(MTU)在网络流量的差异,最特别是传输控制协议(TCP)和path MTU discovery。)另外一种情况下等价多路径路由也不能提供真正的最佳路径路由的优点,例如,如果多个最佳的next-hop的路径到目的地重新汇聚到一个单一的低带宽的路径(一种常见的情形)下游,它只会增加到该目的地流量路径的复杂性,而无法提高带宽的能力。
- ECMP基于hash算法,主要包括以下步骤
- key值的生成。路由器选择数据包的一个头部字段(如源地址、目的地址等)通过hash算法得到一个键值key。
- 查找hash表,看该键值落在哪个具体,该区域对应的下一跳就是该数据转发的下一个目的地。
- 假如说找到四条等价最短路径,即有四个下一跳可供选择,分配的表大小为keyspace.size,则每个下一跳负责的区域大小为
WCMP
- 为了改正ECMP的缺点

- 如图,简单解释下,将数据从S10发送到S12,利用ECMP,即流量在各个出口链路上平均分配,但实际到S20有两条上行链路而到S12只有一条下行链路,导致S20,S21,S22下行数据不公平,不能很好利用资源。若在各个链路上采取 1:1:2:2分配,即WCMP原则,实现流量的平均分配。

- 如图WCMP实现原理,Hash之后除余表格条目,然后看落在哪个区间。
- 如图,简单解释下,将数据从S10发送到S12,利用ECMP,即流量在各个出口链路上平均分配,但实际到S20有两条上行链路而到S12只有一条下行链路,导致S20,S21,S22下行数据不公平,不能很好利用资源。若在各个链路上采取 1:1:2:2分配,即WCMP原则,实现流量的平均分配。
- There are also MPtcp: one session to initiate multiple TCP streams to distributed traffic on L3
Some configuration example:
- Juniper ECMP:
Interfaces
set interfaces ge-0/0/2 unit 0 family inet address 192.168.4.1/24
set interfaces ge-0/0/4 unit 0 family inet address 192.168.1.1/24
set interfaces ge-0/0/6 unit 0 family inet address 192.168.2.1/24
set interfaces ge-0/0/7 unit 0 family inet address 192.168.3.1/24Static routes
set routing-options static route 172.16.1.0/24 next-hop 192.168.1.2
set routing-options static route 172.16.1.0/24 next-hop 192.168.2.2
set routing-options static route 172.16.1.0/24 next-hop 192.168.3.2Security zones, address book entry, and policy
set security zones security-zone trust interfaces ge-0/0/2
set security zones security-zone untrust interfaces ge-0/0/4
set security zones security-zone untrust interfaces ge-0/0/6
set security zones security-zone untrust interfaces ge-0/0/7
set security address-book global address FTP-servers 172.16.1.0/24
set security policies from-zone trust to-zone untrust policy permit-ftp match source-address any
set security policies from-zone trust to-zone untrust policy permit-ftp match destination-address FTP-servers
set security policies from-zone trust to-zone untrust policy permit-ftp match application junos-ftp
set security policies from-zone trust to-zone untrust policy permit-ftp then permitECMP routing policy
set policy-options policy-statement load-balancing-policy then load-balance per-packet
set routing-options forwarding-table export load-balancing-policy