基于华三网络
STP
生成树协议(Spinning Tree Protocol,IEEE 802.1D)是二层网络中用于消除环路的协议。
简单实现原理:
- 通过阻断冗余链路来消除桥接网络中可能存在的路径回环
 - 当前活动路径发生故障时,激活冗余备份链路,恢复网络连通性
 
桥之间交换 BPDU(Bridge Protocol Data Unit,桥协议数据单元),来保证设备完成生成树的计算。
BPDU 分为两类:
- 配置 BPDU(Configuration BPDU):进行生成树计算和维护生成树拓扑的报文
 - TCN BPDU(Topology BPDU):当拓扑结构改变时,用来通知相关设备的报文
 
STP 消除环路的思想:
- 选择树根节点
 - 确定最短路径
 - 阻塞冗余链路
 
桥的角色:
- 根桥:通过选举成为生成树树根的桥
 - 指定桥:除根桥外的桥
 
端口角色:
- 根端口
 - 指定端口
 - Alternate 端口
 
路径开销:用于衡量桥之间路径的优劣,每条链路都有开销值,路径开销等于路径上全部链路的开销之和。
根路径开销:网桥到根桥的最短的路径开销
配置 BPDU:
- 网桥通过交换配置 BPDU 来获取 STP 计算所需的参数
 - 配置 BPDU 基于二层组播方式发送,目的地址
01-80-C2-00-00-00 - 配置 BPDU 由根桥周期(Hello Time,默认 2s)发送
 - 配置 BPDU 老化时间 Max Age(默认 20s),当超时后,网桥又会发送以自身为根的配置 BPDU
 - 配置 BPDU 包含以下信息:
- 根桥 ID(Root ID)
 - 根路径开销(Root Path Cost)
 - 指定桥 ID(Designated Bridge ID)
 - 指定端口 ID(Designated Port ID)
 
 - 配置 BPDU 的比较原则:小的优先
- 首先比较根桥 ID
 - 再比较根路径开销
 - 再比较指定桥 ID
 - 再比较指定端口 ID
 - 最后比较桥的端口 ID
 
 
根桥选举:
- 每台设备的各个端口在初始化时生成以自己为根桥的配置信息,向外发送自己的配置信息
 - 各网桥将各个端口收到的配置 BPDU 和自己的配置 BPDU 做比较,得出优先级最高的配置 BPDU,从而知道哪台设备为根桥。
 - 网桥保存该最优的配置 BPDU,并从指定端口发送该配置 BPDU,告诉其他设备根桥的信息
 - 网络收敛后,根桥向外发送配置 BPDU,其他设备也对该配置 BPDU 进行转发
 
确认端口角色:
- 根桥上的所有端口为指定端口
 - 非根桥上到根的路径开销最小的端口为根端口
 - 每个物理段的根路径开销最小的桥为指定桥,指定桥上连着该物理段的端口为指定端口
 - 既不是指定端口,又不是根端口的端口为 Alternate 端口,进行阻塞,不转发普通的以太网数据帧
 
收到低优先级的配置 BPDU 时的处理:通常非根桥不会主动发送配置 BPDU,只有当网桥的指定端口收到一个低优先级的配置 BPDU 时,网桥会立即回应一个配置 BPDU,确保新加入的网桥尽快确认根桥和端口角色。
端口状态:
- Disabled:未启用 STP 的端口,不收发 BPDU,但能接收转发数据
 - Blocking:Alternate 端口,接收但不发送 BPDU,不能接收转发数据
 - Listening:接收并发送 BPDU,不接收或转发数据,不进行地址学习
 - Learning:接收并发送 BPDU,不接收或转发数据,开始进行地址学习
 - Forwarding:接收并发送 BPDU,接收或转发数据,同时进行地址学习
 
端口被选为指定端口或根端口后,需要从 Blocking 经过 Listening 和 Learning 才能到达 Forwarding。期间有两次 Forward Delay,每次为 15 秒。设置 Forward Delay 的作用为:使 BPDU 消息有一个充分时间再网络中传播。

拓扑改变后处理:

如图:SWD 的 0/1 端口故障导致 hostA 中断,经过 MaxAge,SWE 的 0/1 口配置 BPDU 老化,变为 Listening,经过两个 ForwardDelay,0/1 口变为 Forwarding 状态。
但此时 HostA 仍不能连通 HostB,因为 SWA/B/C 上 Mac 表未老化,HostB 给 HostA 发的包仍会被发到 SWD,被 SWD 丢弃。需要等 Mac 地址表老化(5min),才能重新学习。
为减少拓扑收敛时间,STP 使用 TCN BPDU 将最长的收敛时间缩减到 50 秒(MaxAge+2xForwardDelay)
使用 TCN BPDU 后的处理:
- 网桥感知拓扑变化,产生 TCN BPDU 从根端口发给根桥。(TCN BPDU 的发送周期为 Hello Time,若上游超时无回复就会一直发)
 - 若上游不是根桥,则上游会将要发送的配置 BPDU 的 TCA 置位,作为收到 TCN 的确认,并发给下游。然后再发 TCN BPDU 给根桥,依次如此传递直到根桥收到。
 - 根桥收到后,将要发送的配置 BPDU 的 TCA 置位,作为收到 TCN 的确认,并将 TC 置位,用于通知全网拓扑变化。
 - 下面的网桥收到消息后,将自身的 MAC 地址老化时间从 5min 变为 ForwardDelay。
 
网桥发送 TCN BPDU 的条件(满足一个):
- 有端口转变为 Forwarding,且该网桥至少包含一个指定端口
 - 有端口从 Forwarding 或 Learning 转变为 Blocking
 
STP 的缺陷:
- 收敛时间过长,两倍的 Forwarding Delay 导致连通性至少要几十秒才能恢复
 - 若网络拓扑频繁变化,网络会频繁失去连通性(例如:主机频繁上下线,会产生大量 TCN)
 
RSTP
RSTP(Rapid Spanning Tree Protocol,快速生成树协议,IEEE 802.1W)是 STP 的优化版。
RSTP 相较 STP 的改进:
- RSTP 减少了端口的状态
 - RSTP 增加了端口的角色
 - RSTP 的配置 BPDU 的格式和发送方式有变化
 - 拓扑改变时的处理不同,实现更快的收敛
 
RSTP 的端口状态:
- Discarding:对应 Disabled+Blocking+Listening,不能收发数据,不能地址学习
 - Learning:不能收发数据,开始学习 MAC 地址,能收发 BPDU
 - Forwarding
 
RSTP 端口角色变化:将 STP 的 Alternate 分为 Alternate 和 Backup
- 当阻塞端口收到更优的配置 BPDU 来自其他网桥时,该端口为 Alternate
 - 当阻塞端口收到更优的配置 BPDU 来自本网桥时,该端口为 Backup
 

RSTP 使用 RST BPDU。与 BPDU 的区别:
- 协议版本号为
0x02,标识 RSTP - 类型变为
0x02,标识 RST BPDU - 使用了 Flags 的全 8 位
 - 增加了 Version 1 Length 字段
 
网桥自行从指定端口发送 RST BPDU,不需要等待来自根桥的 RST BPDU。RST BPDU 的老化时间为 3xHello Time。
收到低优先级 RST BPDU 的处理:阻塞端口可立刻做出响应。
RSTP 快速收敛机制:
- 边缘端口机制:边缘端口直接进入转发状态,无需延时,不会触发拓扑改变。当边缘端口收到 BPDU 后,会转变为非边缘端口
 - 根端口快速切换机制:若旧的根端口已进入阻塞状态,且新的根端口连接的对端网桥的指定端口为 Forwarding,则新拓扑的根端口可直接进入 Forwarding
 - 指定端口快速切换机制:指定端口通过与相连的网桥进行一次握手(P/A 握手机制),直接进入 Forwarding
- 握手请求报文:Proposal
 - 握手回应报文:Agreement
 - 条件:必须在点对点链路

 
 
拓扑改变触发条件:只有非边缘端口转变为 Forwarding,产生拓扑改变
拓扑改变处理:
- 在两倍 Hello Time 时间内向所有的其他指定端口和根端口发送 TC 置位的 BPDU 报文
 - 清除除了接收到 TC 报文的端口外的所有其他指定端口和根端口的学习的 MAC 地址表
 
当 RSTP 与 STP 混用时:
- 若 RSTP 端口连续三次接收到 STP 的 BPDU,则该端口切换回 STP
 - 切换到 STP 的 RSTP 端口就失去快速收敛特性
 - 当 STP 与 RSTP 混用时,最好将 STP 设备放在网络边缘