文章目录
- 简述
- 选路策略
- 实验说明
- 开始验证
简述
ECMP(Equal Cost Multi Path)等价多路径,又称等价路由。指到达同一个目的IP或者目的网段存在多条COST值相等的不同路由路径。在具有多条到达同一目的地的网络链路的环境中,传统路由技术只能利用其中一条链路发送数据包,其他链路处于备用或无效状态。在动态路由环境下,切换需要时间。相比之下,等价多路径路由协议可以同时利用多条链路,提高传输带宽,且能够无延迟、无丢包地备份失效链路的数据传输。
选路策略
ECMP的路径选择策略有多种方法:
- 哈希,例如根据源IP地址的哈希为流选择路径。
- 轮询,各个流在多条路径之间轮询传输。
- 加权轮询,基于路径权重,根据路径的权重分配流,权重大的路径分配的流数量更多。
实验说明
Linux上实验ECMP(https://cloud.tencent.com/developer/article/1449969?from=15425),使用内核的ecmp进行路由的hash选路,在该情况下,ECMP会使用哈希算法进行选路:根据数据包的源IP、目的IP、源端口、目的端口计算出一个哈希值,然后再使用这个哈希值取余进行路由选路。
开始验证
-
生成3对veth(veth1~6)对和一个bridge(br0),其中veth1和veth3用于路由选路,veth5充当观察口,br0用于二层交换
ip link add veth1 type veth peer veth2 ip link add veth3 type veth peer veth4 ip link add veth5 type veth peer veth6 brctl addbr br0
-
.将veth2、veth4、veth6加到br0中,让veth1、veth3、veth5之间二层互通
brctl addif br0 veth2 brctl addif br0 veth4 brctl addif br0 veth6
-
配置veth1和veth3的IP
ip address add 172.16.1.11/32 dev veth1 ip address add 172.16.1.13/32 dev veth3
-
up所有虚拟设备
ip link set veth1 up ip link set veth2 up ip link set veth3 up ip link set veth4 up ip link set veth5 up ip link set veth6 up ip link set br0 up
-
配置到192.168.2.0/24网段的等价路由,weight权重必须相同
ip route add 192.168.2.0/24 nexthop via 172.16.1.11 dev veth1 weight 1 nexthop via 172.16.1.13 dev veth3 weight 1 ip route show
-
给veth1和veth3上手动配置arp,这样能让报文能到veth
for ((i = 0; i < 100; i++)); do arp -i veth1 -s 192.168.2.$i `cat /sys/class/net/veth5/address`;arp -i veth3 -s 192.168.2.$i `cat /sys/class/net/veth5/address`; done
以上指令执行结束后,可以用ip n|grep veth1或ip n|grep veth3检查确认,是否成功配置
-
ping目标网段,1s一个
for ((i = 0; i < 100; i++)); do ping -c 1 -W 1 192.168.2.$i; done
-
对veth5进行抓包,观察报文是来自veth1还是veth3
tcpdump -i veth5 -nn
veth5的抓包结果如下,可以看到,发往192.168.2.0/24网段的报文,被veth1和veth3均等的进行了路由,根据目的IP的不同进行了哈希选路。
-
删除相关设备,与之关联的路由表和arp表都会自动删除
ip link set veth1 down ip link set veth2 down ip link set veth3 down ip link set veth4 down ip link set veth5 down ip link set veth6 down ip link set br0 down ip link del veth1 ip link del veth3 ip link del veth5 brctl delbr br0