生成树协议主要用来消除网络中可能存在的二层环路,以防广播风暴,MAC地址表震荡导致的MAC地址表项不可用,以及为以太交换网络中进行链路备份。生成树主要有三种:
- STP: 最原始的生成树协议,网络拓扑收敛慢
- RSTP: 快速生成树协议,主要改进拓扑收敛慢的问题
- MSTP: STP以及RSTP都是单生成树协议,MSTP支持多生成树协议
STP
基本概念:
- 根桥(RB): 就是BID最小的桥设备,一个全网中只有一个
- 根端口(RP): 向根桥方向转发数据的端口,是当前设备至根桥的"根路径开销(RPC)"最小的端口
- 指定端口: 指点端口对应指定桥,与本机直接相连且负责向本机转发配置消息的设备就是指定桥,指定桥中向本桥转发配置消息的端口就是指定端口
端口状态:
Forwarding: 转发状态,既能转发用户流量也转发BPDU报文,只有根端口或指定端口才能进入FORWARDING状态;
Learning: 学习状态,根据用户流量构建MAC地址表,但不转发用户流量。是一种过渡状态,防止临时的二层环路;
Listening: 监听状态,正在确定端口角色,选举出根桥、根端口和指定端口,过渡状态
Blocking: 阻塞状态,仅接受处理BPDU报文,不转发用户流量;
Disable: 禁用状态,端口Down。
端口状态迁移图如下:
(1) 从禁用状态初始化或使能进入阻塞状态
(2) 端口禁用或者链路失效,进入禁用状态
(3) 端口选举为根端口或指定端口,由阻塞状态进入监听状态
(4) 端口不在是根端口或指定端口,进入阻塞状态
(5) 新选出的根端口或指定端口,需要经过两倍的时延才能进入转发状态
STP生成树的计算中使用的度量:
- ID: 包括BID(桥ID), PID(端口ID),BID8个字节,2字节桥优先级,6个自己的背板MAC
- 路径开销: 端口参数,具体端口的端口速率决定
STP生成树计算中的比较原则,比较参数:
- 根桥ID: 每个STP网络中有且仅有一个
- 累计根路径开销: 发送配置BPDU的端口到根桥的距离
- 发送者BID: 发送配置BPDU的设备的BID
- 发送端口PID: 发出配置BPDU的端口的PID
比较原则:
- 最小BID:选举根桥。根据各自发送的配置BPDU中最小BID为根桥
- 最小累计根路径开销:非根桥中选举根端口。到达根桥的总路径开销值最小的端口为根端口
- 最小发送者BID: 非根桥中选择指定桥和根端口。在总路径开销相等的非根桥中选择指定桥,及根端口
BPDU报文类型:
- 配置BPDU:用来进行生成树计算的和维护生成树拓扑的报文,初始阶段中发送的BPDU报文。在拓扑稳定后,只有根桥主动发送配置BPDU
- TCN BPDU:当拓扑结构发生改变时,下游设备用来通知上游设备网络拓扑结构发生变化的报文
BPDU报文格式:
STP的三个定时器:
- HELLO TIME
运行STP协议的设备发送配置BPDU的时间间隔。网络拓扑稳定后,修改该间隔,只有在根桥发生改变后才生效。TCN BPDU不受此影响。
- FORWARD DELAY
设备进行状态迁移的延迟时间,指一个端口处于listening和learning状态的持续时间,缺省15s。主要是防止临时环路。但同时在转发端口发生故障时,也至少经历两倍的delay才能恢复。
- MAX AGE
端口BPDU报文的老化时间。配置BPDU中有message age,若小于max age,则认为是有效的BPDU,否则丢弃。
- 配置BPDU的发送
- 端口使能STP,安装HELL TIME间隔从指定端口发送BPDU报文
- 当根端口收到BPDU报文时,根端口会向自己的每一个指定端口复制一份配置BPDU
- 当指定端口收到比自己差的BPDU时,会立刻向下游设备发送自己的配置BPDU
- TCN BPDU的发送
TCN BPDU是在下游拓扑发生变化时,向上游发送拓扑变化通知,直到根桥。如下两种情况会产生TCN BPDU报文:
- 端口状态变为Forwarding,且该设备上至少有一个指定端口
- 端口状态从Forwarding变为Blocking状态
- 指定端口收到TCN BPDU后,向根桥复制TCN BPDU
STP生成树的计算过程
初始化阶段的角色选举
STP设备在初始阶段时,都处于listening状态。通过交换配置BPDU报文,进行根桥、根端口和指定端口的选举。
- 根桥的选举
所有运行STP协议的设备,选举出唯一一个根桥。根桥的选举依赖于BID值。BID最小的为根桥。
根桥的选举主要经历两个阶段:
每个桥上确定自己的配置BPDU
在整个交换网络中,通过发送BPDU,确定整个交换网络的根桥
初始阶段,每个桥认为自己是根桥,根ID是本身BID,根路径开销是0。每个桥的端口在收到配置BPDU报文后,比较配置BPDU报文,优先级小的报文被丢弃。
收到优先级较高的配置BPDU,将此BPDU作为本端口的配置BPDU。桥会比较所有端口的配置BPDU,选出最优的BPDU作为本桥的配置BPDU。
收到优先级更高的配置BPDU后,停止发送自己的配置BPDU,在向其它端口发送配置BPDU时,报文中的根ID为新的BID。
- 根端口的选举
根端口的选举是在所有非根桥上的不同端口之间选择一个到达根桥路径开销最小的端口,对一个设备来说,有且仅只有一个根端口。一个桥上多个端口的累计路径开销相同,则采用发送者BID最下的为根端口。
- 指定端口的选举
是指在每一个物理网段的不同端口之间选举出一个指定端口。指定端口是离下游设备最近的端口。根据三个条件依次判定:
- 此网段经过此端口到根桥路径开销最小
- 接收数据时,发送方的的BID最小
- 发送方端口ID最小
拓扑发生变化后的角色选举
拓扑稳定后,根桥按照Hello Time 定时器定时发送配置BPDU报文,非根桥设备从根端口收到配置BPDU报文,从指定端口发送。
若网络结构发生变化,下游设备会不间断向上游设备发送TCN BPDU报文。上游设备在收到下游设备发送的TCN BPDU报文后,上游设备会发送TCA拓扑变化确认的配置BPDU报文给下游设备,下游设备会停止发送TCNBPDU报文。
同时,上游设备复制一份TCN BPDU报文,向根桥方向发送。根桥收到TCN BPDU报文后,根桥会使用TC(拓扑变化)标识位的配置BPDU报文发送至对应的下游设备,通知下游用设备直接删除发生故障的端口MAC地址表项(此处有异议,可能重设MAC转发表的有效时间为15s)
RSTP
RSTP是对STP的改进,主要提高收敛的速度。相对于STP,RSTP修改了端口角色、端口状态、以及BPDU、更快速的收敛机制。
端口角色
- 根端口: 与STP中根端口意义相同
- 指定端口:与STP中指定端口意义相同
- Alternate(替代端口):根断口的备份,当根端口失效时,无延时的进入转发状态
- Backup(备份端口):指定端口的备份,当指定端口失效时,无延时的进入转发状态
- Edge(边缘端口):指定端口的配置,设置变匀属性的指定端口,能够直接进入转发状态。下游需不运行STP
端口状态
- Forwarding:既转发用户流量也学习MAC地址
- Learning: 不转发用户流量但是学习MAC地址
- Discarding: 不转发用户流量也不学习MAC地址
BPDU
RSTP中只有一种BPDU包,称为RST BPDU。对配置BPDU的flags字段进行了填充,类型值做了改变,如下:
Type: RST BPDU包此字段类型是2
-
Flags字段,RST填充了STP BPDU Flags中的保留字段,填充了如下信息:
- Aggrement: 确认标识位,用于RSTP中定义的Proposal/Aggrement机制,对于Proposal报文的确认
- Forwarding: 转发状态标识位,1: 表示发送该BPDU报文的端口处于Forwarding状态
- Learning: 学习状态标识位,1:表示发送该BPDU报文的端口处于Learning状态
- Port role: 端口角色标识位,00:未知角色, 01:Alternat/Backup, 10: 根端口, 11: 指定端口
- Proposal: 1:表示是P/A机制中的Proposal报文
RSTP拓扑变化
触发RSTP拓扑变化的标准:非边缘端口迁移到Forwarding状态。
触发发拓扑变化的处理流程:
- 本设备所有非边缘指定端口启动TC Whiled定时器,定时器为Hello定时器两倍。这个时间段内,清空状态发生变化的端口上学习到的MAC地址。同时,由这些端口向外发送TC:1的RST BPDU。TC While超时,则停止发送RST BPDU
- 其他交换设备接收到TC为1的RST BPDU报文后,清空所有端口学习到的MAC地址,除了收到RST BPDU报文的位置。同时,为自己所有非边缘指定端口和根端口启动TC While定时器,重复上述过程
RSTP与STP配置BPDU处理上的变化
- 拓扑稳定后,RSTP中所有非根桥设备仍然按照Hello定时器定期发送配置BPDU
- 更短的BPDU超时计时。RSTP中,一个端口连续3倍Hello定时器时间内未收到上游设备发送的RST BPDU,则认为此邻居来连接失败。STP中,需要先等待Max AGE
- 处理次等BPDU。在STP中,指定端口收到次优BPDU会立即将更优的BPDU发送出去,但对非指定端口不做如此处理。RSTP中,会对所有端口如此处理
RSTP P/A收敛机制
RSTP中,实现更快速的拓扑收敛,主要采用了Proposal/Aggrement机制。STP协议中,一个端口选举成为指定端口,至少要等待两个Forward Delay才会迁移到Forwarding状态。
RSTP中,一个端口成为指定端口后,会先进入Discarding状态,在通过P/A机制快速进入Forwarding状态。
P/A机制工作原理:
- proposing: 当一个指定端口处于Discarding或Learning状态时,proposing变量置位,并向下游设备传递flags字段Proposal为1的RST BPDU报文,请求切换到Forwarding状态
- proposed:当对端的根端口收到Proposal为1的RST BPDU,将此端口的proposed变量置位
- sync: 当根端口的proposed变量置位后,会依次为本桥其他端口是sync变量置位,使所有非边缘端口都进入Discarding状态,准备重新同步
- syncd:当端口进入到Discarding状态后,会将自己的synced的变量置位,包括本桥上的所有其他端口,包括Alternat、Backup和边缘端口。根端口会监视其他端口的sync位,当所有端口完成置位,将自己syncd置位,表示本桥已完成同步,向上游设备传回Aggreement标识为1的RST BPDU
- agreed:当指定端口收到根端口发送的Aggreement RST BPDU,指定端口的agreed被置位。agreed被置位后,立即进入Forwarding状态。
其他收敛机制:
- 根端口快速切换机制。如果一个根端口失效,那么网络中最优的Alternat端口立即成为根端口,并进入Forwarding状态
- 边缘端口的引入。如果一个端口设置为边缘端口,不接收不处理BPDU报文,不参与RSTP计算,可以由Disable状态直接进入Forwarding状态。边缘端口一旦收到BPDU包后,会成为普通端口
RSTP保护功能
- BPDU保护: 边缘端口收到RST BPDU包,会被置为error-down,通知网管系统
- 防TC-BPDU报文攻击保护:在单位时间内交换设备处理拓扑变化报文的次数
- Root保护: 启用root保护功能的指定端口,其端口角色只能保持为指定端口。如果收到更优的RST BPDU报文时,进入Discarding状态
- 环路保护:如果根端口或Alternat端口长时间收不到来自上游的RST BPDU,向网关发送通知。根端口会进入Discarding状态。阻塞端口一致阻塞,指导根端口收到RST BPDU才恢复正常
MSTP
MSTP与RSTP原理相同,只是是多生成树的。