STP(Spanning Tree Protocol)是一种由交换机运行的、用来解决交换网络中环路问题的数据链路层协议。为提高网络可靠性,交换网络中通常会使用冗余链路,但是冗余链路会给交换网络带来环路风险,导致广播风暴以及MAC地址表不稳定等问题,影响用户通信质量。生成树协议STP可以在提高可靠性的同时又能避免环路带来的各种问题。
注:屏蔽双绞线(ShieldedTwisted Pair)、信令转接点(SignalTransfer Point)等术语的缩写也是STP,应分清此 STP与彼 STP。
没有冗余链路时,如上图所示某条链路出现故障,该链路交换机下的终端业务会中断。
有冗余链路时,如上图所示某条链路出现故障,该链路交换机下的终端业务会中断,因为还有冗余链路保障网络连通;但是产生了环路。
在有环路的交换网络中,会导致Mac地址表翻摆、广播风暴、多帧复制等问题。
桥(网桥):交换机早期的名字;
桥(交换机)的Mac地址:每台交换机都有多个转发端口,每个端口有1个Mac地址,通常把端口编号最小的那个端口的Mac地址作为交换机的Mac地址;
桥ID(BID):由桥优先级(2个字节,即16位二进制数)和桥Mac地址(6个字节,即48位二进制数)组成,优先级可以人为设置,取值范围是0~65535,步长为4096,默认为0x8000(十进制为32768);
端口ID(PID):运行STP交换机的每个端口都有一个端口ID, 端口ID由端口优先级和端口号(即端口编号,如Ethernet0/0/3的端口编号为3)组成。 端口优先级取值范围是0到240, 步长为16, 即取值必须为16的整数倍,默认端口优先级为128;
STP交换机:运行生成树协议的交换机;
BPDU(Bridge Protocol Data Unit)网桥协议数据单元:是STP交换机相互交互的数据帧,BPDU是由STP交换机产生、交互和处理的,不是计算机等终端设备。
STP协议的基本原理:在一个具有物理环路的交换网络中,交换机通过运行STP协议,自动生成一个没有环路的工作拓扑。该无环工作拓扑也称为STP树(STPTree),树节点为某些特定的交换机,树枝为某些特定的链路。一棵STP树包含唯一的一个根节点,任何一个节点到根节点的工作路径不但是唯一的,而且是最优的。当网络拓扑发生变化时,STP树也会发生相应变化。
交换网络中选举1台根桥(交换机) --> 非根桥(交换机)选举1个根端口 --> 选举指定端口 --> 阻塞剩余端口。
根桥:网桥ID最小的为根桥,根桥是整个交换网络的逻辑中心,但不一定是物理中心,当网络拓扑发生变化时,根桥也可能发生变化。
如上图所示,交换机默认优先级为32768,所有交换机优先级相同,则需要通过比较交换机Mac地址确定根桥,经过比较,交换机SW的BID最小,所以选举为根桥。
如上图所示,对部分交换机优先级修改,交换机SW优先级最高(即,优先级值最小),交换机SW被选举为根桥。
根端口:是STP协议为非根桥选举出来的连接向根桥的端口,每台非根桥只能有1个根端口,根桥没有根端口。
每台非根桥的STP交换机有多个用于连接网络的端口,通过比较每个连接网络端口的端口开销、端口对端
网桥ID、端口对端
端口ID来选举出1个根端口,以保证这个端口上的链路为到根桥的唯一1条最优路径。
非根桥:没有被选举为根桥的STP交换机称为非根桥。
端口的根路径开销(RPC-Root Path Cost):在运行STP协议的网络中,STP交换机端口到根桥的累计路径开销称为这个端口的根路径开销。
端口的根路径开销与链路上的各个端口转发速率有关,端口转发速率越高开销越小。
BID选举规则:先比较交换机优先级后比较交换机Mac地址,如果有1个优先级最高(优先级值最小)的交换机,则不需要再比较交换机Mac地址部分;如果有多个优先级最高(优先级值最小)的交换机,则需要再比较交换机Mac地址部分。
PID选举规则:先比较交换机端口优先级后比较交换机端口号,如果有1个优先级最高(优先级值最小)的交换机端口,则不需要再比较交换机端口号部分;如果有多个优先级最高(优先级值最小)的交换机端口,则需要再比较交换机端口号部分。
SW4交换机根端口选举
如上图所示,SW4交换机到根桥SW有3条路径,路径开销分别为:
注:从最后1条路径可以看出,路径开销不是SW4交换机和SW交换机之间的4个端口(SW3:Ethernet 0/0/2、SW3:Ethernet 0/0/3、SW2:Ethernet 0/0/2、SW2:GE 0/0/1)各自开销的累加,而是SW4交换机和SW交换机之间各个交换机之间路径(SW4-SW3、SW3-SW2、SW2-SW共3条路径)开销累加之和。
从3条路径开销得知SW4的GE 0/0/1端口路径开销最小,所以SW4交换机的根端口为GE 0/0/1。
SW3交换机根端口选举
如上图所示,SW3交换机到根桥SW有4条路径,路径开销分别为:
从4条路径开销得知SW4的E0/0/1端口路径开销最小的有2个,开销值都为220000,则需要比较BID(桥ID)来确定根端口。
SW3交换机去往根桥方向的相邻交换机ID为:SW2的ID为32768.4c1f-cc6b-343a,SW4的ID为32768.4c1f-cc6b-641e,SW2的BID小,则与SW2相连的SW3的E 0/0/3端口为SW3的根端口。
SW7交换机根端口选举
SW7交换机到根桥SW有4条路径(跟SW3交换机相似,此处省略),端口路径开销和BID都相同,则需比较端口ID(PID)来确定根端口。
SW7交换机去往根桥方向的相邻交换机端口ID为:SW3的Ethernet0/0/1端口ID为128.1,SW3的Ethernet0/0/4端口ID为128.4,SW3的Ethernet0/0/1端口ID小,则与SW3相连的SW7的E 0/0/1端口为SW7的根端口;
如果手动修改SW3的Ethernet0/0/1端口ID为64.1,SW3的Ethernet0/0/4端口ID为48.4,SW3的Ethernet0/0/4端口优先级高(48<64),则与SW3相连的SW7的E 0/0/2端口为SW7的根端口;
注:上图中,如果SW3和SW7之间用集线器HUB相连,则 SW7交换机Ethernet0/0/1端口和Ethernet0/0/2端口去往根桥方向的相邻交换机端口ID都为SW3的Ethernet0/0/1端口,PID是相同的,这种情况下则需要比较SW7自己的Ethernet0/0/1端口和Ethernet0/0/2端口PID来确定根端口。因为集线器HUB在实际应用中很少用,在此不再赘述。
指定端口用于确定除了根端口外要保留通信的端口,即连接两台STP交换机的两个端口,其中一个是指定端口,另外一个是根端口或者是阻塞端口。
指定端口举例说明
上图按照根桥端口和根端口对端端口都是指定端口,标记出了部分指定端口;还剩下SW4:E0/0/3---SW3:E0/0/2、SW4:GE0/0/2---SW2:GE0/0/2、SW3:E0/0/1---SW7:E0/0/1共3条链路还没确定指定端口。
按照端口根路径开销确定指定端口:
SW4:E0/0/3---SW3:E0/0/2链路:SW4:E0/0/3的RPC为20000,SW3:E0/0/2的RPC为220000,SW4:E0/0/3的RPC
SW4:GE0/0/2---SW2:GE0/0/2链路:SW4:GE0/0/2的RPC为20000,SW2:GE0/0/2的RPC为20000,SW4:GE0/0/2的RPC=SW3:GE0/0/2的RPC,需要比较各自交换机ID才能确定指定端口。SW2的ID为32768.4c1f-cc6b-343a,SW4的ID为32768.4c1f-cc6b-641e,SW2的BID小,则SW2:GE0/0/2为指定端口。
SW3:E0/0/1---SW7:E0/0/1链路:SW3:E0/0/1的RPC为220000,SW7:E0/0/1的RPC为420000,SW3:E0/0/1的RPC
阻塞端口用于切断网络环路,在交换网络中,STP交换机通过交互BPDU消息,如果发现有环路,则选择地阻塞某些端口
,最终将环路网络修改
成逻辑上无环路的树形网络结构。