学习笔记——交换——STP(生成树)工作原理

news2024/10/23 8:20:45

三、工作原理

STP的基本原理是在一个有二层环路的网络中,交换机通过运行STP,自动生成一个没有环路的网络拓扑。这个无环网络拓扑也叫做STP树(STP Tree),树节点为某些交换机,树枝为某些链路。当网络拓扑发生变化时,STP树也会自动地发生相应的改变。

1、选举简介

STP树的生成过程是:首先选举根桥,然后确定根端口和指定端口,最后阻塞备用端口。(上右图)

(1)首先在交换网络中选举一个根桥(Root Bridge)

选举根桥,就是选根交换机。STP在交换网络中开始工作后,每个交换机都会向网络中发送配置BPDU。配置BPDU中包含交换机自己的桥ID(BID)。

在一个连续的STP交换网络中只会存在一个根桥,比较全网最小的BID的交换机成为根桥,根桥具备抢占性,具备唯一性。除根桥外,其余交换机成为非根桥

首先比较桥的优先级,默认都是32768越小越优先优先级一样对比桥MAC,也是越小越优先,根桥上所有端口都是指定(DP)端口。(根桥上的指定(DP)端口不会被阻塞)

为了确保交换网络的稳定,建议提前规划STP组网,并将规划为根桥的交换机的桥优先级设置为最小值0。

(2)在每台非根交换机(根桥)选举一个根端口(RP)

在每个非根桥交换机都会在自己的接口中选举一个根端口(RP:接受来自根桥最好BPDU的接口)

非根桥交换机上有且只会有一个根接口。当非根桥交换机有多个接口接入网络中时,根接口是其收到最优配置BPDU的接口。

(3)在每条链路选举出一个指定端口(DP)

根接口选举出来后,每段链路上有且只有一个指定端口,在每条链路上(冲突域)都会选举一个指定端口。(DP:负责在链路上转发根桥最好BPDU的接口,一般情况下,根桥所有的接口都是DP口)

对比该段链路两端的桥的优先级及桥MAC,小的获胜,该桥侧的端口成为指定端口DP(不会阻塞),链路另一端的端口处于阻塞状态只有根桥能发送BPDU报文,其它桥都是转发该报文。

非根桥使用在该接口上收到的最优BPDU进行计算,然后将计算得到的配置BPDU,与除了根接口之外的,其他所有接口所收到的配置BPDU进行比较:

如果前者更优,则该接口为指定接口;

如果后者更优,则该接口为非指定接口。

一般情况下,根桥的所有接口都是指定接口。

(4)剩余端口为阻塞端口(AP)

一台交换机上,既不是非根桥的根端口(RP),也不是非根桥的指定端口(DP),则此时该接口为阻塞端口(block port)

STP操作的最后一步是阻塞网络中的非指定接口。这一步完成后,网络中的二层环路就此消除。

3、选举详细步骤(生成树算法步骤)

(1)选举根桥/交换机(Root Bridge,RB)

为什么根桥交换机的所有端口都是指定端口呢?

因为根桥交换机端口的根路径开销都是 0 ,根据选择选举原则,成为这条链路的指定端口。

1)选举依据:

STP中根桥的选举依据:桥ID(BID)  

1、先比较BID(桥)优先级,越小越优(优先级默认为32768),如果优先级一致,下一步 。

2、再比较MAC地址(MAC越小越优)。

(上图)交换机S1、S2、S3都使用了默认的桥优先级32768,则需要比较MAC地址,S1中MAC地址小显然S1的BID最小,所以最终S1被选举为根桥。

BID最小的交换机称为根桥(根桥可以被抢夺)

2)选举过程:

每一台交换机启动STP后,都认为自己是根桥,根桥上的所有端口都是指定端口;

BPDU报文通过交换机的所有端口进行转发,当某一端口收到自己的BPDU报文时会将其阻塞掉;

对端交换机收到BPDU报文后,会比较BPDU中的根桥ID和自己的桥ID,如果桥ID相同,再比较MAC地址大小。

最后,在整个网络中里面会有一个桥ID最小的交换机,这个交换机就是整个网络的根桥

根桥选出后,其他交换机都可以叫指定桥。指定桥不再主动发出BPDU,只会转发根桥的BPDU。根桥每间隔Hello Time(默认2秒)时间周期性发出BPDU。

详细过程:

        STP交换机初始启动之后,每台交换机都会认为自己是根桥,从所有启动的端口发送BPDU,并在发送给其他交换机的宣告自己是根桥,当交换机从网络中收到其他设备发送过来的BPUD时,会比较BPUD中指定的根桥BID和自己的BID,交换机不断交互BPUD同时进行比较,直至选举出一台BID值最小的交换机作为根桥。

        根桥会在固定的时间间隔发送BPDU ,其它设备对BPDU进行转发,从而保证网络拓扑的稳定。

        根桥是可以抢占的,在STP完成网络收敛后,如果网络中接入一台新的交换机,且新增交换机的优先级比根桥交换机更优,那么新增交换机会成为网络中新的根桥。同时,STP将会重新收敛、重新计算网络拓扑,这个过程会引发网络震荡,对流量的正常转发造成影响。

3)优先级修改命令:

stp  priority  4096   //修改桥优先级,取值范围为0到65535,为4096倍数。

stp  root  primary    //交换机会自动降低优先级使自己成为根桥。

注意:通常在企业里面,将核心交换机优先级设为最低。

(2)选举根端口(Root Port,RP)

        根桥上的端口是指定端口,不是根端口每个交换机有且仅有一个根端口

        根桥(RB)选举出来后,其它没有成为根桥的交换机都为非根桥。STP 会为每个非根桥选举一个根接口,也就是在交换机的所有端口中,选择距离根桥最近的一个端口,这就是根端口。

        每台非根桥设备可能会有多个端口与网络相连,为了保证从某台非根桥设备到根桥的工作路径是最优且唯一,必须从该非根桥设备的端口中确定出一个被成为“根端口”的端口,由根端口来做为非根桥设备与根桥设备之间进行报文交互的端口一台非根桥设备上最多只能有一个根端口

        如果有两个或两个以上的端口计算得到的累计路径开销相同,那么选择收到发送者BID最小的那个端口作为根端口

根端口选举依据:非根交换机在选举根端口时分别依据该端口的

  • 根路径开销、②对端桥ID(BID,Bridge ID)、③对端PID(PID,Port ID)、④本端PID

那是如何选择根端口的呢?

根桥周期性的发送BPDU ,非根桥的所有端口都能收到BPDU,对比端口收到的BPDU中的参数值。

根端口选举规则:

1、在非根桥设备上选择,比较端口收到的BPDU报文中Root ID最小的,为根端口(同一根桥,Root ID是一致的)

2、非根设备上 所有的端口中选择一个离根最近的。

        1)RPC根路径开销(跟链路带宽有直接关系)。(越小越优)

        2)比较对端的桥ID(BID,由优先级与桥MAC组成)。(越小越优)

        3)比较对端的端口ID(PID,由优先级与端口号组成)。(越小越优)

        4)比较本端的端口ID(PID,由优先级与端口号组成)。(越小越优)

如何衡量离根最近呢?

1、根据RPC选举根端口。

比较入方向的开销值RPC(越小越好) -->标准 = 802.1t标准 [802.1d/legacy 不使用的]

G=1000m==20000  取值 2W            E=100M ==200000 取值 20W

如图,假定S1已被选为根桥,现在S3需要从1 端口和2端口中确定除根端口。显然,S3的2端口的RPC为20000;S3的1端口的RPC为200000+20 000=220000,交换机会将RPC最小的那个端口确定为自己的根端口,因此,S3将2端口确定为自己的根端口,同理,S2将自己的1端口确定为根端口。

2、根据对端BID选举根端口。

比较端口接收BPDU的BID。

在实际应用中一台非根桥设备上的RPC可能是相同的,如图所示,假定S1已被选为根桥。对于S4而言,1端口和2端口到根桥的RPC都是相同的,这种情况下就需要根据对端BID来选举根端口。对于S4而言,它的对端BID也就是S2的BID和S3的BID。相比较之后假设S2的BID小,则1端口为S4根端口;反之,2端口就为S4的根端口。

3、根据对端PID选举根端口。

比较端口接收BPDU的PID。

    如图,二台设备在这种连接方式下非根桥的RPC、对端BID均是相同的,这种情况下需要根据对端PID来选举根端口。对于S2而言,它的对端PID就是Root的GE0/0/1口和GE0/0/2口,假设Root的端口优先级都是128,那么Root的端口编号就是1和2。显然Root的GE 0/0/1的PID更小,所以与之相连接的S2设备的GE 0/0/1端口就被选为根端口。

4、根据本端PID选举根端口。

比较自身设备的PID参数

   如图,二台设备中间通过一台HUB相连接。在这种方式下的非根桥的RPC、对端BID、对端PID均是相同的,这种情况就需要根据本端PID来选举根端口。假设S2的端口优先级都是128,那么显然1端口的PID更小。因此,S2的1端口就被选为了根端口。

选举顺序:

第一步:根据RPC选举根端口。

比较入方向的开销值RPC(越小越好) -->标准 = 802.1t标准

由于交换机上接入网络的端口数量可能较多,谁是根端口?

根端口是距离根桥最近的端口,这个最近的衡量标准是靠路径开销来判定的,即根路径开销(RPC)最小的端口就是根端口

STP中每条物理链路都有开销,开销值和链路带宽、聚合有关,值越小越优。

          

如上面左图中,SWA为根桥,那么SWA上没有根端口(RP)只有指定端口。非根桥(指定桥)SWB端口E0/1的根路径开销(RPC)为10,端口E0/2的RPC为30+20=50(经过SWC),所以E0/1为根端口(RP)。同理,SWC上的根端口RP为端口E0/1。

第二步:如果根路径开销一样,选择对端桥ID(BID)最小的。

(如上面右图中)SWB可以选出根端口(RP)为E0/1。可是SWC两个端口的根路径开销(RPC)都是10。

这种情况,当根路径开销(RPC)比不出来时,就比较对端的桥ID(BID),也就是给你发BPDU的桥ID(BID)谁更优(越小越优)。

给SWC端口E0/1发送BPDU的是SWA,桥ID(BID)为0.MAC_A;

给SWC端口E0/2转发BPDU的是SWB,桥ID(BID)为4096.MAC_B;

显然SWA的桥ID(BID)更优,所以SWC的E0/1为根端口。

第三步:如果对端桥ID(BID)也相同,选择对端端口ID(PID)最小的(这步一般在聚合链路中使用)

                                   

如上面左图中,两台交换机通过两条链路相连接,链路开销相同。

SWA为根桥,SWB的端口E0/1和E0/2谁是根端口呢?

根路径开销(RPC)相同,指定桥ID都是SWA,也相同!

这时,比较对端端口ID(PID):是指给我发BPDU的交换机是用哪个端口发的!

很显然,SWA用E0/1端口给SWB的E0/2端口发BPDU,SWA用E0/2端口给SWB的E0/1端口发BPDU。SWA上的两个端口中,E0/1的端口ID(PID)较优(优先级相同,编号小的优)。SWB E0/2是根端口!

第四步:如果指定端口ID也相同,比较PID

如上面右图中,两台交换机间接了一台Hub,或是一台没有运行STP的交换机,并透传BPDU。

假设各链路开销均相同,那么,SWB的两个端口比根路径开销(RPC)、指定桥ID以及指定端口ID,都无法比出高下,胜负难分。

这时,还有一个绝招,比Bridge Port ID,简单点说,就是比两个端口的端口ID(PID)谁更优。

先比PID中的优先级,越小越优,如果一样,端口编号越小越优。E0/1是根端口

注意,这里说的指定端口是一种端口的角色,跟刚才说的用来选根端口的指定端口不是一个意思。

如果两个或两个以上的端口连接到同一台交换机上,则选择发送者PID最小的那个端口作为根端口。

如果两个或两个以上的端口通过Hub连接到同一台交换机的同一个接口上,则选择本交换机的这些端口中的PID最小的作为根端口。

(3)选举指定端口(Designated Ports,DP)

根端口保证了交换机与根桥之间工作路径的唯一性和最优性。

每两台非根交换机之间每一条链路选举出一个指定端口

为了防止工作环路的存在,网络中每个网段与根桥之间的工作路径也必须是唯一且最优的。

当一条链路中有两条或两条以上的路径到达根桥,就必须确定出一个唯一的指定端口防止出现二层环路。指定端口不但是这条链路内所有端口中到达根桥的最优接口,还会向链路内发送 BPDU。

指定端口也是通过比较RPC来确定的,RPC较小的端口将成为指定端口。如果RPC相同,则需要比较BID、PID等。

1)选举依据:

  1. 根交换机的所有端口都是指定端口DP。
  2. 根端口的对端端口一定是指定端口DP。
  3. BPDU转发端口到根交换机的路径成本最小
  4. 本端的网桥ID(BID)最小

剩余端口成为备用端口AP(Alternate Port),将他们阻塞

2)选举规则:

1.RPC根路径开销(跟链路带宽有直接关系)。(越小越优)

2.彼此桥ID(BID,由优先级与桥MAC组成)。(越小越优)

3.自身的端口ID(PID,由优先级与端口号组成)。(越小越优)

3)指定端口的选举

指定端口的选举和根端口不同:

(1)根端口是每台交换机上的所有端口共同参与选举,自己家里搞内斗,选出唯一仅有的一个;

(2)指定端口是在每条物理链路上选出一个,是相连接的不同交换机之间的端口进行选举,是跟外人斗。

首先,根端口对面的端口一定是指定端口每个网段都应该有一个指定端口根桥的所有端口都是指定端口(除非根桥在物理上存在环路)。

        

如图中,SWB与SWA相连接的链路上SWB的E0/1端口为根端口(RP),则它对面SWA上的端口E0/1就是指定端口(DP)。

同样的,SWC与SWA相连接链路上的指定端口(DP)为SWA的E0/2端口。

在没有根端口的链路上怎么选举指定端口呢?(如上面左图中)

SWB与SWC相连接的链路上,指定端口(DP)是SWB的E0/2端口,还是SWC的E0/2端口呢?

首先,比较两个端口的根路径开销(Root Path Cost,RPC)谁更小。

先看SWB的E0/2端口,它的根路径开销(RPC)是多少呢?是15,还是5?正确答案是5!

可以这样来理解:

SWB当初在选举根端口时,E0/2败给了E0/1,是因为从E0/1出去到达根桥更近,RPC=5,而从E0/2出去到达根桥的RPC=15。

现在,选举指定端口是SWB上的端口与其他交换机的端口之间进行比较,是跟外人比较,SWB当然认为自己身上所有端口的RPC都是5,同样,SWC也认为自己身上所有端口的RPC都是10。

很显然,SWB的E0/2端口的RPC更小,所以被选举为这条链路上的指定端口。

如果RPC相同呢?

如上面右图中,SWB的E0/2端口与SWC的E0/2端口,RPC都为5。

这时,就“拼爹”了,比较端口所在交换机的BID谁更优:

SWB的BID为4096.MAC_B,SWC的BID为32768.MAC_C,显然,SWB的BID更优,所以SWB的端口E0/2为这条链路的指定端口。

如果BID也相同?

不会的,如果BID也相同,这条链路就不存在了,还选什么指定端口呢。

AP端口被阻塞后,不会再向外发送任何数据,包括BPDU。但是为了STP保持正常,别人给它发的BPDU依然接收,其他数据则不再接收,全部丢弃。

至此,STP计算完成,环路消除,生成树收敛。

dis stp brief       //查看接口状态 接口角色

(4)选举替代/备用/预备端口(Alternate Port,AP)

每条链路上的指定端口选好后,交换机上所有剩下来的所有端口,非根端口和非指定端口都叫做备用端口(AP,Alternate Port)。备用端口是打破环路的关键,STP都会把这些端口进行逻辑阻塞。

逻辑阻塞:是指这些备用端口不会接收或发送任何数据,但是会监听BPDU。当网络的一些端口出现故障时,STP 会让备用端口开始转发数据,用来恢复网络的正常通信

最后是选择AP端口,AP端口是RP端口备份。

端口被选举为AP后端口将会被阻塞从而达到破环的目的,在这个过程中,端口只会监听BPDU不会中继BPDU,更不会转发业务流量。

1)选举规则:

如果一个端口在一条链路上收到另外一个网桥的更好的 BPDU,但不是最好的,那么这个端口成为替换端口。

如图,一旦备用端口被逻辑阻塞后,STP树(无环工作拓扑)的生成过程便告完成。


整个华为数通学习笔记系列中,本人是以网络视频与网络文章的方式自学的,并按自己理解的方式总结了学习笔记,某些笔记段落中可能有部分文字或图片与网络中有雷同,并非抄袭。完处于学习态度,觉得这段文字更通俗易懂,融入了自己的学习笔记中。如有相关文字涉及到某个人的版权利益,可以直接联系我,我会把相关文字删除。【VX:czlingyun    暗号:CSDN】

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

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

相关文章

《汇编语言》第15章——实验15安装新的 int 9 中断例程

安装新的 int9 中断例程 安装一个新的 int 9 中断例程,功能:在 DOS 下,按下A键后,除非不再松开如果松开,就显示满屏幕的A,其他的键照常处理。 提示,按下一个键时产生的扫描码称为通码,松开一个…

云计算作业一hadoop:问题解决备忘

教程地址:https://blog.csdn.net/qq_53877854/article/details/142412784 修改网络配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33在root用户下编辑 静态ip地址配置后查看ip与配置不符 注意:确保在这之前已经在VMware的编辑>虚拟网络编…

OpenCV中的图像通道合并

在计算机视觉和图像处理领域,OpenCV是一个强大的工具库,它提供了从基本操作到复杂算法的广泛功能。今天,我们将通过一个简单的示例来探索OpenCV中的图像通道处理,特别是如何操作和理解BGR与RGB颜色空间的差异。 Lena图像&#xf…

WSL迁移到D盘

迁移WSL 下的 ubuntu 到D盘 使用工具LxRunOffline 如果出现下面的错误 使用其他版本 [ERROR] Couldnt set the case sensitive attribute of the directory "\\?\C:\Users\admin\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04LTS_79rhkp1fndgsc\LocalState…

TwinCAT3运动路径生成与执行

右键MAIN,点击Add添加Action,添加如下俩个名称的Action 在MAIN中添加如下代码: 在俩个Action中分别添加如下代码: 在MAIN程序中输入如下代码: 选择激活配置 弹出的对话框选择OK 弹出的对话框选择确定&…

Web前端高级工程师培训:使用 Node.js 构建一个 Web 服务端程序(3)

11、HTTP 协议 11-1、协议的定义 HTTP 是一种能够获取如 HTML 这样的网络资源的 protocol(通讯协议)。它是在 Web 上进行数据交换的基础,是一种 client-server 协议,也就是说,请求通常是由像浏览器这样的接受方发起的。一个完整的Web文档通…

【解决】使用Hypermark将Markdown文件转化为HTML文件

写在前面: 如果文章对你有帮助,记得点赞关注加收藏一波,利于以后需要的时候复习,多谢支持! 文章目录 一、文件准备(一)HTML模板文件(二)MD文件夹和储存文件夹 二、文件转…

【C++贪心】1536. 排布二进制网格的最少交换次数|1880

本文涉及知识点 C贪心 决策包容性 LeetCode1536. 排布二进制网格的最少交换次数 给你一个 n x n 的二进制网格 grid,每一次操作中,你可以选择网格的 相邻两行 进行交换。 一个符合要求的网格需要满足主对角线以上的格子全部都是 0 。 请你返回使网格满…

QUIC 启动!

掘金地址:https://juejin.cn/post/7428200842229006377 引言 QUIC是什么?明明你每天都在用,明明每天都在timing,难道你不知道吗?啊?不会吧,不会吧。 那就让本文来让你全方位的了解这个协议。 …

word表格跨页后自动生成的顶部横线【去除方法】

Hello World! Its been a long time. 这一年重心放在了科研、做事、追寻新的经历上,事有正事、琐事、幸事、哀事,内心与认知成长了一些,思想成熟了几分,技艺也有若干收获。不管怎样,来打个卡吧,纪念一下&…

爬虫日常实战

爬取美团新闻信息,此处采用两种方法实现: 注意点:因为此处的数据都是动态数据,所以一定要考虑好向下滑动数据包会更新的情况,不然就只能读取当前页即第一页数据,方法一通过更新ajax数据包网址页数&#xf…

【MyBatis】初识MyBatis 构建简单框架

目录 MyBatis前言搭建一个简单的MyBatis创建Maven项目引入必要依赖创建数据表结构创建User实体类创建Mapper接口Mapper层Dao层 创建MyBatis的Mapper映射文件编写测试类传统测试类JUnit测试 MyBatis 介绍:MyBatis是一款半自动的ORM持久层框架,具有较高的…

利用自定义 ref 实现函数防抖

今天来简单介绍一个新的方法,使用自定义 ref 实现函数防抖。 1. 自定义 ref 的来源 自定义 ref 防抖函数来自于前端开发中的两个概念:Vue 的响应式系统 和 数防抖(Debounce)。 1、Vue 响应式系统:Vue 提供了 ref 和…

Python学习的自我理解和想法(20)

#1024程序员节|征文# 学的是b站的课程(千锋教育),跟老师写程序,不是自创的代码! 今天是学Python的第20天,学的内容是面向对象中的私有属性,私有方法,多态,单例计模式。开…

【ubuntu18.04】ubuntu18.04升级cmake-3.29.8及还原系统自带cmake操作说明

参考链接 cmake升级、更新(ubuntu18.04)-CSDN博客 升级cmake操作说明 下载链接 Download CMake 下载版本 下载软件包 cmake-3.30.3-linux-x86_64.tar.gz 拷贝软件包到虚拟机 cp /var/run/vmblock-fuse/blockdir/jrY8KS/cmake-3.29.8-linux-x86_64…

spring源码中的,函数式接口,注解@FunctionalInterface

调用方 /org/springframework/beans/factory/support/AbstractBeanFactory.java:333sharedInstance getSingleton(beanName, () -> {try {return createBean(beanName, mbd, args);}catch (BeansException ex) {// Explicitly remove instance from singleton cache: It mi…

高级的SQL查询技巧有哪些?

成长路上不孤单😊😊😊😊😊😊 【14后😊///C爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于高级SQL查询技巧方面的相关内容&#xf…

MATLAB人脸考勤系统

MATLAB人脸考勤系统课题介绍 该课题为基于MATLAB平台的人脸识别系统。传统的人脸识别都是直接人头的比对,现实意义不大,没有一定的新意。该课题识别原理为:先采集待识别人员的人脸,进行训练,得到人脸特征值。测试的时…

HomeAssistant自定义组件学习-【一】

#环境准备# 按官方的步骤准备就可以,我是在Windows下使用VS Code开发的,安装了WSL(使用模板创建组件需要在WSL环境下完成) 官方链接:https://developers.home-assistant.io/docs/development_environment 环境准备好…

力扣困难题汇总(14道)

题4(困难): 思路: 找两数组中位数,这个看起来简单,顺手反应就是数第(mn)/2个,这个难在要求时间复杂度为log(mn),所以不能这样搞,我的思路是:每次切割长度为较…