STP 生成树协议

news2024/12/24 19:58:57

STP(Spanning-Tree Protocol)的来源

在网络三层架构中,我们会使用冗余这一技术,也就是对三层架构中的这些东西进行备份。冗余包含了设备冗余、网关冗余、线路冗余、电源冗余。

在二层交换网络中进行线路冗余,如图,将每个交换机都相连,这样无论断了哪一根线都可以从另一边继续通信。这样就实现了线路备份。

线路冗余(备份) --- 造成二层桥接环路 (二层交换机的转发列表mac地址表 也就是CAM表 --- 由流量经过时记录源mac地址产生)

在二层交换网络,也就是汇聚层和接入层的交换机,进行线路冗余的时候,由于交换机不像路由器能通过动态路由协议或者人工配置静态协议来有效避免出环,只能根据CAM地址表进行转发,我们对交换机之间进行线路冗余的时候,就会导致出环。比如LSW1交换机处连接PC,PC发送一个广播包,交给LSW1进行泛洪,LSW1会将PC发来的广播信息泛洪给其它两个交换机。LSW3收到该广播消息后会将该包继续进行泛洪给LSW2,这时候LSW2将会收到LSW1和LSW3发来的广播包,会将LSW1发来的广播包泛洪给LSW3,将LSW3发来的广播包泛洪给LSW1,造成环路,出现广播风暴。

环路则会导致这些问题:

  1. 广播风暴
  2. MAC地址表翻滚
  3. 同一数据帧的重复拷贝

最终导致设备性能下降重启或瘫痪

使用STP来解决二层交换网络出环这一问题。

生成树协议:将一个二层交换机网络看作一个树形结构,这个网络中所有的交换机都是树的节点,在这些节点中选择一个作为树的根,让这颗树从根开始到达顶部之间所有的节点到根都只有唯一的最佳路径,将其它路径的端口阻塞。当唯一的最佳路径断开时,自动打开部分阻塞端口达到备份的目的。

生成树在生成过程中,应该尽量的生成一棵星形结构,且最短路径树;

STP的发展

STP的发展指的是STP中使用的算法的发展

一、IEEE组织的802.1D算法:

整个交换网络为一棵树

选举出(1)根网桥、(2)根端口、(3)指定端口、(4)非指定端口(阻塞端口)来进行树结构的规划。

BPDU --- 桥协议数据单元 -- 交换机通过收发BPDU中的数据进行沟通。

 配置BPDU --- 只有根网桥可以发送,在交换网络初始状态时,所有的交换机都定义本地为根网桥,都可以发送BPDU,当交换网络中的所有交换机都收到别人的BPDU 时,基于BPDU中BID的比对,选举出真正的根网桥,此时,只有真正的根网桥发送BPDU,其它的交换机都为非根网桥,不再发送BPDU,而是仅接收和转发根网桥的BPDU;周期2s发送,hold time保存时间为20s。

配置BPDU这个协议数据单元存在的主要目的就是确定二层交换网络中的根网桥保证树结构。

TCN—拓扑变更消息(也是BPDU): 本地交换机链路故障后,STP重新收敛,为了快速刷新全网所有交换机的MAC表,将向本地所有STP接口发送TCN(标记位中的TCN位置1),邻居交换机收到TCN后,先标记为ACK位为回复,用于可靠传输消息;之后将TCN逐级转发到根网桥处,由根网桥回复TC消息来逐级回复到所有交换机;使所有交换机临时将MAC表的老化时间修改为15s(默认的,转发延时)

发送TCN的原因是为了使所有交换机临时将MAC表的老化时间从300s修改为15s,为什么要这样做呢?比如上图场景,虚线的网线阻塞为备份线路,当右边交换机的根端口断开后,这时候STP重新收敛,30s收敛完后,阻塞端口开放,备份线路启动,当主机B发送一个数据包到主机A,从备份线路到达左边交换机G0/0/2接口时,MAC地址表会记录主机B的MAC地址和端口号G0/0/2,但是左边交换机中MAC地址表还未到300s刷新时间,之前记录的主机B的MAC地址和对应的端口G0/0/1还未删除,当主机A给主机B回包时,交换机就不知道应该给G0/0/1还是G00/0/2接口进行单播,所以需要将之前的记录删除,就会发送TCN来更改老化时间为30s使得之前的MAC地址表记录删除。

(1)根网桥 --- 一棵树中只有一台root根网桥

                 通过比较BPDU中的BID来进行选择

                 BID = 网桥优先级  +   MAC地址

网桥优先级范围是  0-65535,交换机网桥优先级默认为32768

MAC地址 交换机只有拥有svi接口才具有MAC地址

选择根网桥方式 : 优先级小则优,若优先级相同则MAC地址小为优。

(2)根端口 --- 每台非根网桥上只有一个根端口,接收来自根网桥的BPDU,转发用户的流量

                    离根网桥最近的端口为根端口

                    1.比较从根网桥发出后,通过该接口进入时最小的cost值

                    2.入向cost值相同,比较该接口上级设备的BID,小优

                    3.上级BID相同,比较上级设备的接口的PID,先优先级小,若一致,则编号小优

                    4.对端PID相同,比较本地接口PID,小优;

中间设备为hub或者透明交换机(不带console口),不受STP控制,下面交换机通过STP只能看到上面交换机,相当于对端PID相同

PID =  端口ID = 接口优先级(0-240,步长16,默认128)+  接口编号

(3)指定端口 --- 二层交换网络中的每一条物理链路都有且仅有一个指定端口,转出来自根网桥的BPDU,同时可以转发用户流量。

                     默认根网桥上所有接口都是指定端口,根端口的对端一定为指定端口

                     1.比较从根网桥发出时,通过该接口进入这段链路时的cost值最小(出向)

                     2.若出向cost值相同,比较本地的BID,小优

                     3.本地BID相同,比较本地PID

                     4.本地PID相同,直接阻塞该端口

中间设备为hub或者透明交换机(不带console口),不受STP控制,相当本地PID相同

这第四种情况是最常见的,当我们的交换机下面连接了透明交换机,如果在透明交换机上用一根线连接了透明交换机的两个接口,那么交换机就会发现本地PID相同出现环路,但是透明交换机不受STP控制,无法堵塞透明交换机的一个端口,那么上面的交换机将会直接阻塞连接透明交换机的端口,使得该端口下的网络都会停止。就像我们生活中的如果一个交换机连接了一个教室的透明交换机,大家上课的电脑都连接在透明交换机上,如果一个同学将一个网线插在了透明交换机的两个接口上,则所有人都上不了网了。还有一种情况是没有回插,一根网线连接了电脑,但是这根网线无意间被损坏,导致里面的八根铜丝相遇,四根从左往右,另外四根从右往左,就会造成环路。也会导致PID相同上不了网。

(4)非指定端口(阻塞端口)   --- 以上角色选举完,其它接口都为非指定端口,逻辑上阻塞,实际上可以接收消息,但是不转发

cost值:不同带宽 存在不同cost

802.1d标准:          802.1T标准

10M = 100             1000M= 20000

100M=19              100M=200000

1000M=4

10000M=2

>100000M=1

判断下图中的根网桥,根端口,指定端口,非指定端口

干涉生成树角色的选举

 生成协议中,至少应该将根网桥干涉到汇聚层处

以下图为例

 如果接入层交换机成为了根网桥,那么经过STP之后,就会变成下图的效果

如果接入层的两个交换机下的电脑想要访问对方,则需要走很远的路

 

谁成为了根网桥,谁就是网络的中心,所有的流量都为到此进行聚合,汇聚层三层交换机就是用来做流量聚合的,搭建为一个星型结构,现在用接入层交换机去做根网桥,选路变远,性能没有三层交换机好。所以生成树角色选举需要干涉。

生成树端口除了有角色外,还有状态

接口状态:

down --- 没有BPDU收发,开始BPDU收发进入侦听状态

侦听 --- 强制15s时间,所有交换机进行BPDU收发选举根网桥、根、指定端口进入学习状态、非指定端口进入阻塞状态

学习 --- 强制15s时间,学习记录所有经过的流量中的源mac地址生成mac地址表,根、指定端口进入转发状态。

转发 --- 根、指定端口,可以转发用户报文

阻塞 --- 非指定端口逻辑阻塞

注:只有当接口进入到转发状态后,才能为用户转发数据报文,之前的30s不转发任何数据

收敛时间:

初次收敛 --- 30s = 15s侦听 + 15s学习

结构变化收敛 (STP课程52分钟处)

存在直连检测:本地仅存在一个阻塞端口,若其他端口断开,该阻塞端口马上进入15s侦听选举,结果若为启用,那么将再进入15s学习 --- 总共30s

没有直连检测:本地不存在直连检测,若其它端口断开,将会发送次优BPDU(以本地为根)给其它邻居交换机,其它邻居交换机无视该数据,邻居交换机开始进行20shold time及时,到时阻塞进入15s侦听,15s学习 一共50s

802.1D缺点:

收敛速度慢

链路资源率低

cisco公司也想用这个802.1D这个算法,它提出802.1D这个算法的缺点,链路利用率太低,所以自己设计了一个PVST算法来解决这一缺点。但它只能cisco私有。

  • 二、PVST --- 基于vlan的生成树协议 cisco私有
  • 一个vlan为一棵树,如果有两个vlan就有两棵树,可以将不同vlan的根网桥放置于不同汇聚层设备上,来实现所有链路均工作,且互为备份的效果。
  • 例如下图这种情况,二层交换网络之前存在vlan1和vlan2,也就是有两棵树,但是对于这两个vlan而言,它们在选举四个角色的时候,选举的结果都是一样的。都是按照802.1D的算法进行角色选举,交换机a的BID最小(三个交换机网桥优先级相同,但是a的MAC地址最小),所以无论在哪个vlan里面a都是根网桥,最终堵塞的都是同一个端口。仍然造成链路资源浪费,所以就通过修改vlan1vlan2交换机的优先级来使得vlan1的根网桥为左边交换机,vlan2的根网桥为右边交换机,最终堵塞端口就是一边一个,这样两个vlan走不同的线路,就解决了链路资源浪费这个缺点。
  • vlan1的BPDU优先级为32768+1=32769
  • vlan2的BPDU优先级为32768+2=32770
  • 优先级=4096倍数+vlanid 人为仅可修改4096倍数
  • 不同vlan的BPDU区别在于优先级,默认优先级都是32768,但由于vlan不同,所以最终不同vlan的BPDU不同,每个vlan都会发送BPDU包,vlan1广播域里面三个交换机都发送32769的BPDU,最终MAC地址小的作为根网桥,vlan2广播域里面三个交换机都发送32770的BPDU,最终也以MAC地址小的作为根网桥,最终无论哪个vlan,根网桥都是MAC地址小的交换机。这样无论哪个vlan最终堵塞端口也是同一个端口。所以我们需要修改交换机的优先级使得不同vlan的根网桥不同,比如vlan1将左边交换机优先级-4096,vlan2将右边交换机优先级-4096*2,这样在vlan1里,左边交换机优先级低作为根网桥,vlan2里,右边交换机优先级低作为根网桥。

实验:

在这个二层交换网络中,现在只存在vlan1,所以也就只有一棵树 

通过这个图线路接口的灯可以看出sw1为根网桥

也可以进入sw1交换机查看生成树

 可以看出在vlan1这棵树中,sw1就是根网桥优先级为32769,mac地址为0030.A300.078C

两个接口都为指定接口

阻塞接口在sw0交换机上

 这时候我们再创建一个vlan2

sw1#configure terminal 
Enter configuration commands, one per line.  End with CNTL/Z.
sw1(config)#vlan 2
sw1(config-vlan)#end
sw1#
%SYS-5-CONFIG_I: Configured from console by console

sw1#show spanning-tree 

可以看到我们在sw1上创建了vlan2之后,仍然只有vlan1一棵生成树,是因为还未配置trunk干道,交换机的接口都不属于vlan2,所以只有vlan1一棵生成树

 将接口改为trunk干道

sw1(config)#interface range fastEthernet 0/1 -2
sw1(config-if-range)#switchport mode trunk

为了让vlan2覆盖整个二层交换网络,每个交换机都需要配置vlan2和trunk干道,一条线只需要配一次trunk干道

将sw0也创建vlan2并配置trunk干道

sw0#configure terminal 
Enter configuration commands, one per line.  End with CNTL/Z.
sw0(config)#interface fastEthernet 0/1
sw0(config-if)#switchport mode trunk
sw0(config-if)#vlan 2 

sw2只需要创建vlan2就可以了,它的两个接口已经成为了trunk干道

Switch#configure terminal 
Enter configuration commands, one per line.  End with CNTL/Z.
Switch(config)#hostname sw2
sw2(config)#vlan 2

这时候,vlan2已经覆盖了二层交换网络

我们再次查看生成树发现sw1是vlan1和vlan2的根网桥,那么堵塞接口仍然未变不转发用户数据,还是造成了链路资源的浪费。

我们在vlan2的生成树里修改sw2的网桥优先级变小,让sw2成为vlan2的根网桥

sw2(config)#spanning-tree vlan 2 priority ?
  <0-61440>  bridge priority in increments of 4096
sw2(config)#spanning-tree vlan 2 priority 111
% Bridge Priority must be in increments of 4096.
% Allowed values are:
  0     4096  8192  12288 16384 20480 24576 28672
  32768 36864 40960 45056 49152 53248 57344 61440
sw2(config)#spanning-tree vlan 2 priority 28672
sw2(config)#

查看sw2的生成树可以看出此时sw2成为vlan2生成树的根网桥,两个端口都是指定端口

 查看sw0可以看出在vlan1的生成树中,fa0/1为阻塞端口,在vlan2生成树中,fa0/2为阻塞端口

通过查看图中交换机接口都变为绿灯可以看出两条链路都在使用,一条是vlan1在使用,一条是vlan2在使用,所以解决了链路资源浪费的缺点。

三、PVST +     在PVST的基础,兼容802.1q的trunk封装;且设计了部分的加速;

端口加速(接入层连接用户的接口)    上行链路加速-针对直连检测      骨干加速—针对次优BPDU

端口加速,跳过三十秒

上行链路加速仅在接入层设备上配置,因为配置后,该交换机将自动加大本地的网桥优先级;

在直连检测条件下阻塞接口将跳过30s,直接进入转发状态--上行链路加速

骨干加速所有交换机均可配置,针对接收到次优BPDU的阻塞端口可以跳过20s的hold time;

缺点:1、收敛慢(加速不彻底)     2、树多(仅cisco存在单独的芯片,友商无法负荷)

PVST+   优点:分流 --- 提高利用率  部分加速

               缺点:树多,加速不彻底

对于cisco有独立的芯片,所以也不害怕树多

但是对于其它厂家就不太友好

四、快速生成树  

cisco的RSTP   ---    基于vlan的快速生成树  - 一个vlan一棵树    pvst+的升级

公有RSTP(802.1w) --- 整个交换网络一棵树                       802.1d的升级

快速的原理:

  1. 取消了计时器,而是在一个状态工作完成后,直接进入下一状态
  2. 分段式同步,两台设备间逐级收敛;使用请求和同意标记;依赖标记位的第1和第6位
  3. BPDU的保活为6s;hello time 2s;
  4. 将端口加速(边缘接口)、上行链路加速、骨干加速集成了
  5. 兼容802.1d和PVST,但802.1d和PVST没有使用标记位中的第1-6位,故不能快速收敛;因此如果网络中有一台设备不支持快速收敛,那么其他开启快速收敛的设备也不能快速;

当tcn消息出现时,不需要等待根网桥的BPDU,就可以刷新本地的cam表;

切记:接口默认为半双工时,即便允许RSTP,依然基于慢速的802.1D算法来收敛;

PVST+ --> RSTP                一个vlan一棵树

802.1D --> RSTP(802.1W) 一个交换网络一棵树

五、MSTP/MST/802.1S     华为设备默认使用该协议  最主流的目前

继承了快速生成树的基础;  将多个vlan放置于一个组内,基于每个组一棵生成树;

不同组间的BPDU中优先级= 4096倍数+组号

cisco查看生成树show spanning-tree

华为查看生成树 display stp brief

82.1D组织

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

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

相关文章

Linux :: 【基础指令篇 :: 用户管理:(2)】::设置用户密码(及本地Xshell 登录云服务器操作演示) :: passwd

前言&#xff1a;本篇是 Linux 基本操作篇章的内容&#xff01; 笔者使用的环境是基于腾讯云服务器&#xff1a;CentOS 7.6 64bit。 目录索引&#xff1a; 1. 基本语法 2. 基本用法 3. 注意点 4. 补充&#xff1a;指定用户设置密码操作实例测试及登录本地 Xshell 登录演…

Linux命令(18)之file

Linux命令之file 1.file介绍 file命令用来识别文件类型。 2.file用法 file [参数] [文件或目录] file常用参数 参数说明-L显示符号廉洁所指向文件的类别-i显示MIME类别-b显示结果时&#xff0c;不显示文件名称 3.实例 3.1显示ztj.sh文件类型 3.2显示ztj.sh文件类型(不显示…

记一次docker中的oracle连接问题

起因是客户登陆时报错TNS-12537 登陆上上服务器后&#xff0c;发现了几个特点。 1、没有oracle用户 2、数据文件的位置和spfile里面写的不一样 3、pmon进程存在&#xff0c;但是父进程ID不是1 4、配置oracle用户及环境变量&#xff0c;但是as sysdba无法登录到数据库 查看…

Linux命令(19)之userdel

Linux命令之userdel 1.userdel介绍 userdel命令用来说删除useradd命令创建的Linux账户。 useradd创建用户&#xff1a; Linux命令(15)之useradd_小黑要上天的博客-CSDN博客 2.userdel用法 userdel [参数] [用户账户名称] userdel常用参数 参数说明-r递归删除&#xff0c;…

【网络编程】协议定制+Json序列化与反序列化

目录 一、序列化与反序列化的概念 二、自定义协议设计一个网络计算器 2.1TCP协议&#xff0c;如何保证接收方收到了完整的报文呢&#xff1f; 2.2自定义协议的实现 2.3自定义协议在客户端与服务器中的实现 三、使用Json进行序列化和反序列化 3.1jsoncpp库的安装 3.2改造…

学系统集成项目管理工程师(中项)系列26_新兴信息技术

1. 云计算 1.1. 基于互联网的超级计算模式&#xff0c;通过互联网来提供大型计算能力和动态易扩展的虚拟化资源 1.2. 通过网络提供可动态伸缩的廉价计算能力 1.3. 特点 1.3.1. 【19上选23】 1.3.2. 超大规模 1.3.3. 虚拟化 1.3.4. 高可靠性 1.3.5. 通用性 1.3.6. 高可…

linux共享内存总结

共享内存函数由shmget、shmat、shmdt、shmctl四个函数组成 头文件&#xff1a; #include <sys/ipc..h> #include<sys/shm.h> // 创建或获取一个共享内存: 成功返回共享内存ID&#xff0c;失败返回-1 int shmget (key_t key, size_t_size, int flag); // 连接共享内…

Java修饰符

4 修饰符(static关键字) 4.1 权限修饰符 4.2 状态修饰符 final(最终态)static(静态)4.2.1 final的特点 final 关键字是最终的意思,可以修饰成员变量,成员方法,类final修饰的特点: 1.修饰方法:表示该方法是最终方法,不能被重写2.修饰变量:表示该变量是常量,不能被…

深入了解Nginx:高性能的开源Web服务器与反向代理

一、Nginx是什么 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器&#xff0c;也可以作为负载均衡器和HTTP缓存服务器使用。它采用事件驱动、异步非阻塞的处理方式&#xff0c;能够处理大量并发连接和高流量负载&#xff…

推荐试试这个简单好用的手机技巧

技巧一&#xff1a;一键锁屏 除了按住手机电源键进行锁屏外&#xff0c;还有其他一些快捷方法可以实现锁屏操作。 对于苹果手机用户&#xff0c;可以按照以下步骤进行设置&#xff1a; 1.打开手机的设置应用&#xff0c;通常可以在主屏幕或应用列表中找到该图标。 2.在设置…

chatgpt赋能python:Pythonunittest跳过用例:使用unittest中跳过测试用例的方法

Python unittest 跳过用例&#xff1a;使用unittest中跳过测试用例的方法 如果你正在开发一个Python项目&#xff0c;你可能已经使用了Python的unittest模块来编写并运行测试用例。在编写测试用例时&#xff0c;有些情况下你可能不想运行某些测试用例&#xff0c;这时就需要使…

Window10安装SQL Server

一、安装SQL Server 1、进入官网根据个人所需下载对应版本即可&#xff0c;本文是基于SQL Server 2022 Express的安装过程 SQL Server 下载 | Microsofthttps://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2、下载完毕&#xff0c;运行安装指引程序 如若不熟悉…

LC-3机器码编程实验 求成绩等级

一、实验目的 分析和理解指定的需解决问题。利用LC-3的汇编代码设计实现相关程序。通过LC-3仿真器调试和运行相关程序并得到正确的结果。 二、实验内容 对学生的成绩使用数组进行排序。 背景&#xff1a;一位老师需要你帮忙决定学生的成绩&#xff0c;她想要根据学生分数在…

【分立元件】MOSFET如何用于同步整流

在电力电子中我们会使用二极管做开关,当二极管导时,相当于开关闭合,当二极管截止时,相当于开关断开。但是二极管在导通时的管压降在低压电源电路中是一个损耗来源,所以一般我们首选使用的是肖特基二极管,因为肖特基二极管的管压降比较低。 如下所示为非同步BUCK电源拓朴…

小黑坐等政审,论文成果毕业事项基本提交,着手眼睛手术明天准备体检然后出发独自夜爬华山的leetcode之旅:81. 搜索旋转排序数组 II

去除相等的二分法 class Solution:def search(self, nums: List[int], target: int) -> bool:# 数组长度n len(nums)# 双指针left 0right n-1# 二分法迭代while left < right:mid (left right) // 2if nums[mid] target:return Trueif nums[left] nums[mid]:left…

原来CSS的登录界面可以变得这么好看

个人名片&#xff1a; &#x1f60a;作者简介&#xff1a;一名大一在校生&#xff0c;web前端开发专业 &#x1f921; 个人主页&#xff1a;几何小超 &#x1f43c;座右铭&#xff1a;懒惰受到的惩罚不仅仅是自己的失败&#xff0c;还有别人的成功。 &#x1f385;**学习目…

Python之将日志写入到文件(二十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

【MySQL 数据库】4、MySQL 事务学习

目录 一、事务简介二、事务相关 SQL 语句(1) 事务提交方式(2) 开启、提交、回滚事务 三、事务的四大特性四、并发事务问题五、事务的隔离级别 一、事务简介 二、事务相关 SQL 语句 (1) 事务提交方式 # 查看当前数据库事务的提交方式 # 1: 自动提交 # 0: 手动提交 select autoc…

解决:在单项目组件里面引入 base.scss/ base.less 等的外部文件不成功的问题

1、问题展示&#xff1a; 其一、问题描述&#xff1a; 在单文件组件里面使用封装在 base.scss 或 base.less 里面的样式用法一直不成功&#xff1b; 其二、代码&#xff1a; // 虽然已经标明了用的是 scss 的语法&#xff0c;但是页面调用 .scss 里的 style 样式还是不成功&a…