从 STP 到 RSTP 再到 MSTP:网络生成树协议的工作机制与发展
目录
回顾:STP的工作原理(802.1Q)
STP的配置BPDU
STP树的生成过程
STP的端口状态迁移
STP的不足
RSTP基本概念及工作原理(快速生成树,802.1w)
RSTP对STP的改进:
改进点1:端口角色
改进点2:站端口状态
改进点3:配置BPDU-RST BPDU
改进点4:配置BPDU的处理(1)
改进点4:配置BPDU的处理(2)
改进点4:配置BPDU的处理(3)
改进点5:快速收敛机制(1)
改进点5:快速收敛机制 (2)
改进点5:快速收敛机制(3)
P\A机制详解
改进点6:拓扑变更机制
改进点7:保护功能(1)
改进点7:保护功能 (2)
改进点7:保护功能(3)
改进点7:保护功能 (4)
RSTP拓扑收敛过程
RSTP拓扑收敛过程(1)
RSTP拓扑收敛过程(2)
RSTP拓扑收敛过程(3)
RSTP的不足
RSTP/STP的不足
RSTP/STP的不足(1)
RSTP/STP的不足(2)
MSTP基本概念及工作原理(多生成树,802.1S)
MSTP Region
MSTI
CST
IST
CIST
SST
总根,域根和主桥
小结
MSTP的端口角色
MSTP的端口状态
MSTP报文
MSTP的工作原理
MSTP拓扑计算
CIST计算
MSTI计算
MSTP网络数据转发
回顾:STP的工作原理(802.1Q)
STP的配置BPDU
- STP通过在交换机之间传递配置BPDU来选举根交换机 (或根桥),以及确定每个交换机端口的角色和状态。
- 在初始化过程中,每个交换机都主动发送配置BPDU。
- 在网络拓扑稳定以后,只有根桥周期性发送配置BPDU,其他交换机在收到上游传来的配置BPDU后,才会发送自己的配置BPDU。
- 配置BPDU包含了桥ID、路径开销和端口ID等参数。
STP树的生成过程
- 主要通过比较4个参数进行角色选举
- 根桥ID、根路径开销、网桥ID和端口ID。
- 选举根桥(RootBridge)
- 在一个交换网络中选举一个根桥
- 选举根端口(Root Port) 接受BPDU
- 在每个非根桥上选举一个根端口。
- 选举指定端口(Designated Port) 发送BPDU
- 每个二层链路选一个指定端口
- 阻塞非指定端口
- 阻塞交换机士所有剩余的非根、非指定端口。
STP的端口状态迁移
- 端口初始化或者使能,进入Blocking状态。
- 端口被选为根端口或者指定端口,进入Listening状态。
- 端口的ForwardDelay时间到,进入Learning状态;再经过一个Forward Delay,进入Forwarding状态。
- 端口不再是根端口、指定端口,进入Blocking状态。
- 端口被禁用或者链路失效
- 阻塞 -> 转发 30s
- 转发 -> 阻塞 0s
- 为了防止临时环路
STP的不足
- STP虽然能够解决环路问题,但是由于网络拓扑收敛慢,影响了用户通信质量。如果网络中的拓扑结构频繁变化,网络也会随之频繁失去连通性,从而导致用户通信频繁中断,这是用户无法忍受的。
- STP的不足:
- STP没有细致区分端口状态和端口角色,不利于初学者学习及部署。
- ·从用户角度来讲,Listening、Learning和Blocking状态并没有区别,都同样不转发用户流量。
- ·从使用和配置角度来讲,端口之间最本质的区别并不在于端口状态,而是在于端口扮演的角色。
- STP没有细致区分端口状态和端口角色,不利于初学者学习及部署。
- STP算法是被动的算法,依赖定时器等待的方式判断拓扑变化,收敛速度慢。
-
STP算法要求在稳定的拓扑中,根桥主动发出配置BPDU报文,而其他设备再进行处理,最终传遍整个STP网络。
RSTP基本概念及工作原理(快速生成树,802.1w)
RSTP对STP的改进:
- 通过端口角色的增补,简化了生成树协议的理解及部署;
- 端口状态的重新划分;
- 配置BPDU格式的改变,充分利用了STP协议报文中的Flag字段,明确了端口角色;
- 配置BPDU的处理发生变化;
- 快速收敛;
- 增加保护功能。
改进点1:端口角色
- 通过端口角色的增补,简化了生成树协议的理解与部署。
- 替换端口 作为根端口的备份端口
- 备份端口 作为指定端口的备份端口
改进点2:站端口状态
- RSTP的状态规范缩减为3种,根据端口是否转发用户流量和学习MAC地址来划分
- Discarding状态:不转发用户流量也不学习MAc地址;
- Learning状态:不转发用户流量但是学习MAc地址;
- Forwarding状:既转发用户流量又学习MAc地址。
改进点3:配置BPDU-RST BPDU
- RSTP的配置BPDU充分利用了STP报文中的Flag字段,明确了端口角色。
- 除了保证和STP格式基本一致之外,RSTP作了如下变化:
- Type字段:配置BPDU类型不再是0而是2,所以运行STP的设备收到RSTP的配置BPDU时会丢弃。
- Flag字段:使用了原来保留的中间6位,这样改变的配置BPDU叫做RST BPDU。
- RSTBPDU报文格式:
改进点4:配置BPDU的处理(1)
- 拓扑稳定后,配置BPDU报文的发送方式
- RSTP对配置BPDU的发送方式进行了改进
- 在拓扑稳定后,无论非根桥设备是否接收到根桥传来的配置BPDU报文,非根桥设备仍然按照HelloTime规定的时间间隔发送配置BPDU,该行为完全由每台设备自主进行。
- STP拓扑稳定后,根桥按照HelloTime规定的时间间隔发送配置BPDU。其他非根桥设备在收到上游设备发送过来的配置BPDU后,才会触发发出配置BPDU,此方式使得STP计算复杂且缓慢。
改进点4:配置BPDU的处理(2)
- 更短的BPDU超时时间
- 如果一个端口在超时时间(即三个周期,超时时间=HelloTime(2s)x3)内没有收到上游设备发送过来的配置BPDU,那么该设备认为与此邻居之间的协商失败。
- STP需要先等待一个MaxAge(20s)。
改进点4:配置BPDU的处理(3)
- 处理次优BPDU
- 当一个端口收到上游的指定桥发来的RST BPDU报文时,该端口会将自身缓存的RST BPDU与收到的RSTBPDU进行比较。
- 如果该端口缓存的RSTBPDU优于收到的RSTBPDU那么该端口会直接丢弃收到的RSTBPDU,立即回应自身缓存的RSTBPDU,从而加快收敛速度。
- STP协议只有指定端口会立即处理次优BPDU。
改进点5:快速收敛机制(1)
改进点5:快速收敛机制 (2)
- 边缘端口(Edge Port)
- 在RSTP里面,如果某一个端口位于整个网络的边缘,即不再与其他交换设备连接,而是直接与终端设备直连,这种端口可以设置为边缘端口。
- 边缘端口不参与RSTP计算,可以由Discarding直接进入Forwarding状态
- 但是一旦边缘端口收到配置BPDU,就丧失了边缘端口属性,成为普通STP端口,并重新进行生成树计算,从而引起网络震荡。
改进点5:快速收敛机制(3)
- Proposal/Agreement机制
- 简称P/A机制。
- RSTP通过P/A机制加快了上游端口进入Forwarding状态的速度。
- 在RSTP中,当一个端口被选举成为指定端口之后,会先进入Discarding状态,再通过P/A机制快速进入Forwarding状态。
- 在STP中,该端口至少要等待一个Forward Delay (Learning)时间才会进入到Forwarding状态。
P\A机制详解
改进点6:拓扑变更机制
在RSTP中检测拓扑是否发生变化只有一个标准:一个非边缘端口迁移到Forwarding状态。
- 一旦检测到拓扑发生变化,将进行如下处理:
- 为本交换设备的所有非边缘指定端口和根端口启动一个TC While Timer,该计时器值是HelloTime的两倍。在这个时间内,清空状态发生变化的端口上学习到的MAC地址。
- 同时,由非边缘指定端口和根端口向外发送RST BPDU,其中TC置位。一旦TC While Timer超时,则停止发送RST BPDU。
- 其他交换设备接收到RST BPDU后,清空所有端口(除了收到RST BPDU的端口和边缘端口)学习到MAC地址,然后也为自己所有的非边缘指定端口和根端口启动TC While Timer,重复上述过程。
- 如此,网络中就会产生RSTBPDU的泛洪
改进点7:保护功能(1)
- BPDU保护
- 正常情况下,边缘端口不会收到RST BPDU。如果有人伪造RST BPDU恶意攻击交换设备,当边缘端口接收到RST BPDU时,交换设备会自动将边缘端口设置为非边缘端口,并重新进行生成树计算从而引起网络震荡。
- 交换设备上启动了BPDU保护功能后,如果边缘端口收到RST BPDU,边缘端口将被error-down,但是边缘端口属性不变,同时通知网管系统
改进点7:保护功能 (2)
- 根保护(Root保护)
- 对于启用根保护功能的指定端口其端口角色只能保持为指定端口。
- 一旦启用根保护功能的指定端口收到优先级更高的RSTBPDU时,端口将进入Discarding状态,不再转发报文。经过一段时间(通常为两倍的ForwardDelay),如果端口一直没有再收到优先级较高的RSTBPDU,端口会自动恢复到正常的Forwarding状态。
- 根保护功能确保了根桥的角色不会因为一些网络问题而改变。
改进点7:保护功能(3)
- 环路保护(防止临时环路)
- 在启动了环路保护功能后,如果根端口或Alternate端口长时间收不到来自上游设备的BPDU报文时,则向网管发出通知信息(此时根端口会进入Discarding状态,角色切换为指定端口),而Alternate端口则会一直保持在Discarding状态(角色也会切换为指定端口),不转发报文,从而不会在网络中形成环路。
- 直到链路不再拥塞或单向链路故障恢复,端口重新收到BPDU报文进行协商,并恢复到链路拥塞或者单向链路故障前的角色和状态。
改进点7:保护功能 (4)
- 防TC-BPDU攻击
- 启用防TC-BPDU报文攻击功能后,在单位时间内,交换设备处理TCBPDU报文的次数可配置。
- 如果在单位时间内,交换设备在收到TC BPDU报文数量大于配置的阈值,那么设备只会处理阈值指定的次数。
- 对于其他超出阈值的TC BPDU报文,定时器到期后设备只对其统一处理一次。这样可以避免频繁的删除MAC地址表项,从而达到保护设备的目的。
RSTP拓扑收敛过程
RSTP拓扑收敛过程(1)
- 每一台交换机启动RSTP后,都认为自己是“根桥”并且发送RST BPDU。
- 所有端口都为指定端口,处于Discarding状态。
RSTP拓扑收敛过程(2)
- 上游链路的设备互联端口通过P/A机制,快速进入转发状态。
- SW2收到更优的RSTBPDU后,经比较认为SW1才是当前根桥,此时SW2的端口将成为根端口,而不是指定端口,停止发送RSTBPDU。
- SW1的端口进入Discarding状态,发送Proposal位置位的RSTBPDU。SW2收到后阻塞除边缘端口以外的所有其他端口(该过程称为同步过程)。
- SW2的各端口同步后,根端口立即进入Forwarding状态,并向sW1返回Agreement位置位的RST BPDU。SW1收到该报文后,会让指定端口立即进入Forwarding状态
RSTP拓扑收敛过程(3)
- 下游链路的设备互联端口会进行新一轮的P/A协商。
- SW2的下游端口设置为指定端口,持续发送Proposal位置位的RST BPDU。
- SW3的下游端口收到该BPDU后,发现不是本设备收到的最优BPDU,则会忽略,不会发送Agreement位置位的RST BPDU。
- SW2的下游端口一直收不到Agreement位置位的回应报文,等待2倍的Forward Delay后,进入转发状态。
RSTP的不足
- RSTP在STP基础上进行了改进,实现了网络拓扑快速收敛。但在划分VLAN的网络中运行RSTP/STP,局域网内所有的VLAN共享一棵生成树,被阻塞后的链路将不承载任何流量无法在VLAN间实现数据流量的负载均衡,导致链路带宽利用率、设备资源利用率较低。
RSTP/STP的不足
RSTP/STP的不足(1)
- 不足1:流量无法负载分担
- 背景:
- SW3为接入交换机连接终端网段,使用两条链路连接SW1和SW2,并且所有链路均允许VLAN2和VLAN3通过。
- 将SW1设为VLAN2内终端的网关,SW2设为VLAN3内终端的网关,并希望VLAN2和VLAN3内的终端分别使用不同的链路到相应的网关
- 问题:
- 如果网络中只有一个生成树,假设SW3与SW2相连的端口为阻塞端口,则VLAN2和VLAN3的数据都只能通过一条链路到汇聚交换机,不能实现流量负载分担。
RSTP/STP的不足(2)
- 不足2:二层次优路径
- 背景:
- SW3为接入交换机连接终端网段,SW1和SW2为汇聚交换机。将SW1设为VLAN2内终端的网关,SW2设为VLAN3内终端的网关,并且所有链路均允许VLAN2和VLAN3通过。
- 运行单个生成树之后,环路被打破,VLAN2和VLAN3的数据都直接到sW1。
- 问题:
- 由于SW3与SW2间的链路被阻塞,VLAN3的数据到达网关的路径是次优的,最优的路径应当是由SW3直达SW2。
MSTP基本概念及工作原理(多生成树,802.1S)
- MSTP是IEEE802.1S中定义的生成树协议,MSTP兼容STP和RSTP,既可以快速收敛,又提供了数据转发的多个冗余路径,在数据转发过程中实现VLAN数据的负载均衡。
- MSTP可以将一个或多个VLAN映射到一个Instance(实例),再基于Instance计算生成树,映射到同一个Instance的VLAN共享同一棵生成树。
MSTP Region
- MSTP网络层次:
- MSTP把一个交换网络划分成多个域,每个域内形成多棵生成树,生成树之间彼此独立。
- MST Region (Multiple Spanning Tree Region, 多生成树域),也可简称MST域:
- 由交换网络中的多台交换设备以及它们之间的网段所构成。
- 一个局域网可以存在多个MST域,各MST域之间在物理上直接或间接相连。用户可以通过MSTP配置命令把多台交换设备划分在同一个MST域内。
- MSTP网络中包含1个或多个MST域,每个MST域中包含一个或多个多生成树实例。
MSTI
- MSTI(Multiple Spanning Tree Instance,多生成树实例):
- 一个MST域内可以生成多棵生成树,每棵生成树都称为一个MSTI。
- MSTI使用InstanceID标识,华为设备取值为0~4094。
- VLAN映射表
- MST域的属性,描述了VLAN和MSTI之间的映射关系。
- 如图所示的MSTRegion4的VLAN映射有:
- VLAN1映射到MSTI 1
- VLAN2映射到MSTI 2
- 其余VLAN映射到MSTI 3
CST
- CST(Common Spanning Tree,公共生成树)
- 是连接交换网络内所有MST域的一棵生成树。
- 如果把每个MST域看作是一个节点,CST就是这些节点通过生成树协议计算生成的一棵生成树。
- 如图深蓝色粗线条连接各个域构成CST。
IST
- IST(Internal SpanningTree,内部生成树)
- 是各MST域内的一棵生成树
- IST是一个特殊的MSTI,MSTI的InstanceID为0。
- 如图所示的MSTRegion4,黑色细线条在域中连接该域的所有交换设备构成IST。
CIST
- CIST(Common and Internal Spanning Tree,公共和内部生成树)
- 通过生成树协议计算生成的,连接一个交换网络内所有交换设备的单生成树。
- 如图所示,所有MST域的IST加上CST就构成一棵完整的生成树,即CIST。
SST
- SST(Single Spanning Tree,单生成树)有两种情况:
- 运行生成树协议的交换设备只能属于一个生成树。
- MST域中只有一个交换设备,这个交换设备构成单生成树。
- 如图所示的MST Region3,该域中的唯一的交换设备构成SST。
总根,域根和主桥
- 总根(CIST Root)
- 是CIST的根桥,如图中SW1。
- 域根(Regional Root)
- 分为IST域根和MSTI域根。
- IST域根,在MST域中IST生成树中距离总根最近的交换设备是IST域根,如图中SW2、SW3、SW4。
- MSTI域根是每个多生成树实例的树根。
- 主桥(Master Bridge)
- 是IST Master,它是域内距离总根最近的交换设备,如图中SW1、SW2、SW3、SW4。
- 如果总根在MST域中,则总根为该域的主桥。
小结
MSTP的端口角色
- MSTP中定义的所有端口角色包括:
- 根端口、指定端口、Alternate端口、Backup端口、Master端口、域边缘端口和边缘端口。
MSTP的端口状态
- MSTP定义的端口状态与RSTP协议中定义相同:
- Forwarding状态:端口既转发用户流量,学习MAc地址,又接收/发送BPDU报文。
- Learning状态:过渡状态,端口接收/发送BPDU报文,不转发用户流量但是学习MAc地址。
- Discarding状态:端口只接收BPDU报文,不转发用户流量也不学习MAC地址。
MSTP报文
- MSTP使用MST BPDU (Multiple Spanning Tree Bridge Protocol Data Unit,多生成树桥协议数据单元)作为生成树计算的依据。
- MST BPDU报文用来计算生成树的拓扑、维护网络拓扑以及传达拓扑变化记录
- MSTP BPDU报文格式:
MSTP的工作原理
MSTP拓扑计算
- MSTP拓扑计算
- MSTP可以将整个二层网络划分为多个MST域,各个域之间通过计算生成CST,域内生成IST,CST和IST构成了整个交换设备网络的CIST。
- 域内还可以基于实例计算生成多棵生成树,每棵生成树都被称为是一个MSTI。
- CIST和MSTI都是根据优先级向量来计算的,这些优先级向量信息都包含在MST BPDU中。各交换设备互相交换MST BPDU来生成CIST和MSTI。
- 参与CIST计算的优先级向量为:
- {根交换设备ID,外部路径开销,域根ID,内部路径开销,指定交换设备ID,指定端口ID,接收端口ID}
- 参与MSTI计算的优先级向量为:
- {域根ID,内部路径开销,指定交换设备ID,指定端口ID,接收端口ID}
- 注意:括号中的向量的优先级从左到右依次递减。
- 参与CIST计算的优先级向量为:
CIST计算
- 经过比较MST BPDU消息后,在整个网络中选择一个优先级最高的交换设备作为CIST的树根,即总根。
- 在每个MST域内,MSTP通过计算生成IST;同时MSTP将每个MST域作为单台交换设备对待,通过计算在MST域间生成CST。CST和IST构成了整个交换设备网络的CIST。
MSTI计算
- 在MST域内,MSTP根据VLAN和生成树实例的映射关系,针对不同的VLAN生成不同的生成树实例
- 每棵生成树独立进行计算,计算过程与STP计算生成树的过程类似。
MSTP网络数据转发
- 在运行MSTP协议的网络中,一个VLAN报文将沿着如下路径进行转发:
- 在MST域内,沿着其对应的MSTI转发。
- 在MST域间,沿着CST转发。