简介
在计算机网络中,很多时候通信的源和目的存在多条已知路径。例如在数据中心网络中,需要有大量的带宽资源,且网络拓扑已知,利用这种特性可以采用ECMP(Equal-cost multi-path, 等价多路径路由)来进行负载均衡。
ECMP是指,到达一个目的地有多条相同度量值的路由项(路由路径),这样就可以使用不超过3条这样的路径来转发流量。ECMP最大的特点是实现了等值情况下,多路径负载均衡和链路备份的目的,在静态路由和OSPF中基本上都支持ECMP功能。
ECMP
传统的路由协议都是采用单路径路由的方式,简单地认为,从源到目的,所有的包都通过一条路径转发(如果某条最优路径出现了问题,再考虑下一条最优路径),其它链路处于备份状态或无效状态,并且在动态路由环境下相互的切换需要一定时间。
例如在上面这张图片的拓扑结构中,从source到Destination,是有两条路径可走的且代价相同。在正常情况下,SW1会选择随意的一跳链路进行转发,例如选择SW1、SW2、SW5这条路径,那么每次都会走转发表的这一项,通过这条链路进行报文传输。
这样存在两个问题:
- 如果占用的带宽比较高,所有流量都在上面的链路上进行传输,而下面的链路一直闲着,显然不合理
- 容易导致上面这条链路负担过重,直至难以承担
因此,在这里也可以采取一种方式,对于不同的报文,选择不同的路径进行报文传输。
可以选择的负载均衡策略:
- 基于流负载分担
路由器根据IP报文的五元组信息(是指源IP地址,源端口,目的IP地址,目的端口,和传输层协议这五个量组成的一个集合。 例如:192.168.1.1 10000 TCP 121.14.88.76 80 就构成了一个五元组)将数据分成不同的流。具有相同五元组信息的IP报文属于同一个流。 - 基于包负载分担
转发数据时,路由器把数据包从多个路径上依次发送出去。但是,Internet应用都是基于流的,如果路由器采用基于包的负载分担,一条流中的数据包会经过不同路径到达目的地,可能会造成接收方的乱序接收,从而影响应用程序的正常运行。 - 基于带宽的非平衡负载分担
报文按接口物理带宽进行负载分担(即基于报文的负载分担)。当用户为接口配置了指定的负载带宽后,设备将按用户指定的接口带宽进行负载分担,即根据各接口物理带宽比例关系进行分配。
优点
正如上面讨论的,采用ECMP可以可同时利用多条路径,进行基于流的负载均衡。防止局部网络链路过于拥塞,而部分网络链路相对空闲。
在网络环境下同时使用多条链路,不仅增加了传输带宽,并且可以无时延无丢包地备份失效链路的数据传输。
负载均衡也可以有效地提高网络的利用率,灵活的选择自己的网络链路。进一步地,可以通过探测各路径的状况(比如丢包率)猜测网络的拥塞程度,据此调整对各路径的使用,从而在得到优质服务的同时也提高了网络的利用率。
缺点
- 虽然可以提高网络利用率,但是也可能增加链路的拥塞
ECMP并没有拥塞感知的机制,只是将流分散到不同的路径上转发,可能加剧链路的拥塞 - 非对称网络使用效果不好
从定义也能够看出,多条相同度量值的路由项适用ECMP。但是很多实际情况下,也可以选择其他的更加灵活的链路,才是合理的 - 基于流的负载均衡效果不好
例如,假如在之前的拓扑中,再加一个Source2,Source1流量为100,Source2流量为10,不管Source1的流量走哪个链路,都会拥塞
参考
数据中心内负载均衡-ECMP的使用分析ecmp理论的初步认识(持续更新)浅析ECMP等价路由多路径路由算法选择(1)——ECMP、WCMP交换机的三种转发模式