冗餘鏈路出現的背景
由於公司對網絡的可靠性的要求,大部分公司都會增加額外的交換機,防止在某臺交換機出現故障時造成網絡的無法使用的情況,例如形成如下圖的拓撲的結構。
假設 W 和 X 交換中的一臺出現故障後,流量依然可以通過 Y 和 Z 到達 B。
雖然說這樣的結構可以很好的解決,網絡可靠性的問題。但由於這三臺交換機構成了一個環路,同時也帶了一些額外的問題:
廣播風暴:
這裏假設 W 不知道 B 的 MAC 地址,會採用泛洪的操作。而此時由於環狀的結構,廣播數據包會在四臺交換機之間來回的傳輸,佔用大量的帶寬。
多幀拷貝:
假設 W 不知道 B 的 MAC 地址,此時會泛洪發給 Y 和 X,假設 Y 和 X 知道 B 的 MAC 地址,此時會將數據包以單播的形式發給 Z,而 Z 會將兩個單播數據包傳給 B. 造成傳輸冗餘的數據幀。
MAC 表不穩定:
同樣假設 W 不知道 B 的 MAC,採用泛洪。同時 X,Y,Z 也不知道 B 的 MAC。此時 W 廣播後,X 和 Y 會在 MAC 表中記錄 A 對應 MAC 在 1 號口,然後繼續泛洪給 Z. Z 按照時間順序假設在 MAC 表中記錄的是來自 Y 的數據幀,此時記錄的是 2 號口。而由於 Z 也不知道 B 的 MAC,還會廣播。此時 Y 和 X 也會收到,此時 MAC 表按照時間順序,又會改爲另一個 2 號口,進而在 1 和 2 口之間來回抖動。
解決環路帶來的問題
冷備份
在連接線纜時,僅僅連接一條線路。當這條鏈路出現問題時,由管理員手動切換至另一根線路。
熱備份
線纜正常連接,在接口上進行配置,不允許該接口接受和發送任何設備。通過 STP (生成樹)實現。
STP
STP 協議會先進行計算選擇一個樹根,然後將樹根上的一個接口進行阻塞,進而無法構成環路。
STP 選舉規則 - 802.1D
在所有設備啓動時,所有交換機都認爲自己是跟,然後廣播發送 BPDU,然後在 BPDU 中的某些參數選擇一個真正的樹根。
- 在整個拓撲上,選擇一臺根交換機。
- 對每臺非根交換機上,選擇一個根端口(RP)。
- 在每條網線上(每個網絡),選一個指定端口(DP)。
- 餘下端口爲 BP,被阻塞的端口。
BPDU 比較參數,按照如下的順序進行比較:
- 根橋 ID(優先級,根的 MC 地址)
- COST(發送者橋 ID 到根橋的距離)
- 發送者橋 ID(優先級,橋 MAC 地址)
- 發送者端口 ID(接口號)
例子 1
以下拓撲爲例,模擬下選擇 BPDU 的過程,假設 MAC 地址大小爲:SW1 < SW2 < SW2.
首先判斷根橋 ID,如果沒有配置過,默認都是一樣的。接着會比較 MAC 地址,選出最小的 MAC 作爲根橋, 也就是 SW1.
在選出根後,根會每 2s 發送一次 BPDU,然後非根交換機轉發 BPDU。
比較 COST,SW1 作爲根會向 SW2 和 SW3 轉發 BPDU,而 SW2 和 SW3 同時也會轉發收到的 BPDU 給對方。這裏假設都是百兆鏈路。
這裏以 SW2 爲視角,會收到 SW1 發送的 BPDU 和 SW3 轉發 SW3 的 BPDU. 對於 SW2 的 1 號接口來說 COST 爲 0(發送者爲 SW1,跟橋 ID 爲 SW1),對於 2 號口來說,COST 爲 19(發送者 SW3,根橋 ID 爲 SW1).
100 M -> COST = 19
10 M -> COST = 100
進而 0 小於 19,1 號口爲成爲 RP.
同理,在 SW3 的視角,收到 SW1 和 SW2 轉發 SW1 的BPDU. 選擇 2 號口爲 RP.
下面接着選擇 DP:
先站在 SW1 和 SW2 這條網段的視角,在該網段可以接收道 SW1 直接發送的 BPDU (記爲 SW1 1 號口)和 經過 SW2 和 SW3 轉發過來的 BPDU(記爲 SW2 1號口). 這裏比較下兩者的 BPDU.
- 首先比較根橋 ID,都是 SW1,一樣,繼續比較。
- 比較 COST,
- SW1 1 號口,根橋 ID 和 發送者 ID 都是 SW1,所以 COST 爲 0
- SW2 1 號口,根橋 ID 爲 SW1,發送者爲 SW3, 經過 SW2. 所以 COST=19 +19=38
- 0 < 19 , SW1 1 號口爲成爲 DP.
站在 SW1 和 SW3 這段網絡上,同理:
- 首先比較根橋 ID,都是 SW1,一樣,繼續比較。
- 比較 COST:
- SW1 2 號口,根橋 ID 和 發送者 ID 都是 SW1,所以 COST 爲 0
- SW3 2 號口,根橋 ID 爲 SW1,發送者爲 SW2, 經過 SW3. 所以 COST=19 +19=38
- 0 < 19, SW3 2 號口爲 DP.
最後站在 SW2 和 SW3 這條網段上:
- 首先比較根橋 ID,都是 SW1,一樣,繼續比較。
- 比較 COST:
- SW2 2 號口,發送者爲 SW2 2 號口,根橋 ID 爲 SW1 COST = 19
- SW3 1 號口,發送者爲 SW3 1 號口,根橋 ID 爲 SW1 COST = 19
- 相等繼續比較。
- 比較發送者橋 ID 大小:
- SW2 的 MAC 小於 SW3 的 MAC
- 所以選 SW2 的 2 號口爲 DP.
最終,餘下接口 SW3 的 1 號口爲阻塞接口。
總結一下概念:
RP:到根交換機最近的非根交換機接口
DP:在交換機中的連線上,到達根交換機最近的接口
例子2
首先假設 SW1 MAC 小於 SW2,所以跟爲 SW1.
選擇 RP:
以 SW2 的視角,比較過程如下:
- 根橋 ID 都是 SW1,一樣,繼續比較.
- 比較 COST,對於 3 和 4 兩個口來說,發送者和根橋ID都一樣,相等。
- 比較發送者 ID,都是 SW2 本身 一樣。
- 比較發送者接口 ID,1 < 2. 所以 3 爲 RP。
選擇 DP:
以 1,3 連線的視角:
- 根橋 ID 一致。
- 比較 COST, 選擇 1 號口。COST=0, 另一個爲 19. s所以 1 爲 RP.
以 2,4 連線的視角:
- 根橋 ID 一致。
- 比較 COST, 同理選擇 2 號口,爲 RP.
最後 4 號口爲 BLOCK。
這裏假設 1,3 口爲 10M,2,4 爲百兆鏈路。可以發現如果按照上述的規則,4 號口還是一樣會被阻塞。但這不符合常理,因爲 2,4 口的帶寬明顯更大。
所以這裏的 COST 比較還需要調整,對於選擇 DP 不需要改變。
但對於選擇 RP 的過程,COST 的值需要加上入接口的 COST。
也就是說,在 1,3 連線時。COST 的比較值爲:1 號口的 COST 爲 0 + 100. 2 號口的 COST 爲 0 +19. 所以選擇爲 4 號口。
STP 類型
上面選舉的過程是比較基礎的 STP 版本,802.1D. 對應在處理 VLAN 有一定的缺點,就是由於在拓撲中只有一顆樹,在設置了 VLAN 的交換機上通信,有時 VLAN 通信的過程並不是選擇的最優路徑。
後來,又開發了出許多新的版本:
- PVST+: 針對 VLAN,每個 VLAN 一個 STP.
- 802.1s(MSTP):多實例生成樹,優化生成樹的數量。
- 802.1w(RSTP):STP 計算速度更快,收斂速度很快
- Rapid PVST+:優化了 PVST+ 的生成樹速度
STP 狀態
在交換機接口打開時,進入到 Listening 狀態,進行 STP 的計算。在選舉時,無法轉發數據。
當 Listening 狀態結束後,進入 Learning 狀態,學習 MAC 地址,建立 MAC 地址表。
之後進入 Forwarding 狀態,正常轉發數據。
如果是被 STP 阻塞的端口進入 Blocking 狀態,不能轉發數據,但可以接受 BPDU. 當在 20s 內沒有收到 BPDU 時,會進入 Forwarding 狀態,開始轉發數據。