搭建拓扑图发送ARP及ICMP数据报文

news2024/12/24 12:28:10

文章目录

  • 搭建拓扑图
  • 设备说明
  • 通过PC1 ping PC2
  • 小结:
  • 当arp表缓存过期,而mac学习表未过期
  • 当arp表缓存未过期,而mac学习表过期
    • 使用VLAN分割广播域

搭建拓扑图

在这里插入图片描述

设备说明

两台PC电脑
在这里插入图片描述
同理另外一台电脑也是同理配置 IP地址:192.168.1.2/24

交换机: 类型为:S3700,PC1电脑和交换机的 Ethernet0/0/1相连。PC2电脑和交换机的 Ethernet0/0/2相连。
交换机端口都保持默认模式及配置,即Hybrid,pvid 1,untag 。
在交换机上 执行 u t m //即关键告警及日志 stp disable //关闭stp协议,因为抓包时会有大量的stp报文,影响查询其他报文,故而关闭

通过PC1 ping PC2

当PC电脑及交换机都连接好以后,开启成功后。
此时查看PC1上的arp表:
arp表里 有 IP地址 和 MAC地址的对应关系,以及类型(是动态的还是静态的)动态的有老化时间,而静态的则不会
通过 arp -a 命令
在这里插入图片描述
此时可以看到PC1的arp表是空的。
查看交换机上MAC地址表:
在这里插入图片描述
可以看到交换机上学习的MAC地址表目前也是空的。

为了更好的模拟再加一台电脑:
新的拓扑如下:
在这里插入图片描述
当PC1首次通过ping命令访问PC2时,即 ping 192.168.1.2 。手写PC1先按照自身的子网掩码和PC2的IP地址192.168.1.2 计算。得到PC2的网段192.168.1.0。发现和自身处于同一个网段。然后查询arp列表,看是否有IP地址192.168.1.2,没有找到。那么此时PC1会首先主动发送一个ARP广播数据包(request)到交换机。
此时在Ethernet 0/0/1端口抓包可以看到
发送者(源)MAC 地址为:54:89:98:AD:50:60 , 发送者(源)IP 地址为: 192.168.1.1
目标 MAC地址为:ff:ff:ff:ff:ff:ff (全是1的MAC地址为广播地址)
目标 IP地址为:192.168.2.1 在这里插入图片描述
当交换机收到来自PC1的ARP的请求报文时,交换机拆开二层报文,获取发送者的MAC地址,然后对发送者的MAC地址及对应的转发端口进行学习,记录到MAC地址表中。
在这里插入图片描述
然后 查看源MAC地址,发现数据包中的,源MAC地址为ff:ff:ff:ff:ff即广播地址。那么交换机会对此ARP数据包进行广播,广播到除接收此数据包Ethernet 0/0/1的其他交换机端口。则此时PC2和PC3都会收到此数据包。
PC2收到此ARP数据包后,拆开三层报文,会把发送者的IP地址及MAC地址缓存到自己的ARP表中,然后查看目标IP地址是否自己主机的IP地址是否一致,经比较发现一致,则PC2发送ARP响应报文。
PC3收到此ARP数据包也是先把发送者的IP地址及MAC地址缓存到自己的ARP表中,然后查看目标IP地址是否自己主机的IP地址是否一致,经比较发现不一致,则PC3则不会发送ARP响应报文,也就是PC3不会做出回复的响应。
在这里插入图片描述

PC2在ARP响应报文中,发送者的MAC地址为:54:89:98:2a:0b:ed, 发送者的IP地址为:192.168.1.2,
目标者MAC地址:54:89:98:ad:50:60,目标者IP地址:192.168.1.1
在这里插入图片描述
到交换机收到PC2发送的ARP响应报文后,会把发送者的MAC地址学习到MAC地址表中,然后查看目标者MAC地址是否在 MAC地址表。因为 之前交换机在接收ARP请求报文时,已经学习过了。所以交换机会根据MAC表记录的目标者的MAC地址对应的转发端口,将ARP响应报文转发到Ethernet 0/0/1口,(也就是ARP请求报文是广播,ARP响应报文是单播)。进而PC1收到ARP响应报文。PC1主机将PC2的MAC地址及IP地址缓存到自己的ARP表中。
在这里插入图片描述
PC1电脑上的ARP表:
在这里插入图片描述
经以上过程后,PC1就知道了IP地址为:192.168.1.2这台电脑的MAC地址。
紧接着PC1就会每个1秒给PC2主动发送ICMP请求报文。交换机接收到PC1发送的ICMP请求报文后,会根据MAC学习表,将ICMP请求报文转发至和PC2相连的端口上,当PC2收到ICMP请求报文后,会给PC1发送ICMP响应报文。交换机接收到PC2发送的ICMP响应报文后,会根据MAC学习表,将ICMP请求报文转发至和PC1相连的端口上,PC1收到PC2的ICMP响应报文。那么将表明PC1和PC2之间的网络是相通的。
在这里插入图片描述
在这里插入图片描述

小结:

ARP协议:地址解析协议,作用就是根据IP地址寻找对方的MAC地址。它是一个适用局域网的协议报文,不会跨网段进行转发。
一个主机发送的ARP报文只会到达和其直连的交换机,同网段的主机,自己的网关设备处,总之不会跨网段进行转发。
当 一个主机ping 同网段的另一个主机时,如果当前主机不知道对方的MAC地址,则会先发送一个ARP报文,获取到对方的MAC地址后,再进行发送ICMP报文。
如果当前主机知道对方的MAC地址(即当前主机ARP表有对方主机的IP及MAC映射),则直接发送ICMP报文。

当arp表缓存过期,而mac学习表未过期

在PC1上 通过 arp -d 命令清空arp缓存表 ,相当于手动强制过期
通过arp -a 再次查看发现为空,表明确实缓存表已经清空了。
在这里插入图片描述
交换机上学习到的MAC地址还在
在这里插入图片描述
此时在PC1上ping 192.168.1.2 (PC2主机的ip),由于PC1主机上arp表是空的,在本地找不到同网段的目标IP地址192.168.1.2的MAC地址,所以PC1主机,会首先发生一个ARP广播请求数据报文到交换机,交换机上虽然有MAC学习地址表,但是交换机收到的是ARP广播请求数据包,即目标MAC地址为ff:ff:ff:ff:ff:ff即广播帧。交换机是不会查MAC地址表的,(显示MAC学习表中是不会有这个广播MAC地址的)。交换机会把这个ARP广播请求包,广播到其他端口,当PC2和PC3收到此广播数据包后,只有PC2主机会发送ARP响应数据包。流程就和上面的一样了。
总结:只要主动发起ping的PC上的ARP缓存表中,没有同网段的目标IP地址就发送ARP广播请求数据报文。
交换机上的动态MAC表虽然未过期,如果接收到的数据包中的源MAC地址及接收的端口对应关系有变化,那么交换机的动态MAC表
会根据数据包最新的源MAC地址及接收数据包的端口号,进行会主动更新MAC地址表。

当arp表缓存未过期,而mac学习表过期

PC1 不会发送 arp,因为它已经知道 PC2 的 mac 地址
交换机发送 arp,因为它是 l2 设备,而 arp 本质上是 l3

那么这种情况,PC1 在ping PC2时,因为PC1的ARP表中有PC2的MAC地址,所以就不会先发送ARP包了,直接发送ICMP请求报文。
当交换机收到ICMP请求报文后,由于MAC地址表是空的,会先学习源MAC地址将入端口的映射关系记录到MAC地址表中,然后根据目标MAC地址,查询MAC地址表,发现找到对应的目标MAC地址,则交换机认为这样的包为未知单播帧,会将其广播(即泛洪)到其他端口。
则PC2和PC3都会收到此ICMP单播数据帧。但只有PC2会回复ICMP响应报文,交换机收到ICMP响应报文后,学习响应报文中的源MAC地址及入端口记录到MAC地址表中。根据MAC地址表中的目的地址对应的端口将数据转发到PC1主机上。
在这里插入图片描述
在这里插入图片描述
总结:交换机处理数据帧的行为
如果接收的 是单播帧:交换机在MAC地址表查不到这个帧的目的MAC地址,则交换机认为此数据帧为未知单播帧,对该单播帧执
行泛洪操作。
如果接收的 是广播帧:交换机不会去查MAC地址表,直接对该广播帧执行泛洪操作。

这就是为什么我们使用 VLAN 来包含广播并在逻辑上将“类似”流量分段到自己的网络。

使用VLAN分割广播域

在交换机上:

[Huawei] vlan batch 10 20 //批量创建vlan 10 和 vlan20

[Huawei] interface Ethernet0/0/1 //进入端口Ethernet 0/0/1
[Huawei-Ethernet0/0/1] port link-type access //修改端口模式为access
[Huawei-Ethernet0/0/1] port default vlan 10 //将模式为access的端口Ethernet0/0/1的pvid改为 vlan 10
[Huawei-Ethernet0/0/1] dis th //查询当前端口的上述配置是否生效

[Huawei] interface Ethernet0/0/2 //进入端口Ethernet 0/0/2
[Huawei-Ethernet0/0/2] port link-type access //修改端口模式为access
[Huawei-Ethernet0/0/2] port default vlan 10 //将模式为access的端口Ethernet0/0/2的pvid改为 vlan 10

[Huawei] interface Ethernet0/0/3 //进入端口Ethernet 0/0/3
[Huawei-Ethernet0/0/3] port link-type access //修改端口模式为access
[Huawei-Ethernet0/0/3] port default vlan 20 //将模式为access的端口Ethernet0/0/3的pvid改为 vlan 30

access端口的特点:收到数据帧后打pvid标签,发送数据帧时剥离vlan(pvid)标签,再发送。
上述相当于 端口0/0/1和0/0/2 加入到vlan 10下。0/0/3加入到vlan20下。
那么在 PC1发送广播帧时,或者交换机收到PC1发送过来的未知单播帧时,交换机进行泛洪时,就不会再数据帧泛洪到0/0/3端口了,即PC3也就收不到了。也就是广播帧和未知单播帧,交换机会基于vlan进行广播转发,在逻辑上起到划分广播域。
在这里插入图片描述

华为交换机默认出厂时端口为hybrid ,pvid 为vlan 1。untag列表里只有一个vlan 1,tagged列表里为空。这也是默认出厂设置。
其他在什么都没配置华为交换机,在接收到PC1的单播数据帧后,会给数据帧打上pvid标签,即vlan 1。然后根据VLAN属性查找MAC地址表。
在这里插入图片描述
如果VLAN/ VSI /SI 这一列的 vlan 属性值 和单播数据帧里的vlan标签相同的。会进一步比较单播数据帧里的目的MAC地址是否在MAC Address里。
如果找不到相匹配的vlan属性值,或者找到了对应的vlan属性值但是在含有这些vlan属性值的记录里,找到目的MAC地址。那么交换机就会进行广播转发数据帧。

如果PC1发送的是广播帧,则交换机收到后会打上pvid标签,不会根据属性查看Mac地址表,直接将广播帧泛洪到所有其他端口,然后根据端口模式规则对广播帧是转发还是丢弃。

ping 命令:要保证 发送数据 和接收数据都要通才行。有可能出现发送数据是通的,但是响应数据的链路是不通的。所以两者都要考虑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1507769.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【架构笔记3】做“用心”之人

凡事就怕“用心”二字,但是用心做事,其实如果没有前提和详情,这本就是一句正确的废话,在一些项目开发和落地过程中,我也有了一些新的体会,自认为不是多余。 我觉得心这个词至少包含四个含义:“…

H62410Y 惠海 降压恒压芯片 仪表供电芯片 24V36V100V降3.3V5V1A

降压恒压仪表供电芯片的工作原理如下: 输入电压传感器:感知电源电压的大小,以便后续控制电压输出。 储能元件:内部有储能元件(如电容器或电感等),用于存储电荷或电能,以供后续转换…

ESP32S3部署Edge Impulse模型

在上一篇文章中我们介绍了如何使用edge impulse训练一个图片分类模型并导出arduino库文件。在这篇文章中我们将介绍如何在esp32s3中部署这个训练好的图片分类模型。 添加进Arduino库 有两种方法将下载的文件添加进Arduino库。 在Arduino IDE程序中,转到项目选项卡…

【深度学习笔记】优化算法——Adam算法

Adam算法 🏷sec_adam 本章我们已经学习了许多有效优化的技术。 在本节讨论之前,我们先详细回顾一下这些技术: 在 :numref:sec_sgd中,我们学习了:随机梯度下降在解决优化问题时比梯度下降更有效。在 :numref:sec_min…

【LeetCode: 151. 反转字符串中的单词 + 双指针】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

【格与代数系统】格与代数系统汇总

【格与代数系统】格与哈斯图 目录 关系 偏序关系 偏序集 可比性 全序集 最值与上下界 上下确界 格 代数系统 性质 格与代数系统的关系 分配格 有界格 有补格 布尔代数 例1 例2 对偶格 软代数 完备格 稠密性 优软代数 小结 关系 X,Y是两个非空集合, 记若…

C语言编译成库文件的要求

keil编译成库文件 在Keil中,将C语言源文件编译成库文件通常需要进行以下步骤: 创建一个新的Keil项目,并将所需的C语言源文件添加到该项目中。 在项目设置中配置编译选项,确保生成的目标文件符合库文件的标准格式。 编译项目&…

ULBF810-ASEMI新能源整流桥ULBF810

编辑:ll ULBF810-ASEMI新能源整流桥ULBF810 型号:ULBF810 品牌:ASEMI 封装:ULBF-4 最大重复峰值反向电压:1000V 最大正向平均整流电流(Vdss):8A 功率(Pd):中小功率 芯片个数&#xff1a…

无人机手持地面站软件功能详解,无人机手持地面站软件开发人员组成及成本分析

无人机手持地面站软件是专为无人机操控和任务管理设计的移动应用,它通常集成在智能手机、平板电脑或其他便携式设备上,使得用户可以在远离无人机的地方对飞行器进行实时监控与远程控制。 主要功能详解: 1. 飞行控制与姿态显示: …

Android 音频系统

导入 早期Linux版本采用的是OSS框架,它也是Unix及类Unix系统中广泛使用的一种音频体系。 ALSA是Linux社区为了取代OSS而提出的一种框架,是一个源代码完全开放的系统(遵循GNU GPL和GNU LGPL)。ALSA在Kernel 2.5版本中被正式引入后,OSS就逐步…

力扣每日一题 猜数字游戏 阅读理解

Problem: 299. 猜数字游戏 思路 &#x1f468;‍&#x1f3eb; 灵神 复杂度 Code class Solution {public String getHint(String secret, String guess) {int a 0;int[] cntS new int[10];int[] cntG new int[10];for(int i 0; i < secret.length(); i){if(secre…

数据库(SQL sever)

本博客将主要讲述数据库&#xff08;SQL sever&#xff09; 1.数据库解决的数据问题&#xff1a; Data redundancy and inconsistency(数据冗余和不一致) Difficulty in accessing data Data isolation (数据孤立) Integrity problems (完整性问题) Atomicity of updates…

组态软件基础知识

一、组态软件基础知识 1、概述 &#xff08;1&#xff09;、组态软件概念与产生背景 “组态”的概念是伴随着集散型控制系统&#xff08;Distributed Control System简称DCS&#xff09;的出现才开始被广大的生产过程自动化技术人员所熟知的。在工业控制技术的不断发展和应用…

基于FPGA的HyperRam接口设计与实现

一 HyperRAM 针对一些低功耗、低带宽应用&#xff08;物联网、消费产品、汽车和工业应用等&#xff09;&#xff0c;涉及到外部存储&#xff0c;HyperRAM提供了更简洁的内存解决方案。 HyperRAM具有以下特性&#xff1a; 1、超低功耗&#xff1a;200MHz工作频率下读写不到50mW…

基于SpringBoot的农产品特色供销系统(蔬菜商城)

基于SpringBoot的农产品特色供销系统&#xff08;蔬菜商城&#xff09; 系统介绍 该系统使用Java、MySQL、Redis、Spring Boot和HTML等技术作为系统的技术支撑&#xff0c;实现了以下功能模块&#xff1a; &#xff08;1&#xff09;后台管理模块&#xff0c;包括权限、日志、…

学习Java的第七天

目录 一、什么是数组 二、作用 三、如何使用数组 1、声明数组变量 2、创建数组 示例&#xff1a; 3、数组的使用 示例&#xff1a; 4、数组的遍历 for循环示例&#xff08;不知道for循环的可以查看我之前发的文章&#xff09; for-each循环&#xff08;也就是增强for…

CAN一致性测试:物理层测试之终端电阻测试

从本周开始结合工作实践&#xff0c;给大家总结CAN一致性相关的测试 包括&#xff1a;物理层、数据链路层、应用层三大块知识点 CAN一致性测试:物理层测试之终端电阻测试 试验目的&#xff1a; 测试控制器的 CANH 对地、CANL 对地、CANH 对 CANL 的内阻是否符合 ISO11898-2的…

2024年k8s最新版本使用教程

2024年k8s最新版本使用教程 3. YAML语言入门3.1 基本语法规则3.2 支持的数据结构3.3 其他语法 4 资源管理4.1 k8s资源查询4.2 资源操作命令4.3 资源操作方式4.3.1 命令行方式4.3.2 YAML文件方式 5 Namespace5.1 查看命名空间5.2 创建命名空间5.3 删除命名空间5.4 命名空间资源限…

GitOps实践之Argo CD (2)

argocd 【-1】argocd可以解决什么问题? helm 部署是手动的?依赖流水线。而有时候仅仅更新一个小东西,流水线跑好久,CD真的不应该和CI耦合。不同环境的helm配置不同,手动修改问题多,可以用git管理起来,例如分不同环境用目录区分。argocd创建应用可以不通环境部署到不同集…

基于Java+springboot+VUE+redis实现的前后端分类版网上商城项目

基于Java springbootVUEredis实现的前后端分类版网上商城项目 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言…