88440559_p0 1080.jpg

1. Rapid Spanning Tree Protocol(快速生成树协议 802.1w)特征


  • 解决 STP 的不足之处
    • Blocking、Listening、Learning 都不转发数据,对于用户来说没有区别
    • STP 是被动算法,只能依赖计时器的方式判断拓扑变化,导致收敛慢
    • 接口从 Down 变为 Up,需要等待两个转发时延才能转发业务数据
    • STP 需要一个 Max Age 时间收不到 BPDU 报文,才会发生拓扑变更
    • AP 接口收到次优 BPDU,需要等待一个 Max Age 时间,端口角色才能进行切换,然后等待两个转发时延,才能转发数据
    • RP 接口故障,AP 接口变为 RP,需要等待两个转发时延,才能转发数据
  • RSTP 对 STP 的改进
    • 端口状态从五种变为三种
      • Discarding、Learning、Forwarding
    • 端口角色从三种变为五种
      • RP(根端口)、DP(指定端口)
      • AP(预备端口):是 RP 的备份,表示收到其他设备发送的 BPDU 报文而阻塞的端口
      • BP(备份端口):是 DP 的备份,表示收到自己发送的 BPDU 报文而阻塞的端口
      • EP(边缘端口):不参与生成树计算,可以从 Disable 直接到 Forwarding
  • RSTP 中只有配置 BPDU 报文,相比 STP 使用首位和末位的 Flag 位,RSTP 全部使用
  • RSTP 中 RP 接口故障,AR 接口变为 RP 后,立马进入转发状态

    2. BPDU 处理


  • 拓扑稳定后,无论是否收到根桥传来的 BPDU 报文,都会每「2s」发送 BPDU
  • 拓扑稳定后,如果在「3 个 Hello Time(6s)」内没有从上游设备收到 BPDU 报文,则认为与邻居之间协商失败
  • 拓扑稳定后,如果收到其他设备发送的 BPDU
    • 与自身缓存的 BPDU 进行比较后,发现是次优的 BPDU,将缓存的最优 BPDU 向收到的接口发送
    • 与自身缓存的 BPDU 进行比较后,发现比缓存的 BPDU 优,则替换为最优的 BPDU,改变其他接口的角色进行泛洪

      3. Flags 字段


RSTP - 图2
Flags 字段解释

  • TCA(Bit7):与 Bit0 对应,在 STP 中用于拓扑变更的确认
  • Agreement(Bit6):与 Bit1 对应,用于 P/A 机制,表示 P/A 机制协商完成
  • Forwarding(Bit5):表示端口处于转发状态
  • Learning(Bit4):表示端口出口学习状态
  • Port role(Bit2/3):表示端口的角色
    • 00:Unknown,未知
    • 01:Alternate/Backup port,AP 或 BP
    • 10:Root port,根端口
    • 11:Designated port,指定端口
  • Proposal(Bit1):与 Bit6 对应,用于 P/A 机制,表示提议进行 P/A 机制
  • TC(Bit0):与 Bit7 对应,在 STP 中用于向上游设备通知拓扑变更

    4. Proposal/Agreement 机制


P/A 机制就是为了让 DP 尽快进入 Forwarding 状态

1)P/A 机制概述

  • P/A 机制的前提条件是两端的链路必须为点到点链路
    • 全双工模式
  • P/A 机制如果在 Share 链路上有可能存在环路风险。一旦检测是 Share 链路,P/A 泛洪过程会自动停止(P/A 协商不成功),DR 接口就需要等待两个转发时延才会进入 Forwarding 状态(与 STP 协商过程一致)
    • 半双工模式

      2)P/A 机制工作原理

      RSTP - 图3
      新链路连接成功后,P/A 机制协商过程:
  1. DeviceA 的和 DeviceB 的都认为自己为根,端口都为指定端口,相互发送 BPDU
  2. DeviceB 的 p1 口收到更优的 BPDU,马上意识到自己将成为根端口,而不是指定端口,停止发送 BPDU
  3. DeviceA 的 p0 进入 Discarding 状态,于是发送的 BPDU 中把 Proposal 和 Agreement 置 1
  4. DeviceB 收到根桥发送来的携带 Proposal 的 BPDU,将自己的非转发端口和边缘端口以外的其他端口进入 sync 状态(同步状态)
  5. DeviceB p1 进入 Forwarding 状态并向 DeviceA 返回 Agreement =1 的回应 BPDU
  6. 当 DeviceA 判断出这是对刚刚发出的 Proposal 的回应,于是端口 p0 马上进入 Forwarding 状态

    5. RSTP 拓扑变更


只要一个非边缘端口迁移到 Forwarding 状态就会触发拓扑变更[AP、DP、BP、RP]

  1. 为所有的 DP/RP 端口(除 EP)向外发送 TC =1 的 BPDU 报文,并启动一个 2倍 Hello Time 的 TC While Time「4s」,在 TC While Time 时间内清空自身除 EP 以外的所有 MAC 地址,一旦 TC While Time 超时就停止发送 BPDU
  2. 其他设备接收到 TC = 1 的 BPDU 报文,清空自己除 EP 和收到该 BPDU 的所有端口学习到的 MAC 地址,然后为所有的 DP/RP 端口(除 EP)向外发送 TC =1 的 BPDU 报文,并启动一个 2倍 Hello Time 的 TC While Time,一旦 TC While Time 超时就停止发送 BPDU

    6. 其他特性


1)边缘端口(Edged-Port)

需要注意:不能在连接交换机的接口开启,只能在连接终端的接口开启。防止边缘端口配合使用 BPDU 保护,导致交换机相连的链路故障

  • 配置了边缘端口的接口 UP 后,不需要等待两个转发时延,直接 Forwarding 状态,并且不会参与生成树计算[不运行拓扑变更]
  • 当网络发生变化后[拓扑变更,P/A 机制],边缘端口不会受到影响
  • 边缘端口会向外发送 BPDU 报文,目的是防止环路
  • 边缘端口如果收到 BPDU 报文,会失去边缘端口特性,变为普通接口,有可能造成根桥被抢占
  • 边缘端口一般使用在连接非交换设备的接口上(终端、路由器等),常常配合 Bpdu-ProtectionBpdu-Filter 使用

    2)BPDU 保护(Bpdu-Protection)

    Cisco 对 Trunk 类型不生效,而华为设备 BPDU 对所有端口类型的边缘端口都生效

  • 防止边缘端口收到 BPDU 造成根桥被抢占

  • 配置 BPDU 保护后,如果从边缘端口收到 BPDU 报文,接口会进入 Errordown 状态。Errordown 状态的接口需要手工开启或配置自动恢复

    3)BPDU 过滤(Bpdu-Filter)

    避免边缘端口向外发送 BPDU 报文导致对其他网络的影响

  • BPDU 过滤可以使边缘端口不收发 BPDU 报文

    4)根保护(Root-Protection)

    为了防止收到更优的 BPDU 报文,导致根桥设备被抢占,DP接口配置

  • 当网络拓扑稳定后,如果收到更优的 BPDU 报文,会将收到该 BPDU 报文的接口置为 Discarding 状态,端口角色不切换

    5)环路保护(Loop-Protection)

    防止链路拥塞或单向通行故障导致 RP 收不到 BPDU 报文,导致设备端口变为 Forwarding 状态,造成环路

  • 如果 RP 或 AP 端口长时间收不到来自上游设备的 BPDU 报文,就会触发环路保护

    • RP 切换到 DP 并进入 Discarding 状态
    • AP 切换到 DP 并保持阻塞状态
  • 环路保护功能只能在 RP 或 AP 端口上配置生效

    6)TC 保护(TC-Protection)

    避免短时间内收到过多 TC BPDU 报文,导致频繁删除 CAM表 和 ARP表

  • 通过阈值和定时器控制对收到的 TC BPDU 报文进行处理

    • 收到的 TC BPDU 没有超过阈值,则直接处理
    • 收到的 TC BPDU 如果超过阈值,则启动定时器,在定时器到期后统一处理