STP 生成树协议
分享今日:
参考博客链接:
思维导图:
1. 环路问题
1.1 广播风暴
产生原因:根据交换机的转发原则,如果交换机从一个端口上接收到的是一个广播帧
,或者是一个目的MAC地址未知的单播帧
,则会将这个帧向除源端口之外的所有其他端口转发。如果交换网络中有环路,则这个帧会被无限转发,此时便会形成广播风暴,网络中也会充斥着重复的数据帧。

本例中,主机A向外发送了一个单播帧,假设此单播帧的目的MAC地址在网络中所有交换机的MAC地址表中都暂时不存在。SWB接收到此帧后,将其转发到SWA和SWC,SWA和SWC也会将此帧转发到除了接收此帧的其他所有端口,结果此帧又会被再次转发给SWB,这种循环会一直持续,于是便产生了广播风暴。交换机性能会因此急速下降,并会导致业务中断。
1.2 MAC地址表翻转
产生原因:交换机是根据所接收到的数据帧的源地址和接收端口生成MAC地址表项的。

- 主机A向外发送一个单播帧,假设此单播帧的目的MAC地址在网络中所有交换机的MAC地址表中都暂时不存在。SWB收到此数据帧之后,在MAC地址表中生成一个MAC地址表项,00-05-06-07-08-AA,对应端口为G0/0/3,并将其从G0/0/1和G0/0/2端口转发。
此例仅以SWB从G0/0/1端口转发此帧为例进行说明。
- SWA接收到此帧后,由于MAC地址表中没有对应此帧目的MAC地址的表项,所以SWA会将此帧从G0/0/2转发出去。
- SWC接收到此帧后,由于MAC地址表中也没有对应此帧目的MAC地址的表项,所以SWC会将此帧从G0/0/2端口发送回SWB,也会发给主机B。
- SWB从G0/0/2接口接收到此数据帧之后,会在MAC地址表中删除原有的相关表项,生成一个新的表项,,00-05-06-07-08-AA,对应端口为G0/0/2。此过程会不断重复,从而导致MAC地址表震荡。
1.3 多帧复制

PC2向PC1发送一个单播帧Y,假设S2的MAC地址表中不存在关于PC1的MAC地址表项,所以S2会对Y帧进行泛洪。假设S1的MAC地址表项中存在“PC1的MAC地址<——>port 3
” ,S3的MAC地址表项中存在“PC1的MAC地址<——>port 1
” ,显然,S1,S3都会对Y帧进行点对点转发操作。最后的结果是PC1 会收到两份Y帧的拷贝。
2. STP 作用
STP通过阻塞端口来消除环路,并能够实现链路备份的目的。
2.1 作用
消除环路:通过阻断冗余链路来消除网络中可能存在的环路。
链路备份:当活动路径发生故障时,激活备份链路,及时恢复网络连通性。
2.2 基本术语
2.2.1 桥(Bridge)
桥和交换机这两个术语是互用的。
2.2.2 桥MAC地址
一个桥有多个转发端口,一个端口有一个MAC地址。通常把编号最小的那个端口MAC地址作为桥的MAC地址。
2.2.3 桥 ID(BID)
-
一个桥的桥ID由两部分组成,2字节的桥优先级和6字节的桥MAC地址。
-
桥优先级可以人为指定,缺省值为0x8000(相当于32768)。
2.2.4 端口 ID(PID)
端口ID有两种定义方式,不同厂家采用的 PID 定义方式不同,同样端口优先级也是可以人为指定的,缺省情况下,端口优先级是128。。
- PID 由两字节组成,第一个字节表示端口优先级,后一个字节是端口编号;
- PID 由16bits组成,前4bit表示端口优先级,后12bit表示端口编号;
3. STP 树的生成
STP通过构造一棵树来消除交换网络中的环路。
- 每个STP网络中,都会存在一个根桥,其他交换机为非根桥。根桥或者根交换机位于整个逻辑树的根部,是STP网络的逻辑中心,非根桥是根桥的下游设备。当现有根桥产生故障时,非根桥之间会交互信息并重新选举根桥,交互的这种信息被称为BPDU。BPDU中包含交换机在参加生成树计算时的各种参数信息;
- STP中定义了三种端口角色:指定端口,根端口和预备端口。
- 指定端口是交换机向所连网段转发配置BPDU的端口,
每个网段有且只能有一个指定端口
。一般情况下,根桥的每个端口总是指定端口。 - 根端口是非根交换机去往根桥路径最优的端口。在一个运行STP协议的交换机上最多只有一个根端口,但
根桥上没有根端口
。 - 如果一个端口既不是指定端口也不是根端口,则此端口为预备端口。
预备端口将被阻塞
。
STP树生成过程:
- 选举一个根桥。
- 每个非根交换机选举一个 根端口。
- 每个网段选举一个指定端口。
- 阻塞非根、非指定端口。
3.1 选举根桥
选取原则:桥优先级是可以配置的,取值范围是0~65535,默认值为32768。优先级最高的设备(数值越小越优先)
会被选举为根桥。如果优先级相同,则会比较MAC地址,MAC地址越小则越优先
。

交换机启动后就自动开始进行生成树收敛计算。**默认情况下,所有交换机启动时都认为自己是根桥,自己的所有端口都为指定端口,这样BPDU报文就可以通过所有端口转发。**对端交换机收到BPDU报文后,会比较BPDU中的根桥ID和自己的桥ID。如果收到的BPDU报文中的桥ID优先级低,接收交换机会继续通告自己的配置BPDU报文给邻居交换机。如果收到的BPDU报文中的桥ID优先级高,则交换机会修改自己的BPDU报文的根桥ID字段,宣告新的根桥。
3.2 确定根端口
-
根桥确定后,其他没有称为根桥的交换机都被称