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

文章目录

  • 搭建拓扑图
  • 设备说明
  • 通过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.hqwc.cn/news/517492.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html css 导航栏 2

鼠标划过会向上移动改变颜色 html文件 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>导航栏</title><link rel"stylesheet" href"css/dhl1.css" /></head><body><div …

python基础(11)《Allure报告中的组件用法》

使用 官方教程&#xff1a;https://docs.qameta.io/allure 入门 想要看到allure报告&#xff0c;需要做2个步骤&#xff1a; 1、pytest执行时关联allure&#xff1a;pytest命令带上--alluredir 结果存放目录或--alluredir结果存放目录&#xff1b; 2、打开执行报告&#xff…

【树上倍增】【割点】 【换根法】3067. 在带权树网络中统计可连接服务器对数目

作者推荐 视频算法专题 本文涉及知识点 树上倍增 树 图论 并集查找 换根法 深度优先 割点 LeetCode3067. 在带权树网络中统计可连接服务器对数目 给你一棵无根带权树&#xff0c;树中总共有 n 个节点&#xff0c;分别表示 n 个服务器&#xff0c;服务器从 0 到 n - 1 编号…

人工智能在信息系统安全中的运用

一、 概述 对于企业和消费者来讲&#xff0c;人工智能是非常有用的工具&#xff0c;那又该如何使用人工智能技术来保护敏感信息?通过快速处理数据并预测分析&#xff0c;AI可以完成从自动化系统到保护信息的所有工作。尽管有些黑客利用技术手段来达到自己的目的&#xff0c;但…

代码随想录第51天|● 300.最长递增子序列 ● 674. 最长连续递增序列 ● 718. 最长重复子数组

文章目录 ● 300.最长递增子序列思路代码&#xff1a; ● 674. 最长连续递增序列思路&#xff1a;代码&#xff1a; ● 718. 最长重复子数组思路&#xff1a;代码一&#xff1a;dp二维数组代码二&#xff1a;滚动数组 ● 300.最长递增子序列 思路 dp[i]表示i之前包括i的以nums…

Github 2024-03-07Go开源项目日报 Top10

根据Github Trendings的统计,今日(2024-03-07统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10TypeScript项目1Harbor - 开源的云原生注册表项目 创建周期:2908 天开发语言:Go协议类型:Apache License 2.0Star数量:21549 个For…

【SQL】176. 第二高的薪水 (IFNULL() + LIMIT OFFSET)

前述 知识点学习&#xff1a;推荐阅读 sql语句中limit、offset的用法 题目描述 题目链接&#xff1a;176. 第二高的薪水 写法一 去掉最大的&#xff0c;再取最大的 ⇒ 第二大的。 select max(B.salary) as SecondHighestSalary from Employee B where B.salary ! (select…

pytorch什么是梯度

目录 1.导数、偏微分、梯度1.1 导数1.2 偏微分1.3 梯度 2. 通过梯度求极小值3. learning rate3. 局部最小值4. Saddle point鞍点 1.导数、偏微分、梯度 1.1 导数 对于yx 2 2 2 的导数&#xff0c;描述了y随x值变化的一个变化趋势&#xff0c;导数是个标量反应的是变化的程度&…

MySQL NDB Cluster 基于Nginx stream的负载均衡配置

安装nginx https://nginx.org/en/download.html 首先从nginx官网中下载nginx 1.12.2.tar.gz 解压nginx.1.22.2.tar.gz之后&#xff0c;执行以下命令基于stream编译Nginx&#xff0c;使得Nginx能够提供tcp代理的功能 ./configure --with-stream make make install配置Nginx …

Linux——线程(2)

在上一篇博客中我介绍了Linux中的线程是什么样的&#xff0c;就如同进程可以通过 fork创建&#xff0c;可以被终止&#xff0c;可以退出一样&#xff0c;线程也可以被我们用户控制&#xff0c;这 篇博客我会介绍线程的控制&#xff0c;并且基于线程的控制所产生的一些问题进行 …

Unity3d调用C++ dll中的函数

一、生成dll 1.新建dll工程 2. 不用管dllmain.cpp&#xff0c;添加自定义Helper.h和Helper.cpp 3.添加要在外部调用的方法 //头文件 #define DLLEXPORT extern "C" __declspec(dllexport) DLLEXPORT int _stdcall Addition(int x, int y); DLLEXPORT int _stdcal…

泰华信号隔离器一进二出分配转换配电变送器有源4-20mA 0-10V输出

品牌&#xff1a;泰工华控 信号隔离器&#xff0c;高精度&#xff0c;高线性度&#xff0c;低温漂。好品质源于用心&#xff0c;我们专心打造好的隔离器。 您需要一款这样的隔离器&#xff0c;转换精度高&#xff0c;响应速度快&#xff0c;耐压隔离高&#xff0c;三端隔离技…