交换冗余网络带来的问题
广播风暴/多帧复制/MAC地址表不稳定
STP的主要作用:
消除环路:通过阻断冗余链路来消除网络中可能存在的环路。
链路备份:当活动路径发生故障时,**备份链路,及时恢复网络连通性。
STP操作
STP中定义了三种端口角色:指定端口(DP),根端口(RP)和阻塞端口(BP)
1、选举一个根桥。
根桥选举
每一台交换机启动STP后,都认为自己是根桥。
STP中根桥的选举依据的是桥ID,STP中的每个交换机都会有一个桥ID(Bridge ID) 。桥ID由16位的桥优先级(Bridge Priority)和48位的MAC地址构成。在STP网络中,桥优先级是可以配置的,取值范围是0~65535,默认值为32768。优先级最高的设备(桥ID最小)会被选举为根桥。如果优先级相同,则会比较MAC地址,MAC地址越小则越优先。
交换机启动后就自动开始进行生成树收敛计算。默认情况下,所有交换机启动时都认为自己是根桥,自己的所有端口都为指定端口,这样BPDU报文就可以通过所有端口转发。对端交换机收到BPDU报文后,会比较BPDU中的根桥ID和自己的桥ID。如果收到的BPDU报文中的桥ID优先级低,接收交换机会继续通告自己的配置BPDU报文给邻居交换机。如果收到的BPDU报文中的桥ID优先级高,则交换机会修改自己的BPDU报文的根桥ID字段,宣告新的根桥。
2、每个非根交换机选举一个根端口。
根端口选举
非根交换机在选举根端口时分别依据收到BPDU中的RID(根桥ID),COST(端口开销),BID(桥ID-发送这个BPDU的交换机),PID(端口ID) 交换机的每个端口都有一个端口开销(Port Cost)参数,此参数表示该端口发送数据时的开销值,即出端口的开销。STP认为从一个端口接收数据是没有开销的。端口的开销和端口的带宽有关,带宽越高,开销越小。从一个非根桥到达根桥的路径可能有多条,每一条路径都有一个总的开销值,此开销值是该路径上所有出端口的端口开销总和,即根路径开销RPC(Root Path Cost)。非根桥根据根路径开销来确定到达根桥的最短路径,并生成无环树状网络。根桥的根路径开销是0。
运行STP交换机的每个端口都有一个端口ID,端口ID由端口优先级和端口号构成。端口优先级取值范围是0到240,步长为16,即取值必须为16的整数倍。缺省情况下,端口优先级是128。端口ID(port ID)可以用来确定端口角色。
每个非根桥都要选举一个根端口。根端口是距离根桥最近的端口,这个最近的衡量标准是靠累计根路径开销来判定的,即累计根路径开销最小的端口就是根端口。端口收到一个BPDU报文后,抽取该BPDU报文中累计根路径开销字段的值,加上该端口本身的路径开销即为累计根路径开销。如果有两个或两个以上的端口计算得到的累计根路径开销相同,那么选择收到发送者BID最小的那个端口作为根端口。如果BID相同则根据发送者的PID最小的为根端口。
3、每个网段选举一个指定端口。
指定端口选举
非根交换机在选举指定端口时分别依据根路径开销、BID、PID。
未被选举为根端口或指定端口的端口为预备端口,将会被阻塞。
在网段上抑制其他端口(无论是自己的还是其他设备的)发送BPDU报文的端口,就是该网段的指定端口。每个网段都应该有一个指定端口,根桥的所有端口都是指定端口(除非根桥在物理上存在环路)。
指定端口的选举也是首先比较累计根路径开销,累计根路径开销最小的端口就是指定端口。如果累计根路径开销相同,则比较端口所在交换机的桥ID,所在桥ID最小的端口被选举为指定端口。如果通过累计根路径开销和所在桥ID选举不出来,则比较端口ID,端口ID最小的被选举为指定端口。
网络收敛后,只有指定端口和根端口可以转发数据。其他端口为预备端口,被阻塞,不能转发数据,只能够从所连网段的指定交换机接收到BPDU报文,并以此来监视链路的状态。
4、阻塞非根、非指定端口。
为了计算生成树,交换机之间需要交换相关的信息和参数,这些信息和参数被封装在BPDU(Bridge Protocol Data Unit)中。
BPDU有两种类型:配置BPDU和TCN BPDU。
配置BPDU包含了桥ID、路径开销和端口ID等参数。STP协议通过在交换机之间传递配置BPDU来选举根交换机,以及确定每个交换机端口的角色和状态。在初始化过程中,每个桥都主动发送配置BPDU。在网络拓扑稳定以后,只有根桥主动发送配置BPDU,其他交换机在收到上游传来的配置BPDU后,才会发送自己的配置BPDU。
TCN BPDU是指下游交换机感知到拓扑发生变化时向上游发送的拓扑变化通知。
配置BPDU中包含了足够的信息来保证设备完成生成树计算,其中包含的重要信息如下:
协议ID 总是零
协议版本 总是零
BPDU类型 0 0x80配置BPDU
标志位:
根桥ID:优先级+MAC最小的
开销:根桥到达目的的开销之和,算入接口
桥ID:自己的
端口ID:128.X
Message Age:配置BPDU在网络中传播的生存期。
Max Age:配置BPDU在设备中能够保存的最大生存期 最大20S。
Hello Time:配置BPDU发送的周期 2S。
Forward Delay:拓扑发生改变后交换机在发送数据包前的监听和学习状态 15S。
带宽 旧的计算标准 现用计算标准PVST 最新计算标准MST
10M 100 100 200,0000
100M 10 19 20,0000
1G 1 4 2,0000
10G 1 2 2000
生成树端口状态:
Disabled→Blocking→Listening→Learning→Forwarding
20s 15s 15s
Disabled 不转发任何报文
Blockeing 不接收、转发数据。只接收不发送BPDU,不进行MAC地址学习
Listening 不接收、转发数据,接收并发送BPDU,不进行MAC地址学习
Learning 不接收、转发数据,接收并发送BPDU,开始学习MAC地址
Forwarding 接收并转发数据,接收并发送BPDU,进行地址学习
cisco对STP改进(慢、无法分流)
①portfast
不经历监听和学习,直接进入转发状态
仅配置在连接主机或服务器的端口
②uplinkfast
对于直接链路故障,无需经历监听和学习状态,切换过程将在5s内完成(本来50s)
仅配置在接入层交换机,会增大桥优先级和端口开销
条件:
一、交换机启动Uplinkfast
二、只有有一个端口处于Blocking(冗余)
三、链路在RP失效
要求所有Switch配置
当RP挂了,该Switch向其他端口(包括阻塞端口,如果有)发送下级BPDU,于是存在三种情况:
一、收到BPDU的是阻塞端口,该交换机阻塞端口和根端口都作为候选端口(用来到达Root Bridge)
二、收到的是根端口,阻塞端口作为候选端口,因为只有它能到根桥
三、收到的是根端口,而且该交换机没有阻塞端口,那么说明失去到根桥的连接,重新进行STP运算
STP不管拓扑中是不是存在环路都会运行,如果没有环路,两边的端口会一直处于FWD状态
③backbonefast
收敛时间能够从50s降低到30s
所有交换机上都进行配置
SW3的间接链路断了,SW2收不到SW1发送的BPDU,认为自己是根,向SW3发送次级BPDU
SW3还能到根桥,就向SW1发送数据包求证,sw1回包确认自己还在,sw3打开BP向SW2发包告诉SW2根桥还在。直接进入listening,learning 节约20S。