STP
技术背景
引发二层环路的原因:
- 冗余链路,增加网络可靠性
- 人为错误导致二层环路
二层环路带来的问题:
- 广播风暴
- MAC地址漂移
STP
在一个具有物理环路的交换网络中,交换机通过运行STP,自动生成一个没有环路的工作拓扑,也被称为STP树。树节点为某些特定的交换机,树枝为某些特定的链路
STP在网络中运行后会持续监控网络的状态,当网络出现拓扑变更时,STP能够感知并且进行自动响应,从而使得网络状态适应新的拓扑结构,保证网络可靠性
STP的基本概念
桥ID
- IEEE 802.1D标准中规定BID由16位的桥优先级与桥MAC地址构成
- 每一台运行STP的交换机都拥有一个唯一的BID
- 在STP网络中,BID最小的设备会被选举为根桥
注意:
在STP网络中,桥优先级是可以配置的,取值范围0-65535,默认值:32768,可以修改但修改值必须是4096的倍数。
根桥
STP的主要作用之一是在整个交换网络中计算出一棵无环的"树"(STP树)
根桥是一个STP交换网络中的"树根"
在STP网络中,根桥的选举规则:
- 比较桥优先级,优先级的值越小,则越优先,拥有最小优先级值的交换机会成为根桥
- 如果优先级值相等,那么在比较MAC地址,拥有最小MAC地址的交换机会成为根桥
Cost
每一个激活了STP的接口都维护着一个Cost值,接口的Cost主要用于计算根路径开销,也就是到达根桥的开销
- 接口的缺省Cost与其速率、工作模式、交换机使用的STP Cost计算方法有关
- 接口带宽越大,则Cost值越小
- 用户可以根据需要通过命令调整接口的Cost
RPC
在STP的拓扑计算过程中,一个非常重要的环节就是"丈量"交换机某个接口到根桥的"成本",即RPC
一台设备从某个接口到达根桥的RPC = 从根桥到该设备沿途所有入方向接口的Cost累加
Port ID
运行STP的交换机使用接口ID来标识每个接口,接口ID主要用于在特定场景下选举指定接口
接口ID由两部分构成,高4位是接口优先级,低12位是接口编号
端口优先级用户可以根据实际需要,通过命令修改。端口优先级取值范围是0到240,步长是16(即取值必须为16的整数倍)。缺省情况下,端口优先级是128
BPDU
BRDU是STP的协议报文。BPDU是STP能够正常工作的根本。
BPDU分为两种类型:
- 配置BPDU:是STP进行拓扑计算的关键
- STP协议通过在交换机之间传递配置BPDU来选举根交换机,以及确定每个交换机端口的角色和状态
- 在初始化过程中,每个桥都主动发送配置BPDU。在网络拓扑稳定后,只有根桥主动发送配置BPDU,其他交换机在收到上有传来的配置BPDU后,才会发送自己的配置BPDU
- TCN BPDU:只在网络拓扑发送变更时才会被触发
- 下游交换机感知到拓扑发生变化时向上游发送的拓扑变化通知
重要字段:
BPDU Type:0x00表示配置BPDU,0x80表示TCN BPDU
Root ID:根桥的桥ID
RPC:根路径开销,到达根桥的STP Cost
Bridge ID:发送BPDU的桥ID
Port ID:发送BPDU的网桥的接口ID
Max Age:最大寿命。当一段时间未收到任何BPDU,生存期到达最大寿命是,网桥认为该接口连接的链路发生故障。默认:20秒
Hello Time:根网桥连续发送的BPDU之间时间间隔,默认:2秒
Forward Delay:转发延迟。在侦听和学习状态所停留的时间间隔,默认:15秒
配置BPDU的比较原则:
- 最小的根桥ID
- 最小的RPC
- 最小的网桥ID
- 最小的接口ID
STP操作:
- 选举一个根桥
- 每个非根交换机选举一个根端口
- 每个网段选举一个指定端口
- 阻塞非根、非指定端口
STP中定义了3种端口角色:
- 指定端口:交换机向所连网段转发配置BPDU的端口(每个网段有且只有一个)
- 根端口:非根交换机去往根桥路径最优的端口(在一个运行STP协议的交换机上最多只有一个根端口,但根桥上没有根端口)
- 阻塞端口:既不是指定端口也不是根端口,则此端口为阻塞端口
配置BPDU的转发过程:
交换机在刚启动的时候都认为自己时根桥,互相发送配置BPDU进行STP运算
STP的计算过程
选举根桥
选举根桥的规则:
- 网络中拥有最小桥ID的交换机成为根桥
注意:
- 在一个连续的交换网络中,只会存在一个根桥
- 根桥的角色是可抢占的。当有更优的BID的交换机加入网络时,网络会重新进行STP计算,选出新的根桥
在每台非根桥上选举一个根接口
选举根接口的规则:
- 比较RPC(根路径开销),RPC值越小,越优选,因此交换机会选RPC最小的端口作为根端口
- 在RPC值相等时,比较上行交换机的BID,BID值越小,越优选,因此交换机会选连接上行设备BID最小的端口作为根端口
- 在RPC值和上行交换机BID值相等时,比较上行交换机的Port ID,PID的值越小,越优选,因此交换机会选上行设备PID最小的端口作为根端口
- 在RPC值、上行交换机BID值和上行交换机PID值相等时,比较本地交换机的Port ID,PID值越小,越优选,因此交换机会选端口PID最小的端口作为根端口
注意:一个非根桥设备上,最多只能由一个根端口
在每条链路上选举一个指定端口
选举指定端口的规则:
- 比较RPC(根路径开销),值越小,越优选,因此交换机选择RPC最小的端口作为指定端口
- 在RPC值相等时,比较链路两端交换机的BID,值越小,越优选,因此交换机会选择BID最小的交换机的端口作为指定端口
- 在RPC和BID值相等时,比较链路两端端口的Port ID,值越小,越优选,因此交换机会选择PID最小的交换机的端口作为指定端口
注意:一般情况下,根桥上不存在任何根端口,只存在指定端口,根桥的所有端口都是指定端口
非指定端口和根端口被阻塞
在确定了根端口和指定端口之后,交换机上所有剩余的非根端口和非指定端口将被阻塞
注意:
- 被阻塞端口可以接收并处理BPDU,但是不能转发用户数据帧
- 根端口和指定端口既可以接收和发送BPDU,也可以转发用户数据帧
如何生成STP树
主要通过比较4个参数:根桥ID、根路径开销、网桥ID和端口ID,值越小,越优先
- 根桥选举:比较根桥ID,最小生成
- 根端口选举:依次比较RPC、对端BID、对端PID和本端PID,最小胜出
- 指定端口选举:依次比较RPC、本端BID和本端PID,最小胜出
- 在确定了根端口和指定端口之后,交换机上所有剩余的非根端口和非指定端口被阻塞
STP的接口状态
状态名称 | 收发BPDU | MAC地址学习 | 收发数据帧 |
Disable(禁用) | F | F | F |
Blocking(阻塞) | F | F | F |
Listening(侦听) | T | F | F |
Learning(学习) | T | T | F |
Forwarding(转发) | T | T | T |
STP端口状态迁移
拓扑变化
根桥故障
在稳定的STP网络,非根桥会定期(Hello Time:2秒)收到来自根桥的BPDU报文
根桥故障恢复过程:
- SW1根桥发生故障,停止发送BPDU报文
- SW2等待Max Age计时器(20秒)超时,从而导致已经收到的BPDU报文失效,又接收不到根桥发送的新的BPDU报文,从而得知上游出现故障
- 非根桥会互相发送配置BPDU报文,重新选举新的根桥
- 经过重新选举后,SW3的阻塞端口经过两个Forward Delay(15秒)时间恢复转发状态
端口状态:
SW3的阻塞端口,20秒(Max Age超时)后会从Blocking状态进入到Listening状态,再进入Learning状态,最终进入到Forwarding状态,进行用户流量的转发
收敛时间:
根桥故障会导致50秒左右的恢复时间(Max Age + 2倍的Forward Delay)的收敛时间
直连链路故障
- 当两台交换机之间用两条链路互连,其中一条是主用链路,另一条为备用链路
- 当网络稳定时,交换机SWB检测到根端口的链路发生故障
直连链路故障恢复过程:
- 备用端口会经过2倍的Forward Delay(15秒)时间进入用户流量转发状态
端口状态:
备用端口会从Blocking状态,迁移到Listening-Learning-Forwarding状态
收敛时间:
直连链路故障,备用端口会经过30秒(2倍的Forward Delay)后恢复转发状态
非直连故障
若SW1与SW2之间的链路发生了某种故障(非物理故障),因此SW2一直收不到来自根桥SW1的BPDU报文,Max Age计时器(缺省:20秒)就会超时,从而导致已经收到的BPDU报文失效
非直连链路故障恢复过程:
- SW2一直收不到来自根桥SW1的BPDU报文,Max Age计时器(缺省:20秒)就会超时,从而导致已经收到的BPDU报文失效
- SW2会认为根桥失效,并且认为自己是根桥,从而发送自己的配置BPDU给SW3,通知SW3自己是新的根桥
- SW3的阻塞端口一直收不到包含根桥ID的BPDU,Max Age计时器超时后,端口进入到Listening状态,开始向SW2"转发"从上游发来的包含根桥ID的BPDU
- Max Age定时器超时后,SW2和SW3几乎同时收到对方发来的BPDU,在进行STP重新计算,SW2发现SW3发来的BPDU更优,就放在宣告自己是根桥并重新确定端口角色
端口状态:
SW3的阻塞端口Max Age(缺省:20秒)超时后,会从Blocking状态进入到Listening状态,在进入Learning状态,最终进入到Forwarding状态,进行用户流量的转发
收敛时间:
非直连故障会导致50秒左右的恢复时间(Max Age + 2倍Forward Delay)收敛时间
拓扑改变导致MAC地址错误
解决方法:
拓扑变更以及MAC地址表项更新的具体过程:
- SW3感知到网络拓扑发生变化后,会以Hello Time(缺省:2秒)为周期通过根端口向SW2发送TCN BPDU报文
- SW2收到SW3发来的TCN BPDU报文后,会把配置BPDU报文中的Flags的TCA位置位,然后发送给SW3,告知SW3停止发送TCN BPDU
- SW2向根桥转发TCN BPDU报文
- SW1把配置BPDU报文中的Flags的TC位置位后发送,通知下游设备把MAC地址表项的老化时间由默认的300秒修改为Forward Delay时间(默认:15秒)
- 最多等待15秒之后,SW2中的错误MAC地址表项会被自动清除,此后,SW2就能重新开始MAC地址表项的学习及转发操作