1. 故事
按「下一步」一步一步看。每一步都有一位角色出場,解釋自己正在做什麼。
序幕:溫習一下
第 1 步/共 15 步
八爪送貨的規則
還記得我嗎?我是 Switch(交換器)。我看 Frame(訊框)上的 MAC Address 送貨:認識收件人就只送到那個 Port;不認識,或者收件人是 Broadcast(廣播),就複製送到所有其他 Port。
動畫文字版(全部步驟)
- 序幕:溫習一下
- 八爪送貨的規則 八爪:還記得我嗎?我是 Switch(交換器)。我看 Frame(訊框)上的 MAC Address 送貨:認識收件人就只送到那個 Port;不認識,或者收件人是 Broadcast(廣播),就複製送到所有其他 Port。
- 詳細內容:網絡小故事 1「八爪上班第一天」
- 第一幕:多一條線的煩惱
- LAN 長大了 八爪:家中裝置越來越多,於是多了兩部 Switch:S1 在中間,S3 接著手機。現在由阿麥到手機,要經過 S2 → S1 → S3。
- 只有一條路的危險 阿麥:糟糕!S1 和 S3 之間的網線被扯斷了。我和手機之間只有這一條路,現在完全斷了聯絡。
- 只有一條路,一斷就全斷:Single Point of Failure(單點故障)
- 多拉一條後備線 八爪:修好網線後,我們在 S2 和 S3 之間多拉一條後備線。這叫 Redundancy(備援):一條路斷了,還有另一條可以走。
- 咦,小比在兜圈? 小比:阿麥發出一個 Broadcast。S2 把我複製送去 S1 和 S3,他們又再複製、再轉送……三條線圍成一個圈,我的副本在圈裡不停地轉!
- 三部 Switch 連成一個圈:Switching Loop(交換環路)
- Frame 沒有「壽命」 小比:Router 轉送的 IP 封包有一個 TTL(存活時間),每經過一部 Router 就減 1,減到 0 就會被丟棄。可是 Switch 之間轉送的 Frame 沒有這個「壽命」,所以會一直轉,永遠停不下來。
- Broadcast Storm! 八爪:每轉到一部 Switch,副本又會再被複製。很快網線就被塞滿,我們三個忙得團團轉,阿麥連網頁也開不到。這就是 Broadcast Storm(廣播風暴)。
- 另一個後果:同一個 MAC Address 一時在這個 Port、一時在那個 Port 出現,MAC Address Table 亂成一團
- 第二幕:Spanning Tree 出場
- 阿帕教授的好主意 阿帕教授:在很久很久以前……其實是 1985 年,工程師 Radia Perlman 想出一個方法:網線全部保留,但暫時封起一個 Port,讓網絡變成一棵沒有圈的「樹」。這就是 Spanning Tree Protocol(生成樹協定),簡稱 STP。
- 第一步:選出 Root Bridge 八爪:我們互相交換一種小信件,叫 BPDU(橋接協定資料單元),上面寫著自己的 Bridge ID(橋接器識別碼)。Bridge ID 最小的 Switch,當選 Root Bridge(根橋),做這棵樹的樹根。
- Switch 的前身叫 Bridge(橋接器),所以 STP 的名詞都用 Bridge
- Bridge ID = 優先值 + MAC Address
- S1:32768 +
…:A1← 最小,當選! - S2:32768 +
…:A2 - S3:32768 +
…:A3 - 優先值一樣,就比較 MAC Address
- 第二步:找出 Root Port 八爪:其他 Switch 各自找出「去樹根最近」的 Port,叫 Root Port(根連接埠)。S2 和 S3 都直接連著 S1,這條路的 Path Cost(路徑成本)最低,所以都選了通往 S1 的 Port。
- 每條 1 Gbps 網線的 Path Cost:4
- S2 → S1:4(最低)
- S2 → S3 → S1:4 + 4 = 8
- 第三步:每條線選一個 Designated Port 八爪:每一條網線上,只由一個 Port 負責轉送 Frame,叫 Designated Port(指定連接埠)。Root Bridge 的 Port 全部都是。S2 和 S3 之間那條線,兩邊去樹根的成本一樣,就比較 Bridge ID:S2 較小,所以 S2 那一邊當選。
- S2 → 樹根:4 S3 → 樹根:4(打和)
- 比 Bridge ID:
…:A2比…:A3小 → S2 當選
- 第四步:剩下的 Port 暫停 八爪:既不是 Root Port、也不是 Designated Port 的 Port,就會被 Blocked(阻斷):它不轉送 Frame,但仍然會收聽 BPDU。S3 通往 S2 的 Port 就這樣暫停了。
- DP = Designated Port:負責轉送
- RP = Root Port:通往樹根
- BP = Blocked Port:暫停轉送,只收聽 BPDU
- 沒有圈了! 小比:阿麥再發一次 Broadcast。這次我的副本走到被 Blocked 的 Port 就停下來,每部裝置只收到一份,再也不會兜圈。
- 後備線上場 八爪:如果 S1 和 S3 之間的網線再次斷掉,S3 會發現通往樹根的路斷了,於是把原本 Blocked 的 Port 重新打開,改由 S2 那條後備線通往樹根。
- 打開前,Port 要先經過 Listening(聆聽)和 Learning(學習)兩個階段,確保不會再出現環路
- 傳統 STP:大約 30 至 50 秒才恢復
- 新一代 RSTP(快速生成樹協定):通常幾秒內就恢復
- 總結 八爪:有了 STP,所有網線都可以保留:平時用一棵沒有圈的樹來送貨;一條線斷了,後備線就會頂上。多一條線更可靠,也不會引起風暴。
- Switch 用 Learning、Flooding、Forwarding 在 LAN 裡送貨
- 有環路時,Broadcast 會變成 Broadcast Storm
- STP:選 Root Bridge → 找 Root Port → 選 Designated Port → Block 其餘 Port
2. 問題在哪裡
家中有三部 Switch(交換器):S2、S1、S3。手機經樓上的 Access Point(無線基地台)接到 S3。阿麥到手機只有一條路:S2 → S1 → S3。S1 和 S3 之間的網線一斷,兩邊就完全斷了聯絡。這種「一斷就全斷」的弱點,叫 Single Point of Failure(單點故障)。
於是大家在 S2 和 S3 之間多拉一條後備線,這叫 Redundancy(備援)。可是三條線剛好圍成一個圈,形成 Switching Loop(交換環路):
- 阿麥發出一個 Broadcast(廣播)。
- Switch 的規矩是把 Broadcast 複製,送到所有其他 Port(連接埠)。
- 副本沿著圈的兩個方向不停轉,每到一部 Switch 又被複製給所有裝置;新的 Broadcast 不斷加入,圈中的 Frame(訊框)越積越多。
- Frame 沒有 TTL(存活時間),永遠不會自己消失。
幾秒之內,網線就被塞滿,這就是 Broadcast Storm(廣播風暴)。同一個 MAC Address(硬體位址)又會一時在這個 Port、一時在那個 Port 出現,MAC Address Table(MAC 位址表)亂成一團。整個 LAN(區域網絡)就這樣癱瘓了。
3. 網絡怎樣解決
想像一個公園有很多條小路,繞來繞去連成幾個圈。遊客很容易兜圈迷路。管理員於是在幾個路口放下「暫停通行」的牌子:小路全部保留,但走起來再也沒有圈;某條路壞了,就把牌子移開。
Spanning Tree Protocol(生成樹協定),簡稱 STP,就是 Switch 之間的「公園管理員」。Switch 互相交換 BPDU(橋接協定資料單元)訊息,自動選出一棵沒有圈的「樹」,把多餘的 Port 暫時 Blocked(阻斷),變成 Blocked Port(阻斷連接埠)。線路出事時,被暫停的 Port 會重新打開。
4. 看深一點
一點歷史
1985 年,工程師 Radia Perlman 設計了 STP 的演算法。她還為它寫了一首小詩,大意是讚美「一棵沒有環路、又能連接每個 LAN 的樹」。後來 IEEE(電機電子工程師學會)把它訂成標準 802.1D。
Switch 的前身叫 Bridge(橋接器),所以 STP 的名詞都用「Bridge」,例如 Root Bridge(根橋)。
第一步:選出 Root Bridge(根橋)
每部 Switch 都有一個 Bridge ID(橋接器識別碼):
Bridge ID = Bridge Priority(優先值)+ MAC Address
S1:32768 + 00:00:5E:00:53:A1 ← 最小,當選 Root Bridge
S2:32768 + 00:00:5E:00:53:A2
S3:32768 + 00:00:5E:00:53:A3
先比優先值,小的勝出;優先值一樣,再比 MAC Address。優先值預設是 32768,可以按 4096 的倍數調整。網絡管理員通常會把最核心、最強壯的 Switch 優先值調低,確保它當選,而不是交由 MAC Address「抽籤」。
第二步:找出 Root Port(根連接埠)
每部不是樹根的 Switch,都要找出「回家最近」的一個 Port。遠近用 Path Cost(路徑成本)計算,網線越快,成本越低:
| 網線速度 | Path Cost(802.1D 傳統數值) |
|---|---|
| 10 Mbps | 100 |
| 100 Mbps | 19 |
| 1 Gbps | 4 |
| 10 Gbps | 2 |
以 S2 為例:直接去 S1 是 4;經 S3 再去 S1 是 4 + 4 = 8。所以 S2 通往 S1 的 Port 就是 Root Port。S3 也一樣。
第三步:每條線選一個 Designated Port(指定連接埠)
每條網線上,只由一個 Port 負責轉送 Frame:
- Root Bridge S1 的 Port 全部都是 Designated Port。
- S2 和 S3 之間那條線,兩邊去樹根的成本都是 4,打和。這時比 Bridge ID:
…:A2比…:A3小,所以 S2 那一邊當選。
第四步:其餘的 Port 設為 Blocked
S3 通往 S2 的 Port 既不是 Root Port,也不是 Designated Port,於是被 Blocked。它不轉送一般 Frame,也不學習 MAC Address,但會繼續收聽 BPDU。最後的結果:
| 網線 | 這一端 | 那一端 |
|---|---|---|
| S1 — S2 | S1:DP | S2:RP |
| S1 — S3 | S1:DP | S3:RP |
| S2 — S3 | S2:DP | S3:BP(Blocked) |
後備線怎樣上場?
Root Bridge 預設每 2 秒發出一次 BPDU。當 S1 和 S3 之間的網線斷了,S3 發現通往樹根的路斷了,就把原本 Blocked 的 Port 改為新的 Root Port。
不過傳統 STP 很小心,Port 要依次經過幾個狀態,才可以開始轉送:
Blocking(阻斷)→ Listening(聆聽)15 秒 → Learning(學習)15 秒 → Forwarding(轉發)
Listening 階段先確認不會再形成環路;Learning 階段先學好 MAC Address,減少 Flooding(泛洪)。如果 Switch 要等舊資料過期(Max Age,預設 20 秒)才發現問題,總共大約要 50 秒;直接發現網線斷了,也要約 30 秒。
新一代:RSTP(快速生成樹協定)
30 至 50 秒對今天的網絡太慢了。於是 IEEE 在 2001 年推出 802.1w,即 RSTP(快速生成樹協定),全名 Rapid Spanning Tree Protocol。它預先準備好後備的 Port,Switch 之間又會直接互相確認,通常幾秒內、甚至不足一秒就恢復。今天大部分 Switch 預設用的都是 RSTP 或它的延伸版本。
5. 動手試試
任務:選出你的 Root Bridge
有四部 Switch,它們的 Bridge ID 如下:
| Switch | 優先值 | MAC Address |
|---|---|---|
| 甲 | 32768 | 00:00:5E:00:53:B2 |
| 乙 | 32768 | 00:00:5E:00:53:B1 |
| 丙 | 28672 | 00:00:5E:00:53:B9 |
| 丁 | 32768 | 00:00:5E:00:53:B0 |
- 誰會當選 Root Bridge?(答案:丙。它的優先值最小,根本不用比 MAC Address。)
- 如果丙關機了,誰會接任?(答案:丁。其餘三部優先值一樣,再比 MAC Address,
…:B0最小。) - 想一想:為什麼管理員要特意調低核心 Switch 的優先值?
小互動
STP 的正確次序
三部 Switch 剛剛開機。把 STP 的四個步驟排好次序。
- 每條網線選出一個 Designated Port
- 交換 BPDU,選出 Bridge ID 最小的 Root Bridge
- 其餘的 Port 設為 Blocked,只收聽 BPDU
- 每部非樹根的 Switch 選出通往樹根成本最低的 Root Port
6. 比喻的極限
- Blocked Port 不是「拔走網線」。 網線一直接著,燈號可能仍然亮著;Port 只是不轉送一般 Frame,並且繼續收聽 BPDU。
- 小比不會真的「兜圈兜到累」。 Frame 在環路中不會變舊或變慢,因為它沒有 TTL,每個 Broadcast 都會永遠兜轉;新的 Broadcast 又不斷加入,流量越積越多,直到網線和 Switch 都塞滿為止。
- 樹根不一定在「中間」。 Root Bridge 只看 Bridge ID 選出,如果管理員不調整優先值,可能選中一部角落裡的舊 Switch,令路線繞遠路。
- STP 不會令網絡變快。 它只是讓後備線平時休息。想兩條線一起工作,要用下一個故事的方法。
- 動畫中的恢復時間縮短了。 傳統 STP 真的要等 30 至 50 秒,這段時間裡經那條路的資料都會中斷。
7. 小測驗
8. 重點筆記
- 多拉後備線是 Redundancy(備援),但 Switch 之間連成一個圈,就會形成 Switching Loop(交換環路)。
- Frame 沒有 TTL,每個 Broadcast 在環路中都會永遠兜轉,新的又不斷加入,流量越積越多,變成 Broadcast Storm(廣播風暴),令整個 LAN 癱瘓。
- STP(生成樹協定)四個步驟:選 Root Bridge → 找 Root Port → 每條線選 Designated Port → Block 其餘 Port。
- Blocked Port 不轉送 Frame,但繼續收聽 BPDU;線路斷了,它會重新打開,讓後備線頂上。
- 傳統 STP 要約 30 至 50 秒才恢復;新一代 RSTP(快速生成樹協定)通常幾秒內就完成。
延伸閱讀
STP 讓我們可以放心多拉後備線,而不怕風暴。可是後備線平時只能「坐冷板凳」,有點浪費。有沒有方法讓兩條線一起工作,又不會形成環路?下一個故事,八爪會把兩條網線捆成一條:Link Aggregation(鏈路聚合)。