在体量较大的网络中,线路往往错综复杂,物理上存在大量环路,会引发大量问题,STP协议便是在二层进行逻辑上防环。
生成树协议(STP)中,交换设备被称之为桥,优先级最高的被选为根桥,根据拓扑计算实现逻辑上阻塞冗余链路,消除环路,同时这样也有个好处,当某条活跃链路发生故障时,可以激活冗余链路,恢复网络连通性,具有一定的HA。
BPDU
生成树协议所用的信息段,被封装在以太网数据帧中,根据场景可分为配置BPDU与TCN BPDU。
配置BPDU用于生成树计算和维护拓扑,后文提到的BPDU除非特殊说明皆为配置BPDU,其中包含主要包含这些信息:
Root Identifier:当前根桥的BID
Root Path Cost:根路径开销。一个端口变量,表示到达根桥的开销,计算方式为去往根桥所经过端口路径开销的总和。
Bridge Identifier:本设备的BID。
Port Identifier:发送该BPDU的端口ID。PID由两部分组成,端口优先级与端口号。
端口优先级占4位,步长为16,范围是0~240,默认值为128。
Message age:BPDU的传播周期。
Max age:BPDU最大生存周期,默认为20秒,当Message age大于Max age时,BPDU将被丢弃。
Hello time:发送BPDU的间隔时间,默认值为2秒,当拓扑稳定后,根桥负责发送此信息,如需更改此值,必须在根桥上修改才有效。
Forward Delay time:设备状态迁移时间,默认为15秒。
TCN BPDU是用于下游拓扑变化时向上游发送通知(TC置为1),根节点收到后回复(TCA置为1)并广播(TC置为1的BPDU),直到所有交换设备知晓拓扑变化。
端口角色
STP中的端口角色有种:
根端口:去往根端口路径开销最小的端口。
指定端口:转发信息的端口,包含根端口。
阻塞端口:未被选举为根端口或指定端口的端口,不转发,只接收BPDU。
端口状态
STP的端口状态:
Disabled:端口状态为Down,不处理BPDU报文,也不转发用户流量。
Listening:过渡状态,进行生成树计算,端口开始接收BPDU,但不转发用户流量。
Learning:过渡状态,建立无环的MAC地址转发表,不转发用户流量,防止环路。
Forwarding:端口可以接收和发送BPDU,也可以转发用户流量。
Blocking:阻塞状态,此状态下不转发用户流量,只接收处理BPDU。
拓扑计算
根桥选举:
网络中所有交换机启动时都认为自己是根桥,所有端口皆为指定端口,交互信息,比较BID(数值越小优先级越高),如果相同则比较MAC地址,越小越优先。
根端口选举:
先比较开销值,选最小的。如果两个及以上链路连接同一台交换机。选择PID最小的端口。
指定端口选举:
先比较累计路径开销,最小的为指定端口,如果相同比较BID,依然相同则比较PID。
选举过程:
选举一个根桥;
每个非根交换机选举一个根端口;
每个网段选举一个指定端口;
阻塞预备端口(非根、非指定端口;
收敛完成后,根桥每隔一个hello time发送BPDU,非根桥进行中继。