生成树详解(STP、RSTP、MSTP)
目录
1、STP
1.概述
2.基本概念
3.端口角色及其作用
4.报文结构
5.STP的端口状态
6.三种定时器
7.STP选举步骤
8.配置BPDU的比较原则
9.TCN BPDU
10.临时环路的问题
11.传统STP的不足
拓扑变更处理过程
2、RSTP
1.端口角色
2.端口状态
3.P/A(Proposal/agreement)协商
4.环路的预防
5.STP和RSTP的区别
6.RSTP中MAC地址表的清空
7.RSTP保护功能
(1)UplinkFast:
(2)BackboneFast:
(3)Portfast:
(4)BPDUFilter:
(5)BPDU保护:
(6)BPDU过滤:
(7)Root保护:
(8)环路保护:
(9)TC-BPDU泛洪保护:
8.STP/RSTP缺陷
3、MSTP
1.MSTP对STP和RSTP的改进
2.MSTP与VRRP结合
1、STP
1.概述
背景:
在保证网络冗余性的情况下,消除二层环路。当网络中部署生成树协议时,交换机之间便会开始交互相关协议报文,并经过一系列计算得到一个无环的网络拓扑;当网络存在环路时,会将网络中的一个或多个接口进行阻塞(Block),从而打破二层环路。
生成树协议应用于园区网络的二层网络中,进行链路备份和消除环路。
二层环路带来的问题:
-
广播风暴:广播帧泛洪
-
MAC地址表漂移
在三层IP中有TTL解决环路问题,TTL默认值为64,每经过一个路由器减1。
核心思想:
比较BPDU,打开好的端口,阻塞差的端口,打破环路,建立无环的逻辑拓扑。
2.基本概念
-
桥ID(Bridge ID,BID)=网桥优先级(2字节)+网桥MAC(6字节):
-
缺省优先级32768(0~65535),Cisco:4096的倍数,HUAWEI:1024的倍数,越小越优先。
-
每一台交换机都有一个唯一的BID。
-
BID最小的设备会被选举为根桥(先比较优先级再比较MAC地址)。
-
-
端口ID(Port ID,PID)=端口优先级+端口ID:
-
优先级范围0~240,16的倍数,缺省情况下为128。
-
用来标识每个接口,选举指定接口(DR)。
-
-
开销(Cost):
-
接口的Cost用于计算到达根的开销。
-
接口的缺省Cost除了与其速率、工作模式,还与交换机使用的STP Cost计算方法有关。
-
接口带宽越大,Cost值越小
-
华为使用IEEE 802.1t标准,思科使用IEEE 802.1d-1998标准。
-
-
根路径开销(Root Path Cost,RPC):
-
一台设备的某个接口到根桥的RPC等于从根桥到该设备沿途所有入方向接口的Cost值累加。
-
3.端口角色及其作用
-
根桥(ROOT):
-
每隔Hello Time(2s)周期性发送配置BPDU,用于设备检查链路是否出现故障
-
根桥收到TCN后,在半分钟内按照每隔2秒周期性地发送TC报文(Forward Delay+Max Age)
-
-
根端口(RP):
-
收到根桥发来的配置BPDU报文
-
当拓扑发生变化时,向根桥发送TCN
-
-
指定端口(DP):
-
向下游发送配置BPDU,每经过一台交换机,配置BPDU将会发生变化(BID、PID)(再生式的泛洪)
-
接受来自下游桥的拓扑变化信息
-
-
非指定端口:
-
接受对端配置BPDU信息
-
不转发用户流量
-
4.报文结构
1、STP使用的MAC地址
-
Source MAC:给二层协议使用的MAC地址
-
Destination MAC:以01-80-C2开头的二层组播MAC(专门为二层协议提供的组播MAC)
-
根据三层的组播IP产生的组播MAC地址:以01-00-5E开头
2、BPDU(Bridge protocol data unit)网桥协议数据单元:
分类:
-
配置BPDU(0x00):
-
端口使用STP,则配置BPDU就会按照HelloTime定时器规定的时间间隔从指定端口发出
-
根端口收到配置BPDU时,如果优先级比自己的配置BPDU高,就会根据收到的配置BPDU中携带的信息更新自己的BPDU,并从指定接口向下游发送,否则丢弃该配置BPDU
-
指定端口收到比自己差的配置BPDU时,会立刻向下游设备发送自己的BPDU
-
-
TCN BPDU(0x80):当交换机的某个端口出现故障,会通过根端口向根桥发送TCN BPDU告知根桥,根桥收到后,会将拓扑变更发送至网络中的所有交换机,所有的交换机在15秒内刷新MAC地址表
作用:维护整个生成树的生命周期
-
通过Root ID、RPC、Bridge ID、Port ID的一个或者多个参数选举出最好的BPDU来生成树
-
通过定时器来保证生成树的稳定性
-
当拓扑发生改变,通过发送拓扑变更消息(Flag位)告知拓扑的变化
5.STP的端口状态
STP 端口状态迁移机制 :
① :端口初始化或者使能,进入阻塞状态
② :端口被选为根端口或者指定端口,进入侦听状态
③ :端口的临时状态停留时间(一个Forward Delay时间)到,进入下一状态(学习状态或者转发状态),端口被选为根端口或指定端口
④ :端口不再是根端口、指定端口或者指定状态,进入阻塞状态
⑤ :端口被禁用或者链路失效
对端口状态和端口角色的思考
Q:STP使能后端口进入Blocking状态,对BPDU只收不发,如何进行全网BPDU交互的?
A:端口使能STP后进入Blocking后,默认经过20秒后进入Listening,默认经过15秒后进入Learning,此时这个状态会进行全网BPDU的交互,学习到所有SW的BPDU信息,从而选举RB、RP、DP、NDP
Q:上面是只讲了端口状态的转换,而STP是先把端口角色确定下来后才进行端口状态转换,既然使能STP,端口进入Blocking 状态,并没有交互网络中BPDU,那么最开始如何进行端口角色的选举?
A:因为最开始的时候,使能STP的交换机都会把自己当作根桥,这时候就有了本地的BPDU信息,这个时候就直接把端口角色确定下来了,并开始端口状态的迁移,到了之后的Learning状态,才会发生全网BPDU的交互
6.三种定时器
Hello Time | Hello Timer定时器时间的大小控制配置BPDU发送间隔。 |
Forward Delay Timer | Forward Delay Timer定时器时间的大小控制端口在Listening和Learning状态的持续时间。15s |
Max Age | Max Age定时器时间的大小控制存储配置BPDU的超时时间,超时认为根桥连接失败。20s |
-
Hello Time:
-
默认为2s,只能在根桥上进行修改
-
作用:保证生成树的健壮性
-
调整定时器:
-
调大:
-
优点:降低设备的负担
-
缺点:生成树不稳定
-
-
调小:
-
优点:生成树稳定
-
缺点:设备负担过大
-
-
-
-
Message Age:
-
从根桥到当前桥的接受到BPDU的总时间,若从根桥发出,则Message Age为0,每经过一个桥,配置BPDU就会加1
-
调整定时器:
-
调大:
-
优点:不会引起临时环路
-
缺点:收敛性差
-
-
调小:
-
优点:收敛性好
-
缺点:会引起临时环路
-
-
-
-
Max age:
-
BPDU的老化时间,默认为20s
-
调整定时器:
-
调大:
-
优点:不会误判为链路故障
-
缺点:间接故障不能及时发现
-
-
调小:
-
优点:间接故障能被及时发现
-
缺点:会被误判为链路故障
-
-
-
7.STP选举步骤
-
选举根桥:在所有运行STP协议的交换机上选举一个唯一的根桥。
-
BPDU数据帧中BID值最小的交换机将成为根桥
-
-
选举根端口:在所有非根网桥交换机上的不同端口之间选举出一个到根网桥最近的端口作为根端口。
-
端口到根桥RPC最小
-
上行设备BID最小
-
上行设备PID最小
-
本地端口PID最小
-
-
选举指定端口:在每一条链路上选举出一个指定端口。
-
网桥到根桥RPC最小
-
本地BID最小
-
本地PID最小
-
-
阻塞其它端口
8.配置BPDU的比较原则
-
比较根桥ID——RID(优先级+MAC地址) ,越小越优先
-
比较RPC,越小越优先
-
比较发送端的BID(优先级+MAC地址(越小越优先))
-
比较发送端的PID(优先级+端口号(越小越优先))
一般来说,二层优先级越小越优先,三层优先级越大越优先。
第一条原则主要用于在网络中选举根桥,后面的原则主要用于选举根接口及指定接口。
9.TCN BPDU
TCN BPDU的作用:加快mac表的超时以更新转发表项(要与树的形状同步)
-
当网络拓扑发生变化时,交换机会从自己的根端口向外发送TCN BPDU报文
-
接收到TCN BPDU报文的交换机向发送者发送TCA报文标识对TCN的确认
-
根交换机接收到TCN BPDU报文向网络中发送TC BPDU报文标识拓扑变化
-
收到TC BPDU报文的交换机将MAC地址表清空
10.临时环路的问题
11.传统STP的不足
问题一:STP初始化时间过长
设备运行STP初始化场景。STP从初始状态到完全收敛至少需经过30s
初始时,交换机之间会相互发送、监听BPDU,并计算生成树。 STP算法是采用被动等待计时器超时的方式来判断已收集全网所有的 BPDU,进而再进行计算。
从Listening到Forwarding需要30s:
Listening->Learning:STP 为避免临时环路,必须等待足够长的时间(即确保BPDU 能同步发送至全网各节点)确保全网的端口状态全部确定,才能进入转发。
Learning->Forwarding:在 STP 进入转发前还需根据收到的用户流量构建MAC地址表,仍需等待计时器超时才能进入转发。
问题二:端口状态转换时间过长
SWC与SWA的直连链路down掉,其NDP端口切换成RP端口并进入转发状态至少需要经过30s。
问题三:对次优BPDU处理的机制
在STP中,交换机除指定端口外的其他端口收到次优BPDU都不会做处理。
SWB与SWA的直连链路down掉,则SWC的NDP端口切换成DP端口并进入转发状态大约需要50s。
问题四:连接终端的端口仍需要等待超时
交换机连接终端的链路进入转发需要经过30s
STP 中,连接终端的链路也要进行生成树计算且链路进入转发需等待2个Forward Delay时间。
事实上,只要保证该端口下连接的是终端设备就不会出现环路,即没有必要进行STP计算和等待计时器超时
问题五:STP的拓扑变更机制
先由变更点朝根桥方向发送TCN消息,收到该消息的上游交换机就会回复TCA消息进行确认;最后TCN消息到达根桥后,再由根桥发送TC消息通知设备删除桥MAC地址表项,机制复杂,效率低下
拓扑变更处理过程
-
在网络拓扑发生变化后,下游设备会不间断地向上游设备发送TCN BPDU报文。
-
上游设备收到下游设备发来的TCN BPDU报文后,只有指定端口处理TCN BPDU报文。其它端口也有可能收到 TCN BPDU报文,但不会处理。
-
上游设备会把配置BPDU报文中的Flags的TCA位设置1,然后发送给下游设备,告知下游设备停止发送TCN BPDU 报文。
-
上游设备复制一份TCN BPDU报文,向根桥方向发送。
-
重复上述步骤,直到根桥收到TCN BPDU报文。
-
根桥把配置BPDU报文中的Flags的TC位置1后发送,通知下游设备直接删除桥MAC地址表项。
2、RSTP
1.端口角色
RSTP 中根端口和指定端口角色的定义和 STP 相同。RSTP 增加了三种端口角色:替换端口 (Alternate Port)、备份端口(Backup Port)和边缘端口(Edge Port)。
-
替换端口为网桥提供一条到达根桥的备用路径,当根端口或主端口被阻塞后,替换端口将成为新的根端口。
-
备份端口为网桥提供了到达同一个物理网段的冗余路径,当指定端口失效后,备份端口将转换为新的指定端口。 当开启了生成树协议的同一台设备上的两个端口互相连接而形成环路时,设备会将其中一个端口阻塞,该端口就是备份端口。
-
边缘端口是不与其他设备或网段连接的端口,边缘端口一般与用户终端设备直接相连。
边缘端口的特点:
边缘端口会节省30S的延时,端口UP后会立即进入转发状态。
边缘端口的UP/DOWN不会触发拓扑改变。
当边缘端口收到TC BPDU时,会触发交换机更新MAC地址表,但不会更改MAC地址老化时间
边缘端口如果收到配置的BPDU报文会马上变为一个普通端口,进行STP的收敛
边缘端口也会发送配置BPDU报文。
PA协商不会阻塞边缘端口。
替换端口和备份端口:
1、 从配置BPDU报文发送角度来看:
a) Alternate Port 就是由于学习到其它网桥发送的配置BPDU报文而阻塞的端口
b) Backup Port 就是由于学习到自己发送的配置BPDU报文而阻塞的端口
2、 从用户流量角度来看:
a) Alternate Port 提供了从指定桥到根的另一条可切换路径,作为根端口的备份端口
b) Backup Port 作为指定端口的备份,提供了另外一条从根节点到叶节点的备份通路
2.端口状态
3.P/A(Proposal/agreement)协商
针对运行STP设备从初始化到完全收敛至少需要30s的问题,RSTP采用P/A协商机制。由于有来回确认机制和同步变量机制,就无需依靠计时器来保障无环。可以让交换机的互联接口快速进入转发模式。
P/A协商的硬件条件:
只能应用在点到点的链路上(全双工的端口),如果是半双工端口会识别为共享(share)链路,在共享链路上不能使用P/A协商。一旦P/A协商不成功,指定端口的选择就需 要等待两个Forward Delay,协商过程与STP一样。
P/A协商的过程:
-
SW1向SW2发送p置位的BPDU包。
-
同步变量(阻塞除边缘端口以外的其他端口,防止出现环路)。
-
SW2向SW1发送A置位的BPDU包。
-
SW1收到A置位的BPDU包后,端口立即进入Forwarding状态。(一般都是秒级)
P/A协商的详细过程:
什么情况下RSTP报文中需要将Proposal位置位?
一个指定端口进入discarding或learning状态,需要将proposal位置位。
RSTP中收敛时间的优化:
P/A协商:可以让交换机的RP和DP的互联接口快速进入转发状态。
直连故障:AP口变为RP并快速进入转发状态,不需要30s延时。
次优场景:AP口收到次优的RST BPDU包后会马上变为DP口,并向该端口发送最优的RST BPDU包。
非直连链路故障:连续丢失3个RST BPDU包,端口角色就需切换,最长时间为6s。
RSTP中TC置位的RST BPDU包所有桥设备都可以发送,连续发送4s(TC while时间)。
在RSTP中什么情况下才会发送TC BPDU包?
指定端口进入到转发状态。
4.环路的预防
-
开启STP协议,防止接入层交换机的发生自环。
-
接入层上联口开启BPDU Filter,防止BPDU被发送到其他端口,实现单端口的关闭。
-
下联口开启产商私有的防环技术,防止下联Hub的自环。
-
下联口起用BPDU Guard,防止下联普通交换机发生环路,环路时收到的BPDU相同,无法比较,BPDU Guard用于过滤BPDU。
-
下联口开启Portfast,设置连接PC的边缘端口。
5.STP和RSTP的区别
-
新增端口角色(alternate port、backup port)
-
STP有五种端口状态(disable、blocking、listening、learning、forwarding) RSTP只有三种端口状态(discarding、learning、forwarding)
-
RSTP只有配置BPDU、无TCN BPDU(取而代之的是TC BPDU)
-
RSTP包含两种链路:点到点链路、共享链路
-
端口的迁移:只要确定无环,立刻切换为forwarding状态(P/A机制)
快速收敛:RSTP具有更快的收敛时间。
灵活性:RSTP引入了替换端口(alternate port)和备份端口(backup port),以及更精细的状态转换过程。使得RSTP在网络拓扑变化时能够更灵活地调整生成树拓扑,减少了端口状态的改变和数据包的丢失。
支持快速端口:RSTP引入了快速端口(fast port)的概念,这些端口在网络拓扑发生变化时能够更快地进入指定状态,从而加速了生成树协议的收敛过程。
兼容性:RSTP与传统的STP兼容
更少的BPDU交换:RSTP通过减少BPDU(Bridge Protocol Data Unit,桥接协议数据单元)的交换次数来降低网络的开销,这样可以减少网络中的冗余信息和带宽占用。
特性 | STP | RSTP |
收敛速度 | 慢 | 快 |
协议复杂度 | 简单 | 复杂 |
兼容性 | 向下兼容所有支持STP的设备 | 向下兼容STP,需要所有设备都支持RSTP才能发挥其快速收敛的优势 |
应用场景 | 小型局域网 | 大型局域网、数据中心等 |
6.RSTP中MAC地址表的清空
-
TC发送者:清除边缘端口以外的其他端口的MAC地址表项
-
TC接收者:清除了接收TC报文和边缘端口以外的MAC地址表项
7.RSTP保护功能
(1)UplinkFast:
-
作用:减少收敛时间
-
上行链路组由根端口和所有提供去往根桥的替代端口组成,当根端口发生故障,则意味主用的上行链路故障,上行链路组内带有最低开销的端口将会被立即选举为新的根端口。
(2)BackboneFast:
-
作用:缩短非RSTP的收敛时间
-
当某条非直连链路发生故障,BackboneFast会检查是否去往根桥的替代路径
(3)Portfast:
-
作用:加快收敛
-
在接入层交换机的access口上使用,portfast端口一旦接了设备,接口可绕过listening和learning直接进入forwarding。
SW(config-if)#spanning-tree portfast [trunk]
//Spanning-tree portfast特性不能直接配置在trunk模式的接口上,否则即使配上去了,CISCO lOS也不生效,除非该接口变成access模式。如果确实需要在 trunk接口上配置,例如该接口连接了一台支持trunk的服务器,那么就在Spanning-tree portfast命令上增加trunk关键字。
注意,虽然配置了portfast的接口在no shutdown或者link一旦up的时候,会jump to forwarding状态,绕过listening和learning ,但是,这个接口建议必须是连接路由器或PC的。如果连的是交换机,这个接口仍然要接受spanning-tree的计算结果,如果计算结果是block,那么这个接口仍然会被block。这就是为什么你在CISCO IOS上敲入该条命令,lOS 会提示你,说可能会造成短暂的桥接环路。
(4)BPDUFilter:
可以在全局模式下配置,也可以在接口模式下配置,区别如下:
全局配置:spanning-tree portfast bpdufilter default
a)启用了portfast的接口将激活bpdufilter特性
b)接口在link up后瞬间会发送BPDU ( a few ),此后不再发送任何BPDU
c)接口在收到BPDU后立即丢失 portfast及bpdufilter特性,成为一个普通的spanning-tree接口
接口配置:spanning-tree bpdufilter enable
该接口将不会发送BPDU,也忽略接收到的BPDU
在接口上配置,不一定必须portfast特性,可独立实施。当然,建议搭配portfast特性使用。
(5)BPDU保护:
-
黑客在边缘端口接入一台运行生成树的交换机,当边缘端口收到BPDU时会切换为非边缘端口,重新开始进行生成树的计算,引起网络震荡
-
在边缘端口处开启BPDU保护,当收到BPDU报文时,该端口立即关闭,可以有效防止网络震荡
(6)BPDU过滤:
-
端口上所有接收到的配置BPDU 都会被丢弃
(7)Root保护:
-
黑客在根桥处接入一台优先级最高的交换机,该交换机可发送更优的BPDU报文,其他交换机收到更优收的BPDU报文后重新进行生成树的计算,从而引起网络拓扑结构的错误变更
-
在根桥处开启root 保护,当该端口收到更优的RST BPDU后,端口进入Discarding状态,不再转发报文。若一段时间内端口未收到更优的配置BPDU,则会自动恢复到正常的Forwarding状态
(8)环路保护:
-
当非指定接口收不到BPDU时,阻止其成为指定接口
(9)TC-BPDU泛洪保护:
-
黑客在边缘端口接入一台计算机不断伪造和发送TC-BPDU,交换机频繁地删除MAC地址表,交换机设备短时间内会收到很多TC-BPDU报文,频繁的删除操作会给设备造成很大的负担,给网络的稳 定带来很多隐患
-
在边缘端口处配置TC-BPDU保护功能,在单位时间内,交换设备处理TC-BPDU报文的次数可配置,设备只会处理阈值指定的次数
8.STP/RSTP缺陷
RSTP在STP基础上进行了改进,实现了网络拓扑快速收敛。但RSTP和STP还存在同一个缺陷:由于局域网内所有的VLAN共享一棵生成树,因此无法在VLAN间实现数据流量的负载均衡,链路被阻塞后将不承载任何流量,还有可能造成部分VLAN的报文无法转发。
3、MSTP
1.MSTP对STP和RSTP的改进
-
IEEE于2002年发布的802.1S标准定义了MSTP。MSTP兼容STP和RSTP,既可以快速收敛,又提供了数据转发的多个冗余路径,在数据转发过程中实现VLAN数据的负载均衡。
-
MSTP把一个交换网络划分成多个域,每个域内形成多棵生成树,生成树之间彼此独立。每棵生成树叫做一个多生成树实例MSTI(Multiple Spanning Tree Instance),每个域叫做一个多生成树域/MST域(MST Region:Multiple Spanning Tree Region)。
-
所谓生成树实例就是多个VLAN的一个集合。通过将多个VLAN捆绑到一个实例,可以节省通信开销和资源占用率。MSTP各个实例拓扑的计算相互独立,在这些实例上可以实现负载均衡。可以把多个相同拓扑结构的VLAN映射到一个实例里,这些VLAN在端口上的转发状态取决于端口在对应MSTP实例的状态。
2.MSTP与VRRP结合
MSTP与VRRP配合使用,达到冗余备份与负载均衡的双重效果,无论是链路出现故障还是设备出现故障都能在极短的时间内恢复网络的连通性,此模型多见于金融网络。
01.VRRP主和MSTP根保持一致
02.规划多个VRRP,MSTP组,实现服务器网关的备份和负载分担。
03.在汇聚交换机上指定根桥,明确的路径使排错和配置网络变得更为容易。
04.汇聚交换机上联的三层接口采用路由口互联,避免采用SVI互联,限制二层网络的范围。
05.汇聚交换机上不需要参与STP的端口关闭STP特性。
06.汇聚交换机(根桥和备份根桥)与接入交换机互联的端口开启“root保护”功能。
07.汇聚交换机与接入层交换机相连的端口避免配置trunk 保持默认值。
08.接入交换机上行端口开启“环路保护”功能。
09.接入交换机连PC的口开“root保护”功能。
10.接入交换机与服务器直连端口设置为“边缘端口”。
11.接入交换机与服务器相连的端开启“BPDU保护”功能。
12.接入交换机与服务器相连的端开启“私有防环”功能。
13.所有交换机上开启“TC-BPDU保护”功能。