STP-Spanning-tree protocol

在二层交换网络中,可以使用多条链路在设备间互联,这样可以起到链路的冗余备份作用,但会产生广播风暴,网络中充满大量的广播,最终导致网络瘫痪而不可用。

STP可以帮助我们既可以实现链路的冗余备份,同时可以避免广播风暴的产生。STP通过运算可以将多余的链路置于非活动状态,即不转发用户数据包,而只留下单条链路作为网络通信,当唯一的活动链路不能工作时,再启用非活动链路,从而达到网络的冗余性。STP可以将网络中多余的链路通过运算置于block状态,只保留一条主要通信的链路,当主要通信的链路down掉后,启用block状态的链路从而起到冗余备份的作用。STP是IEEE标准协议,并且有多个版本。

STP是可以从逻辑上将一个物理环路的网络变成一个hub-spoke结构的网络从而避免广播风暴的产生。

STP在发送数据包测试网络是否有多条链路,是靠发送bridge protocol data units (BPDUs)来完成的,同台交换机发出去的BPDU都被做上了相同的标记,只要任何交换机从多个接口收到相同标记的BPDU,就表示网络中有冗余链路,因此需要STP断开多余链路。

BPDU数据包里面有以下信息:根桥的bridge id,发出交换机的bridge id,path cost,hello max-age forward delay。

STP在运算过程中,需要选择出根桥、根端口、指定端口,将其他既不是根端口,也不是指定端口的接口置于block状态,当根端口或者指定端口down掉时,才会启用block转发数据,从而达到链路冗余备份的作用。

STP选择根桥、根端口、指定端口的依据如下:

1.选择根桥

根桥是在一个广播域中唯一的,选择根桥的依据是bridge id,bridge id由交换机的优先级+MAC地址组成,交换机的优先级默认为32768,优先级的范围为0-65535,STP选择bridge id最小的当根桥,值越小,表示优先级越高;

2.选择根端口

根端口是在非根交换机上选择的,并且在非根交换机上唯一;选择根端口的依据是首先比较到达根桥的path cost值,如果相同,继续比较到达根交换机上一跳交换机的bridge id,如果相同,继续比较对端交换机的接口优先级,如果相同,继续比较对端交换机接口编号;值越小,表示优先级越高

path cost的大小是由链路的带宽值来决定的,带宽值越高cost值越小,也就表示优先级越高。常用的100M链路的cost值为19,1000M的cost值为4,10000M的cost值为2

3.选择指定端口

指定端口是要链路上唯一的;选择指定端口的依据是首先比较端口所在交换机到达根桥的path cost;如果相同,继续比较接口所在网络ID,如果相同,继续比较接口的ID;值越小,表示优先级越高。

由于指定端口是在所有的链路上选择,并且唯一的,所以在与根桥相连的链路上,根桥上的端口是到达根桥path cost最小的,所以根桥上的所有接口都是指定端口。

STP通过以上计算过程会选择出根桥、根端口、指定端口

 

接口都将置于block状态,只有根端口或者指定端口down时,才会启用block端口

下面通过一个实例来说明STP的选举过程,拓扑图如下所示,所有的链路均为100M链路,也就是说cost值都为19:

 

 

 

 

 

1.选择根桥

根桥是在所有的交换机中选择,选择根桥的依据是bride id;因为SW1的优先级为4096,SW2的优先级为24576,SW3的优先级为32768,SW4的优先级为32768,所以根据优先级就可以选择出谁是根桥,SW1的优先级值最小,所以我们选择SW1为根桥

2.选择根端口

根端口是在所有的非根交换机上进行选择,SW2上从端口F0/23到达根的Path Cost值为19,从F0/19和F0/20到达根的Path Cost值都为19×3=57。因此,F0/23被选为根端口。 SW3上从端口F0/19到达根的Path Cost值为19,从F0/23和F0/24到达根的Path Cost值都为19×3=57。因此,F0/19被选为根端口。 SW4上从所有端口到达根的Path Cost值都为19×2=38,根据path cost值,无法选出根端口,接下来比较上一跳交换机Bridge-ID,也就是比较SW2与SW3的Bridge-ID,所以选择往SW2的方向,到这里选择过程并没有结束,因为SW4上有两个接口都可以到达SW2,所以要继续选择;接下来比较端口F0/19和F0/20对端交换机端口的优先级,因为SW2的F0/19端口优先级为128,而F0/20的端口优先级为112,所以SW4选择连接SW2的F0/20的端口为根端口,即SW4的F0/20为根端口。

3.选择指定端口

指定端口是在所有的链路上进行选择的;由于根桥上的接口都为指定端口,所有SW1与SW2、SW3这两条链路上的指定端口是SW1上的F0/19,F0/23;在SW2与SW4相连的两条链路上,由于SW2到根桥的path cost最小,所以选择SW2上的F0/19,F0/20为指定端口;在SW3与SW4相连的两条链路上,由于 SW3到根桥的path cost最小,所以选择SW3上的F0/19,F0/20接口作为指定端口。

一个接口只能处于一种角色状态。

在选择出根桥、根端口、指定端口后,其他的接口全部处于block状态,从而形成无环的拓扑结构,STP计算结果如下图所示:

 

 

 

 

交换机的接口状态:

initialization

blocking

丢弃所有的数据帧,不会学习MAC地址,能收到BPDU但不发送

listening

丢弃所有的数据帧,不会学习MAC地址,能收到BPDU并处理BPDU,进行STP计算

learning

丢弃所有的数据帧,学习MAC地址,能接收BPDU和处理BPDU

forwarding

转发数据帧,学习MAC地址,能接收BPDU并处理BPDU

 

 BPDU中hello 、max-age 、forward delay的作用:

根桥会在每个hello时间向网络中发送BPDU,以便告诉网络中的交换机自己是根桥,hello时间为2S,如果其他交换机在max-age时间内没有收到BPDU,则认为根桥失效并重新进行选举;max-age时间是hello时间的10倍,也就是20S

接口从listening到learning状态都需要经历一个forward delay的时间,默认为15S,也就是说接口从listening到learning状态共需要30S的时间