目录

前言
传统 STP 的问题
Port Role
  Root Port
  Designated Port
  Alternate Port
  Backup Port
Port State
Link Type
  Edge Port
  Point to Point Non-edge Port
  Shared Non-edge Port
Synchronization Process
BPDU
Topology Change

前言

Rapid Spanning Tree Protocol (RSTP 或 802.1w) 是传统 Spanning Tree Protocol (STP 或 802.1D) 的进化版本,是 Cisco 专有协定,RSTP 在 Spanning Tree Algorithm 并没有大改变,方向仍是选出 Root Switch,再按 Cost 选出 Root Port、Designated Port 等去避免 Loop。但传统 802.1D 的收敛时间 (Convergence Time) 太慢,当有 Topology 改变,整个网络需时 30 秒或以上才能回复稳定状态,这是现代网络不能接受的。RSTP 的出现就是为了缩短收敛时间。

传统 STP 的问题

所以,30 秒真的有那麽重要吗?试想像网络是用来提供證券交易服务 (所谓秒秒钟几廿万上落),或者用作紧急电话通讯,30 秒的 Down Time 可能足够让你失去工作。本文假设读者已完全了解传统 STP 的运作,如信心不够,可先到这里温习温习。

传统 STP 存在以下几个问题:

Listening 及 Learning 时间

STP 预设 Listening 和 Learning 为 15 秒 (Forward Delay),Port 由 Down 至 Up 一共等待 30 秒。而 RSTP 则使用 Synchronization 的概念,Switch 并非被动地等待 Root Switch 传来的 BPDU 讯息在判断 Topology,取而代之的是主动去跟相邻的 Switch 沟通,尽快把网络 Topology 传开去。这就能省却那 30 秒的被动学习时间,稍後详述。

Max Age 时间

STP 的预设 Max Age 为 20 秒,如 Topology 改变或其他原因令 BPDU 不能到达 Blocking Port,这 Port 要到 20 秒才被唤醒进入 Listening。问题一样,太慢!RSTP 缩短为 3 个 Hello Time 的长度,即 6 秒。

Uplinkfast 及 Backbonefast

STP 的进阶功能 Uplinkfast 及 Backbonefast 机制已成 RSTP 内建功能。(如想了解 Uplinkfast 及 Backbonefast,请到这里)

Topology Change

STP 在 Port 发生 Up/Down 时会产生 Topology Change 把整个网络中 Switch 的 MAC Address Table 里失效的纪录清掉。可惜清除时间太慢。而 RSTP 则改善了 Topology Change 的机制,并缩短清除 Mac Address 的时间,稍後详述。

要达成以上几项进化,RSTP 在 STP 的基础上作出了两项修改,包括 Port Role 及 Port State,另外又加入了 Link type 的概念,以下逐一说明。为了让我们容易适应,RSTP 源用了大部份 STP 的指令,这算 Cisco 贴心,由 STP 改用 RSTP 所需的工夫不多,就一句 spanning-tree mode rapid-pvst 即可。

使用 STP 时,会见到 Protocol 一行颢示为 ieee,代表正在使用传统 STP。

SW#show spanning-tree

VLAN0001
  Spanning tree enabled protocol ieee
  Root ID    Priority    24577
             Address     0016.468f.xxxx
             This bridge is the root
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec

  Bridge ID  Priority    24577  (priority 24576 sys-id-ext 1)
             Address     0016.468f.xxxx
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
             Aging Time 300

转成 RSTP 後,则会颢示 rstp。

SW(config)#spanning-tree mode rapid-pvst
SW(config)#exit
SW#show spanning-tree

VLAN0001
  Spanning tree enabled protocol rstp
  Root ID    Priority    24577
             Address     0016.468f.xxxx
             This bridge is the root
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec

  Bridge ID  Priority    24577  (priority 24576 sys-id-ext 1)
             Address     0016.468f.xxxx
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
             Aging Time 300

如果 Switch 支缓 RSTP 的话,请把所有 Switch 都转为 RSTP,以发挥最佳效果。然而,RSTP 可以向下支缓 STP,如果遇到另一端不支缓 RSTP 的话,会自动转为 STP 运作,用 show spanning-tree 指令时会有显示。

SW#show spanning-tree

VLAN0001
  Spanning tree enabled protocol rstp
  Root ID    Priority    24577
             Address     0016.468f.xxxx
             This bridge is the root
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec

  Bridge ID  Priority    24577  (priority 24576 sys-id-ext 1)
             Address     0016.468f.xxxx
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
             Aging Time 300

Interface        Role Sts Cost      Prio.Nbr Type
---------------- ---- --- --------- -------- --------------------------------
Fa1/0/1          Desg FWD 19        128.3    P2p
Fa1/0/2          Desg FWD 19        128.4    P2p Peer(STP)
Fa1/0/3          Desg FWD 19        128.5    P2p
Fa1/0/14         Desg FWD 19        128.16   P2p Peer(STP)
Fa1/0/15         Desg FWD 19        128.17   P2p Peer(STP)
Fa1/0/16         Desg FWD 19        128.18   P2p Peer(STP)

Port Role

RSTP 保留 Root Port 和 Designated Port 的 设计,选择方法与 STP 相同。另外加进了 Alternate Port 和 Backup Port,以便加快收敛时间 (Convergence Time)。

Root Port

Switch 上最接近 (即 Root Cost 最小) Root Switch 的 Port 成为 Root Port。每只 Switch 只会有一个 Root Port。

Designated Port

在没有成为 Root Port 的情况下,网段里最接近 (即 Root Cost 最小) Root Switch 的 Port 成为 Designated Port。每个网段只会有一个 Designated Port。

在 STP 中,没被选中成为 Root Port 或 Designated Port 的 Port 只能成为 Non-Designated Port,但在 RSTP 中则会成为 Alternate Port 或 Backup Port。

Alternate Port

没有成为 Root Port 或 Designated Port 的 Port 如收到较佳 BPDU (对方是 DP) 来自其他 Switch,就会成为 Alternate Port,Alternate Port 为 Switch 提供通往 Root Switch 的後备路径。以下图为例,SW2 与 SW3 之间的网段,由於 SW2 收到的 BPDU 是来自 SW3,SW2 判断这 Port 是另一个到 Root Switch 的路径。

rstp

Backup Port

没有成为 Root Port 或 Designated Port 的 Port 如收到较佳 BPDU (对方是 DP) 来自自己,则会成为 Backup Port,Backup Port 为该网段提供通往 Root Switch 的後备路径。如在同一网段有 Alternate Port 和 Backup Port,当 Designated Port 掛掉时,一般情况下,Backup Port 会优先补上成为新的 Designated Port。这看以下例子,SW3 会收到来自自己的较佳 BPDU,因而成为 Backup Port。

rstp

Port State

RSTP 在 Port State 上也有进化,把传统 STP 中的 Disabled、Blocking 和 Listening 统一变成 Discarding。而 Learning 与 Forwarding 则维持不变。换句话说,Root Port 和 Designated Port 会被设成 Forwarding,而 Alternate Port 和 Backup Port 会被设成 Discarding。当 Alternate Port 和 Backup Port 有一天被唤醒的话,它会先进入 Learning (非常短暂的时间),然後进入 Forwarding。

STP Port StateRSTP Port State
Disabled Discarding
Blocking Discarding
Listening Discarding
Learning Learning
Forwarding Forwarding

Link Type

Link Type 是 RSTP 新增的概念,RSTP 把 Link 分为 Edge Port,Point to Point Non-edge Port 及 Shared Non-edge Port 叁种。

Edge Port

即是接驳 Host 的 Port,亦即承传了在 STP 中的 Portfast,Edge Port 设定容许该 Port 由 Discarding 直接进入 Forwarding,并假设不会引致 Loop 而不产生 TCN (Topology Change Notification) 讯息,这就避免了 Switch 清空 Mac Address Table。Edge Port 需要用指令去设定,RSTP 源用了 spanning-tree portfast 这个指令,设定完成後可用 show spanning-tree 去验證。

SW(config)#int fastEthernet 1/0/3
SW(config-if)#spanning-tree portfast
SW(config-if)#end
SW#show spanning-tree

VLAN0001
  Spanning tree enabled protocol rstp
  Root ID    Priority    24577
             Address     0016.468f.xxxx
             This bridge is the root
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec

  Bridge ID  Priority    24577  (priority 24576 sys-id-ext 1)
             Address     0016.468f.xxxx
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
             Aging Time 300

Interface        Role Sts Cost      Prio.Nbr Type
---------------- ---- --- --------- -------- --------------------------------
Fa1/0/1          Desg FWD 19        128.3    P2p
Fa1/0/2          Desg FWD 19        128.4    Shr
Fa1/0/3          Desg FWD 19        128.5    Edge P2p

Point to Point Non-edge Port

RSTP 会把 Full Duplex Port 定性为 Point to Point Non-edge Port,并会用 RSTP 与对方进行沟通 (Synchronization Process)。

Shared Non-edge Port

而 Half Duplex Port 则会成为 Shared Non-edge Port,只能用传统 STP 方法沟通。不过 Half Duplex Port 在现今网络世界已经比较难找到了,除非网络中仍有使用旧式的 HUB。

show spanning-tree 可以查看 Link Type。P2P 就昰 Point to Point Non-edge Port,而 Shr 则是 Shared Non-edge Port。

SW#show spanning-tree

VLAN0001
  Spanning tree enabled protocol rstp
  Root ID    Priority    24577
             Address     0016.468f.xxxx
             This bridge is the root
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec

  Bridge ID  Priority    24577  (priority 24576 sys-id-ext 1)
             Address     0016.468f.xxxx
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
             Aging Time 300

Interface        Role Sts Cost      Prio.Nbr Type
---------------- ---- --- --------- -------- --------------------------------
Fa1/0/1          Desg FWD 19        128.3    P2p
Fa1/0/2          Desg FWD 19        128.4    Shr
Fa1/0/3          Desg FWD 19        128.5    Edge P2p

我们也可以用指令 spanning-tree link-type   去强行设定。

SW(config-if)#spanning-tree link-type ?
  point-to-point  Consider the interface as point-to-point
  shared          Consider the interface as shared

SW(config-if)#spanning-tree link-type shared

Synchronization Process

我们不断说 RSTP 很快很快,究竟 RSTP 有什麽魔法可以在短时间内让网络稳定下来?答案就是 Synchronization Process。每当有新的 Switch 加入网络,就会发起 Synchronization,流程如下。

  1. 新加入的 Switch 假设自己是 Root Switch 并向相邻的 Switch (Point to Point Non-edge Port) 发出 Proposal,希望对方同意自己成为 Root Switch。此时,双方的 Port 都是 Discarding 状态。

  2. 收到 Proposal 的 Switch 会检视这位新成员是否比现时的 Root Switch 更理想 (比较方法跟 STP 一样,不在此重覆),然後回覆同意或是不同意。

    1. 如果不同意新成员成为 Root Switch,老实告诉对方。新成员无耐接受,并把 Port 定性为 Root Port 并立刻完成 Learning 并进入 Forwarding。

    2. 如果接受新成员成为 Root Switch,要做的事就多了:

      • 因为出现了新的 Root Switch,Topology 将有无法预期的改变,所以先把自己正在 Forwarding 的 Non-edge Port 转成 Discarding 去避免 Loop。

      • 回应新成员接受对方成为 Root Switch,并把连接这个新成员的 Port 变成 Root Port,并立刻完成 Learning 并进入 Forwarding。

      • 同一时间向其他所有的 Point to Point Non-edge Port 发出 Proposal,把消息传开去,并重覆以上 Synchronization Process。

单看文字始终较解理解,我尝试把流程漫画化,以下是新 Switch 无法成为 Root Switch 的程况。

rstp

rstp

rstp

以下是新 Switch 能够成为 Root Switch 的流程。

rstp

rstp

rstp

rstp

rstp

rstp

看 SW2 与 SW3 谁先完成 SW1 的 Synchronization,谁就先发 Proposal。

rstp

rstp

rstp

BPDU

在传统 STP 中,BPDU 只会由 Root Switch 每 2 秒 (Hello Time) 发放一次,然後用一个传一个的方式,散播到网络上所有 Switch。而在 RSTP 中每只 Switch 都会发放 BPDU,同样每 2 秒发放一次,RSTP 中的 BPDU 有 Keepalive 的作用,如果 Root Port 过了 6 秒钟都收不到对放的 BPDU (3 个 Hello Time),则会作出以下应变:

  • 如有 Alternate Port,立刻把 Alternate Port 升级成为 Root Port

  • 如没有 Alternate Port,则把自己成为 Root Switch 启动 Synchronization Process

Topology Change

当网络的 Topology 改变,无论 STP 或 RSTP 都会触发 Topology Change,提示网络里所有 Switch 要清掉 Mac Address Table 里可能已经失效的纪录。然而,STP 的机制有个缺点就是慢!RSTP 作出了一些改变,请看下表比较。

 STPRSTP
如何触发 Topology Change
1. 当一个 Port 转到 Forwarding 状态
2. 当一个 Listening 或 Forwarding 的 Port 转到 Blocking 或 Disabled
当 Non-edge Port 转到 Forwarding
如何通知其他 Switch 发 TCN 通知 Root Switch,再由 Root Switch 通知其他 Switch 透过 BPDU 直接通知相邻 Switch,以一个传一个的方式传开去
收到 Topology Change 的相应动作 缩短 Mac Address Table 的 Timeout 时间,等待失效的纪录自然死亡。 除了接收到 Topology Change 那个 Port 的纪录外(因为从发生 Topology Change 的 Port 得到的纪录肯定是準确的),把 Mac Address Table 里其他的纪录都即时杀掉,宁枉勿纵。
清除失效纪录所需时间 最少需要 1 个 Forward Delay 的时间 (15秒),这还未计算 TCN 传到 Root Switch 再传到所有 Switch 的时间。 由 Topology Change 发生直至传遍整个网络,需时 = 2秒 x [Topology Change Switch 与最边缘 Switch 的 Hop Count]