生成树协议
为什么需要生成树协议
为了提高网络可靠性,交换网络中通常会使用冗余链路。
冗余链路会给交换网络带来环路风险,并导致广播风暴以及MAC 地址表不稳定等问题,进而会影响到用户的通信质量。生成树协议STP(Spanning Tree Protocol)可以在提高可靠性的同时又能避免环路带来的各种问题。
广播风暴
根据交换机的转发原则,如果交换机从一个端口上接收到的是一个广播帧,或者是一个未知目的MAC 地址的单播帧,则会将这个帧向除源端口之外的所有其他端口转发。如果交换网络中有环路,则这个帧会被无限转发,此时便会形成广播风暴
-
环路会引起广播风暴。
-
网络中的主机会收到重复数据帧。
MAC地址表震荡
交换机是根据所接收到的数据帧的源地址和接收端口生成MAC 地址表项的。
环路会引起MAC 地址表震荡。
STP生成树
STP生成树原理
STP(Spanning Tree Protocol)是用于网络树型拓扑结构的建立,起到防止网络中的冗余链路形成环路。STP 通过阻塞端口来消除环路,并能够实现链路备份的目的(假死)
STP 的作用 | 说明 |
---|---|
消除环路 | 通过阻断冗余链路来消除网络中可能存在的环路。 |
链路备份 | 当活动路径发生故障时,激活备份链路,及时恢复网络连通性。 |
STP工作过程
每个STP 网络中,都会存在一个根桥(根交换机),其他交换机为非根桥(非根交换机)。根桥或者根交换机位于整个逻辑树的根部,是STP 网络的逻辑中心,非根桥是根桥的下游设备。当现有根桥产生故障时,非根桥之间会交互信息并重新选举根桥,交互的这种信息被称为BPDU(包含交换机在参加生成树计算时的各种参数信息)。
STP 工作过程 |
---|
1. 选举一个根桥(Root) |
2. 每个非根交换机选举一个根端口(Root Port) |
3. 每个网段(网线)选举一个指定端口(Designated Port) |
4. 阻塞非根、指定端口 |
设备角色:
设备角色 |
---|
根桥 |
非根桥 |
端口角色:
端口角色 | 说明 |
---|---|
指定端口 (Designated Port) | 指定端口是交换机向所连网段转发配置BPDU 的端口, 每条链路有且只能有一个指定端口。 一般情况下,根桥的每个端口总是指定端口。 |
根端口 (Root Port) | 根端口是非根交换机去往根桥路径最优的端口。 在一个运行STP 协议的交换机上最多只有一个根端口。 根桥上没有根端口。 |
预备端口 (Alternate Port) | 如果一个端口既不是指定端口也不是根端口,则此端口为预备端口。 预备端口将被阻塞。 |
根桥选举
STP 中根桥的选举依据的是桥ID,STP 中的每个交换机都会有一个桥 ID(Bridge ID)。桥ID 由16 位的桥优先级(Bridge Priority)和48 位的MAC 地址构成。
在STP 网络中,桥优先级是可以配置的,取值范围是0~65535,默认值为32768。优先级最高的设备(数值越小越优先)会被选举为根桥。如果优先级相同,则会比较MAC 地址,MAC 地址越小则越优先。
交换机启动后就自动开始进行生成树收敛计算。默认情况下,所有交换机启动时都认为自己是根桥,自己的所有端口都为指定端口,这样BPDU 报文就可以通过所有端口转发。对端交换机收到BPDU 报文后,会比较BPDU中的根桥ID 和自己的桥ID 。如果收到的BPDU 报文中的桥ID 优先级低,接收交换机会继续通告自己的配置BPDU 报文给邻居交换机。如果收到的BPDU 报文中的桥ID 优先级高,则交换机会修改自己的BPDU 报文的根桥ID 字段,宣告新的根桥。
根端口选举
非根交换机在选举根端口时分别依据该端口的根路径开销、对端BID(Bridge ID)、对端PID(Port ID)和本端PID。
交换机的每个端口都有一个端口开销(Port Cost)参数,此参数表示该端口在STP 中的开销值。
Port Cost(Dot1T ) :Config=auto / Active=200000
默认情况下端口的开销和端口的带宽有关,带宽越高,开销越小。从一个非根桥到达根桥的路径可能有多条,每一条路径都有一个总的开销值,此开销值是该路径上所有接收BPDU 端口的端口开销总和(即BPDU 的入方向端口),称为路径开销。非根桥通过对比多条路径的路径开销,选出到达根桥的最短路径,这条最短路径的路径开销被称为RPC(Root Path Cost,根路径开销),并生成无环树状网络。根桥的根路径开销是0。
一般情况下,企业网络中会存在多厂商的交换设备,华为系列交换机支持多种STP 的路径开销计算标准,提供最大程度的兼容性。缺省情况下,华为系列交换机使用IEEE 802.1t 标准来计算路径开销。
运行STP 交换机的每个端口都有一个端口ID(PID),端口ID 由端口优先级和端口号构成,例如(128.2)
----[Port2(Ethernet0/0/2)][FORWARDING]----
Port Protocol :Enabled
Port Role :Root Port
Port Priority :128
端口优先级取值范围是0 到240,步长为16,即取值必须为16 的整数倍。缺省情况下,端口优先级是128。端口ID(Port ID) 可以用来确定端口角色。
每个非根桥都要选举一个根端口。根端口是距离根桥最近的端口,这个最近的衡量标准是靠路径开销来判定的,即路径开销最小的端口就是根端口。端口收到一个BPDU 报文后,抽取该BPDU 报文中根路径开销字段的值,加上该端口本身的端口开销即为本端口路径开销。如果有两个或两个以上的端口计算得到的累计路径开销相同,那么选择收到发送者BID 最小的那个端口作为根端口。
如果两个或两个以上的端口连接到同一台交换机上,则选择发送者PID 最小的那个端口作为根端口。如果两个或两个以上的端口通过Hub 连接到同一台交换机的同一个接口上,则选择本交换机的这些端口中的PID 最小的作为根端口。
指定端口选举
非根交换机在选举指定端口时分别依据根路径开销、BID、PID。
先比较累计路径开销,累计路径开销最小的端口就是指定端口。
如果累计路径开销相同,则比较端口所在交换机的桥ID,所在桥ID 最小的端口被选举为指定端口。
如果通过累计路径开销和所在桥ID 选举不出来,则比较端口ID,端口ID 最小的被选举为指定端口。
BPDU报文
BPDU(Bridge Protocol Data Unit,桥协议数据单元) 包含桥ID、路径开销、端口ID、计时器等参数。
BPDU有两种类型,分为配置BPDU和TCN BPDU。
-
配置BPDU包含了桥ID、路径开销和端口ID 等参数。STP 协议通过在交换机之间传递配置BPDU 来选举根交换机,以及确定每个交换机端口的角色和状态。在初始化过程中,每个桥都主动发送配置BPDU 。在网络拓扑稳定以后,只有根桥主动发送配置BPDU ,其他交换机在收到上游传来的配置BPDU 后,才会发送自己的配置BPDU。
配置BPDU 中包含了足够的信息来保证设备完成生成树计算,其中包含的重要信息如下:
重要字段 说明 根桥ID (BID) 由根桥的优先级和MAC 地址组成,每个STP 网络中有且仅有一个根桥。 根路径开销 (RPC) 到根桥的最短路径开销。 指定桥ID (ROOT ID) 由指定桥的优先级和MAC地址组成。 指定端口ID (PID) 由指定端口的优先级和端口号组成。 Message Age 配置BPDU 在网络中传播的生存期。 Hello Time 配置BPDU发送的周期。 Forward Delay 端口状态迁移的延时。 -
TCN BPDU 是指下游交换机感知到拓扑发生变化时向上游发送的拓扑变化通知。
计时器
配置BPDU 报文每经过一个交换机,Message Age 都加1。
如果Message Age 大于Max Age(BPDU报文的老化时间),非根桥会丢弃该配置BPDU。
总结
STP 是为了解决二层环路产生的问题而诞生的,二层环路会产生广播风暴、MAC 地址表震荡、充斥大量重复帧。
STP 通过逻辑上的阻塞端口来消除环路。
从设备角色上看STP 分为:根桥和非根桥。
从端口角色上看STP 分为:指定端口(DP),根端口(RP)、预备端口(AP)
STP 根桥选举过程:
- 每台交换机初始状态都认为自己是根桥并向其他交换机发送BPDU;
- 交换机比较BPDU 中的BID(桥ID),先会比较优先级,数值越小越优先。优先级相同则会比较MAC 地址,越小越优先
根端口的选举过程:
- 选择到根桥路径开销最小的为根端口,路径累计开销依据是带宽,带宽越高开销越小
- 如果多个累计路径开销相同,选择收到发送者BID 最小的那个端口作为根端口。
- 如果BID 还相同 ,比较对端端口PID 最小的哪个的端口为跟端口
指定端口的选举过程:
- 根桥的端口都为指定端口;
- 非根桥选举指定端口依据累计开销选举,累计开销小的为指定端口;
- 若累计开销相同则会比较自己的桥ID,桥ID 小的为指定端口。
预备端口的选举过程:
- 如果一个端口没有被选成根端口和指定端口,那么它就是预备端口,而且会被阻塞。被阻塞的端口不能转发数据,只能监听BPDU。
端口的状态转换
端口发生状态转发的场景:
-
端口初始化或者赋予角色;
-
端口被选为根端口或指定端口。
-
端口不再是根端口或指定端口。
-
forward delay计时器超时。
-
端口禁用或链路失效。
端口状态 说明 Forwarding 转发状态 端口既可转发用户流量也可转发BPDU 报文, 只有根端口或指定端口才能进入Forwarding 状态。 Learning 学习状态 端口可根据收到的用户流量构建MAC 地址表,但不转发用户流量。 增加Learning 状态是为了防止临时环路。 Listening 侦听状态 端口可以转发BPDU报文,但不能转发用户流量。 Blocking 阻塞状态 端口仅仅能接收并处理BPDU ,不能转发BPDU ,也不能转发用户流量。 此状态是预备端口的最终状态。 Disabled 禁用状态。 端口既不处理和转发BPDU 报文,也不转发用户流量。
STP变换
根桥故障
在稳定的STP 拓扑里,非根桥会定期收到来自根桥的BPDU 报文。如果根桥发生了故障,停止发送BPDU 报文,下游交换机就无法收到来自根桥的BPDU 报文。如果下游交换机一直收不到BPDU 报文,Max Age 定时器就会超时(Max Age的默认值为20 秒,从而导致已经收到的BPDU 报文失效,此时,非根交换机会互相发送配置BPDU 报文,重新选举新的根桥。
根桥故障会导致50 秒左右的恢复时间,恢复时间约等于Max Age 加上两倍的Forward Delay 收敛时间。
如果故障解除,又会恢复原样。
直连链路故障
交换机检测到直连链路物理故障后,会将预备端口转换为根端口。
交换机新的根端口会在30 秒后恢复到转发状态。
STP配置
STP模式
华为X7 系列交换机支持三种生成树协议模式。
stp mode { mstp | stp | rstp }
命令用来配置交换机的生成树协议模式。
缺省情况下,华为X7 系列交换机工作在MSTP 模式。在使用STP 前,STP模式必须重新配置。
[SWA]stp mode ?
mstp Multiple Spanning Tree Protocol (MSTP) mode
rstp Rapid Spanning Tree Protocol (RSTP) mode
stp Spanning Tree Protocol (STP) mode
[SWA]stp mode stp
配置交换机优先级
基于企业业务对网络的需求,一般建议手动指定网络中配置高、性能好的交换机为根桥。
可以通过stp root primary
命令指定生成树里的根桥。
stp priority <priority>
命令用来配置设备优先级值。priority 值为整数,取值范围为0 到61440 ,步长为4096 。缺省情况下,交换设备的优先级取值是32768。
[SWA]stp priority 4096
配置路径开销
华为X7 系列交换机支持三种路径开销标准,以确保和友商设备保持兼容。缺省情况下,路径开销标准为IEEE 802.1t。
stp pathcost-standard { dot1d-1998 | dot1t | legacy }
命令用来配置指定交换机上路径开销值的标准。
每个端口的路径开销也可以手动指定。此STP 路径开销控制方法须谨慎使用,手动指定端口的路径开销可能会生成次优生成树拓扑。
stp cost <cost>
命令取决于路径开销计算方法:
- 使用华为的私有计算方法时,cost 取值范围是1~200000。
- 使用IEEE 802.1d 标准方法时,cost 取值范围是1~65535。
- 使用IEEE 802.1t 标准方法时,cost 取值范围是1~200000000。
[SWA]stp pathcost-standard ?
dot1d-1998 IEEE 802.1D-1998
dot1t IEEE 802.1T
legacy Legacy
[SWA]interface GigabitEthernet 0/0/1
[SWA-GigabitEthernet0/0/1]stp cost 2000
EEE 802.1d 标准方法时,cost 取值范围是1~65535。
- 使用IEEE 802.1t 标准方法时,cost 取值范围是1~200000000。
[SWA]stp pathcost-standard ?
dot1d-1998 IEEE 802.1D-1998
dot1t IEEE 802.1T
legacy Legacy
[SWA]interface GigabitEthernet 0/0/1
[SWA-GigabitEthernet0/0/1]stp cost 2000