在网络中,如果存在多条冗余路径,就很有可能会出现环路,从而使一些消息不断复制。在这种情况下,交换机很可能会在多个端口收到相同的帧,这样它就会认为一个设备,同时出现自己的两端。这样会出现转发算法的混乱,STP的作用就是在一个广播域中,生成一个以根交换机为根的树,使广播域内的任意两个交换机之间只有一条活动的路径,并阻塞其他冗余路径。STP是由802.1D定义的。


下面讲一下STP的工作流程。我们看看STP是怎么收敛出来一条无环路的逻辑链路的。

1.首先,STP会选举出来一个根桥。根桥上所有的端口都是指定端口,指定端口不仅能发送和接受普通的数据流量,还能发送和接受配置信息和BPDU(桥协议数据单元)。priority值最低的交换机会被选举为根桥,priority值为0代表无选举资格。如果两个交换机的priority值相等,则根据vlan 1 的mac地址来仲裁。(BID=

2.STP会在每一个非根桥上选择一个根端口。根端口是该交换机到根桥路径开销最低的端口。它是非根桥到根桥的最佳路径。注意!每个交换机只有一个根端口!如果非根桥到根桥有多条相同路径开销的端口,则根据端口ID来选举根端口。端口ID=端口priority+端口号。比如一个接口的端口priority为128,端口号为f0/1,则端口ID为端口128.1 。相同路径开销的端口,端口ID最低的被选举为根端口。

3.选择各个网段的指定端口。指定端口既存在于根桥上也存在于非根桥上。
STP会在每个网段选举出一个指定端口,该端口是该网段到根桥的最短路径。注意!这里网段的概念是交换机与交换机之间连接的网段,而不是主网或子网网段。


在运行STP的交换机上只有三种类型的端口:根端口,指定端口,非指定端口。

在运行STP的每个交换机的每个二层端口都处于以下5种端口状态之一:

1.blocking
该状态下不会转发与接受数据帧,且只会接受BPDU,不会转发BPDU。端口会接收BPDU来判断根桥的位置与ID,其收集的信息足够决定收敛后该端口是停留在什么状态之下。端口会在blocking状态下停留20s

2.listening
当交换机根据在blocking状态下接收到的BPDU判断出这个端口应该参与数据帧的转发时,才会转换到listening状态。该状态与blocking状态相同,不会转发与接受数据帧,但开始转发自己的BPDU了,目的是告诉其他交换机,该端口将要参与数据帧的转发。端口会在此状态下停留15s

3.learning
该状态下的端口不转发数据帧,但是将开始准备数据帧的转发工作,交换机开始填写MAC表。端口会在此状态下停留15s

4.forwarding
这个状态的端口正式开始收发数据帧,同时继续收发BPDU。该状态的端口正式成为了活动拓扑的一个组成部分。

5.disabled
该状态的端口既不会参与生成树,也不会收发数据帧。



附——STP状态机


在STP选举过程中,端口是不能转发用户数据的。端口一开始处于阻塞状态,这个状态只能接收BPDU;


一个接口20秒没收到BPDU,也就是到了最大时间,端口会进入侦听状态,这时接口可以接收BPDU,并开始发送BPDU;


发送15秒的BPDU,接口将会为转发用户数据做准备,也开始学习MAC地址,这个状态叫学习状态;


再经过15秒的学习后,端口进入转发状态,转发状态是一个正常的接口。