新增了两种端口角色
RSTP的报文类型:RST配置BPDU
报文内容的变化
报文类型字段:
BPDU type==0x00:配置BPDU
BPDU type==0x80:TCN BPDU
BPDU type==0x02:RST/MST 配置BPDU
当STP接收到type==0x02的配置BPDU时,直接丢弃
RSTP可以向下兼容
flag:8bit
由STP中只使用最高位和最低位两个比特位,改为8个比特位都使用
| TCA | aggregate(同意) | forwarding | learning | port role | proposal | TC |
|---|---|---|---|---|---|---|
| 7bit | 6bit | 5bit | 4bit | 3-2bit | 1bit | 0bit |
| 确认收到TCN BPDU报文 | 用于P/A协商机制 | 端口状态 | 端口状态 | 端口角色 | 用于P/A协商机制 | 用于通知拓扑出现变更 |
第7bit位:TCA,确认收到TCN BPDU报文
第6bit位:aggregate(同意),用于P/A 协商机制
5bit位:forwarding
第4bit位:learning
4、5位共同表示端口状态
第2|3bit位:端口角色:
00 :未知,保留
01:AP/BP
10:RP
11:DP
根端口和指定端口的快速切换:
引入边缘特性(edge port)
P/A协商机制:
作用:让指定端口快速进入转发状态
P/A协商必须在全双工点到点的链路上进行
协商过程:一根桥为起点,自上而下,逐跳进行
首先交换机A/B/C运行RSTP后,都认为自己是根桥,所有端口都是DP,发送RST配置BPDU
通过交互RST BPDU后,知晓交换机A位根桥,于是B/C先与A进行P/A协商
A朝B/C发送P置位的RST BPDU
B/C接收到A发送的P置位的RST BPDU后,同步变量,阻塞除边缘端口以外的所有端口
B/C的RP口进入forwarding状态,并回复A置位的RST BPDU
A接收到A置位的RST BPDU后,DP口进入转发状态
至此,A与B/C之间的P/A协商已完成
B/C之间继续进行P/A协商
在STP中判断拓扑出现改变的标准是接口UP/Down
在RSTP中,判断拓扑出现改变的唯一标准是非边缘端口进入forwarding状态
所以当检测到非边缘端口进入forwarding状态会触发拓扑变更机制
出现拓扑变更的设备
给设备会删除状态出现改变的接口学习到的MAC地址表项,并且向出边缘端口外的其他端口泛洪TC置位的RST BPDU,同时给每个转发TC置位的RST BPDU报文的皆苦开启TC while timer计时器(通常收hello time的两倍),计时器超时后则停止发送TC置位的RST BPDU报文
接收到TC置位的RST BPDU的设备,除了边缘端口和接收该报文的接口以外,清楚其他所有端口学习到的MAC地址表项,并泛洪TC置位的RST BPDU,同时开启TC while timer计时器
重复以上动作,直至TC置位的RST BPDU泛洪至全网
注意:如果是边缘端口故障,则不会触发拓扑变更机制
BPDU保护
默认关闭,需要手动开启,在系统视图下配置,配置命令
[huawei]stp bpdu-protection
当边缘端口接收到RST BPDU时,会丧失边缘端口特性,配置了BPDU保护功能后,边缘端口如果接收到BPDU报文,直接关闭(error-down),此时能通过手动开启(undo shutdown),端口再次进入forwarding状态,边缘端口特性不会丢失
根保护
默认关闭,需要手动开启,在指定端口下配置,配置命令
int g0/0/4
stp root-prote
作用:保护根桥地位不被抢占,防止非法用户或错误接入导致更高优先级设备抢占根桥地位,可能导致数据外泄和网络拥塞等问题
配置跟保护后,当DP接收到更优的BPDU报文后,端口角色不改变,并且将端口状态切换至discarding,一段时间后(通常是2个forward delay)没有再接收到更优的BPDU,端口再次进入forwarding状态
环路保护
默认关闭,需要手动开启,在根端口和阻塞端口下配置,配置命令
int g0/0/01
stp loop-protection
作用:用于防止优于单通链路故障或者网络拥塞导致的环路
优于非根交换机单通链路故障或者网络拥塞导致长时间没有接收到根桥的RST BPDU报文,RP成为DP,AP切换成RP,此时都处于forwarding状态,从而造成单向的环路问题
防TC BPDU攻击
默认关闭,需要手动开启,在系统视图下配置,配置命令
stp tc-protection-------------开启TC BPDU保护功能
stp tc-protection threshold 2---------配置单位时间内处理的次数
stp timer hello 200-----------------配置单位时间间隔(单位厘秒,默认200)
作用:防止网络设备因频繁接收到TC 置位的BPDU导致,MAC地址表项频繁变更,造成网络震荡
配置TC-bpdu保护功能后,在单位时间内只能处理优先次数的TC-BPDU报文,默认单位时间为一个hello time只处理一次TC BPDU报文,时间间隔处理次数都已手动配置,对于超出的部分,只能等计时器超出后再统一一次性处理
MST域:
MSTI:多生成树实例
CST:公共生成树
IST:内部生成树
CIST:公公和内部生成树
SST:单生成树
总根
域根
主桥
MSTI 0中距离总根最近的交换设备
如果MSTI 0所在域即是总根所在域,则总根就是主桥
注意:总根一定是IST的根桥,但IST根桥不一定是总根
protocol id:2B,协议标识符,固定为0,0x0000
protocol version id:1B,协议版本标识符,stp为0x00,RSTP为0x02,Mstp为0x03
BPDU type:1B,BPDU报文类型
CIST flag:1B,CIST标志字段
CIST root id:8B,CIST的总根的BID
CIST external path cost:4B,CIST外部路径开销指从本设备所属的MST域到CIST总根所属的MST域的累计路径开销。CIST外部路径开销根据链路带宽计算
CIST regional root id:8B,CIST域根的BID,即IST master的ID。如果总根在这个域内,那么域根ID就是总根BID
CIST port id:2B,本端口在IST中的指定端口ID
message age:2B,BPDU报文的生存时间
MAX age:2B,BPDU报文的最大生存时间,超时则认为到根交换机的来南路故障
hello time:2B,BPDU报文发送的间隔时间,缺省2s
forward delay:2B,转发延迟定时器,缺省15s
version 1 length:1B,version 1 BPDU的长度
以上36字节为RSTP BPDU的长度
version 3 length:2B,MSTP BPDU的长度
MST configuration id :51 B,MST配置标识符。标识MST域的标识信息,包含4个字段
CIST internal path cost:4B,CIST内部路径开销指从本端口到主桥(IST master交换设备)的累计路径开销。CIST内部路劲开销根据链路带宽计算
CIST bridge id:8B,CIST的指定交换设备的ID
CIST remaining hops:1B,BPDU报文在CIST中剩余跳数
MSTI configuration messages:16B,如果有n个MSTI就占用n*16B
选举总根
域与域之间计算CST,每个域内计算IST,CST+IST构成了CIST
参与CIST计算的优先级向量为:
IST计算过程:
选举IST域根
先比较ERPC(总根所在域,ERPC都为0,所以总根即是域根)
ERPC一样,则比较CIST BID
非域根交换机上选举RP
每条链路上选举一个DP
阻塞非根非指定端口
CST计算过程:
把每个域看作一个大的交换机,总根所在域即为根桥
确定根域(总根所在域)
确定域边缘端口
非根域上选举RP
比较ERPC,以小为优
ERPC一样,则比较域根ID
域根ID一样,则比较指定BID
指定BID一样,则比较指定PID
指定PID一样,则比较接收PID
对于除实例0以外的其他实例来讲,该接口为Master端口
每条域间链路上选举一个DP
阻塞非根非指定端口
每个MST域单独计算MSTI