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

news2024/12/23 2:19:56

前言:

       在了解环路之前得先了解交换机的工作原理,当然交换机的基本工作原理其实非常简单,只有“单播转发与泛洪转发”、“交换机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/550238.html

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

相关文章

初始Linux的基本操作

上篇博客中,我介绍了关于Linux的相关概念,让我们初步的了解到Linux的重要性,在这篇博客中我会再讲一些Linux操作系统的理解。 一.操作系统 我们知道Linux是一个操作系统,而操作系统操作系统(英语:Operating System&…

[深度好文]10张图带你轻松理解关系型数据库系统的工作原理

[深度好文]10张图带你轻松理解关系型数据库系统的工作原理 原文(欢迎关注):https://mp.weixin.qq.com/s/CNCfWRpv8QlICGvZkLG4Jw 尽管数据库在我们应用程序中扮演着储存几乎所有状态的关键角色,但人们对其运行原理的了解通常仅停留在较为浅显的层面&…

跟我一起使用 compose 做一个跨平台的黑白棋游戏(4)移植到compose-jb实现跨平台

前言 在上一篇文章中,我们已经实现了游戏的所有界面和逻辑代码,并且在 Android 上已经可以正常运行。 这篇文章我们将讲解如何将其从使用 jetpack compose 修改为使用 compose-jb 从而实现跨平台。 老规矩,先看效果图: 可以看到…

063:cesium设置带边界线材质(material-7)

第063个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中设置带边界折线材质,请参考源代码,了解PolylineOutlineMaterialProperty的应用。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共89行)相关API参考…

Python-matplotlib中的pie(饼)图

Python-matplotlib中的pie(饼)图 %matplotlib inline import matplotlib.pyplot as pltm 51212 f 40742 m_perc m/(mf) f_perc f/(mf)colors [navy,lightcoral] labels ["Male","Female"]plt.figure(figsize(8,8)) paches,te…

为什么不胜任的人,反而获得晋升?

作者| Mr.K 编辑| Emma 来源| 技术领导力(ID:jishulingdaoli) 也许你有过这样的经历,自己勤勤恳恳地干活,每个月却只拿着微薄的薪水,有些人明明无法胜任工作,却像坐了火箭一样飞速晋升。这种现象在现实生活中无处不在…

3699元还配同价位最好屏幕!Redmi Book 14评测:几乎完美的“水桶”轻薄本

一、前言:4K价位最好屏幕 不久前,有网友让我推荐一台4000元价位的轻薄本,笔者直接选了一台搭载i5-13500H处理器且价格仅售4299元的某一线品牌产品。 但是,事后才发现不对,因为这款极具性价比的笔记本竟然用了45%NTSC色…

MIT6.824 lecture5上课笔记(涉及到Lab2A)- Go threads and raft

总结:本节课讲解了一些会在lab2中使用到的go的多线程技巧,会给一些简单的demo,lab2中可能会借鉴这些demo。 详细的Lab2 raft算法实现源码,请参考我的个人仓库(记得点颗星星), 配合readme食用更佳。 MIT6.…

ChatGPT 使用 拓展资料:如何善用大语言模型的推理能力?

ChatGPT 使用 拓展资料:如何善用大语言模型的推理能力?

ChatGPT Plus 会员续费扣款失败如何处理

扣款失败 笔者由于开通 ChatGPT Plus 会员比较早,3月26日一个月就到期了,但是最近几天注意到,虚拟卡上也没有提醒我扣费,还是能继续使用 GPT-4.0,就很奇怪,于是就研究了一番。 PS: 如果有小伙伴还不会开通 …

python 文件操作 , 异常处理 , 模块和包

文件操作 1.写数据 # open(name, mode) # name:是要打开的目标文件名的字符串(可以包含文件所在的具体路径)。 # mode:设置打开文件的模式(访问模式):只读、写入、追加等。 #1.打开文件---通道建立--申请资源 # w 模式会清空之前的内…

【三维激光扫描】实验04:SiScan基于点云的量测功能

SiScan软件提供的基于点云的量测功能有:两点距离量测、多点距离量测、点到面距离量测、高度量测、坡度量测、角度量测、投影面积量测等等。 文章目录 一、两点距离量测二、多点距离量测三、点到面距离量测四、高度量测五、坡度量测六、角度量测七、投影面积量测一、两点距离量…

分布式与并行计算—并向算法实现

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 原始串行快速排序算法中有“分而治之”的递归调用部分,在每次选择pivoit并把序列按照小于pivoIt和大于pivoit分成两类后,左右两部分的递归排序可以并发执行。 运行时间 为了减小偶然性因素造成的时间差…

postgresql|数据库|插件学习(一)---postgresql-12的内置插件pg_stat_statements的启用和使用

前言: 插件就是原软件的扩展功能。postgresql有非常多的各种各样的插件,当然了,插件不安装对于我们使用数据库并没有什么太多的影响,可能只是不舒服一些而已,但有一些插件我们如果有安装,那么,对…

【NMI 2021】从生物学角度看进化计算(6个生物进化特征)

A biological perspective on evolutionary computation “生物学视角下的进化计算”,总结了进化算法——通过对比模拟和真实的进化,指出当前进化算法与生物进化存在的六点差异,并指出了对应的改进方案。 何为进化算法? 将任意问…

第二部分——长难句——第二章——复合句——第二节——状语从句

最后一类了哦 一,状语从句的概述 (一)状语从句的含义 一个句子作状语表达描述性的信息 一个主句可以组合好几个状语从句,因为可以表述不同方面的信息。 (二)状语从句的写法 状语从句的连接词叫做从属连…

Java--内部类学习笔记

本文介绍了什么是内部类,Java中的内部类:实例内部类. 静态内部类.局部内部类.匿名内部类的语法和注意事项,以及每个内部类的运用场景,以及简单介绍了匿名内部类更简洁更特殊的语法->lambda表达式 Java内部类学习笔记 一.什么是内部类?二. 内部类的分类1.实例内部类2.静态内…

【计算机视觉 | 扩散模型】新论文 | DragGAN论文:如果甲方想把大象 P 转身,你只需要拖动 GAN 就好了

文章目录 一、论文说明二、前言三、论文理解四、实验4.1 定性评估4.2 定量评估4.3 讨论 一、论文说明 2023年5月18日提交的论文,华人一作。 论文地址: https://arxiv.org/pdf/2305.10973.pdf项目地址: https://vcai.mpi-inf.mpg.de/projec…

pg事务:子事务

什么是子事务? 一般事务只能整体提交或回滚,而子事务允许部分事务回滚。 SAVEPOINT p1 在事务里面打上保存点标记。不能直接提交子事务,子事务也是通过事务的提交而提交。不过可以通过ROLLBACK TO SAVEPOINT p1回滚到该保存点。 子事务在大…