一、什么是生成树协议STP
生成树协议是二层防环或破环协议
以太网交换网络中为了进行链路备份,提高网络可靠性,通常会使用冗余链路。但是使用冗余链路会在交换网络上产生环路,引发广播风暴以及MAC地址漂移等故障现象,从而导致用户通信质量较差,甚至通信中断。为解决交换网络中的环路问题,提出了生成树协议STP(Spanning Tree Protocol)。二层没有类似IP TTL的防环机制,环路问题无休止进行。
运行STP协议的设备通过彼此交互信息发现网络中的环路,并有选择的对某个接口进行阻塞,最终将环形网络结构修剪成无环路的树形网络结构,从而防止报文在环形网络中不断循环,避免设备由于重复接收相同的报文造成处理能力下降。
RSTP(Rapid Spanning Tree Protocol)协议基于STP协议,对原有的STP协议进行了更加细致的修改和补充,实现了网络拓扑快速收敛。



STP抓包

实验示例

PC1进行配置
mac地址配置为54-89-98-11-11-11;IP地址配置为192.168.1.1
第一步:生成树协议是默认开启的,我们先把STP关闭掉,观察产生环路的影响
LSW1:
The device is running!
<Huawei>sys
Enter system view, return user view with Ctrl+Z.
[Huawei]sysname LSW1
[LSW1]undo info enable
Info: Information center is disabled.
[LSW1]stp disable \\关闭生成树STP协议
Warning: The global STP state will be changed. Continue? [Y/N]y
Info: This operation may take a few seconds. Please wait for a moment...done.
LSW2:
The device is running!
<Huawei>
<Huawei>
<Huawei>sys
Enter system view, return user view with Ctrl+Z.
[Huawei]undo info enable
Info: Information center is disabled.
[Huawei]sysname LSW2
[LSW2]stp disable \\关闭生成树STP协议
Warning: The global STP state will be changed. Continue? [Y/N]y
Info: This operation may take a few seconds. Please wait for a moment...done.
[LSW2]
LSW3:
The device is running!
<Huawei>
<Huawei>SYS
Enter system view, return user view with Ctrl+Z.
[Huawei]undo info enable
Info: Information center is disabled.
[Huawei]sysname LSW3
[LSW3]stp disable \\关闭生成树STP协议
Warning: The global STP state will be changed. Continue? [Y/N]y
Info: This operation may take a few seconds. Please wait for a moment...done.
[LSW3]
将三个交换机的STP协议都关闭后,
随便ping一个ip地址

在LSW2的交换机g0/0/2抓包查看环路,发现产生了大量的ARP报文在一直转发,此时便产生了广播风暴,会不断占用设备带宽、CPU等资源,导致设备宕机

二、STP的术语概念
1.桥ID(BID,BridgeID)
桥ID:交换机标识ID,桥既交换机
IEEE 802.1D标准中规定BID由16位桥优先级 (Bridge Priority,16bit)与桥MAC地址(48bit)构成,一共64bit,8字节。两者是组合在一起,用一个字段来表示的。
其中桥优先级后12bit为固定值 不可变化,只能调整前4bit,前4个比特x后12bit(4096),所以桥优先级值为4096的倍数
每一台运行STP的交换机都拥有一个唯一的BID。
BID桥优先级占据高16bit,其余的低48bit是桥MAC地址。
在STP网络中,BID最小的设备会被选举为根桥。
根桥的BID也成为RID,非根桥的BID就叫BID
STP系统优先级值配置: \\修改优先级值
Huaweistp priority ? \\ 值必须为4096的倍数,默认优先级值为32768
INTEGER<0-61440> Bridge priority, in steps of 4096
桥ID比较,优选桥优先级值小的,如果优先级值相同,则优先选MAC地址小的。

2.根桥ID:RID根交换机Root Bridge
根桥是生成树运行的重要设备;
在一个系统的生成树中只存在一个根桥;
桥ID最小的设备成为根桥:先比优先级,优先级小的成为根桥;优先级相同,再比较桥mac地址,mac地址小的成为根桥
3.开销(Cost)
每一个激活了STP的接口都存在一个cost值,主要用于计算到达根桥路径的开销;
接口的缺省开销与其接口速率、工作模式有关,还与交换机使用STP cost的计算方法有关;
开销值与接口带宽成反比,接口带宽越大,则Cost值越小。
用户也可以配置开销值
默认的工作模式为Dot1T
交换机千兆接口默认开销值为20000,百兆接口默认开销值为200000
直接设置stp接口开销:
[Huawei]int g0/0/2
[Huawei-GigabitEthernet0/0/2]stp cost 150 \\直接设置STP的接口开销,基本都用这种方法
查看STP接口的信息
[Huawei]dis stp interface g0/0/2
-------[CIST Global Info][Mode MSTP]-------
CIST Bridge :32768.4c1f-cc49-4ef8
Config Times :Hello 2s MaxAge 20s FwDly 15s MaxHop 20
Active Times :Hello 2s MaxAge 20s FwDly 15s MaxHop 20
CIST Root/ERPC :32768.4c1f-cc49-4ef8 / 0
CIST RegRoot/IRPC :32768.4c1f-cc49-4ef8 / 0
CIST RootPortId :0.0
BPDU-Protection :Disabled
TC or TCN received :5
TC count per hello :0
STP Converge Mode :Normal
Time since last TC :0 days 0h:23m:5s
Number of TC :3
Last TC occurred :GigabitEthernet0/0/3
----[Port26(GigabitEthernet0/0/2)][FORWARDING]----
Port Protocol :Enabled
Port Role :Designated Port
Port Priority :128
Port Cost(Dot1T ) :Config=auto / Active=20000
Designated Bridge/Port :32768.4c1f-cc49-4ef8 / 128.26
Port Edged :Config=default / Active=disabled
Point-to-point :Config=auto / Active=true
Transit Limit :147 packets/hello-time
Protection Type :None
Port STP Mode :MSTP
Port Protocol Type :Config=auto / Active=dot1s
BPDU Encapsulation :Config=stp / Active=stp
PortTimes :Hello 2s MaxAge 20s FwDly 15s RemHop 20
TC or TCN send :1
TC or TCN received :0
BPDU Sent :639
TCN: 0, Config: 0, RST: 0, MST: 639
BPDU Received :0
TCN: 0, Config: 0, RST: 0, MST: 0
[Huawei]
1.更改STP接口的工作模式既开销计算标准
Huaweistp pathcost-standard ?
dot1d-1998 IEEE 802.1D-1998
dot1t IEEE 802.1T
legacy Legacy
Huaweistp pathcost-standard dot1d-1998
Huaweistp mode stp //将STP模式设置为stp,默认是mstp

2.直接更改接口的开销数值
Huawei-GigabitEthernet0/0/2stp cost 150 直接设置STP的接口开销,基本都用这种方法
4.RPC : 根路径开销(Root Path Cost)
每一个非根桥设备都要计算到达根桥的路径,
计算的路径开销值是叠加的
根桥的根路径开销为0

5.接口ID(Port ID,PID)
每一个运行了stp的接口都会存在一个PID,由端口优先级(4bit)+端口编号(12bit)组成
端口优先级会借用端口编号的高4位bit,所以优先级值取值6+
是16的倍数。
端口优先级值的取值范围是0-240

6.BPDU 网桥协议数据单元(Bridge Protocol Data Unit)
BPDU是STP能够正常工作的根本。BPDU是STP的协议报文。
STP交换机之间会交互BPDU报文,这些BPDU报文携带着一些重要信息,正是基于这些信息,STP才能够顺利工作。
BPDU分为两种类型:
1.配置BPDU(Configuration BPDU):STP正常工作交互的报文
①TC配置BPDU ②TCA配置BPDU
2.TCN BPDU(Topology Change Notification BPDU):STP故障情况下交互的报文
配置BPDU是STP进行拓扑计算的关键;TCN BPDU只在网络拓扑发生变更时才会被触发。
根桥的根路径开销(RPC)为0
根桥的桥ID叫做RID

[Huawei]stp timer forward-delay ? \\设置转发时延,单位是毫秒级
INTEGER<400-3000> STP forward delay in centiseconds, in steps of 100, the
default value is 1500
\\可设置范围为400-3000毫秒,既4-30秒,默认是15秒(1500)
1.选举最优BPDU的比对顺序:
①最小的根桥ID,RID
②最小的开销,RPC
③最小的网桥ID,BID
④最小的接口ID(对端的),PID
⑤最小的接口ID(本端的),PID
2.根桥选举完成后,进行端口角色的选举:
①根端口:RP(root port),RP就是接收B
PDU最好的接口;
非根桥交换机,每一个接口累加计算开销,计算开销最小接口就是根接口;
每一个非根交换机只有一个根端口RP
②指定端口:DP(destination port) ,DP端口就是发送最好BPDU的端口
DP端口就是链路上去往根桥最近的端口,根桥的端口都是DP端口
③阻塞端口
没有成为DP且没有成为RP的端口就是阻塞端口;阻塞的端口不能转发数据,逻辑上是down掉的;阻塞端口只能接受BPDU,不能发送BPDU
三、STP的几种状态

|--------------|--------------------------------|
| 禁用Disable | 不收发BPDU、不学习MAC地址、不转发业务数据帧 |
| 阻塞Dlocking | 收BPDU、不发BPDU、不学习Mac地址、不转发业务数据帧 |
| 侦听Listening | 收发BPDU、不学习MAC地址、不转发业务数据帧 |
| 学习Learing | 收发BPDU、学习MAC地址,不转发业务数据帧 |
| 转发Forwarding | 收发BPDU,学习MAC地址,转发业务数据帧 |