STP协议虽然能够解决环路问题,但是收敛速度慢,影响了用户通信质量。IEEE于2001年发布的802.1w标准定义了快速生成树协议RSTP(Rapid Spanning-Tree Protocol),RSTP在STP基础上进行了改进,实现了网络拓扑快速收敛。
如图所示,RSTP的端口角色共有4种:根端口、指定端口、Alternate端口和Backup端口,与STP相比,新增加了Backup和Alternate 2种端口角色。

| 角色 | 描述 |
| Backup | Backup端口作为指定端口的备份,提供了另外一条从根桥到非根桥的备份链路。 |
| Alternate | Alternate端口作为根端口的备份端口,提供了从指定桥到根桥的另一条备份路径。 |
RSTP选举原理和STP类似:选举根交换机-选举非根交换机上的根端口-选举指定端口-选举预备端口和备份端口。
不同于STP的5种端口状态,RSTP将端口状态缩减为3种。
| STP | RSTP | 端口角色 | 数据转发情况 |
| Disabled | Discarding | Disable | 不转发用户流量也不学习MAC地址 |
| Blocking | Discarding | Alternate端口 Backup端口 | |
| Listening | Discarding | 根端口 指定端口 | |
| Learning | Learning | 根端口 指定端口 | 不转发用户流量,但是学习MAC地址 |
| Forwarding | Forwarding | 根端口 指定端口 | 既转发用户流量又学习MAC地址 |
除了部分参数不同,RST BPDU报文和STP的BPDU报文类似。
1. BPDU Type用来区分STP的BPDU报文和RST BPDU报文。
STP的配置BPDU报文的BPDU Type值为0(0x00)。
TCN BPDU报文的BPDU Type值为128 (0x80)。
RST BPDU报文的BPDU Type值为2 (0x02)。
2. Flags字段,使用了原来保留的中间6位
STP的BPDU报文的Flags字段中只定义了拓扑变化TC标志和拓扑变化确认TCA标志,其他字段保留。
在RST BPDU报文的Flags字段里,除了TC和TCA,还使用了其他字段。包括P/A进程字段和定义端口角色以及端口状态的字段。

3. 发送BPDU的方式不同
STP中,当网络拓扑稳定后,根桥按照Hello Timer规定的时间间隔发送配置BPDU报文,非根桥设备只有在收到上游设备发来的配置BPDU报文后,才会触发发出配置BPDU报文。
RSTP种,当网络拓扑稳定后,无论非根桥设备是否接收到根桥传来的配置BPDU报文,都会按照Hello Timer规定的时间间隔发送配置BPDU。
RSTP主要在以下五个场景对STP进行了优化
STP从初始状态到完全收敛至少需经过30s:

事实上对于STP,指定端口的选择可以很快完成,主要的速度瓶颈在于:为了避免环路,必须等待足够长的时间,使全网的端口状态全部确定后,所有端口才能进行转发。
RSTP改进:P/A机制
RSTP在选举的过程中加入了“发起请求-回复同意”(P/A机制)确认机制,P/A机制要求两台交换设备之间链路必须是点对点的全双工模式,其目的是使一个指定端口尽快进入Forwarding状态。
SW1和SW2之间新添加了一条新链路,链路模式为点对点全双工,P/A机制协商过程如下:

交换机SWA和SWB都发送Proposal置位的BPDU,并把发送P消息的端口变成DP口,同时接口处在Discarding状态。
SWA和SWB根据收到的对端BPDU参数,选举端口角色,由于SWA的优先级高,选举结果为SWA的P0口为DP,SWB的P1口为RP。
SWB开始进行端口状态同步,将交换机上除边缘端口外的所有端口全部置为Discarding状态,以保证RP端口进入Forwarding时没有环路存在。
SWB完成同步后,P1端口状态可安全进入Forwarding并通告Agreement置位的BPDU报文给SWA。
SWA上的P0端口收到Agreement置位的BPDU后,状态立即变为Forwarding。
SWB继续向已经同步为DP/Discarding端口发送Proposal置位的BPDU,在下游各设备间继续进行新的P/A协商过程,直至计算到网络边缘。
STP为了确保拓扑变化信息已经扩散到全网,且所有设备都已完成拓扑更新,新的根端口需等待计时器超时后才能进入转发。
如下图所示,SWC与SWA的直连链路down掉,其BP端口切换成RP端口并进入转发状态至少需要经过30s。

RSTP改进:根端口快速切换机制
设备上旧的根端口失效后,新的根端口需在保证无环的情况下才可以迁移到Forwarding状态。RSTP新增加AP端口角色,在AP端口选举的时候就考虑到该需求,故可立即进入转发状态
如下图所示,SWC与SWA的直连链路down掉,其AP端口切换成RP端口并进入转发状态可在秒级时间内完成收敛。

在STP中,交换机除指定端口外的其他端口收到次优BPDU都不会做处理。
如下图所示,SWB与SWA的直连链路down掉,则SWC的BP端口切换成DP端口并进入转发状态大约需要50s。

RSTP改进:次优BPDU处理机制
RSTP处理次优BPDU报文不再依赖于任何定时器,会立即发送本地最优的BPDU给对端,从而加快了拓扑收敛。
如下图所示,SWB与SWA的直连链路down掉,SWC的AP端口切换成DP端口并进入转发状态可在秒级时间内完成。

如图所示,运行STP的交换机连接终端的端口需要经过30才能进入转发状态。

RSTP改进:边缘端口的引入
在RSTP里面,如果某一个指定端口位于整个网络的边缘,即不再与其他交换设备连接,而是直接与终端设备直连,这种端口可设置为边缘端口。
边缘端口不参与RSTP运算,可以由Disable直接转到Forwarding状态,且不经历时延。但是一旦边缘端口收到配置BPDU,就丧失了边缘端口属性,成为普通STP端口,并重新进行生成树计算。
如下图所示,在交换机连接终端的端口设置为边缘端口,链路UP后端口可立即进入转发状态。

运行STP协议时,当网络拓扑变更后,需先由变更点朝根桥方向发送TCN消息,收到该消息的上游交换机就会回复TCA消息进行确认;最后TCN消息到达根桥后,再由根桥发送TC消息通知设备删除桥MAC地址表项,机制复杂,效率低下。

RSTP改进:拓扑变更机制的优化
RSTP在网络发生拓扑变化时,变更点交换机直接向全网发送TC置位的BPDU报文,而不是先通知到根桥,然后由根桥向全网发送TC报文,这样在一定程度上节省了收敛时间。

一旦检测到拓扑发生变化,将进行如下处理:
为本交换设备的所有非边缘指定端口启动一个TC While Timer,该计时器值是Hello Time的两倍。
在这个时间内,清空状态发生变化的端口上学习到的MAC地址。同时,由这些端口向外发送RST BPDU,其中TC置位。一旦TC While Timer超时,则停止发送RST BPDU。
其他交换设备接收到RST BPDU后,清空除收到RST BPDU的端口外所有端口学习到MAC地址(边缘端口除外)。然后也为自己所有的非边缘指定端口和根端口启动TC While Timer,向外发送TC置位的RST BPDU。
重复上述过程,直至全网感知到该网络拓扑变化。
如下图所示,当SWB的E1端口出现故障时,RSTP的处理过程如下:

SWB删除MAC地址表中E1端口所对应的表项
SWB重新计算生成树,选举E2为新的根端口。
开启TC While 计时器,由SWB的E2口向外发送TC置位的RST BPDU,TC While Timer超时后,停止发送RST BPDU。

SWC交换设备接收到TC置位的BPDU后,会清空E1口学习到的MAC地址
开启TC While计时器,由SWC的E1口向外发送TC置位的RST BPDU,TC While Timer超时后,停止发送RST BPDU。

SWA交换设备接收到TC置位的BPDU后,会清空E1口学习到的MAC地址,RSTP拓扑收敛完成。
注意:
边缘端口down掉不会触发拓扑变更,故障恢复后也不会触发拓扑变更。
如图所示,有人伪造RST BPDU恶意攻击交换设备,当边缘端口接收到该报文时,会自动设置为非边缘端口,并重新进行生成树计算,引起网络震荡。

RSTP可以通过BPDU保护功能来规避此问题发生。交换机上启动了BPDU保护功能后,如果边缘端口收到RST BPDU,边缘端口将被error-down,边缘端口属性不变,同时通知网管系统,可有效的防止网络震荡 。

如图所示,由于维护人员的错误配置或网络中的恶意攻击,网络中合法根桥有可能会收到优先级更高的RST BPDU,使得合法根桥失去根地位,从而引起网络拓扑结构的错误变动。这种不合法的拓扑变化,会导致原来应该通过高速链路的流量被牵引到低速链路上,造成网络拥塞。

此时可以在SWC连接SWD的端口上,配置根保护。对于启用Root保护功能的指定端口,其端口角色只能保持为指定端口。一旦启用Root保护功能的指定端口收到优先级更高的RST BPDU时,端口状态将进入Discarding状态,不再转发报文。在经过一段时间(通常为两倍的Forward Delay),如果端口一直没有再收到优先级较高的RST BPDU,端口会自动恢复到正常的Forwarding状态。

交换设备在接收到TC BPDU报文后,会执行MAC地址表项和ARP表项的删除操作。如果有人伪造TC BPDU报文恶意攻击交换设备时,交换设备短时间内会收到很多TC BPDU报文,频繁的删除操作会给设备造成很大的负担,给网络的稳定带来很大隐患。

启用防TC-BPDU报文攻击功能后,在单位时间内,交换设备处理TC BPDU报文的次数可配置。如果在单位时间内,交换设备在收到TC BPDU报文数量大于配置的阈值,那么设备只会处理阈值指定的次数。对于其他超出阈值的TC BPDU报文,定时器到期后设备只对其统一处理一次。这样可以避免频繁的删除MAC地址表项和ARP表项,从而达到保护设备的目的。

RSTP可以和STP互相兼容,当同一个网段里既有运行STP的交换机又有运行RSTP的交换机时,STP交换机会忽略接收到的RST BPDU,而RSTP交换机在某端口上接收到STP BPDU时,会等待两个Hello Time时间之后,把自己的端口转换到STP工作模式,此后便发送STP BPDU,这样就实现了兼容性操作。

在这种STP和RSTP混合使用的场景中,RSTP会失去其快速收敛的优势,而STP慢速收敛的缺点会暴露出来,所以不推荐使用这种做法。
如图所示,SWA、SWB和SWC组成了一个环形的交换网络,为了消除环路对网络的影响,故使交换机都运行RSTP,最终将环形网络结构修剪成无环路的树形网络结构。

操作步骤
SWA配置:
[SwitchA] stp enable
[SwitchA] stp mode rstp
[SwitchA] stp root primary
SWB配置:
[SwitchB] stp enable
[SwitchB] stp mode rstp
[SwitchB] stp bpdu-protection
[SwitchB] interface GigabitEthernet0/0/4
[SwitchB-GigabitEthernet0/0/4] stp edged-port enable
SWC配置:
[SwitchC] stp enable
[SwitchC] stp mode rstp
[SwitchC] stp bpdu-protection
[SwitchC] interface GigabitEthernet0/0/4
[SwitchC-GigabitEthernet0/0/4] stp edged-port enable
验证配置结果
在SWA上查看生成树信息:

在SWB上查看生成树信息:

在SWC上查看生成树信息:

?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------
目录H2数据库入门以及实际开发时的使用1.H2数据库的初识1.1H2数据库介绍1.2为什么要使用嵌入式数据库?1.3嵌入式数据库对比1.3.1性能对比1.4技术选型思考2.H2数据库实战2.1H2数据库下载搭建以及部署2.1.1H2数据库的下载2.1.2数据库启动2.1.2.1windows系统可以在bin目录下执行h2.bat2.1.2.2同理可以通过cmd直接使用命令进行启动:2.1.2.3启动后控制台页面:2.1.3spring整合H2数据库2.1.3.1引入依赖文件2.1.4数据库通过file模式实际保存数据的位置2.2H2数据库操作2.2.1Mysql兼容模式2.2.2Mysql模式
为什么需要服务网关传统的单体架构中只需要开放一个服务给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,如果没有网关,客户端只能在本地记录每个微服务的调用地址,当需要调用的微服务数量很多时,它需要了解每个服务的接口,这个工作量很大。有了网关之后,网关作为系统的唯一流量入口,封装内部系统的架构,所有请求都先经过网关,由网关将请求路由到合适的微服务。使用网关的好处1)简化客户端的工作。网关将微服务封装起来后,客户端只需同网关交互,而不必调用各个不同服务;(2)降低函数间的耦合度。一旦服务接口修改,只需修改网关的路由策略,不必修改每个调用该函数的客户端,从而减少了程序间的耦合性(3)解放开发
我发现python的细节自动完成很好RubyonRails有类似的方法描述吗? 最佳答案 有篇不错的文章"UsingVIMasacompleteRubyonRailsIDE"其中引用rails.vim.这似乎是RailsforVIM的实际标准。(不过,我还没有使用过它,但很快就会尝试。)这允许你做很多与Rails相关的任务,但对自动完成没有帮助。还有一篇"RubyAutocompleteinVim"(遗憾的是不再可用)这就是您要搜索的内容。我不知道,理解Rails的所有插件魔法和元编程的东西是否足够聪明。它至少在vim的配置中提到了
防火墙防火墙分类第一代防火墙:包过滤防火墙包过滤防火墙的缺点第二代防火墙:代理防火墙第三代防火墙:状态防火墙第四代防火墙:UTM防火墙第五代防火墙:下一代防火墙华为防火墙介绍安全策略防火墙的会话表防火墙分类第一代防火墙:包过滤防火墙属于第一代防火墙技术,在没有专用防火墙设备时,一般由路由器实现该功能。将网络上传送数据包的IP首部以及TCP/UDP首部,获取发送源的IP地址和端口号,以及目的地的IP地址和端口号,并将这些信息作为过滤条件,决定是否将该分组转发至目的地网络分组过滤的执行需要设置访问控制列表。访问控制列表也可以称为安全策略(简称策略)或安全规则(简称规则)。类似于进站检票的做法,符合
内容来自Qt样式表之QSS语法介绍-3YL的博客Qt样式表是一个可以自定义部件外观的十分强大的机制,可以用来美化部件。Qt样式表的概念、术语和语法都受到了HTML的层叠样式表(CascadingStyleSheets, CSS教程)的启发,不过与CSS不同的是,Qt样式表应用于部件的世界。类型选择器QPushButton匹配QPushButton及其子类的实例ID选择器QPushButton#okButton匹配所有objectName为okButton的QPushButton实例。 CSS常用样式1CSS文字属性注:px:相对长度单位,像素(Pixel)。pt:绝对长度单位,点(Point
简介:我们都知道在Android开发中,当我们的程序在与用户交互时,用户会得到一定的反馈,其中以对话框的形式的反馈还是比较常见的,接下来我们来介绍几种常见的对话框的基本使用。前置准备:(文章最后附有所有代码)我们首先先写一个简单的页面用于测试这几种Dialog(对话框)代码如下,比较简单,就不做解释了一、提示对话框(即最普通的对话框)首先我们给普通对话框的按钮设置一个点击事件,然后通过AlertDialog.Builder来构造一个对象,为什么不直接Dialog一个对象,是因为Dialog是一个基类,我们尽量要使用它的子类来进行实例化对象,在实例化对象的时候,需要将当前的上下文传过去,因为我这
作者:郭斌斌爱可生DBA团队成员,负责项目日常问题处理及公司平台问题排查。本文来源:原创投稿*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。OceanBase集群界面会展示Observer的资源水位,今天简单了解一下资源水位的数值代表的含义以及关联参数现有test_1集群,只有一个sys租户Sys租户的资源配置:Cpu:2.5-5Memory:3G-3GUnit:1集群的资源水位信息以10.186.63.198为例,浅看一下cpu、内存、磁盘的含义以及相关联参数cpu:2.5/17核2.5代表observer上已经分配给租户的cpu核数,该数值是租户的MinCPU
快捷目录前言一、涉及到的相关技术简介二、具体实现过程及踩坑杂谈1.安卓手机改造成linux系统实现方案2.改造后的手机Linux中软件的安装3.手机Linux中安装MySQL5.7踩坑实录4.手机Linux中安装软件的正确方法三、Linux服务器部署前后端分离项目流程1.前提准备(安装必要软件,搭建环境):2.前后端分离项目的详细部署过程:总结前言总体概述:本篇文章隶属于“手机改造服务器部署前后端分离项目”系列专栏,该专栏将分多个板块,每个板块独立成篇来详细记录:手机(安卓)改造成个人服务器(Linux)、Linux中安装软件、配置开发环境、部署JAVA+VUE+MySQL5.7前后端分离项目
涡旋光束及其MATLAB实现前言涡旋光束的基本概念常见的涡旋涡旋光束涡旋光束的产生方法前言笔者新开一块专栏,专门用于讨论整理总结涡旋光束的相关内容,从基本的概念出发,推导相关的公式,并结合MATLAB进行相关的仿真,不清楚这个专栏会更新多少期,我会分享部分的代码,全部的代码有需要的话可以私聊我。当然大家对这个专栏感兴趣的话,欢迎积极交流。涡旋光束的基本概念涡旋光束(vortexbeam)是指携带光学涡旋,具有exp(imϕ)exp(im\phi)exp(imϕ)相位分布的光束,其中mmm表示相位拓扑电荷数,ϕ\phiϕ是柱坐标下的方位角。之前的分享中笔者已经说明了部分的激光光束的表达式,想要