【某农业大学计算机网络实验报告】实验二 交换机的自学习算法
实验目的:
(1)理解交换机通过逆向自学习算法建立地址转发表的过程。
(2)理解交换机转发数据帧的规则。
(3)理解交换机的工作原理。
实验器材:
一台Windows操作系统的PC机。
实验准备:
1.配置网络拓扑:首先,在 Packet Tracer 7.3.1 模拟器中配置好如下的网络拓扑结构。如下图所示,具体包括一台交换机分别连接PC0、PC1、PC2三台主机:
另:配置过程中交换机端口指示灯可能呈橙色,单击主窗口右下角 Realtime (实时)Simulation(模拟)模式切换按钮数次,即可加速完成交换机的初始化。
2. 配置 IP 地址和子网掩码:根据实验要求,对于每个设备,按照实验指导书中提供的表格配置IP地址,点击 PC,打开参数表如下所示,在每台 PC 的配置窗口中配置合理的 IP 地址和子网掩码,除此在此次实验中我们需要重点关注各个主机的MAC地址,因此我们可以在此处点击【Config】—>【FastEthernet0】—>【MAC Address】处查看主机的MAC地址:
3. 使用主页面左上角的Inspect 工具,我们可以查看交换机 0 的地址转发表(MAC Table)发现该任务中数据包的源/目标主机 PC0 和 PC2 的 MAC 地址已经存在于交换机 0 的地址转发表中,出现这种情况的原因是:我发现在我们为各个主机分配IP地址后,如果主机与交换机已经连结成了一个完整的以太网,那么主机就会向交换机发送一个数据包,因此交换机中的交换表不为空;
4. 但上述的实验情况是我们在后续的实验过程中希望避免的,因此我们需要使用命令清空交换表,点击主页面左上角的【Select(Esc)】—>【CLI】,首先输入 enable 进入特权模式,再输入clear mac-a即可清空交换机交换表:
5. 设置 Event List Filters(事件列表过滤器):在模拟状态中,设置事件列表过滤器只显示ARP与ICMP事件,可以在后续实验过程中精简进程的显示与避免额外情况的出现。
实验内容:
任务一:观察单个交换机在简单拓扑下转发表的变化
1. 添加 PC0 到 PC2 的简单 PDU:切换到模拟模式进行观察:单击 Add Simple PDU(添加简单 PDU)按钮,在拓扑图中添加 PC0 向PC2 发送的数据包,可以发现此时有两个数据包显示在主机PC0上:
2.经后续实验过程我们可以知道,绿色信封为ARP码,红色信封为ICMP码,PC0首先向交换机发送一个ARP码,而交换机为了确认哪一个端口属于PC2,选择将该ARP码广播给其网络内的所有主机,PC1拒绝接收该ARP码,而PC2可以成功接收,此一步骤完成后,交换机中已经成功存下了PC0的MAC地址:
3.PC2接收到PC0的ARP 请求后,需要向主机 PC0 发送响应报文,交换机接收到PC2发送的响应报文后即会在其交换表中写入 PC2 的MAC地址和接口 F0/1 的映射,因此当PC0接收到响应报文后,交换机的交换表中就已经有了PC0与PC2两个主机的MAC地址与接口映射:
4.因此,接下来传输红色信封(即ICMP码)的过程则与我们实验一中交换机传输单播包的过程相同,PC0将数据包通过交换机点对点传输给PC2后,PC2再通过交换机将应答包通过交换机点对点传输给PC0,至此一个完整的交换机单播包的传输过程就完成了。
任务二:观察单个交换机在拓展网络拓扑下转发表的变化
1.扩展网络拓扑如下图所示,具体为在网络中增加一个集线器与两个主机,集线器与交换机相连,两个主机PC3与PC4分别与集线器相连,除此之外同样要对交换机使用命令清空交换表的操作,点击主页面左上角的【Select(Esc)】—>【CLI】,首先输入 enable 进入特权模式,再输入clear mac-a即可清空交换机交换表:
2.除此之外,我们还要删除各个主机的ARP表,与删除交换机的交换表类似,点击主页面左上角的【Select(Esc)】进入主机的显示页面,选择【Desktop】—>【Command Prompt】,主机命令提示符输入 arp -d 即可清空主机 arp 缓存表,再次打开ARP Table即可看见缓存表为空:
3.添加 PC3 到 PC4 的简单 PDU,进入模拟模式,并观察此时交换机的行为,PC3首先将ARP包发送给集线器后,集线器广播给所有连接对象,其中PC4与交换机成功接收到PC3的ARP包后,交换表与缓存表中就都已经有了PC3的MAC地址:
4.但同时交换机在转发表中并没有找到PC4的MAC地址,因此将该ARP请求转发给PC0、PC1、PC2三个主机,与此同时PC4向PC3发送响应帧,该帧经集线器广播到交换机,交换机此时记录下了PC4的MAC地址与接口映射,并查找转发表发现目的帧的接口与帧的进口一致,故不转发该帧:
5. 因此,接下来传输棕色信封(即ICMP码)的过程则与我们实验一中集线器传输单播包的过程相同,PC3将数据包传输给集线器后,集线器通过广播的方式将数据包广播给交换机与PC4,PC4将接收该数据包,而交换机会丢弃该帧,这是因为交换机在查找转发表后发现目的帧的接口与帧的进口一致,而后PC4再将返回的应答包传输给集线器,集线器同样广播给交换机与PC3,PC3成功接收而交换机丢弃该帧,至此一个完整的单播包的传输过程就完成了。
任务三:观察多个交换机互连情形下转发表的变化
1.搭建网络拓扑如下图所示,具体为在网络中加入三个交换机与三个主机,每个交换机分别一个主机相连,除此之外同样要对交换机使用命令清空交换表的操作,点击主页面左上角的【Select(Esc)】—>【CLI】,首先输入 enable 进入特权模式,再输入clear mac-a即可清空交换机交换表:
2. 添加 PC0 到 PC2 的数据包,分步骤观察交换机0,交换机1和交换机2的转发表的变化情况:
(1)PC0由于并不清楚PC2接口所在位置,首先向交换机0发送ARP数据包,交换机0因此在交换表中记下PC0的MAC地址,其余交换机交换表不变; | |
(2)交换机0接收到ARP包后,将其广播给交换机1,交换机1因此在交换表中记录下PC0的MAC地址与接口; | |
(3)交换机1接收到ARP包后,将其广播给交换机2与PC1,交换机2因此在交换表中记录下PC0的MAC地址与接口,PC1则丢弃该ARP包; | |
(4)交换机2接收到ARP包后,将其广播给PC2,PC2接收该ARP包后需要返回应答数据包,因此向交换机2发送数据包,交换机2记录PC2的地址与接口; | |
(5)交换机2接收到应答包后,将其转发给交换机1,交换机1接收应答包后因此记录下PC2的地址与接口; | |
(6)交换机1接收到应答包后,将其转发给交换机0,交换机0接收应答包后因此记录下PC2的地址与接口,最后交换机0转发给PC0,完成ARP包的发送过程; | |
(7)后续传输ICMP包的过程与我们第一次实验课程中交换机传播单播包的过程基本相同,且交换机中的交换表不再改变; | |
(8)若清空交换表,重复本步骤,再次观察各交换机交换表的变化情况,虽然我们清除了交换机的交换表,但主机中的ARP表并没有被清除,因此也无需再传播ARP包,直接传播ICMP包即可。 | |
3. 添加 PC1 到 PC0 的数据包,分步骤观察交换机0,交换机1和交换机2的转发表的变化情况:
(1)PC1由于并不清楚PC1接口所在位置,首先向交换机1发送ARP数据包,交换机1因此在交换表中记下PC1的MAC地址,其余交换机交换表不变; | |
(2)交换机1接收到ARP包后,将其广播给交换机0与交换机2,交换机0与交换机2因此在交换表中记录下PC1的MAC地址与接口; | |
(3)接收到ARP两个包的交换机分别传输给它们对应的主机,PC0成功接收ARP包后通过交换机0向PC1返回应答包,而PC2则舍弃ARP包,后续传输ICMP包的过程与我们第一次实验课程中交换机传播单播包的过程基本相同,且交换机中的交换表不再改变。 |
4. 仅清空交换机1的交换表,添加 PC1 到 PC0 的数据包,观察各交换机交换表的变化:
(1)虽然我们清空了交换机1的交换表,但我们并没有清除交换机中的缓存表(ARP表),因此PC1直接向交换机1发送ICMP码,交换机1则记录下PC1的MAC地址; | |
(2)交换机1将ICMP包传输给其它交换机,交换机2丢弃,交换机0接收,并将其转发给PC0,PC0接收后返回应答包,在此过程中所有交换机的交换表都未发生改变; | |
(3)交换机0将PC0的应答包转发给交换机1后,交换机则记录下PC0的MAC地址与对应接口,其余交换机的交换表不变,之后交换机1将应答包转发给PC1,数据包传输工作完成。 | |
实验结果、分析与结论:
思考题:
1.在任务三中,将观察结果填入下表。转发表栏内填写交换机接收到数据后 MAC 地址转发表中增加的项,如无增加或该交换机未收到该数据帧则用横线表示。对数据的处理填写转发、洪泛或丢弃,如交换机未收到该数据帧则用横线表示:
发送的帧 | Switch0的转发表 | Switch1的转发表 | Switch2的转发表 | Switch0 的处理 | Switch1 的处理 | Switch2 的处理 | |||
地址 | 接口 | 地址 | 接口 | 地址 | 接口 | ||||
PC0→PC2 | 0001.C79C.7DBD | Fa0/1 | 0001.C79C.7DBD | Fa0/2 | 0001.C79C.7DBD | Fa0/2 | 洪泛 | 洪泛 | 洪泛 |
0060.477B.95CC | Fa0/2 | 0060.477B.95CC | Fa0/3 | 0060.477B.95CC | Fa0/1 | 转发 | 转发 | 转发 | |
PC1→PC0 | 0006.2A84.48E2 | F0/2 | 0060.477B.95CC | F0/1 | 0006.2A84.48E2 | F0/2 | 洪泛 | 洪泛 | 洪泛 |
0001.C79C.7DBD | F0/2 | 转发 | 转发 | — | |||||
PC1→PC0 | — | — | 0001.C79C.7DBD | F0/2 | — | — | 转发 | 洪泛 | 丢弃 |
0060.477B.95CC | F0/1 | 转发 | 转发 | — |
2.Switch0收到 PC0 向 PC2 发送的数据帧后,其地址转发表是否有变化?如有给出增加的条目并解释原因。
Switch0收到 PC0 向 PC2 发送的数据帧后,其地址转发表增加了PC0的MAC地址与对应接口,这是因为当接收机接收到来自主机的数据后,如果其转发表中未查询到该主机的相关信息,就会自动学习记录其主机的对应地址与接口在交换表中;
3.Swtich1收到 PC0 向 PC2 发送的数据帧后,是如何处理的?说明其如此处理的原因。
Swtich1收到 PC0 向 PC2 发送的数据帧(ARP包)后,首先会记录PC0的MAC地址与接口,然后会广播也就是洪泛该数据,因为交换机1的交换表中此时并没有PC2的MAC地址,因此需要通过广播确定PC2的位置。而当Swtich1收到 PC0 向 PC2 发送的数据帧(ICMP包)后,由于此前已经记录了两个主机的位置,接下来会直接转发数据帧;
4.在删除Switch1上的地址转发表前后,PC1 向 PC0 发送数据时Switch2是如何处理的?说明其如此处理的原因.
删除交换机1转发表前:如果未删除交换机1的转发表,那么转发表中的PC0的地址信息将帮助交换机1直接将数据转发给交换机0,则交换机2不会接收到数据;
删除交换机1转发表后:如果删除了交换机1的转发表,那么交换机1就不知道PC0的地址信息,会选择将数据洪泛给连接的所有交换机包括交换机2,而交换机2中的转发表记录了PC0的地址发现转出信息与转入信息的接口为同一个后,交换机2会选择丢弃该数据。
实验心得与体会:
- 与第一次实验课的内容相比,本次实验课的操作与原理都较为简单,核心内容就在于理解交换机其独特的自学习算法,在第一次实验中,我们充分感受到了交换机相比于集线器的巨大优势,但对于为什么交换机能够做到“识别”而集线器不能做到这一点,并没有较为深入与较为详细的认识;
- 而经过理论课与此次实验课的学习,使我对上一次实验课的内容有了更深的认识与理解,以及发现了过去实验中还能有所改进与不足之处,利用软件中实时的查看交换机的转发表的功能,我们深刻体会了交换机的工作原理与工作逻辑,同时对MAC地址ARP码ICMP码等相关概念有了更为具体的认识;
- 同时,在此次的实验过程中我仍是发现了一些亟待解决的问题,比如:在交换机中的转发表中常常会出现一些并不属于主机的MAC地址与接口信息,其原因是交换机记录了其它交换机端口的MAC地址与接口信息,这一度让我在实验过程中对交换机的交换表的变化产生困惑,因此在此次实验中,为集中学习交换机的自学习算法,我们出于简化考虑只关注了三个主机的MAC地址;
- 最后我将此次实验内容所得的心得与感悟与第一次实验的内容相结合,以整体的思路反思了我们计算机网络学习中的以太网的数据传播过程,可以想象,实际网络的信息传播与转发其实是一个非常复杂的过程,在后续的学习过程中,我们更需要以把握原理为中心,深刻理解相关概念,实验与理论结合以达到最好的学习效果。
相关文章:

【某农业大学计算机网络实验报告】实验二 交换机的自学习算法
实验目的: (1)理解交换机通过逆向自学习算法建立地址转发表的过程。 (2)理解交换机转发数据帧的规则。 (3)理解交换机的工作原理。 实验器材: 一台Windows操作系统的PC机。 实…...

燕山大学23级经济管理学院 10.18 C语言作业
燕山大学23级经济管理学院 10.18 C语言作业 文章目录 燕山大学23级经济管理学院 10.18 C语言作业1C语言的基本数据类型主要包括以下几种:为什么设计数据类型?数据类型与知识体系的对应使用数据类型时需要考虑的因素 21. 逻辑运算符2. 真值表3. 硬件实现4…...

【880线代】线性代数一刷错题整理
第一章 行列式 2024.8.20日 1. 2. 3. 第二章 矩阵 2024.8.23日 1. 2024.8.26日 1. 2. 3. 4. 5. 2024.8.28日 1. 2. 3. 4. 第四章 线性方程组 2024.9.13日 1. 2. 3. 4. 5. 2024.9.14日 1. 第五章 相似矩阵 2024.9.14日 1. 2024.9.15日 1. 2. 3. 4. 5. 6. 7. 2024.9.…...

【C++语言】精妙的哈希算法:原理、实现与优化
解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 哈希算法是计算机科学中的一项基本技术,广泛应用于数据检索、加密、缓存等领域。本文将深入探讨C++中的哈希算法,详细讲解其原理、实现、优化以及在不同应用场景中的使用。通过丰富的代码示例和数学推导,本文旨…...

基于STM32的手势电视机遥控器设计
引言 本项目设计了一个基于STM32的手势电视机遥控器,利用红外线传输和加速度传感器(或陀螺仪)检测用户的手势动作,用于控制电视的音量、频道切换等操作。通过对手势的实时检测和分类,系统能够识别左右、上下、旋转等手…...

2、图像的特征
一、角点检测-Harris 1、cv2.cornerHarris角点检测函数 在 cv2.cornerHarris 函数中,Sobel 算子用于计算图像的梯度,这是 Harris 角点检测的第一步。 cv2.cornerHarris(src, blockSize, ksize, k, dstNone, borderTypeNone)下面是各个参数的详细解释&…...

URL、URN和URI的区别
目录 一:URI二:URN三:URL1. URL格式 一:URI URI 是(Uniform Resource Identifier)统一资源标识符的缩写。用于唯一标识互联网上的资源。URI包含了URN和URL 二:URN URN是(Uniform …...

深入理解Spring框架几个重要扩展接口
本文介绍Spring框架的几个日常开发重要扩展接口,方便日常项目中按需扩展使用。 一、Processor 系列接口 用途: Processor 系列接口包括 BeanPostProcessor 和 BeanFactoryPostProcessor,它们的设计目的是在 Spring 容器启动过程中对 Bean 和…...

使用dotnet-counters和dotnet-dump 分析.NET Core 项目内存占用问题
在.NET Core 项目部署后,我们往往会遇到内存占用越来越高的问题,但是由于项目部署在Linux上,因此无法使用VS的远程调试工具来排查内存占用问题。那么这篇文章我们大家一起来学习一下如何排查内存占用问题。 首先,我们来看一下应用…...

1282:最大子矩阵
题目: 已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵,你的任务是找到最大的非空(大小至少是1 1)子矩阵。 比如,如下4 4的矩阵 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2 的最大子矩阵是 9 2 -4 1 -1 8 这个子矩阵的大小是15。 …...

C++编程语言:抽象机制:特殊运算符(Bjarne Stroustrup)
第19章 特殊运算符(Special Operators) 目录 19.1 引言 19.2 特殊运算符(Special Operators) 19.2.1 下标运算符(Subscripting) 19.2.2 函数调用运算符(Function Call) 19.2.3 解引用(Dereferencing) 19.2.4 递增和递减(Increment and Decrement) 19…...

图片无损放大工具Topaz Gigapixel AI v7.4.4 绿色版
Topaz A.I. Gigapixel是这款功能齐全的图象无损变大运用,应用可将智能机拍摄的图象也可以有着专业相机的高质量大尺寸作用。你可以完美地放大你的小照片并大规模打印,它根本不会粘贴。它具有清晰的效果和完美的品质。 借助AIGigapixel,您可以…...

Vue中计算属性computed—(详解计算属性vs方法Methods,包括案例+代码)
文章目录 计算属性computed3.1 概述3.2 使用3.3 计算属性vs方法Methods3.4 计算属性的完整写法 计算属性computed 3.1 概述 基于现有的数据,计算出来的新属性。 依赖的数据变化,自动重新计算 语法: 声明在 computed 配置项中,…...

Python程序设计 内置函数 日志模块
logging(日志) 日志记录是程序员工具箱中非常有用的工具。它可以帮助您更好地理解程序的流程,并发现您在开发过程中可能没有想到的场景。 日志为开发人员提供了额外的一组眼睛,这些眼睛不断关注应用程序正在经历的流程。它们可以存储信息,例…...

中标麒麟v5安装qt512.12开发软件
注意 需要联网操作 遇到问题1:yum提示没有可用软件包问题 终端执行如下命令 CentOS7将yum源更换为国内源保姆级教程 中标麒麟V7-yum源的更换(阿里云源) wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Cento…...

每日算法一练:剑指offer——数组篇(3)
1.报数 实现一个十进制数字报数程序,请按照数字从小到大的顺序返回一个整数数列,该数列从数字 1 开始,到最大的正整数 cnt 位数字结束。 示例 1: 输入:cnt 2 输出:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,1…...

Java代码说明设计模式
以下是使用 Java 代码分别说明设计模式中的工厂模式、抽象工厂模式(这里推测你可能想说的是抽象工厂模式而非虚拟工厂模式)、建造者模式和观察者模式。 一、工厂模式 工厂模式是一种创建对象的设计模式,它提供了一种创建对象的方式…...

Golang笔记_day06
一、GMP 调度器 1、调度器理解思路 理解golang的调度器要从进程到协程演进来说明: 进程--->线程--->协程---> golang的协程(goroutine) 从上图可以看出,进程到多线程到协程,最终目的就是为了提高CPU的利用率…...

「从零开始的 Vue 3 系列」:第十一章——跨域问题解决方案全解析
前言 本系列将从零开始,系统性地介绍 Vue 3 的常用 API,逐步深入每个核心概念与功能模块。通过详尽的讲解与实战演示,帮助大家掌握 Vue 3 的基础与进阶知识,最终具备独立搭建完整 Vue 3 项目的能力。 第十一章:跨域问…...

C语言结构体数组 java静动数组及问题
1. (1)先声明,后定义:如上一天 //(2).声明时直接定义 #define N 5 typedef struct student { int num; int score; }STU; int main(void) { STU class3[N] { {10,90},{14,70},{8,95} }; …...

uniapp项目结构基本了解
基本结构的解释 App.vue:应用的根组件,定义全局布局和逻辑。pages/:存放各个页面的 .vue 文件,定义应用的具体页面和功能模块。main.js:应用入口文件,初始化应用,挂载 App.vue。manifest.json&…...

常见Web知识1
List item 常见Web知识1 JSON: JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人类阅读和编写,同时也易于机器解析和生成。它通常用于客户端和服务器之间的数据传输。 JSON 结构 JSON 主要由两…...

新版idea菜单栏展开与合并
新版idea把菜单栏合并了看着很是不习惯,找了半天原来在这里展开 ① 点击文件 -> 设置 ② 点击外观与行为 -> 外观 -> 合并主菜单和窗口标题 然后确定,重启即可...

聊聊Go语言的异常处理机制
背景 最近因为遇到了一个panic问题,加上之前零零散散看了些关于程序异常处理相关的东西,对这块有点兴趣,于是整理了一下golang对于异常处理的机制。 名词介绍 Painc golang的内置方法,能够改变程序的控制流。 当函数调用了pan…...

复习:如何理解 React 中的 fiber
React 中的 Fiber 可以理解为 React 16 引入的一种新的协调(reconciliation)引擎,旨在提高 React 应用的性能和响应性。以下是对 React Fiber 的详细解释: 一、Fiber 的定义与背景 Fiber 是对 React 核心算法的一次重新实现,它将渲染工作分解成一系列小的任务单元,这些任…...

10分钟了解腾讯云混元大模型AIGC系列产品
前言 其实说到AIGC,作为开发者,大家其实已经见怪不怪了,那么AIGC是什么,这里我再简单科普一下。 AIGC的全称是Artificial Intelligence Generated Content (人工智能生成内容)或者说叫生成式人工智能&…...

Unity发送Http
本篇实现在Unity中发送Http请求。 讲解Get,Post,用于在Unity中进行数据对接。 一、Get IEnumerator Get() {string url "";//链接UnityWebRequest request UnityWebRequest.Get(url);//创建UnityWebRequest实例并设置请求方式为Getyield …...

微服务开发-Nacos服务治理
注册中心原理 流程如下: 服务启动时就会注册自己的服务信息(服务名、IP、端口)到注册中心;调用者可以从注册中心订阅想要的服务,获取服务对应的实例列表(1个服务可能多实例部署);调…...

鸿蒙开发:两个重磅更新,鸿蒙版微信要来了!
从媒体消息中,其实我们已经知道,华为纯血鸿蒙系统(HarmonyOS NEXT)于10月8日正式开启了公测,对应的官方文档,大家可以看到已由原来的Beta版本更新到了Release,NEXT终于迎来了正式版本。 文档更新…...

es kibana .logstash离线集群安装
es离线集群安装 下载对应的版本一般看你客户端引用的是什么版本我这里下载的是7.6.2 官方下载地址:https://www.elastic.co/cn/downloads/elasticsearch 源码安装-环境准备:在etc/hosts文件添加3台主机 node-001 192.168.1.81 node-002 19…...