RSTP 與 STP 保護機制
傳統 STP 收斂要 50 秒,現代網路完全無法接受。這節講改良版與各種保險絲。
約 14 分鐘
RSTP:把 50 秒縮到幾秒
RSTP(Rapid Spanning Tree Protocol,802.1w)的核心改變是:不再被動等待計時器到期,而是主動與鄰居交握確認。拓樸變動時,交換器直接問對方「我可以轉送了嗎」,得到同意就立刻切換。
| 比較 | STP (802.1D) | RSTP (802.1w) |
|---|---|---|
| 收斂時間 | 50 秒 | 1~6 秒 |
| 埠狀態數量 | 5 種 | 3 種 |
| 誰送 BPDU | 只有 Root 產生,其他轉發 | 每台自己產生 |
| BPDU 逾時 | 10 次 Hello(20 秒) | 3 次 Hello(6 秒) |
| 新增的埠角色 | — | Alternate、Backup |
埠狀態的對應
| STP 狀態 | RSTP 狀態 | 學 MAC? | 轉送? |
|---|---|---|---|
| Blocking | Discarding | 否 | 否 |
| Listening | Discarding | 否 | 否 |
| Learning | Learning | 是 | 否 |
| Forwarding | Forwarding | 是 | 是 |
| Disabled | Discarding | 否 | 否 |
RSTP 新增的兩個埠角色
| 角色 | 備援誰 | 切換速度 |
|---|---|---|
| Alternate(替代埠) | 備援根埠 —— 提供通往 Root 的另一條路 | 幾乎瞬間 |
| Backup(備份埠) | 備援指定埠 —— 同一網段上的第二個埠 | 幾乎瞬間 |
鏈路類型
| 類型 | 判斷依據 | RSTP 能否快速收斂 |
|---|---|---|
| Point-to-Point | 全雙工 | 可以(用交握機制) |
| Shared | 半雙工 | 不行,退回傳統計時器 |
| Edge | 設了 PortFast 的埠 | 立即轉送 |
四種保護機制
| 機制 | 防什麼 | 觸發時的行為 | 用在哪 |
|---|---|---|---|
| BPDU Guard | 終端埠被插上交換器 | 埠進入 err-disabled | 搭配 PortFast 的存取埠 |
| Root Guard | 不該當 Root 的設備搶走 Root | 埠變成 root-inconsistent(阻擋) | 朝向下游交換器的埠 |
| Loop Guard | 單向鏈路造成 BPDU 消失而誤開埠 | 埠變成 loop-inconsistent | 根埠與替代埠 |
| BPDU Filter | 直接忽略 BPDU | 不收不送 BPDU | 危險,一般不建議 |
! 啟用 Rapid PVST+(Cisco 交換器的建議值)
SW1(config)# spanning-tree mode rapid-pvst
! 全域套用到所有 access 埠(比逐埠設定省事又不易漏)
SW1(config)# spanning-tree portfast default
SW1(config)# spanning-tree portfast bpduguard default
! 個別介面設定
SW1(config-if)# spanning-tree portfast
SW1(config-if)# spanning-tree bpduguard enable
SW1(config-if)# spanning-tree guard root
SW1(config-if)# spanning-tree guard loop
! err-disabled 自動恢復(否則要手動 shut / no shut)
SW1(config)# errdisable recovery cause bpduguard
SW1(config)# errdisable recovery cause psecure-violation
SW1(config)# errdisable recovery interval 300
SW1# show spanning-tree summary
SW1# show spanning-tree inconsistentports
SW1# show errdisable recoverySW2# show spanning-tree vlan 10
VLAN0010
Spanning tree enabled protocol rstp ← 跑的是 RSTP
Root ID Priority 24586
Address 000a.1111.1111
Cost 4 ← 我到 Root 的累計成本
Port 1 (GigabitEthernet0/1) ← 我的根埠是這個
Bridge ID Priority 32778 (priority 32768 sys-id-ext 10)
Address 000a.2222.2222
Interface Role Sts Cost Prio.Nbr Type
---------------- ---- --- --------- -------- --------
Gi0/1 Root FWD 4 128.1 P2p
Gi0/2 Desg FWD 4 128.2 P2p
Gi0/3 Altn BLK 4 128.3 P2p
Fa0/5 Desg FWD 19 128.5 P2p Edge- 「This bridge is the root」沒出現 → 這台不是 Root,上面的 Root ID 是別人的。
- Role 欄:Root(根埠)、Desg(指定埠)、Altn(替代埠)、Back(備份埠)。
- Sts 欄:FWD(轉送)、BLK(封鎖)、LRN(學習中)。
- Type 欄的 P2p 代表點對點(全雙工),Edge 代表設了 PortFast。看到
Shr就要檢查是不是變成半雙工了。 - sys-id-ext 就是 VLAN 編號 —— 32768 + 10 = 32778,這解釋了為什麼各 VLAN 的優先權不同。
實驗 4-2:操控 Root Bridge 並觀察埠角色
目標:親手把 Root 換到指定的交換器上,並看懂埠角色如何隨之改變。
- 拉三台 2960 交換器,接成三角形(SW1-SW2、SW2-SW3、SW1-SW3),每條都用交叉線。
show spanning-tree vlan 1在三台上各看一次,找出目前誰是 Root(優先權都一樣,所以是 MAC 最小的贏)。- 記下每個埠的 Role 與 Sts,畫出目前哪一條被封鎖。
- 在你想指定的那台下
spanning-tree vlan 1 root primary,再看一次三台的輸出。 - 觀察:Root 換人之後,哪些埠的角色改變了?被封鎖的那條線有沒有換位置?
- 把 Root 那台的上行埠
shutdown,觀察備援路徑多久接手(RSTP 應該幾秒內完成)。
怎麼確認做對了:
重點觀察三件事:① Root 上的埠全部是 Desg。② 每台非根交換器剛好一個 Root 埠。③ 被封鎖的埠在成本較差或 Bridge ID 較大的那一端。最後一步能讓你實際感受 RSTP 與傳統 STP 的收斂差距 —— 用
重點觀察三件事:① Root 上的埠全部是 Desg。② 每台非根交換器剛好一個 Root 埠。③ 被封鎖的埠在成本較差或 Bridge ID 較大的那一端。最後一步能讓你實際感受 RSTP 與傳統 STP 的收斂差距 —— 用
spanning-tree mode pvst 切回舊模式再測一次,會等到你懷疑人生。立即測驗這一節(3 題)