第九章 STP生成树
9.1 生成树的工作原理
- 选举一个根桥(根交换机)
- 每一个非根桥上选举一个根端口(去往根桥最近的端口)
- 在每一个链路上选举一个指定端口(向树的下游转发数据)
- 阻塞剩余的非根端口,非指定端口。
9.2 基本概念
- 根桥:生成树的树根
- 通过比较桥ID(称为BID),选择所有的相连二层设备中的桥 ID,越小越优
- 桥ID:由桥优先级(16bit)和桥MAC地址(48bit)组成(先比较桥优先级,再比较桥MAC地址)
- 桥优先级16bit中,仅高4bit位有效,高四位没变化一次,是一个新的优先级。即桥优先级的步长是4096,默认值是32768。
- Cost值:每一个启用生成树的接口维护一个STP Cost值,具体默认Cost值与接口的工作模式,带宽大小相关,带宽越大,Cost值越小。
- RPC(根路径开销):从本设备的接口到达根桥沿途的出接口的开销值之和。
- PID(接口ID):接口优先级和接口编号组成,高4bit位为接口优先级,默认128;低12bit位为接口编号。接口优先级的步长16。
- BPDU(桥协议数据单元):交换机通过交互BPDU携带必要参数,完成STP的选举过程。配置BPDU、TCN BPDU
9.3 BPDU报文的内容
按照三个区域记忆:
- 报文本身的参数:PID(Protocol ID)、PVID、BPDU type、Flags
- 选举参数:Root ID、RPC、BID、PID(port ID)
- 时间参数:消息寿命、Max Age、Hello time、Forward Delay
9.4 BPDU的传递
9.5 STP的端口角色
- RP端口(root port):根端口,非根交换机上距离根桥最近的端口(非根交换机上所有接口中收到最优BPDU的接口),连接根桥方向(上游)的端口
- DP端口(Design port):指定端口,连接下游交换机的端口。
- AP端口(Alternate port):去往根桥方向(上游)的RP端口的备份端口,代表去往根桥的另一路径。
9.6 STP的端口状态
|---------|---------|----------|-----------|----------|------------|
| 接口状态 | Disable | Blocking | Listening | Learning | Forwarding |
| 收发BPDU | × | 接受不发 | √ | √ | √ |
| 学习MAC地址 | × | × | × | √ | √ |
| 转发业务 | × | × | × | 只接不转发 | √ |
状态切换:
- 设备的所有接口开始的时候都是DP角色,Blocking状态
- 接口状态由Blocking状态自动切换为Listening状态,开始收发BPDU
- 如果设备DP端口经过选举之后成为AP接口,则端口状态切换为Blocking状态。
- 时间推移,如果DP端口没有被选举为AP端口,则经过Forwarding Delay时间(转发延迟时间15s)后,状态由Listening状态切换为Learning状态(15s预留给拓扑收敛的)
- 时间推移,DP端口没有被选举为AP端口,则再次经过Forwarding Delay时间(转发延迟时间15s)后,状态由Learning切换为Forwarding状态。(15s,预留给MAC地址学习的,避免学习到错误的MAC地址。)
9.7 STP故障恢复
- 根桥故障:非根桥需要老化根桥的BPDU(20s),需要重新选举根桥,接口状态切换为转发状态(2转发延迟=30s),最终需要50s恢复。
- 直连故障:设备仍然能接收到根桥的BPDU,不需要进行BPDU老化,只需要切换AP接口到RP,经过2个转发延迟时间(30s),进入到转发状态。
- 非直连故障:设备无法收到根桥的的BPDU,也没有AP作为RP的备份,此时,原RP端口故障,则需要等待20sBPDU老化时间,以及状态切换后重新选举接口角色重新确定后,进入到转发状态的时间(2个转发延迟时间)。总共50s左右。
9.8 STP拓扑变更机制
拓扑变更以及MAC地址表项更新的具体过程如下:
- SW3感知到网络拓扑发生变化后,会不间断地向SW2发送TCN BPDU报文。
- SW2收到SW3发来的TCN BPDU报文后,会把配置BPDU报文中的Flags的TCA位设置1,然后发送给SW3,告知SW3停止发送TCN BPDU报文。
- SW2向根桥转发TCN BPDU报文。
- SW1把配置BPDU报文中的Flags的TC位设置为1后发送,通知下游设备把MAC地址表项的老化时间由默认的300 s修改为Forward Delay的时间(默认为15 s)。
最多等待15 s之后,SW2中的错误MAC地址表项会被自动清除。此后,SW2就能重新开始MAC表项的学习及转发操作。