环路详解:交换机环路产生的过程和原因图解

news2024/11/26 22:19:53

前言:

       在了解环路之前得先了解交换机的工作原理,当然交换机的基本工作原理其实非常简单,只有“单播转发与泛洪转发”、“交换机MAC地址表”这两个!其他的如vlan,生成树等也是在此基础上增加的,弥补交换机基础工作原理上的不足,如vlan划分广播域,生成树解决环路,当然这些高级功能也只有比较高级的交换机才有,不过现在网络技术已经很普遍了所以这些功能也慢慢变成了交换机的基础标配功能。如果您已经非常清楚“单播转发与泛洪转发”,“交换机MAC地址表的作用及建立过程”那就很容易了解“环路”是怎么回事。

正常结构图:

 环路过程: 

假设PC1向PC2发起通信(第一次通信),目的地址:f1,源地址: a1。

PC1查找自己的arp表,查看1.1.1.2对应的mac地址,因为是第一次通信,肯定是没有PC2的相关arp记录的,所以这时候它会发送一个arp广播,该报文PC1的PC1/1口出去,到S1交换机的s1/2口,S1交换机收到这个帧就会首先进行mac地址表学习【a1:s1/2】,然后因为是广播帧需要进行泛洪转发(泛洪给除s1/2外的其他端口);

广播帧从s1/3发出到s2/3,S2交换机收到这个帧也会首先进行mac地址表学习【a1:s2/3】然后也因为是广播帧所以进行泛洪转发(泛洪给除s2/3外的其他端口,也就是s2/2)PC2的pc2/1端口收到从交换机S2的s2/2发来的广播,查看发现目的地址是自己然后会进行arp缓存表的学习并进行回复(目的地址:a1,源地址: f1)回复PC2的pc2/1端口出去发送到交换机S2的s2/2端口,交换机S2会进行mac地址表的学习,并查看自己的MAC地址表有没有”a1”mac地址对应的端口,发现记录有:a1s2/3,然后直接转给s2/3;S1交换机的s1/3收到s2/3来的,然后S1也会进行mac地址表的学习,并查看自己的MAC地址表有没有”a1”mac地址对应的端口地址,发现记录有:a1s1/2,然后直接转给s1/2;这样PC1就收到了来自PC2的回复,得到PC2的MAC地址,并在arp缓存表中记录PC2的ip跟MAC地址的对应信息, pc1跟pc2就可以通过交换机进行通信了。

在此通信过程中,S1与S2交换机的MAC地址表分别记录了PC1的MAC地址跟PC2MAC地址与之对应的端口映射关系:a1s1/2 ;f1s1/3;  a1s2/3;f1s2/2。

Ps:如上过程中,为什么要获取MAC地址,因为数据链路层是根据MAC地址来进行转发的,不是IP地址(IP地址是工作在网络层),所以想要在数据链路层进行数据转发就需要知道对方的MAC地址,一般主机得到对方MAC地址的方式就是通过查arp缓存表,查不到就发送一个arp广播帧,广播给全网的主机,其他主机收到之后会查看ip地址是不是自己,如果是就回复,将自己的MAC地址告知对方,如果不是就直接丢弃。

环路结构图:

环路过程: 

假设:pc1向pc发起通信,优先走s1/3与s2/3。(因为交换机需要更新数据,所以正常情况下肯定是按先后顺序发送,后面一个肯定会覆盖前一个)

pc1查找自己的arp表,查看1.1.1.2对应的mac地址,假设没有找到,然后pc1pc1/1port向S1交换机s1/2port发送广播帧,广播地址为:ff:ff:ff:ff:ff:ff;

S1交换机从s1/2port收到pc1发来的广播 S1交换机就会学习mac地址表【s1/2:a1】并进行“泛洪”转发,将该广播转发给除接收数据s1/2port外的所有port,也就是转发给s1/3、s1/1port,S2交换机的s2/3、s2/1port分别收到s1/3、s1/1port发来的广播帧;

S2交换机也学习mac地址表【s2/3:a1、s2/1:a1;(因为优先是s1/3与s2/3,所以会先记录a1:s2/3port,再记录a1:s2/1port,因为mac地址一样,所以这里记录的时候会更新mac地址表,把a1:s2/3port中的端口更新成s2/1port,当然你也可以理解成覆盖)】分别泛洪转发s2/3、s2/1port收到的广播s2/3转发给s2/2、s2/1port,s2/1转发给s2/2、s2/3port,;此PC2会收到两广播(收到几个就要回复几个,所以PC2会分别回复s2/3、s2/1port转发过来的广播),S1交换机的s1/3、s1/1port也会收到S2交换机的s2/3、s2/1port发来的广播帧,S1换机也会学习mac地址表【s1/1:a1、s1/3:a1】,并分别进行广播……。

 映射关系:

S1:s1/2:a1;s1/1:a1、s1/3:a1

S2:s2/3:a1、s2/1:a1

Ps:此时因为mac地址表已经形成了环。所以会造成原本从pc1发出的arp广播帧在这个环里面陷入死循环;pc2回复的帧也会在这个环里面进入死循环,如:pc2回复的帧到达S2按mac地址表走从s2/1:a1出,到S1又按mac地址表走从s1/3:a1出,就这样一直反反复复循环。   

思科模拟器实验验证:

ps:图中pc1的端口被我关闭了,这是因为在设置端口重新连接或断电重启之后pc设备会发出一个“arp无故帧”,而这里避免pc0与pc1同时发送“arp无故帧”造成混乱,分析起来也比较麻烦,所以将pc1shutdown,只保留pc0,以便更加清楚的看清环路的过程!

数据帧传输过程:

ps:可以看到pc0发出的帧,是“gratuitous arp帧”(只要在cmd下使用arp -d命令就会触发pc发送“gratuitous arp帧”);这里只是说明一下这个帧是什么帧,不要纠结这个帧会不会对环路造成影响!不管什么帧都对环路没有影响, 环路只跟你的拓扑结构(环状结构)有关系跟什么帧没有关系!

数据帧收发过程解析:

1. pc0发出一个“gratuitous arp帧”(该帧使用来检测网络地址是否冲突的,该帧也是一个广播 帧),到达Switch0的f0/1口,Switch0学习mac地址表【9b38:f0/1】,然后分别转发给f0/2、f0/3,(注意此处先转发:f0/2)

2. Switch1的f0/2、f0/3分别收到Switch0转发来的帧,学习mac地址表【先:‘9b38:f0/2’,后:‘9b38:f0/3’(因为先转发f0/2!9b38:f0/3会覆盖‘9b38:f0/2’)】,分别转发!f0/2收到转发给f0/3、f0/3收到转发给f0/2(此处要不是我把pc1的端口关闭,应该是f0/2收到转发给f0/1、f0/3;f0/3收到转发给f0/1、f0/2,注意相同内容的包且同时去往一个地方的站思考交换机只转发一个!);

3. Switch0的f0/3、f0/2分别收到Switch1转发来的帧,然后学习mac地址表【9b38:f0/3、9b38:f0/2】来自f0/3的转发给f0/1(pc0)、f0/2(Switch1),来自f0/2的帧转发给f0/1(pc0)、f0/3(Switch1);

4. Switch1的f0/2、f0/3分别收到Switch0转发来的帧,学习mac地址表【先:‘9b38:f0/2’,后:‘9b38:f0/3’】,然后继续做转发处理,这里要注意图上0.204、0.205时间点上当前设备“Switch1”这里,在转发的时候都分别显示“f0/3正在发送另外一个帧、f0/2正在发送另外一个帧”,然后它先发送了从f0/3发来要转发给f0/2的帧,再发送原本优先的f0/2发给f0/3的帧;

5. Switch0的f0/2、f0/3分别收到Switch1转发来的帧,然后学习mac地址表【先:‘9b38:f0/2’、后:‘9b38:f0/3’】,然后继续做转发处理,来自f0/2的帧转发给f0/1(pc0)、f0/3(Switch1),来自f0/3的转发给f0/1(pc0)、f0/2(Switch1);

6. Switch1的f0/3、f0/2分别收到Switch0转发来的帧,学习mac地址表【先:‘9b38:f0/3’,后:‘9b38:f0/2’】,然后还是一样继续转发…………反反复复不断循环。

ps:这里需要提示的是至于先转发那个包这个不是一成不变的,由交换机性能等各方面因素决定!如上面的本优先处理f0/2的,后面到第四次转发的时候Switch1提示两个接口都在发送另外一个帧,所以导致先转发f0/3的帧最后也会操作mac地址表的改变,不过你不需要管它先处理哪个,因为结果都是一样的,一样会循环转发,也就是环路!

华为模拟器实验验证: 

从MAC地址表可以很清楚的看出,肯定会造成数据包在环内循环转发的,造成回复的数据包无法到达目的地。

如上mac地址表会造成PC2回复给PC1的包从SW2GE0/0/01 出去到SW1交换机的GE0/0/2,然后又从SW1交换机的GE0/0/3口出,不断循环重复这个过程。

下面的“抓包过程“也可以看出,这会使数据包不断循环转发,如果遇到广播包时也会造成不断的广播占用设备性能,肯定会造成设备性能下降,卡顿,断网等现象。

环路过程抓包:

Adi:华为抓包不在做讲解,因为原理一样的,看思科的实验解析就行,重复讲解没有意思,字多了看起来也烦;最后华为的抓包很清楚的环路的影响了。

环路的影响:

1. Broadcast storms广播风暴;

2. Multiple Frame Copies多重复数据帧;

3. MAC Database Instability MAC地址表混乱/地址表项错误;

4. 不断循环广播、泛洪,大量消耗交换机资源,导致交换机资源耗尽;

5. 导致通信故障,如断网。

Ps:现实环境中判断是否环路的方法:抓包、环路监测、看指示灯;不过现在的设备如华为、华三、Cisco网管交换机都会默认开启生成树,来防止环路。但现实中还是有很多非网管交换机的,这就很容易产生环路。

Adi:最后提醒一下,一定要确保自己懂得了mac地址表学习原理,交换机转发的方式:单播、广播之后在来看这个知识,没有这些基础做支撑你看了也是徒增烦恼。还有就是如果想要非常清楚看到环路过程中数据帧的走向,帧的类型及作用的,建议使用“ Cisco simulator (思科模拟器)” 去做实验!个人觉得相比于华为模拟器,思科模拟器更加直观清晰。 

tips:本文是本人手打一次过,有问题的地方欢迎大家指正!

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

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

相关文章

node笔记_koa框架的路由

文章目录 ⭐前言⭐koa 原生路由写法⭐引入 koa-router💖 安装koa-router💖 动态读取路径文件作为路由 ⭐结束 ⭐前言 大家好,我是yma16,本文介绍koa框架的路由。 往期文章 node_windows环境变量配置 node_npm发布包 linux_配置no…

[网络安全]DVWA之XSS(Reflected)攻击姿势及解题详析合集

[网络安全]DVWA之XSS(Reflected)攻击姿势及解题详析合集 XSS(Reflected)-low level源代码姿势 XSS(Reflected)-medium level源代码姿势1.双写绕过2.大小写绕过 XSS(Reflected)-high level源代码str_replace函数 姿势 XSS(Reflected)-Impossible level源代…

ssh正反隧道(代理msf对icmp穿透监听)

ssh正向隧道: 就是将本地端口映射到远程上,相当访问本地端口就是访问远程的端口 正向 访问本地对应的是远程的端口 ssh -fNCL 本地ip:本地port:远程ip:远程port 用户远程ip/域名 实例: ssh -fNCL 192.168.222.128:90:192…

HTML的表单

前后端交互过程: 表单在 Web 网页中用来给访问者填写信息采集客户端信息,使网页具有交互的功能,用户填写完提交后,表单的内容就从客户端的浏览器传送到服务器上,经过服务器上程序处理后,再将用户所需信息传…

人机大战?——带你玩转三子棋(C语言)

TOC 1、前言 在学习完数组之后,我们就可以自己来实现一个简单游戏—三子棋了! 为了确保程序的独立性:我们创建了一个源函数game.c 和test.c,一个头文件game.h test.c——测试游戏 game.c——游戏函数的实现 game.h——游戏函数…

Redis缓存数据库(三)

目录 一、概述 1、Redis架构 2、AKF 3、CAP原则 一、概述 1、Redis架构 Redis 有哪些架构模式?讲讲各自的特点 单机版 特点:简单 问题: 1、内存容量有限 2、处理能力有限 3、无法高可用。 主从复制 Redis 的复制(replic…

python绘制散点图|散点大小和颜色深浅由数值决定

python绘图系列文章目录 往期python绘图合集: python绘制简单的折线图 python读取excel中数据并绘制多子图多组图在一张画布上 python绘制带误差棒的柱状图 python绘制多子图并单独显示 python读取excel数据并绘制多y轴图像 python绘制柱状图并美化|不同颜色填充柱子 python随机…

【嵌入式系统应用开发】FPGA——HLS入门实践之led灯闪烁

目录 1 HLS1.1 HLS简介1.2 HLS与VHDL/Verilog1.3 HLS优点与局限 2 环境配置3 HLS实例——Led点亮3.1 工程创建3.2 添加文件3.3 C仿真与C综合3.4 创建Vivado工程3.5 导入HLS生成的IP核3.6 添加实验代码3.7 编译生成获取结果 总结 1 HLS 1.1 HLS简介 HLS(High Level Synthesis)…

十大排序算法(上)直接插入排序、希尔排序、直接选择排序、堆排序

🌈目录 1. 排序的概念2. 常见的排序算法3. 排序算法的实现3.1 插入排序3.1.1 直接插入排序3.1.2 希尔排序(缩小增量排序) 3.2 选择排序3.2.1 基本思想3.2.2 直接选择排序3.2.3 堆排序 1. 排序的概念 排序,就是使一串记录&#xf…

阿里通义千问_VS_讯飞星火

今天终于获得阿里通义千问大模型体验授权,第一时间来测试一下效果,使用申请手机号登录(地址:https://tongyi.aliyun.com)后,需要同意通义千问大模型体验规则,如下图所示: 同意之后就…

【C++初阶】类与对象(中)之运算符重载 + 赋值运算符重载

👦个人主页:Weraphael ✍🏻作者简介:目前学习C和算法 ✈️专栏:C航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞&#x1…

CPU性能优化:Cache

CPU性能提升:Cache机制 随着半导体工艺和芯片设计技术的发展,CPU的工作频率也越来越高,和CPU进行频繁的数据交换的内存的运行速度却没有相应的提升,于是两者之间产生了带宽问题。进而影响计算机系统的整体性能。CPU执行一条指令需…

C++/PTA 至多删三个字符

至多删三个字符 题目要求解题思路代码总结 题目要求 给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 输入格式: 输入在一行中给出全部由小写英文字母组成的、长度在区间 […

关于摆摊气球的调研-网红气球

本章主要介绍一下最近网红气球: 最近看到很多摆摊的抖音视频,都在说卖气球很好,成本低,收益高,所以调研了一下,网红气球分好几种: a,飘空气球; b.手持网红气球 c.青蛙 首先介绍飘空…

文件上传,内容逻辑数组绕过(22)

uploadd 第十三关 这一关告诉我们的,有一些上传漏洞需要配合这个文件包含和加解密。 这个先在一个图片源码里面写入php后门的脚本代码 这里也可以手工注入到图片的源码里面来,手工注入,如果采用16进制打开这个图片,这个图片在…

okhttp篇4:RetryAndFollowUpInterceptor

在上一篇 okhttp篇3:RealCall_yolan6824的博客-CSDN博客 中讲到RealCall无论是在execute还是enqueue方法中,都是通过getResponseWithInterceptorChain方法获取Request对应的Response的。而getResponseWithInterceptorChain这个方法,又是通过…

基于PyQt5的图形化界面开发——Windows内存资源监视助手[附带编译exe教程]

基于PyQt5的图形化界面开发——Windows内存资源监视助手[附带编译exe教程] 0. 前言1. 资源信息获取函数——monitor.py2. UI界面——listen.py3. main.py4. 运行效果5. 编译 exe 程序6. 其他PyQt文章 0. 前言 利用 PyQt5 开发一个 windows 的资源监视助手,在使用虚…

【vimsolo】让vim看起来像VSCode:颜色主题和状态栏的配置

文章目录 1. 目的2. 理念: vimsolo3. vimrc: 配置颜色4. vimrc: 配置状态栏5. 拷贝颜色主题和.vimrc: python安装脚本 1. 目的 习惯了 VSCode 默认的配色:黑色主题,蓝色状态栏。偶尔使用 Vim 时想让 vim 伪装的像 VSCode,不考虑花…

Web 测试和 App 测试重点总结

单纯从功能测试的层面上来讲的话,App 测试、Web 测试在流程和功能测试上是没有区别的,但由于系统结构方面存在差异(web 项目,b/s 架构;app 项目,c/s 结构)在测试中还是有不同的侧重点内容&#…

ZED使用指南(八)Depth Sensing

ZED立体相机再现了人类双目视觉的工作方式。通过比较左眼和右眼看到的两种视图,不仅可以推断深度,还可以推断空间中的3D运动。 ZED立体相机可以捕捉到场景的高分辨率3D视频,通过比较左右图像之间的像素位移可以估计深度和运动。 深度感知 …