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

【计算机网络】实验4:生成树协议STP的功能以及虚拟局域网VLAN

实验 4:生成树协议STP的功能以及虚拟局域网VLAN

一、 实验目的

  1. 加深对生成树协议STP的功能的理解。

  2. 了解虚拟局域网VLAN。

二、 实验环境

• Cisco Packet Tracer 模拟器

三、 实验内容

1、验证交换机生成树协议STP的功能

(1) 第一步:构建网络拓扑:拖动四个交换机,使用自动连接类型将其连成一个环路,并来回切换实时与仿真模式,将黄色的连接线变成绿色的,但是发现左下角的交换机处于阻塞状态,这是因为交换机在后台运行着生成树协议,所以某些交换机会断掉自己的某些接口,也就是端口被阻塞了,此时,物理上的环路依然存在,但是逻辑上的环路已经断开。如图1所示。

img

图 1 构建网络拓扑

(2) 第二步:给刚才的网络拓扑添加两台计算机。并配置好IP地址如图2所示。

img

图2 添加计算机并配置IP

img

图3 删除场景

(3) 第三步:验证一下左下角的计算机是否可以ping得通右下角的计算机,进入左下角计算机的命令提示符下,使用命令ping 192.168.0.2尝试看看可不可以收到响应,如图3所示。

img

图3 左下角计算机成功收到响应

(4) 第四步:再次尝试使用右下角的计算机ping左下角的计算机,同样使用命令ping 192.168.0.1尝试看看可不可以收到响应。如图4所示。

img

图4 右下角计算机成功收到响应

(5) 第五步:这两次的主机之间的相互ping通表明,虽然有交换机的端口堵塞了,但是两个主机之间可以绕一个更大的圈,进而找到一条可行的通路,进而实现两台主机之间的通信。

(6) 第六步:模拟一下通路中有一个点出了故障,即将右上角的交换机的Fa0/2端口给断开,点击右上角的交换机,进入配置选项,点击Fa0/2端口,将端口状态关闭。如图5所示

img

图5 关闭交换机的某个端口

(7) 第七步:再次验证一下左下角的计算机是否可以ping得通右下角的计算机,进入左下角计算机的命令提示符下,使用命令ping 192.168.0.2尝试看看可不可以收到响应。如图6所示。

img

图6 此时计算机之间不能互通

(8) 第八步:等待一段时间之后,可以发现,原来交换机被自己的生成树协议堵塞掉的端口,现在又恢复了正常工作,这是因为我们人为得设置了一个阻塞的端口,然后交换机之间生成树协议会发现这个问题,然后就会将这个原先堵塞的端口给开,进而完成主机之间的通信。此时左下角的计算机再次ping右下角的计算机,发现成功。如图7所示。

img

图7 计算机之间互通成功

(9) 第九步:将原先关闭的端口重新打开,发现刚才阻塞的端口,又重新阻塞了,但是由于交换机的生成树协议是在启动了交换机之后,自动运行的,所以为了不影响后面的实验,将四个交换机的生成树协议给手动关闭掉,点击进入交换机,进入命令行界面,输入指令enable进入特权模式,输入config进入配置,按Enter键,输入no spanning-tree vlan 1指令关闭生成树协议。如图8所示。关闭所有交换机的生成树协议之后,如图9所示。

img

图8 关闭交换机的生成树协议

img

图9 所有的生成树协议都被关闭

(10) 第十步:关闭掉所有交换机的生成树协议之后,发现不仅物理上存在环路,逻辑上也存在环路。通过理论上的学习,可以知道当存在逻辑环路的时候,那么当某个主机发送方一个广播帧的时候,那么这个广播帧就会在这个逻辑环路里面兜圈子,逆时针和顺时针都会兜圈子,这样的话,就会严重的占用网络资源。

(11) 第十一步:切换到仿真模式,模拟一下广播帧兜圈子的情况。选中添加复杂的PDU,让左下角的主机发送一个广播帧,目的IP地址填255.255.255.255,序号填1,单次仿真时间为1秒,如图10所示。

img

图10 为计算机创建复杂的PDU

(12) 第十二步:点击捕获前进,发现广播帧在进入这个逻辑环路之后,开始无止境的兜圈子,此时严重地占用了网络资源。如图11所示。

img

图11 广播帧开始兜圈子

(13) 第十三步:切换到实时模式,再让左下角的计算机ping一下右边的计算机,如图12所示。

img

图12 计算机之间通信失败

(14) 第十四步:发现请求超时,反过来使用右下角的计算机ping左下角的计算机,结果也是一样请求超市,这是因为有一个广播帧在逻辑环路里一直兜圈子,导致占用了大量的网络资源,进而原先的两个主机之间没法正常通信。

2、虚拟局域网VLAN

(1) 第一步:构建网络拓扑:在逻辑工作空间上,拖动六个普通计算机和一个交换机,选择自动连接把设备连接起来,并设置好IP,并在计算机旁边写好IP注释。并写好端口注释。如图13所示。

img

图 13 构建网络拓扑

(2) 第二步:点击交换机,查看端口状态汇总表。可以发现所有端口号都是默认属于VLAN1的,后面给出的是每个端口的MAC地址。如图14所示。由于交换机上电启动之后,所有的端口都默认为VALN1,所以上述的网络拓扑中所有的主机应该也是属于VLAN1的,所以它们应该属于同一个广播域。

img

图 14 查看交换机的端口状态汇总表

(3) 第三步:验证这六台属于VLAN1的主机,是属于同一个广播域的,切换到仿真模式,过滤协议,只保留ICMP协议。如图15所示。

img

图15 切换仿真,并过滤协议

(4) 第四步:为IP地址为192.168.0.1的主机创建一个复杂的PDU,目的IP地址填255.255.255.255,序号填1,单次仿真时间1秒。如图16所示。

img

图16 创建一个复杂的PDU

(5) 第五步:点击捕获前进,广播信号到达交换机之后,交换机会将这个广播信号转发出去(除了输入端口以外)。并且这个广播是属于在VLAN上的广播,而且所有的主机都连接在VLAN的端口上,所以各个主机都会收到广播信号。如图17所示。

img

图17 主机都收到了广播信号

(6) 第六步:开始划分VLAN,将左边的三台主机划分到VLAN2,将右边的三台主机划分到VLAN3,划分VLAN实际上是在交换机上进行的,也就是将交换机的1,2,3端口划分到VLAN2,将4,5,6端口划分到VLAN3。点击交换机,点击配置,点击VLAN数据库。创建新VLAN。如图18所示。

img

图 18 在交换机中添加新VLAN

(7) 第七步:新VLAN创建好了之后,将其对应的端口划分到这个新VLAN中。点击Fa0/1将VLAN的端口号改成2,其余的端口也是如此。如图19所示。

img

图 19 将端口划分到对应的VLAN中

(8) 第八步:划分好端口之后,应该可以看出左边的三个主机属于VLAN2,但是右边的三台主机属于默认的VLAN1,也就是它们属于不同的广播域。也就是说,左上角的主机发送一个广播帧,右边的三个主机是不能收到的,只有左边另外两个主机可以收到,下面来验证一下。

(9) 第九步:为IP地址为192.168.0.1的主机创建一个复杂的PDU,目的IP地址为255.255.255.255,序号填1,单次仿真时间1秒,如图20所示。

img

图 20 创建一个复杂的PDU

(10) 第十步:点击捕获前进,发现广播帧通过交换机之后,只发给了左边的另外的两台主机,并没有发给右边的三台主机,这样我们就验证了不同的VLAN是属于不同的广播域。如图21所示。

img

图 21 左边两台主机收到信号

(11) 第十一步:使用交换机的命令行形式,创建一个VLAN3,并将端口4,5,6划分到VLAN3,点击交换机,进入命令行界面,输入end指令,在输入exit来初始化界面,输入enable进入特权命令,输入config terminal,然后输入vlan 3来创建一个新vlan。创建好了新vlan之后输入interface range fastethernet 0/4-6指令来划分端口,使用指令switchport mode access来指定为access模式,使用指令switchport access vlan 3将4,5,6端口成功地划分到了VLAN3中。如图22,23所示。

img

图 22执行指令来划分端口

img

图23 端口划分成功

(12) 第十二步:此时左边的三台主机属于VLAN2,而右边的三台主机属于VLAN3,也就是说它们属于不同的广播域。为IP地址为192.168.0.1的主机创建一个复杂的PDU,目的IP地址为255.255.255.255,序号填1,单次仿真时间1秒,如图24所示。

img

图 24 添加一个复杂的PDU

(13) 第十三步:点击捕获前进,发现广播请求通过交换机之后,只发给了左边的另外的两台主机,而给右边的一台主机也添加一个复杂的PDU,并点击捕获前进,发现还是一样的结果。这也就验证了不同的VLAN是不同的广播域。如图25所示。

img

图25 只有两台主机收到信号

(14) 第十四步:切换到实时模式下,尝试使用左边的计算机来ping一下右边的某一台主机,如IP地址为192.168.0.2的主机去ping一下IP地址为192.168.0.4的主机。如图26所示。Ping不通说明,处于不同广播域的主机之间也是不可以进行单波通信的。

img

图26 主机之间也不可以通信

(15) 第十五步:拓建网络拓扑。如图27所示。并且需要同时写好IP和端口注释,以及让左边的三个主机属于VLAN2,让右边的三个主机属于VLAN3。

img

图 27 拓建网络拓扑

(16) 第十六步:完成上述的操作之后,左边的六台主机都属于VLAN2,而右边的六台主机都属于VLAN3,为IP地址为192.168.0.1的主机创建一个复杂的PDU,目的IP地址为255.255.255.255,序号填1,单次仿真时间1秒。并点击捕获前进。如图28所示。

img

图28 ICMP广播请求并没有通过端口7

(17) 第十七步:发现广播请求并没有通过端口7广播出去,这是因为我们没有对两台交换机的端口7进行过设置,所以它们属于默认的VLAN1,它们和左边的六台主机不属于同一个VLAN,所以不可以通过端口7进行广播转发。

(18) 交换机在互联的时候,它们的这个端口的类型一般是设置成Trunk类型的。下面修改两个交换机的端口7的类型,将其改为Trunk,如图29所示。

img

图29 将端口类型改为Trunk

(19) Trunk类型的端口可以转发所有VLAN上的数据帧,分为两种情况,一种是数据帧首部的VLAN的id和这个端口的VLAN的id一样的话,那么端口就会将这个数据帧的首部的VLAN的id去掉,也就是去标签,另一种情况就是当端口号不一致时,这个端口就会直接将数据帧发送出去,而不会去掉标签。

(20) 为IP地址为192.168.0.1的主机创建一个复杂的PDU,目的IP地址为255.255.255.255,序号填1,单次仿真时间1秒。并点击捕获前进。发现此时,同属于一个VLAN的另外五个主机可以收到广播请求。如图30所示。同样,右边的某个主机发送广播请求之后,其余的五个同属于一个VLAN的主机也是可以收到这个广播请求的。

img

图30 另外五个主机收到广播请求

四、 实验体会

**1. 这两个实验的步骤都遵循构建网络拓扑、配置网络环境、跟踪数据包和查看数据包这四个规则。

**2. Cisco Packet Tracer 模拟器可以清晰地展示 PDU 在传送过程,设备是如何处理 PDU 的。通过仿真传送过程,有助于我们理解有关的知识。

3.了解交换机生成树协议STP,STP的主要目的是确保网络中没有环路,从而避免数据包在网络中无限循环,导致网络拥塞和故障,另外,我知道当存在逻辑环路的时候,那么当某个主机发送方一个广播帧的时候,那么这个广播帧就会在这个逻辑环路里面兜圈子,这样的话,就会严重的占用网络资源。

4.了解了VLAN的两种划分方法,一种是使用命令行,另一种是直接进入配置界面,直接修改,并将端口划分到对应的VLAN,以及修改端口的类型(access以及Trunk类型)我还知道了划分VLAN的作用,就是隔离广播域。但是有缺点,虽然VLAN可以减少广播,但如果配置不当,仍可能导致广播风暴。

相关文章:

【计算机网络】实验4:生成树协议STP的功能以及虚拟局域网VLAN

实验 4:生成树协议STP的功能以及虚拟局域网VLAN 一、 实验目的 加深对生成树协议STP的功能的理解。 了解虚拟局域网VLAN。 二、 实验环境 • Cisco Packet Tracer 模拟器 三、 实验内容 1、验证交换机生成树协议STP的功能 (1) 第一步:构建网络拓…...

基于Matlab BP神经网络的电力负荷预测模型研究与实现

随着电力系统的复杂性和规模的不断增长,准确的电力负荷预测对于电网的稳定性和运行效率至关重要。传统的负荷预测方法依赖于历史数据和简单的统计模型,但这些方法在处理非线性和动态变化的负荷数据时,表现出较大的局限性。近年来,…...

java 21 多线程

1.相关概念 进程: 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存空间。当我们使用迅雷,又启动了一个进程,操作系统将为迅雷配新的内存空间。 进程是程序的一次执行过程&#…...

Rust学习笔记_07——枚举和范围

Rust学习笔记_04——引用 Rust学习笔记_05——控制流(1) Rust学习笔记_06——控制流(2) 文章目录 1. 枚举1.1基础1.2 给枚举变体起个“别名”1.3 枚举与匹配(match) 2. 范围2.1 介绍2.2 半开区间范围2.3 包含范围的语法糖2.4 步长范围(Range …...

40分钟学 Go 语言高并发:服务性能调优实战

服务性能调优实战 一、性能优化实战概述 优化阶段主要内容关键指标重要程度瓶颈定位收集性能指标,确定瓶颈位置CPU、内存、延迟、吞吐量⭐⭐⭐⭐⭐代码优化优化算法、并发、内存使用代码执行时间、内存分配⭐⭐⭐⭐⭐系统调优调整系统参数、资源配置系统资源利用率…...

Windows通过指令查看已安装的驱动

Windows通过指令查看已安装的驱动 在 Windows 操作系统中,有几种命令可以用来查看已安装的驱动程序。以下是常见的几种方法: 1. 使用 pnputil 查看已安装驱动程序 pnputil 是一个 Windows 内置工具,可以列出所有已安装的驱动程序包。 命令…...

Windows 11 如何配置node.js

一,官网下载 官网首页 下载最新LTS版本,比较稳定,如果想探索更新的版本去探索新的nodejs功能。 1. 下载完成后,双击运行程序,点击next 2. 勾选接受协议,点击next 3. 选择自己的安装路径(默认是…...

AWTK fscript 中的 串口 扩展函数

fscript 是 AWTK 内置的脚本引擎,开发者可以在 UI XML 文件中直接嵌入 fscript 脚本,提高开发效率。本文介绍一下 fscript 中的 ** 串口 扩展函数 ** 1.iostream_serial_create 创建串口输入输出流对象。 原型 iostream_serial_create(device) > ob…...

yolov11剪枝

思路:yolov11中的C3k2与yolov8的c2f的不同,所以与之前yolov8剪枝有稍许不同; 后续:会将剪枝流程写全,以及增加蒸馏、注意力、改loss; 注意: 1.在代码105行修改pruning.get_threshold(yolo.mo…...

智慧地图聚合(LockMap)标注系统开发说明文档

智慧地图聚合(LockMap)标注系统开发说明文档 1. 系统概述 智慧地图聚合(LockMap)标注系统是一个专为处理大规模地理信息数据而设计的综合解决方案。通过后端高效的数据管理和前端直观的地图展示,该系统能够实现对海量地理位置点的有效可视化。本项目旨在提供一个用…...

「Mac畅玩鸿蒙与硬件36」UI互动应用篇13 - 数字滚动抽奖器

本篇将带你实现一个简单的数字滚动抽奖器。用户点击按钮后,屏幕上的数字会以滚动动画的形式随机变动,最终显示一个抽奖数字。这个项目展示了如何结合定时器、状态管理和动画实现一个有趣的互动应用。 关键词 UI互动应用数字滚动动画效果状态管理用户交…...

cuda12.1版本的pytorch环境安装记录,并添加到jupyter和pycharm中

文章目录 前置准备使用anaconda prompt创建虚拟环境创建虚拟环境激活pytorch虚拟环境把pytorch下载到本地使用pip把安装包安装到pytorch环境中进入python环境检验是否安装成功将环境添加到jupyter在pycharm中使用该环境: 前置准备 安装anaconda,我的版本…...

Linux: network: nic: mellanox MRU初现

文章目录 在PPP协议了有提到过总结-吐槽MRU初现兼容问题详细的MRU的计算幸运下面这个commit缩小了幸运机会So在PPP协议了有提到过 MRU在RFC4638里有提到。但是在Linux内核里是的Ethernet是没有相关的概念。 总结-吐槽 说Mellanox的网卡驱动在2018年做了一个对进入packet的大…...

深入理解红黑树的底层逻辑

一、红黑树的定义 红黑树是一种自平衡的二叉查找树,每个节点都带有额外的颜色信息,可以是红色或黑色。红黑树的目的是通过引入颜色信息来确保树的平衡,从而提高查找、插入和删除等操作的效率。 二、红黑树的性质 每个节点都有颜色&#xf…...

【数据结构】手搓链表

一、定义 typedef struct node_s {int _data;struct node_s *_next; } node_t;typedef struct list_s {node_t *_head;node_t *_tail; } list_t;节点结构体(node_s): int _data;存储节点中的数据struct node_s *_next;:指向 node…...

ThinkPHP场景动态验证

一、缘由 今天在用thinkphp8写东西的时候发现,写验证器规则和场景优点费时间,就算用tinkphp的命令行生成也是生成一个空壳。内容还是要自己填写感觉麻烦。 就突发奇想能不能自动生成验证器,也不能是说自动生成验证器,生成验证其的…...

在M3上面搭建一套lnmp环境

下载docker-desktop 官网下载docker-desktop 切换镜像源 {"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"registry-mirrors": ["https://docke…...

【C++笔记】二叉搜索树

前言 各位读者朋友们大家好!上期我们讲完了面向对象编程三大属性之一的多态,这一期我们再次开始数据结构二叉搜索树的讲解。 目录 前言一. 二叉搜索树的概念二. 二叉搜索树的性能分析三. 二叉搜索树的插入四. 二叉搜索树的查找五. 二叉搜索树的删除六.…...

Fork/Join框架简介

一、Fork/Join框架简介 Fork/Join框架是Java 7引入的一个用于并行执行任务的框架,它可以将一个大任务分割成若干个小任务,并行执行这些小任务,然后将每个小任务的结果合并起来,得到大任务的结果。这种框架特别适合于能够被递归分…...

Java项目实战II基于微信小程序的电子竞技信息交流平台的设计与实现(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着互联网技术的飞速发展…...

Mysql读写分离分库分表

读写分离 什么是读写分离 读写分离主要是为了将对数据库的读写操作分散到不同的数据库节点上。 这样的话,就能够小幅提升写性能,大幅提升读性能。一般情况下,我们都会选择一主多从,也就是一台主数据库负责写,其他的从…...

B站狂神说--springboot项目学习(新建一个springboot项目)

文章目录 1.新建项目java8项目1.解决自带的idea2024无法使用java8的问题 2.新建接口3.项目打包为jar包4.使用jar包 1.新建项目java8项目 1.解决自带的idea2024无法使用java8的问题 将server.url修改为阿里云的地址:https://start.aliyun.com/ 选择Spring Web 创建…...

eltable el-table 横向 滚动条常显

又遇到了难受的问题,el-table嵌入在一个div里面,结果因为内容太多,横向、纵向我都得滚动查看! 结果发现横向滚动时只能让它纵向触底后才能进行横向操作,这就很变态,明显不符合用户操作习惯。如下图: 要先纵…...

centos8 mysql 主从复制

原理 一、一主一从 准备工作 1.主库配置 1、修改配置文件 /etc/my.cnf #mysql 服务ID,保证整个集群环境中唯一,取值范围:1-232-1,默认为 server-id1 #是否只读,1 代表只读,0代表读写 read-only0 #忽略的数据,指不需要同步的数据库 #binlog…...

【C++】入门【五】

本节目标 一、C/C内存分布 二、C语言中动态内存管理方式 三、C中动态内存管理 四、operator new与operator delete函数 五、new和delete的实现原理 六、定位new表达式(placement-new) 七、常见面试题 一、C/C内存分布 一个程序占用的内存主要有以下几部分栈区(stac…...

【React】二、状态变量useState

文章目录 1、React中的事件绑定1.1 基础事件绑定1.2 使用事件对象参数1.3 传递自定义参数1.4 同时传递事件对象和自定义参数 2、React中的组件3、useState 1、React中的事件绑定 1.1 基础事件绑定 语法:on 事件名称 { 事件处理程序 },整体上遵循驼峰…...

SQL Server中的数据处理函数:提升SQL查询能力

文章目录 前言1. 数据类型转换函数CAST()CONVERT()TRY_CAST() 和 TRY_CONVERT() 2. 数学函数ABS()CEILING()FLOOR()ROUND()POWER()SQRT() 3. 日期和时间函数GETDATE()SYSDATETIME()DATEADD()DATEDIFF()YEAR()、MONTH() 和 DAY()FORMAT() 4. 条件处理函数CASEIIF() 总结 前言 在…...

TypeScript 语言学习入门级教程五

在前面的教程中,我们已经逐步深入地学习了 TypeScript 的诸多特性,包括基础语法、类型系统、面向对象编程、装饰器以及一些高级类型等。在本教程中,我们将聚焦于 TypeScript 的模块系统、命名空间与模块的关系、声明文件以及如何在实际项目中…...

上海市计算机学会竞赛平台2022年7月月赛丙组匹配括号(三)

题目描述 如果字符序列仅由 ( 与 ) 构成,则在满足以下条件时,它是匹配的: 空序列是匹配的;如果括号序列 s 是匹配的,那么 (s) 也是匹配的;如果括号序列 s 与 t 是匹配的,那么 st 也是匹配的。…...

108.【C语言】数据结构之二叉树查找值为x的节点

目录 1.题目 代码模板 2.分析 分类讨论各种情况 大概的框架 关键部分(继续递归)的详解 递归调用展开图 3.测试结果 其他写法 4.结论 5.注意事项 不推荐的写法 1.题目 查找值为x的节点并返回节点的地址 代码模板 typedef int BTDataType; typedef struct BinaryT…...