当前位置: 首页 > news >正文

双机多网口配置同网段地址,可以通过目的IP确定接收数据的网卡吗?

环境

两台机器两网卡同网段接入同一个二层交换机。

在这里插入图片描述

机器A ens38 00:0c:29:a4:8b:fb 10.0.0.11/24 ens39 00:0c:29:a4:8b:05 10.0.0.12/24

机器B ens38 00:0c:29:4f:a6:c4 10.0.0.21/24 ens39 00:0c:29:4f:a6:ce 10.0.0.22/24

初始ARP表

只有管理口接口的ARP表项,10.0.0.0/24网段没有

机器A

root@ubuntu22:~# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
172.0.1.13               ether   00:0c:29:c1:16:a8   C                     ens33
172.0.1.131              ether   b4:56:b9:f0:02:a5   C                     ens33
172.0.1.32               ether   00:e0:97:1c:20:1a   C                     ens33
172.0.1.1                ether   00:e0:97:1c:20:1a   C                     ens33

机器B

root@u22s:~# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
172.0.1.32               ether   00:e0:97:1c:20:1a   C                     ens33
172.0.1.1                ether   00:e0:97:1c:20:1a   C                     ens33
172.0.1.12               ether   00:0c:29:a4:8b:f1   C                     ens33

A ens38 10.0.0.11 ----> B 10.0.0.21

root@ubuntu22:~# ping -I ens38 10.0.0.21 -c 5 -w 5
PING 10.0.0.21 (10.0.0.21) from 10.0.0.11 ens38: 56(84) bytes of data.
64 bytes from 10.0.0.21: icmp_seq=1 ttl=64 time=0.447 ms
64 bytes from 10.0.0.21: icmp_seq=2 ttl=64 time=0.236 ms
64 bytes from 10.0.0.21: icmp_seq=3 ttl=64 time=0.223 ms
64 bytes from 10.0.0.21: icmp_seq=4 ttl=64 time=0.231 ms
64 bytes from 10.0.0.21: icmp_seq=5 ttl=64 time=0.377 ms--- 10.0.0.21 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4097ms
rtt min/avg/max/mdev = 0.223/0.302/0.447/0.091 ms

抓包

在这里插入图片描述

arp表项

![ens38-ping-10.0.0.22](C:\Users\CK\Documents\blog\ens38-ping-10.0.0.22.png)root@ubuntu22:~# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
172.0.1.32               ether   00:e0:97:1c:20:1a   C                     ens33
10.0.0.22                ether   00:0c:29:4f:a6:ce   C                     ens38
172.0.1.1                ether   00:e0:97:1c:20:1a   C                     ens33
172.0.1.131              ether   b4:56:b9:f0:02:a5   C                     ens33
10.0.0.21                ether   00:0c:29:4f:a6:ce   C                     ens38
172.0.1.13               ether   00:0c:29:c1:16:a8   C                     ens33
172.0.1.25               ether   00:0c:29:4f:a6:ba   C                     ens33

数据走向图

在这里插入图片描述

A ens38 10.0.0.11 —> B 10.0.0.22

root@ubuntu22:~# ping -I ens38 10.0.0.22 -c 5 -w 5
PING 10.0.0.22 (10.0.0.22) from 10.0.0.11 ens38: 56(84) bytes of data.
64 bytes from 10.0.0.22: icmp_seq=1 ttl=64 time=0.479 ms
64 bytes from 10.0.0.22: icmp_seq=2 ttl=64 time=0.317 ms
64 bytes from 10.0.0.22: icmp_seq=3 ttl=64 time=0.208 ms
64 bytes from 10.0.0.22: icmp_seq=4 ttl=64 time=0.976 ms
64 bytes from 10.0.0.22: icmp_seq=5 ttl=64 time=0.294 ms--- 10.0.0.22 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4065ms
rtt min/avg/max/mdev = 0.208/0.454/0.976/0.274 ms

抓包

在这里插入图片描述

arp表项

root@ubuntu22:~# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
172.0.1.32               ether   00:e0:97:1c:20:1a   C                     ens33
10.0.0.22                ether   00:0c:29:4f:a6:ce   C                     ens38
172.0.1.1                ether   00:e0:97:1c:20:1a   C                     ens33
172.0.1.131              ether   b4:56:b9:f0:02:a5   C                     ens33
10.0.0.21                ether   00:0c:29:4f:a6:ce   C                     ens38
172.0.1.13               ether   00:0c:29:c1:16:a8   C                     ens33
172.0.1.25               ether   00:0c:29:4f:a6:ba   C                     ens33

机器B的ARP

root@u22s:~# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
172.0.1.32               ether   00:e0:97:1c:20:1a   C                     ens33
172.0.1.1                ether   00:e0:97:1c:20:1a   C                     ens33
10.0.0.11                ether   00:0c:29:a4:8b:fb   C                     ens39
172.0.1.12               ether   00:0c:29:a4:8b:f1   C                     ens33
10.0.0.11                ether   00:0c:29:a4:8b:fb   C                     ens38

数据走向图

在这里插入图片描述

A ens39 10.0.0.12 —> B 10.0.0.21

root@ubuntu22:~# ping -I ens39 10.0.0.21 -c 5 -w 5
PING 10.0.0.21 (10.0.0.21) from 10.0.0.12 ens39: 56(84) bytes of data.
64 bytes from 10.0.0.21: icmp_seq=1 ttl=64 time=0.415 ms
64 bytes from 10.0.0.21: icmp_seq=2 ttl=64 time=0.288 ms
64 bytes from 10.0.0.21: icmp_seq=3 ttl=64 time=0.202 ms
64 bytes from 10.0.0.21: icmp_seq=4 ttl=64 time=0.205 ms
64 bytes from 10.0.0.21: icmp_seq=5 ttl=64 time=0.195 ms--- 10.0.0.21 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4079ms
rtt min/avg/max/mdev = 0.195/0.261/0.415/0.084 ms

抓包

在这里插入图片描述

ARP表

root@ubuntu22:~# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
172.0.1.32               ether   00:e0:97:1c:20:1a   C                     ens33
10.0.0.22                ether   00:0c:29:4f:a6:ce   C                     ens38
172.0.1.1                ether   00:e0:97:1c:20:1a   C                     ens33
172.0.1.131              ether   b4:56:b9:f0:02:a5   C                     ens33
10.0.0.21                ether   00:0c:29:4f:a6:ce   C                     ens39
10.0.0.21                ether   00:0c:29:4f:a6:ce   C                     ens38
172.0.1.13               ether   00:0c:29:c1:16:a8   C                     ens33
172.0.1.25               ether   00:0c:29:4f:a6:ba   C                     ens33
10.0.0.22                ether   00:0c:29:4f:a6:ce   C                     ens39

数据走向图

在这里插入图片描述

A ens39 10.0.0.12 —> 10.0.0.22

root@ubuntu22:~# ping -I ens39 10.0.0.22 -c 5 -w 5
PING 10.0.0.22 (10.0.0.22) from 10.0.0.12 ens39: 56(84) bytes of data.
64 bytes from 10.0.0.22: icmp_seq=1 ttl=64 time=0.224 ms
64 bytes from 10.0.0.22: icmp_seq=2 ttl=64 time=0.233 ms
64 bytes from 10.0.0.22: icmp_seq=3 ttl=64 time=0.330 ms
64 bytes from 10.0.0.22: icmp_seq=4 ttl=64 time=0.279 ms
64 bytes from 10.0.0.22: icmp_seq=5 ttl=64 time=0.230 ms--- 10.0.0.22 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4100ms
rtt min/avg/max/mdev = 0.224/0.259/0.330/0.040 ms

抓包

在这里插入图片描述

ARP表项

root@ubuntu22:~# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
172.0.1.32               ether   00:e0:97:1c:20:1a   C                     ens33
10.0.0.22                ether   00:0c:29:4f:a6:ce   C                     ens38
172.0.1.1                ether   00:e0:97:1c:20:1a   C                     ens33
172.0.1.131              ether   b4:56:b9:f0:02:a5   C                     ens33
10.0.0.21                ether   00:0c:29:4f:a6:ce   C                     ens39
10.0.0.21                ether   00:0c:29:4f:a6:ce   C                     ens38
172.0.1.13               ether   00:0c:29:c1:16:a8   C                     ens33
172.0.1.25               ether   00:0c:29:4f:a6:ba   C                     ens33
10.0.0.22                ether   00:0c:29:4f:a6:ce   C                     ens39

机器B ARP表项

root@u22s:~# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
10.0.0.11                ether   00:0c:29:a4:8b:fb   C                     ens38
172.0.1.32               ether   00:e0:97:1c:20:1a   C                     ens33
10.0.0.12                ether   00:0c:29:a4:8b:05   C                     ens39
10.0.0.11                ether   00:0c:29:a4:8b:fb   C                     ens39
172.0.1.12               ether   00:0c:29:a4:8b:f1   C                     ens33
172.0.1.1                ether   00:e0:97:1c:20:1a   C                     ens33
10.0.0.12                ether   00:0c:29:a4:8b:05   C                     ens38

数据走向图

在这里插入图片描述

机器B ping 机器A

root@u22s:~# ping -I ens39 10.0.0.12 -c 3
PING 10.0.0.12 (10.0.0.12) from 10.0.0.22 ens39: 56(84) bytes of data.
64 bytes from 10.0.0.12: icmp_seq=1 ttl=64 time=0.199 ms
64 bytes from 10.0.0.12: icmp_seq=2 ttl=64 time=0.233 ms
64 bytes from 10.0.0.12: icmp_seq=3 ttl=64 time=0.244 ms--- 10.0.0.12 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2052ms
rtt min/avg/max/mdev = 0.199/0.225/0.244/0.019 ms
root@u22s:~# ping -I ens39 10.0.0.11 -c 3
PING 10.0.0.11 (10.0.0.11) from 10.0.0.22 ens39: 56(84) bytes of data.
64 bytes from 10.0.0.11: icmp_seq=1 ttl=64 time=0.192 ms
64 bytes from 10.0.0.11: icmp_seq=2 ttl=64 time=0.228 ms
64 bytes from 10.0.0.11: icmp_seq=3 ttl=64 time=0.292 ms--- 10.0.0.11 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2042ms
rtt min/avg/max/mdev = 0.192/0.237/0.292/0.041 ms
root@u22s:~# ^C
root@u22s:~# 
root@u22s:~# ping -I ens38 10.0.0.12 -c 3
PING 10.0.0.12 (10.0.0.12) from 10.0.0.21 ens38: 56(84) bytes of data.
64 bytes from 10.0.0.12: icmp_seq=1 ttl=64 time=0.192 ms
64 bytes from 10.0.0.12: icmp_seq=2 ttl=64 time=0.201 ms
64 bytes from 10.0.0.12: icmp_seq=3 ttl=64 time=0.930 ms--- 10.0.0.12 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2020ms
rtt min/avg/max/mdev = 0.192/0.441/0.930/0.345 ms
root@u22s:~# ping -I ens38 10.0.0.11 -c 3
PING 10.0.0.11 (10.0.0.11) from 10.0.0.21 ens38: 56(84) bytes of data.
64 bytes from 10.0.0.11: icmp_seq=1 ttl=64 time=0.195 ms
64 bytes from 10.0.0.11: icmp_seq=2 ttl=64 time=0.632 ms
64 bytes from 10.0.0.11: icmp_seq=3 ttl=64 time=0.251 ms

en39 10.0.0.22 --> 10.0.0.12
在这里插入图片描述

ens39 10.0.0.22 --> 10.0.0.11
在这里插入图片描述

ens38 10.0.0.21 --> 10.0.0.12
在这里插入图片描述

ens38 10.0.0.21 --> 10.0.0.11
在这里插入图片描述

数据走向图

在这里插入图片描述

arp表

root@u22s:~# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
10.0.0.11                ether   00:0c:29:a4:8b:fb   C                     ens38
172.0.1.32               ether   00:e0:97:1c:20:1a   C                     ens33
10.0.0.12                ether   00:0c:29:a4:8b:05   C                     ens39
10.0.0.11                ether   00:0c:29:a4:8b:fb   C                     ens39
172.0.1.12               ether   00:0c:29:a4:8b:f1   C                     ens33
172.0.1.1                ether   00:e0:97:1c:20:1a   C                     ens33
10.0.0.12                ether   00:0c:29:a4:8b:05   C                     ens38

现象分析

Node A ping Node B时, 不论目的IP是B.ens38还是B.ens39所有包都从 ens39 进入Node B

在这里插入图片描述

从ARP报文来看,10.0.0.21的MAC响应ens38和ens39都有,但是ens39的MAC响应是先收到的,ARP表中 10.0.0.21,10.0.0.22的mac地址都是 ens39 00:0c:29:4f:a6:ce。

Node B ping Node A时,数据包从对应IP的接口进入, ARP表中IP与MAC也是正确对应的,抓包到的ARP报文响应也是对应接口的MAC
在这里插入图片描述

小结

双机多网口二层连接,配置同网段地址,那么IP-MAC映射会存在不确定性,会受到ARP响应的先后顺序影响。如果多机多网口这样连接,恐怕不能通过指定源目的IP来实现指定接口到指定接口的通信。
而主机对ARP请求的响应,可能是都从一个接口处,也可能各个接口都出,这种行为的区别暂不清楚受到哪些内核配置的影响。

解决方法

设置规则

# 关闭ARP代答
sudo sysctl -w net.ipv4.conf.all.proxy_arp=0
sudo sysctl -w net.ipv4.conf.default.proxy_arp=0# 设置ARP过滤规则
sudo sysctl -w net.ipv4.conf.all.arp_ignore=1
sudo sysctl -w net.ipv4.conf.all.arp_announce=2
sudo sysctl -w net.ipv4.conf.default.arp_ignore=1
sudo sysctl -w net.ipv4.conf.default.arp_announce=2# For each specific interface
sudo sysctl -w net.ipv4.conf.ens38.arp_ignore=1
sudo sysctl -w net.ipv4.conf.ens38.arp_announce=2
sudo sysctl -w net.ipv4.conf.ens39.arp_ignore=1
sudo sysctl -w net.ipv4.conf.ens39.arp_announce=2
  • arp_ignore
    
    • 值为0:对所有请求进行响应。
    • 值为1:只响应目标IP地址是接口上本地地址的请求,不响应非本地地址的请求。
  • arp_announce
    
    • 值为0:默认行为,使用最合适的本地地址进行ARP应答。
    • 值为1:仅使用目标网络的最佳地址进行ARP应答。
    • 值为2:仅使用发送接口上的地址进行ARP应答。

抓包

在这里插入图片描述
没有多余ARP响应

ARP表

root@ubuntu22:~# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
10.0.0.22                ether   00:0c:29:4f:a6:ce   C                     ens38
172.0.1.131              ether   b4:56:b9:f0:02:a5   C                     ens33
172.0.1.32               ether   00:e0:97:1c:20:1a   C                     ens33
172.0.1.1                ether   00:e0:97:1c:20:1a   C                     ens33
10.0.0.21                ether   00:0c:29:4f:a6:c4   C                     ens38
172.0.1.13               ether   00:0c:29:c1:16:a8   C                     ens33
10.0.0.22                ether   00:0c:29:4f:a6:ce   C                     ens39

IP与MAC映射关系正常了。

相关文章:

  • C#算法(15)—求四边形的外接矩形
  • 部署Prometheus + Grafana实现监控数据指标
  • sqlalchemy连接池满了报错
  • 刷代码随想录有感(82):贪心算法——摆动序列
  • 【大数据篇】Spark:大数据处理的璀璨之星
  • 用Kotlin协程消灭安卓开发中的回调地狱
  • 【DrissionPage爬虫库 1】两种模式分别爬取Gitee开源项目
  • 《C++primer》第八章课后习题
  • 黑马聚合的分类及实现
  • 埃及媒体分发投放-新闻媒体通稿发布
  • [数据集][目标检测]红外车辆检测数据集VOC+YOLO格式13979张类别
  • K8s Pod 资源进阶
  • C++课程设计实验杭州电子科技大学ACM题目(上)
  • 跳绳技巧一:蝴蝶步
  • 【NumPy】NumPy线性代数模块详解:掌握numpy.linalg的核心功能
  • Android单元测试 - 几个重要问题
  • eclipse的离线汉化
  • Idea+maven+scala构建包并在spark on yarn 运行
  • JAVA_NIO系列——Channel和Buffer详解
  • Javascript Math对象和Date对象常用方法详解
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • PHP面试之三:MySQL数据库
  • Python学习之路13-记分
  • SpingCloudBus整合RabbitMQ
  • vue的全局变量和全局拦截请求器
  • Xmanager 远程桌面 CentOS 7
  • 七牛云假注销小指南
  • 巧用 TypeScript (一)
  • 让你的分享飞起来——极光推出社会化分享组件
  • 我的面试准备过程--容器(更新中)
  • 用Visual Studio开发以太坊智能合约
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (C语言)二分查找 超详细
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (回溯) LeetCode 131. 分割回文串
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (四) 虚拟摄像头vivi体验
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (新)网络工程师考点串讲与真题详解
  • (转载)(官方)UE4--图像编程----着色器开发
  • .NET Micro Framework初体验
  • .net中生成excel后调整宽度
  • @kafkalistener消费不到消息_消息队列对战之RabbitMq 大战 kafka
  • @require_PUTNameError: name ‘require_PUT‘ is not defined 解决方法
  • [1181]linux两台服务器之间传输文件和文件夹
  • [BJDCTF 2020]easy_md5
  • [C#]C# winform实现imagecaption图像生成描述图文描述生成
  • [Excel VBA]如何使用VBA自动生成图表
  • [excel与dict] python 读取excel内容并放入字典、将字典内容写入 excel文件
  • [FC][常见Mapper IRQ研究]
  • [flask]http请求//获取请求体数据
  • [JS]数据类型
  • [Linux] - 定时任务crontab
  • [linux]--关于进程概念(上)