生成树与快速生成树(STP、RSTP)原理

STP生成树(IEEE 802.1D)

  1. 为什么需要生成树?
    链路聚合技术只有线路的冗余,没有设备的冗余,如果要做设备上的冗余,就可以做生成树。表面上看生成树的作用是做设备冗余时,防止成环的一种途径,但实际上可以避免做生成树,使用堆叠技术和虚拟化技术来达到防止出现环路的作用(将两个设备做成一个设备,使得整个拓扑还是一个树状结构),所以生成树并不是必须项,但如果担心交换机出现环路风险,就一定要使用生成树。从冗余角度来讲,生成树是不会带来冗余的,是因为冗余出现了环路才使用生成树的,并不是一个冗余关系。
  2. 如果出现环路,怎么使用生成树来处理?
    交换网络出环的概率是非常大的,尤其是在企业网中,网络环境复杂,管理上的不严格是随处可见的,所以大部分的企业网都会使用生成树。环路会引发几个现象:广播风暴、MAC地址表反复重写,都会对交换机造成严重损害,都会迅速的把设备搞成资源不足的情况,不管说是转发资源还是MAC表的内存资源问题,都会造成宕机,导致数据无法通过交换机。
  3. 交换机如何防环?
    将拓扑结构做成树状结构,防止出环,凡是阻碍成树的线路全部砍掉。
    生成树是一种依靠BPDU信息来形成交换机间通信的技术

BPDU

在这里插入图片描述

  • 协议ID:表明哪一种生成树
  • 版本:生成树的版本(如cisco的pvst/pvst+)
  • Message type:BPDU的包的种类(配置BPDU、拓扑变更BPDU)
  • Flags:标记
  • Root ID:根ID
  • Cost of path:到达根的开销,带宽越大,开销越小,叠加值
  • Bridge ID:自己的桥ID
  • Port ID:描述端口的两个参数,端口优先级、端口MAC
  • Message age:按照时间算,最大20s(Max age)
  • Hellotime:2s
  • Forward delay:15s

20s+15s*2=50s,即原始生成树的切换时间
第一个20s的来源是BPDU最迟被收集到的时间,转发延时牵扯到侦听和学习,指的是一个数据包(无论是BPDU数据包还是普通数据包)在一个有限的交换网络中从一个交换机到达另一个交换机的转发时间最长是15s。

原始生成树的运算过程

总的来说,在最开始的时候,每个交换机会发送BPDU,收集完BPDU后开始选举,选完根交换机选根端口,选举完成后收敛完成。
发送BPDU之前,交换机的接口会同步它的全局BPDU参数,即交换机将BPDU同步给接口,接口将BPDU保存后向外发送,到达对端接口的时候,对端接口由于同步了自己的全局BPDU,会将自己的BPDU与收到的BPDU进行比对(BID),比对后同步较优的BPDU,此时交换机会认为较优BPDU的发送者是本地的根交换机,同时接口会同步全局BPDU后再同步给其他接口,因为周期的存在,其他接口会根据周期发送所同步的BPDU,一直扩散。只要保证自己所发出的BPDU一定能被其他设备接收到,全网一定会同步出一个唯一的根ID,这就是选根的过程,也因此必须等待20s,否则可能会导致某一条BPDU没有同步结束,此时选的根就不一定是一个准确的根。如果想加快收敛,可以手动将max age改小,但不建议改动,后期生成树因为更改了选举方法,故不会有这样的问题。
根接口:设备对端的接口会被同步,被同步后会计算cost-path,远端设备的BPDU同步时,会叠加cost-path,其他设备的接口在同步BPDU比对RID时会发现RID相同,接着会比对cost-path,设备在同步全局BPDU时,会保留最优的cost-path,此时被同步cost-path的接口即为根接口。如果cost-path依旧相等,就比对对方的BID,因为此时全局BPDU被对端设备同步了,此时的BID就是对端的BID,大部分人会认为是因为对端的BID越小,就越能成为下一代根,但实际上这是从结果推导出来的结论,存在逻辑上的问题 然后比对对端的port ID(port优先级/port MAC),在port优先级相同时比对MAC,MAC值小为优。

如果要修改参数以达到更改原有线路的目的,cost-path一般在本端修改,PID优先级在对端接口修改。

SW(config-if)#spanning-tree vlan 1 ? 
Cost			Change an interface’s per VLAN spanning tree path cost 
Port-priority		Change an interface’s spanning tree port priority

根的选举

根据BID的参数来选,越小越优,先看优先级后看MAC

根端口选举

越小越优

  1. cost-path
  2. 对端BID 桥优先级和桥MAC
  3. 对端的PID 端口优先级

指定端口的选举

一条线路上只能有一个指定端口
BID本交换机成根的可能性越大越能成为指定接口

状态接口跳转

为什么要有状态切换?
状态切换的其中一个目的是要保证生成树在收敛完成之前没有环路,如果出现环路,数据有可能会无法传递,导致生成树无法收敛。状态切换就是为了保证不会出环并且按照既定步骤完成生成树的收敛。

  1. blocking 不能收也不能发送数据及BPDU,但可以监听BPDU 20s(max age)
  2. Listening 收集BPDU信息选举,本质是选举根接口,可以发送BPDU 15s(forward delay)
  3. Learning 可以发送普通数据,但不能转发,学习接口转发的MAC地址 15s(forward delay)
  4. Forwarding 可以转发数据及BPDU

其他的生成树都是在STP生成树的基础上改进的,STP生成树最大的问题还是收敛过程太长,所以改进的方向也是以此为主

RSTP(IEEE 802.1w)

Cisco的快速生成树和公有的快速生成树还是有所区别的:公有的快速生成树是所有的VLAN在一棵树内,cisco的快速生成树是每一个VLAN一棵树。

RSTP的增强

STP的速度是由四个状态跳转决定的。可以改进的地方是blocking状态,此处20s花在收集BPDU上了,是一种完全不能收发数据的状态,在此的改进是让生成树在blocking之前就完成BPDU的收集,不需要再花20s,直接跳转到listening状态,随时收发BPDU,此时在四个状态上的优化已经到达极限。
RSTP删除了3种端口状态,增加了2种端口角色,并且把端口的属性充分按照状态和角色解耦,使其可以更加精确地描述端口,从而使得初学者更容易学习协议,同时加快拓扑收敛。通过端口角色的增补,卷花了生成树协议的理解及部署。
RSTP的端口角色一共有4种:根端口、指定端口、替换(Alternate)端口、备份(Backup)端口,将非指定端口重新定义成替换和备份两种角色,根据这两种角色就可以做到快速的切换。
根端口和指定端口的作用通STP协议中定义,替换端口和备份端口的描述如下:
从配置BPDU报文发送角度来看:替换端口就是由于学习到其它网桥发送的配置BPDU报文而阻塞的端口,就是该端口与其他交换机构成了一个大环。交换机判断环路的方式是收到了一个其他交换机发送回来的一个本由自己发出的BPDU从而确定出现环路,进而被阻塞成为替换端口;备份端口就是由于学习到自己发送的配置BPDU报文而阻塞的端口,并没有通过其他交换机转发。替换端口是一种设备的备份端口,备份端口是一种类似于接口的备份端口。
从用户流量角度来看:替换端口提供了从指定桥到根的另一条可切换路径,是一种已经确定角色的备份根端口的接口,当根端口出现问题,会自动切换到替换端口,在切换的过程中不会再进行选根,就意味着可以再节约15s,也不再需要再花15s去学习,而是将原来的根端口的BPDU信息改为当前端口,就可以节约学习的时间,并且将总体的收敛时间缩短到2s之内,而且绝对不会出现环路;备份端口作为指定端口的备份,提供了另一条从根桥到相应网段的备份通路,也是被确定角色的端口,不会出现环路,学习和选根阶段也如同替换端口一样被省略。给一个RSTP域内所有端口分配角色的过程就是整个拓扑收敛的过程。

端口状态的重新划分

RSTP的状态规范把原来的5中状态缩减为3种。根据端口是否转发用户流量和学习MAC地址来划分:

  1. 如果不转发用户流量也不学习MAC地址,那么端口状态就是Discarding状态
  2. 如果不转发用户流量但是学习MAC地址,那么端口状态就是Learning状态
  3. 如果急转发用户流量又学习MAC地址,那么端口状态就是Forwarding状态

配置BPDU的处理发生变化

拓扑稳定后配置BPDU报文的发送方式:根桥按照Hello Timer规定的时间间隔发送配置BPDU。其他非根桥设备在收到上游设备发送过来的配置BPDU后们才会触发发出配置BPDU,此方式使得STP协议计算复杂切缓慢。RSTP对此进行了改进,即在拓扑稳定后,无论非根桥设备是否接收到桥传来的配置BPDU报文,非根桥设备仍然按照Hello Timer规定的时间间隔发送配置BPDU,该行为完全由每台设备自主进行。

更短的BPDU超时计时

如果一个端口连续3个Hello Time时间内没有收到上游设备发送过来的配置BPDU,那么该设备认为与此邻居之间的协商失败。而不像STP那样需要先等待一个Max age。

处理次优BPDU

当一个端口收到上游的指定桥发来的RST BPDU报文时,该端口会将自身储存的RST BPDU与收到的RST BPDU进行比较。如果该端口储存的RST BPDU的优先级高于收到的RST BPDU,那么该端口会直接丢弃收到的RST BPDU,立即回应自身储存的RST BPDU。当上游设备收到下游设备回应的RST BPDU后,上游设备会根据收到的RST BPDU报文中相应的字段立即更新自己储存的RST BPDU。由此,RSTP处理次等BPDU报文不再依赖于任何定时器通过超时解决拓扑收敛,从而加快了拓扑收敛。

快速收敛

Proposal/Agreement机制

当一个端口被选举成为指定端口之后,在STP中,该端口至少要等待一个Forward Delay(Learning)时间才会迁移到Forwarding状态。而在RSTP中,此端口会先进入DIscarding状态,再通过Proposal/Agreement机制快速进入Forward状态。这种机制必须在点到点全双工链路上使用。

  1. 每一个VLAN一棵生成树 BIDextend system ID是vlan ID
  2. 接口状态改变,收敛时间减少
    Discarding ->learning ->forwarding 15+15=30s
  3. 端口角色改变 代替端口和备份端口
  4. BPDU的改变 TCN 建议机制
  5. 网络类型 1.p-to-p 2.share 3.edge

在这里插入图片描述
1.proposing:当一个指定端口处于Discarding或Learning状态时,该变量置位,并向下游交换设备传递Proposal位被置位的RST BPDU。
2.Proposed:当端口收到对端的指定端口发来的携带proposal的RST BPDU时,该边浪置位。该变量指示本网段上的指定端口希望尽快进入forwarding状态。
3.Sync:当proposed被置位以后,收到proposal的根端口会依次为自己的其他端口置位sync变量,而收到proposal的非边缘端口则会进入discarding状态。
4.Synced:当端口转到discarding状态后,会将自己的synced变量置位。Alternate端口、backup端口和边缘端口会马上置位该变量。根端口监视其他端口的synced,当所有其他端口的synced全被置位,根端口会将自己的synced置位,然后传回RST BPDU,其中agreement位被置位。
5.Agreed:当指定端口接收到一个RST BPDU时,如果该BPDU中的agreement位被置位且端口角色字段是跟端口,该变量被置位。Agreed变量一旦被置位,指定端口马上转入forwarding状态。

1.p0和p1两个端口马上都先成为指定端口,发送RST BPDU。
2.A的p1口收到更优的RST BPDU,马上意识到自己将成为根端口,而不是指定端口,停止发送RST BPDU。
3.ROOT的p0进入discarding状态,于是发送的RST BPDU中把proposal置1.
4.A收到根桥发送来的携带proposal的RST BPDU,开始将自己的所有端口进入sync变量置位。
5.P2已经阻塞,状态不变;p4是边缘端口,不参与运算;所以只需要阻塞费边缘指定端口p3.
6.P2,p3,p4都进入discarding状态之后,各端口的synced变量置位,根端口p1的synced也置位,于是便向p0返回agreement位置位的回应RST BPDU。该RST BPDU携带和刚才根桥发过来的BPDU一样的信息,除了agreement位置位之外(proposal位清零)。
7.当s1判断出这是对刚刚发出的proposal的回应,于是端口p0马上进入forwarding状态。

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

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

相关文章

改进粒子群算法,遗传粒子群优化算法GAPSO,混沌粒子群算法CPSO,matlab程序

改进粒子群算法,遗传粒子群优化算法GAPSO,混沌粒子群算法CPSO,matlab程序 ID:91100672404209154专业算法工程师

2021-10-06 粒子群算法记录学习

粒子群算法的寻优算法记录学习(由于时间关系未添加代码) 粒子群算法(PSO)是计算智能领域,除了蚁群算法,鱼群算法之外的一种群体智能的优化算法。PSO算法源于对鸟类捕食行为的研究,鸟类捕食时&am…

粒子群算法原理|python实现|参数调优

粒子群算法是比较有名的群体智能算法之一,其他群体智能算法还包括蚁群算法、鱼群算法、人工蜂群算法等。今天学习一下粒子群算法。 文章目录 算法原理(Inspiration)优化过程python实现参数调优w参数的设置参数 c i c_i ci​的设置速度范围的…

STP生成树原理

环路引起的问题 二层交换网络 随着局域网规模的不断扩大,越来越多的交换机被用来实现主机之间的互连。如果交换机之间仅使用一条链路互连,则可能会出现单点故障,导致业务中断。为了解决此类问题,交换机在互连时一般都会使用冗余…

系统发育树的美化~Figtree(图文教程)

前言 figtree是一款用于进化生物学的进化树作图软件,常用于进化树的美化,可以设置颜色、名称、样式等参数。官网如下: FigTreehttp://tree.bio.ed.ac.uk/software/figtree/ 一、Figtree的安装 进入figtree的官网后,点击下图箭…

MEGA软件——系统发育树构建方法(图文讲解) 转载

转载:http://www.plob.org/2012/12/02/4927.html 一、序列文本的准备 构树之前先将目标基因序列都分别保存为txt文本文件中(或者把所有序列保存在同一个txt文本中,可以用“>基因名称”作为第一行,然后重起一行 编辑基因序列)&a…

粒子群算法介绍、matlab实现及相关改进

粒子群算法介绍、matlab实现及相关改进 参数 N:粒子数量 ⟹ \Longrightarrow ⟹一般取[20,40],对于较难或者特定类别的问题,可以取[100,200]; D:决策变量维度 iter_Max:最大迭代次数 X:决策变量 V&…

文件树生成器

文件树生成 (批处理指令) 就是一个WIN的批处理指令 前言 最近在编写文档时,发现数据量有点多,并且文件的位置繁杂,于是就想着弄一个文件树的软件, 发现 Win 的的 CMD 命令中有tree这个指令, 于是就弄了下BAT 文件 好处 整体因人而异 我说说,我觉得的优点 可以快速的帮我…

STP生成树详解_01

一 、生成树协议产生的背景 1、局域网中出现的主要问题: 1) 网络互联 交换机和网线 2) 广播过多 分隔广播域 vlan 3) 局域网中终端设备较多,200台以上的计算机互通,需要多台交换机? 多台交换机之间如何连线? 交换机…

粒子群算法实现之python

python实现粒子群算法 粒子群算法(PSO),又可以叫做鸟群算法,是学者观察模仿鸟群的行为而发展的一种智能搜索算法,和遗传算法一样,也是一种群智能算法。 总的来说,粒子群算法也是一种进化算法&a…

【iOS-Cocos2d游戏开发之十】添加粒子系统特效并解决粒子特效与Layer之间的坐标问题;

李华明Himi 原创,转载务必在明显处注明: 转载自 【黑米GameDev街区】 原文链接: http://www.himigame.com/iphone-cocos2d/472.html 一直以来Himi特别想在游戏中使用粒子系统,但是之前做J2me与Android中发现使用粒子做的效果都会造成游戏运行内存的一…

第十二讲:生成树概念及STP技术应用

在传统的交换网络中,设备通过单条链路进行连接,当某一个点或是某一个链路发生故障时可能导致网络无法访问,解决这种问题的办法是在网络中提供冗余链路,但是交换机网络中的冗余链路会产生广播风暴、MAC地址失效等现象,最…

粒子群算法及其改进

1 粒子群算法介绍 求解非线性最优化问题时,有一种比较常用的算法为智能体算法,这里我们介绍的粒子群算法就隶属于智能体算法。 粒子群算法是模拟鸟寻找食物:一群鸟在随机的搜索食物。在这个区域里只有一块食物,所有的鸟都不知道食…

系统发育树的生成与美化(MEGA7和iTOL)--1.MEGA7生成系统发育树

#小白学习生成系统发育树 1.序列准备-本文中的数据LOC号是在文献中的附件中所找到的,然后在Phytozome v13中逐个查找氨基酸序列,需要输入所查找的物种名称,以及基因号,如下图所示: 下滑看到蛋白质序列 然后将蛋白质序…

PCL 基于最小生成树(MST)获取单木骨架(粗)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 提取的过程大体上分为两个部分:生成单木MST(最小生成树)以及基于该MST获取大致的骨架结构(线条)。 具体的计算过程如下所述: 1、首先应用Delaunay三角剖分来构造初始图。Delaunay三角剖分是MST计算的基础,因…

详解综合学习粒子群算法——CLPSO(附该文作者给出的matlab代码)

最近团队出了两篇基于CLPSO[1]的改进算法,这里根据自己的理解分析一下这个综合学习的算法,并将文章作者给出的源代码分享出来供大家学习:https://download.csdn.net/download/Bernard_S/12612817 (免费下载,本身就是从作者的主页搬…

进化算法之粒子群算法和Matlab实现(多维)

(粒子群算法进阶讲解传送门:(https://blog.csdn.net/DBLLLLLLLL/article/details/103036067) ) 前面一篇文章介绍了遗传算法,这里再介绍一种进化算法,称为粒子群算法。同遗传算法类似,粒子群算法也是仿照了…

粒子群算法及通过惯性权重和学习因子对其进行改进—MATLAB实现

本文的代码将放在最后,需要的小伙伴们可以免费获取哦!!! 不要忘记点赞加关注奥😋😋 文章目录 粒子群算法一、理论基础1、介绍2、核心公式3、图形直观解释 二、问题描述三、解题思路四、MATLAB实现1、参数设…

可查看其他用户聊天记录,ChatGPT 爆出大BUG

ChatGPT一经推出,迅速出圈,用户赞誉如云,“绝对改变世界”、“第四次工业革命的“火药桶”、“苍天啊,它咋啥都会,我失业了”,一时间 ChatGPT 成为完美的代言词。 然而近日,ChatGPT 遇到了大麻烦…

ChatGPT 和 Midjourney 将改变我们的生活,日常工作流程将完全改变并与这些新型工具集成

上周末我花了很多时间先玩 Open AI ChatGPT,然后玩 Midjourney。起初我笑了,然后我开始完全被各种可能性所困扰,然后我终于意识到了它的潜力,并开始将其用于更有成效的工作。 注意:我本可以用它来制作一个引人入胜的点击诱饵标题,但我没有. 这是我问 Open AI 聊天的第一…