网站首页 > 精选文章 正文
ECMP(Equal Cost Multi Path)等价多路径,又称等价路由。指到达同一个目的IP或者目的网段存在多条COST值相等的不同路由路径。在该情况下,ECMP会使用哈希算法进行选路:根据数据包的源IP、目的IP、源端口、目的端口计算出一个哈希值,然后再使用这个哈希值取余进行路由选路。
Linux上的ECMP小实验,使用内核的ecmp进行路由的hash选路:

1、创建3对veth(veth1~6)对和一个网桥(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
2、将veth2、veth4、veth6加到网桥br0中,使veth1、veth3、veth5之间二层互通
brctl addif br0 veth2
brctl addif br0 veth4
brctl addif br0 veth6
3、给veth1和veth3配上IP
ip address add 172.16.1.11/32 dev veth1
ip address add 172.16.1.13/32 dev veth3
4、拉起所有设备
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
5、添加到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
6、在veth1和veth3上手动添加arp,以便报文能到veth5
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
7、使用内核协议栈打icmp的跳变流,1秒一个报文
for ((i = 0; i < 100; i++)); do ping -c 1 -W 1 192.168.2.$i; done
8、在veth5抓包,观察报文来自哪个设备
tcpdump -i veth5 -nn
9、删除相关设备,关联的路由表和arp表会自动删除
ip link set veth1 dwon
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
veth5的抓包结果如下,可以看到,发往192.168.2.0/24网段的报文,被veth1和veth3均等的进行了路由,根据目的IP的不同进行了哈希选路。

- 上一篇: 如何将一台Linux做成一个网关
- 下一篇: CentOS7 设置静态路由
猜你喜欢
- 2024-12-17 CentOS7 设置静态路由
- 2024-12-17 如何将一台Linux做成一个网关
- 2024-12-17 如何将linux 做成一台路由器
- 2024-12-17 linux网络虚拟化:network namespace之间的通信
- 2024-12-17 怎么用ip命令在linux中添加路由表项?
- 2024-12-17 route add 在服务器通过静态路由配置双网关案例
- 2024-12-17 Linux route命令用法(重写)
- 2024-12-17 【Linux】你必须掌握的Linux网络配置常用基础命令
- 2024-12-17 给主机的一个网卡设置多个IP的思路
- 2024-12-17 linux的网络地址的配置
- 最近发表
- 标签列表
-
- 向日葵无法连接服务器 (32)
- git.exe (33)
- vscode更新 (34)
- dev c (33)
- git ignore命令 (32)
- gitlab提交代码步骤 (37)
- java update (36)
- vue debug (34)
- vue blur (32)
- vscode导入vue项目 (33)
- vue chart (32)
- vue cms (32)
- 大雅数据库 (34)
- 技术迭代 (37)
- 同一局域网 (33)
- github拒绝连接 (33)
- vscode php插件 (32)
- vue注释快捷键 (32)
- linux ssr (33)
- 微端服务器 (35)
- 导航猫 (32)
- 获取当前时间年月日 (33)
- stp软件 (33)
- http下载文件 (33)
- linux bt下载 (33)