快速生成树原理详解
Rapid STP
RSTP/RPVST+
Edge Port是Rapid STP中的一个新的端口类型,它的作用相当于Port Fast,但如果该端口收到了BPDU,则它将直接转换为普通端口。在Cisco设备中,边缘端口的实现还是通过Port Fast关键字。
Rapid STP还添加了链路属性这一概念,RSTP只能在点到点链路和边缘端口启用快速转发(直接进入Forward模式),RSTP根据端口类型将会自动设定链路属性,手工设定可以覆盖自动配置的设定。
- Shared——半双工模式自动配置
- Point to Point——全双工模式自动配置
- Forwarding
- 发送和接受用户数据
- Learning
- 建立MAC地址表
- Discarding
- 对应的是Listening、Blocking、Disabled三种状态
- Alternate
- 它提供了到达根交换机的备用路径,默认情况为Blocking(Discarding)。
- Backup
- 它提供了到达同一网段的备用路径,默认情况为Blocking(Discarding)。
RSTP使用802.1D的BPDU格式来实现向后兼容,但是在消息类型(Message Type)字段中使用了一些未使用的位。BPDU中的Version字段也被设置为2,来区分802.1D BPDU和RSTP BPDU。RSTP使用交互式的过程,以便交换机协商状态的变化。
无论交换机有没有收到来自根交换机的BPDU,BPDU都会根据Hello Time的间隔(默认2秒钟)从所有端口发送BPDU。如果连续丢失3个BPDU时(6秒没有收到BPDU),则交换机就能够检测到邻居故障,相较于802.1D速度更快。
RSTP/RPVST+ Fast Converge 传统的802.1D收敛速度慢主要是因为Timer多,时间长,才能安全地允许交换机端口转发数据。
当交换机参与树形拓扑时,RSTP使用不同的策略。当交换机首次加入拓扑或在现有拓扑中检测到故障时,RSTP要求它根据端口类型做出转发决策。
当交换机需要做出STP决策时,会与最近的邻居进行握手,如果握手成功,则将不断地向后进行握手直至抵达网络边缘。在握手过程中,交换机必须保障握手之前,不会引入循环。这通过同步过程来完成。
RSTP/RPVST+ Synchronization Process 非边缘端口从Discarding状态开始。在交换机交换BPDU之后,就能够选举出根桥。
?如果一个端口收到了更好的BPDU,则该端口成为根端口。对于每一个非边缘端口,交换机都会交换一个提议,即通过握手的方式来决定链路的每一端的状态。
?每台交换机都假定自己的端口都应成为指定端口,并向邻居发送建议消息(Configuration BPDU)来建议这一事件。
- 如下图,假设根交换机与交换机A新建立了连接,此时两个交换机的端口都处于阻塞状态(Discarding),直到它们收到对方的BPDU。
- 当一个指定端口在Discarding或Learning状态时,它发出的BPDU中的Proposal位将会被置为1。
- 交换机A收到了更优的BPDU后会将P1调整为根端口。
- 交换机A开始同步,以确保交换机上的端口与最新收到的消息一致,如果满足以下条件其一,则端口处于同步状态:
- 端口处于阻塞状态,也就是在拓扑中为Discarding状态。
- 端口为边缘端口。
- 在下图中,P2与P4已经满足条件,交换机A只需要将P3的状态改为Blocking,并将其分配为Discarding角色。
- 那么现在交换机A的所有端口已处于同步状态,交换机A可以解除P1端口的Blocking状态,发送一条同意消息来回复根交换机。
- 这个消息是Proposal BPDU的副本,但修改了BPDU中Proposal Bit = 0 Agreement Bit = 1,这样能够让根交换机区分出它收到的Agreement对应于哪个Proposal。
- 一旦P0端口收到该消息,它就立刻将端口状态转换为转发状态。
- 此时P3仍处于Discarding状态,然后继续向外转发BPDU,向邻居开始建立握手(同步过程),并尝试快速切换到转发状态。
如果发送提议后没有收到回应,它会慢慢进入转发模式,并退回802.1D的生成树模式。如果对端交换机不使用RSTP,或者对端交换机端口处于Blocking状态,就可能发生以上的状况。
文章图片
文章图片
RSTP/RPVST+ New Topology Change Mechanisms ? 在RSTP中,只有端口转移到Forwarding状态的非边缘端口才会引起拓扑的变化。这与802.1D的生成树正好相反,端口进入到Blocking状态将不再被视为拓扑变化。当运行RSTP的交换机检测到拓扑更改时,会发生以下情况。
- 如有必要,它将启动TC While计时器,计时器的值约等于所有非边缘端口和到根端口的Hello Time的两倍。
- 只要该计时器在端口上运行,该端口发出的BPDU就会将TC bit置为1,在计数器为活动状态的时候,根端口也会发出BPDU。
- 收到该BPDU的交换机,会刷新所有和这些端口关联的MAC地址。
- 它清除在其所有端口学习到的MAC地址,接受拓扑更改的端口除外。
- 它启动了TC While计时器,并在所有指定端口和根端口发送了TC bit 置为1的BPDU。(RSTP不再使用特定的TCN BPDU,除非需要通知802.1D的交换机。)
推荐阅读
- 十万个为什么|口诀快速记住C语言中的运算符优先级
- 算法|104 二叉树的最大深度(Java)
- byte转换文件,文件转换byte数据的各个方式、zip的各个方式、xml报文的生成,md5加密、邮箱、HTTP请求
- Python进行多输出(多因变量)回归(集成学习梯度提升决策树GBR回归训练和预测可视化)
- KubeVela: 如何用 100 行代码快速引入 AWS 最受欢迎的 50 种云资源
- 技术平台&应用开发专题月 | 赋能企业业务快速创新,实现云原生自由
- 基于Python实现将列表数据生成折线图
- Java深入了解数据结构之二叉搜索树增|Java深入了解数据结构之二叉搜索树增 插 删 创详解
- 设计模式--工厂模式、生成器模式、单例模式、原型模式
- JavaWeb学习记录2——JDBC