STP的作用

随着局域网规模的不断扩大, 越来越多的交换机被用来实现主机之间的互连。 如果交换机之间仅使用一条链路互连, 则可能会出现单点故障,导致业务中断。 为了解决此类问题, 交换机在互连时一般都会使用冗余链路来实现备份。冗余链路虽然增强了网络的可靠性, 但是也会产生环路, 而环路会带来一系列的问题, 继而导致通信质量下降和通信业务中断等问题。
wps1.png
​ 根据交换机的转发原则, 如果交换机从一个端口上接收到的是一个广播帧, 或者是一个目的MAC地址未知的单播帧, 则会将这个帧向除源端口之外的所有其他端口转发。 如果交换网络中有环路,则这个帧会被无限转发, 此时便会形成广播风暴, 网络中也会充斥着重复的数据帧。交换机性能会因此急速下降, 并会导致业务中断。
wps2.png
为解决交换网络中的环路问题, 提出了STP,STP的主要作用:(STP–生成树协议)

  1. 消除环路:通过阻断冗余链路来消除网络中可能存在的环路。

  2. 链路备份:当活动路径发生故障时, 激活备份链路, 及时恢复网络连通性。
    wps3.png
    STP协议标准:

  3. IEEE 802.1D 传统生成树,收敛时间比较长,最长可以到50s

  4. IEEE 802.1W 快速生成树,收敛时间很快,基本在1s内

  5. IEEE 802.1S 多实例生成树,将多个VLAN捆绑到一个实例中去,可以节省通信开销和资源占用率,MSTP兼容STP和RSTP

STP/RSTP 的局限:所有VLAN 共享一颗生成树,无法实现不同VLAN 在多条Trunk 链路上的负载分担。

MSTP:(Multiple Spanning Tree,多生成树协议),基于实例计算出多颗生成树,实例间实现负载分担。

BPDU报文

STP只所以可以消除环路,构建无环拓扑,是通过协议消息来实现的,STP的消息叫做BPDU(Bridge Protocol Data Unit)。BPDU中包含交换机之间需要交换的相关信息和参数, 这些信息和参数是生成树计算无环拓扑使用到的。

​ BPDU有两种类型:配置BPDU和TCN BPDU。

  1. 配置BPDU包含了桥ID、 路径开销和端口ID等参数。 STP协议通过在交换机之间传递配置BPDU来选举根交换机, 以及确定每个交换机端口的角色和状态。 在初始化过程中, 每个桥都主动发送配置BPDU。 在网络拓扑稳定以后, 只有根桥主动发送配置BPDU, 其他交换机在收到上游传来的配置BPDU后, 才会发送自己的配置BPDU。

  2. TCN BPDU是指下游交换机感知到拓扑发生变化时向上游发送的拓扑变化通知。配置BPDU中包含了足够的信息来保证设备完成生成树计算, 其中包含的重要信息如下:

    **根桥ID:**由根桥的优先级和MAC地址组成, 每个STP网络中有且仅有一个根桥。优先级默认32768

    **根路径开销:**到根桥的最短路径开销。
    **指定桥ID:**由指定桥的优先级和MAC地址组成。

    **指定端口ID:**由指定端口的优先级和端口号组成。 端口优先级默认128

    Message Age:配置BPDU在网络中传播的生存期。

    Max Age:配置BPDU在设备中能够保存的最大生存期。

    Hello Time:配置BPDU发送的周期。

    Forward Delay:端口状态迁移的延时。

1.png

抓包结果:

本例为STP生成树报文

2.png

本例为RSTP生成树报文

3.png

本例为MSTP生成树报文

4.png

协议版本:1字节,STP值为0,RSTP值为2,MSTP值为3

BPDU类型:1字节,配置BPDU为0x00,TCN BPDU为0x08

BPDU 标志:1字节,最低位=TC(Topology Change,拓扑变化)标志,最高位=TCA(Topology Change Acknowledgement,拓扑变化确认)标志

STP工作原理

STP通过构造一棵树来消除交换网络中的环路。

每个STP网络中, 都会存在一个根桥, 其他交换机为非根桥。 根桥或者根交换机位于整个逻辑树的根部, 是STP网络的逻辑中心, 非根桥是根桥的下游设备。 当现有根桥产生故障时, 非根桥之间会交互BPDU信息并重新选举根桥。

STP中定义了三种端口角色:指定端口, 根端口和预备端口。

指定端口是交换机向所连网段转发配置BPDU的端口, 每个网段有且只能有一个指定端口。 一般情况下, 根桥的每个端口总是指定端口。

根端口是非根交换机去往根桥路径最优的端口。 在一个运行STP协议的交换机上最多只有一个根端口, 但根桥上没有根端口。

如果一个端口既不是指定端口也不是根端口, 则此端口为预备端口。 预备端口将被阻塞。

5.png

1、根桥选举

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字段, 宣告新的根桥。

6.png

2、根端口选举

非根交换机在选举根端口时分别依据该端口的根路径开销、 对端BID(Bridge ID) 、对端PID(Port ID)和本端PID。

交换机的每个端口都有一个端口开销(Port Cost) 参数, 此参数表示该端口在STP中的开销值。 默认情况下端口的开销和端口的带宽有关, 带宽越高, 开销越小。 从一个非根桥到达根桥的路径可能有多条, 每一条路径都有一个总的开销值, 此开销值是该路径上所有接收BPDU端口的端口开销总和(即BPDU的入方向端口) , 称为路径开销。 非根桥
通过对比多条路径的路径开销, 选出到达根桥的最短路径, 这条最短路径的路径开销被称为RPC(Root Path Cost, 根路径开销) ,并生成无环树状网络。 根桥的根路径开销是0。一般情况下, 企业网络中会存在多厂商的交换设备, 华为X7系列交换机支持多种STP的路径开销计算标准, 提供最大程度的兼容性。 缺省情况下, 华为X7系列交换机使用IEEE
802.1t标准来计算路径开销。

运行STP交换机的每个端口都有一个端口ID, 端口ID由端口优先级和端口号构成。 端口优先级取值范围是0到240, 步长为16, 即取值必须为16的整数倍。 缺省情况下, 端口优先级是128。 端口ID(Port ID)可以用来确定端口角色。每个非根桥都要选举一个根端口。 根端口是距离根桥最近的端口, 这个最近的衡量标准是靠路径开销来判定的, 即路径开销最小的端口就是根端口。 端口收到一个BPDU报文后, 抽取该BPDU报文中根路径开销字段的值, 加上该端口本身的端口开销即为本端口路径开销。 如果有两个或两个以上的端口计算得到的累计路径开销相同, 那么选择收到发送者BID最小的那个端口作为根端口。

如果两个或两个以上的端口连接到同一台交换机上, 则选择发送者PID最小的那个端口
作为根端口。 如果两个或两个以上的端口通过Hub连接到同一台交换机的同一个接口上,
则选择本交换机的这些端口中的PID最小的作为根端口。

7.png

3、指定端口选举

在网段上抑制其他端口(无论是自己的还是其他设备的) 发送BPDU报文的端口, 就是该网段的指定端口。 每个网段都应该有一个指定端口,根桥的所有端口都是指定端口(除非根桥在物理上存在环路) 。

指定端口的选举也是首先比较累计路径开销, 累计路径开销最小的端口就是指定端口。 如果累计路径开销相同, 则比较端口所在交换机的桥ID,所在桥ID最小的端口被选举为指定端口。 如果通过累计路径开销和所在桥ID选举不出来, 则比较端口ID, 端口ID最小的被选举为指定端口。

网络收敛后, 只有指定端口和根端口可以转发数据。 其他端口为预备端口, 被阻塞,不能转发数据, 只能够从所连网段的指定交换机接收到BPDU报文, 并以此来监视链路的状态。