STP 生成樹:防止網路自我毀滅
第 2 層沒有 TTL。一個迴圈就能在幾秒內癱瘓整個網路。
約 16 分鐘
為什麼需要 STP
第 3 層封包有 TTL,繞太多圈會被丟掉。但第 2 層訊框沒有 TTL —— 一個廣播訊框進到有迴圈的拓樸裡,會永遠繞下去,而且每經過一台交換器就被複製一份。
| 迴圈造成的三大災難 | 說明 |
|---|---|
| 廣播風暴 Broadcast Storm | 訊框無限繞行並倍增,瞬間吃光頻寬與 CPU |
| MAC 表震盪 MAC Flapping | 同一個 MAC 一下從這個埠來、一下從那個埠來,表被改爛 |
| 重複訊框 Duplicate Frames | 同一份資料收到很多次,上層應用出錯 |
STP(Spanning Tree Protocol,生成樹協定,IEEE 802.1D)的解法是:偵測迴圈,然後把多餘的路徑邏輯上封鎖(blocking),形成一棵沒有迴圈的樹。主線斷了才把備援線打開。
STP 的三步驟選舉
- 選出根橋接器(Root Bridge):整個網路只有一台,所有路徑計算都以它為原點。
- 每台非根交換器選一個根埠(Root Port):離根橋最近的那個埠。
- 每個網段選一個指定埠(Designated Port):剩下的埠變成封鎖埠。
橋接器 ID(Bridge ID)怎麼比
┌──────────┬──────────────┬────────────────┐
│ 優先權 │ 擴充系統 ID │ MAC 位址 │
│ 4 bit │ 12 bit │ 48 bit │
└──────────┴──────────────┴────────────────┘
優先權預設 32768,只能是 4096 的倍數
擴充系統 ID = VLAN 編號
例:VLAN 10 上的預設優先權
32768 + 10 = 32778
比較規則:
1. 先比優先權,小的贏
2. 優先權相同 → 比 MAC 位址,小的贏路徑成本(Path Cost)
| 頻寬 | 舊版成本 (802.1D) | 長格式成本 |
|---|---|---|
| 10 Mbps | 100 | 2,000,000 |
| 100 Mbps | 19 | 200,000 |
| 1 Gbps | 4 | 20,000 |
| 10 Gbps | 2 | 2,000 |
埠狀態
| 狀態 | 學 MAC | 轉送資料 | 停留時間 |
|---|---|---|---|
| Blocking | 否 | 否 | 20 秒(Max Age) |
| Listening | 否 | 否 | 15 秒(Forward Delay) |
| Learning | 是 | 否 | 15 秒(Forward Delay) |
| Forwarding | 是 | 是 | 穩定狀態 |
| Disabled | 否 | 否 | 被關閉 |
STP 的各種版本
| 版本 | 標準 | 每個 VLAN 一棵樹? | 收斂速度 |
|---|---|---|---|
| STP | 802.1D | 否(全網一棵) | 慢(50 秒) |
| PVST+ | Cisco 專有 | 是 | 慢 |
| RSTP | 802.1w | 否 | 快(數秒) |
| Rapid PVST+ | Cisco 專有 | 是 | 快(Cisco 預設) |
| MST | 802.1s | 多個 VLAN 對應一棵 | 快 |
! 查看某個 VLAN 的生成樹
SW1# show spanning-tree vlan 10
VLAN0010
Spanning tree enabled protocol rstp
Root ID Priority 24586
Address 000a.1111.1111
This bridge is the root
Interface Role Sts Cost Prio.Nbr Type
Gi0/1 Desg FWD 4 128.1 P2p
Gi0/2 Desg FWD 4 128.2 P2p
! 指定成為根橋(最乾淨的做法,會自動設成夠低的優先權)
SW1(config)# spanning-tree vlan 10 root primary
! 或手動指定優先權(必須是 4096 的倍數)
SW1(config)# spanning-tree vlan 10 priority 4096
! 接終端的埠:跳過等待直接進 Forwarding
SW1(config)# interface fa0/1
SW1(config-if)# spanning-tree portfast
! 保護:這個埠如果收到 BPDU 就直接關掉
SW1(config-if)# spanning-tree bpduguard enable埠角色:先分清楚角色與狀態
很多人把「角色(role)」和「狀態(state)」混為一談。角色是這個埠在拓樸中的職務,狀態是它現在能不能轉送資料。兩者是不同維度。
| 角色 | 英文 | 一台交換器上有幾個 | 意義 |
|---|---|---|---|
| 根埠 | Root Port (RP) | 每台非根交換器剛好一個 | 到 Root Bridge 累計成本最低的埠 |
| 指定埠 | Designated Port (DP) | 每個網段剛好一個 | 該網段上負責轉送的埠 |
| 非指定埠 | Non-Designated / Blocking | 其餘 | 被封鎖以打破迴圈 |
[SW1] ← Root Bridge
DP DP
/ \
成本4/ \成本4
/ \
RP RP
[SW2]────────────[SW3]
DP 成本4 BLK
↑
SW2 到 Root 成本 4,SW3 也是 4
→ 平手,比 Bridge ID:SW2 較小
→ SW2 這端是 DP,SW3 那端被封鎖
推導順序:
① SW1 是 Root → 它的埠全是 DP
② SW2、SW3 各選一個 RP(往 Root 最近的)
③ SW2-SW3 這個網段選一個 DP,另一端 Blocking立即測驗這一節(4 題)