?一、環路的危害
1.現象
鏈路指示燈快速閃爍
MAC表震蕩:交換機頻繁修改MAC地址表 → 轉發失效。
2.環路危害造成的影響
- 鏈路堵塞
- 主機操作系統響應遲緩
- 二層交換機管理緩慢
- 沖擊網關設備的CPU
三、STP的作用
1.STP基本原理
STP即生成樹協議,它通過阻斷冗余鏈路來消除橋接網絡中可能存在的路徑環路。在一個網絡中,當存在多條路徑連接不同的網絡設備(如交換機,圖中的 SWA、SWB、SWC )時,可能會形成物理環路,這會導致廣播風暴、多幀復制等問題,影響網絡的正常運行。STP 通過在交換機之間交換 BPDU(Bridge Protocol Data Unit,橋協議數據單元),來計算出一個無環的網絡拓撲結構,將某些端口設置為阻塞狀態,從而避免網絡環路的產生。
--怎么實現冗余鏈路的?
交換機通過交互?BPDU(網橋協議數據單元),比較報文中的?參數,依次選舉出:
根網橋(全網唯一)
根端口(每臺非根橋上唯一)
指定端口(每個網段唯一)
未被選中的冗余端口將進入?阻塞狀態,從而消除二層環路。
2. STP的作用
- 冗余鏈路:在網絡中,冗余鏈路是為了提高網絡的可靠性而設置的備份鏈路。比如圖中被阻塞的鏈路,在正常情況下雖然不傳輸數據,但當網絡中的其他鏈路出現故障時,它就可以發揮作用。
- 故障恢復:當 當前正在使用的路徑發生故障時,STP 會檢測到鏈路狀態的變化,然后激活之前被阻塞的冗余備份鏈路,恢復網絡的連通性。例如,如果 SWA 和 SWC 之間的鏈路出現故障,原本被阻塞的 SWB 的 E0/20 端口可能會被重新激活,使得網絡流量可以通過其他路徑傳輸,保證網絡的正常通信 。
3.STP報文

四、STP的工作原理
1. 基礎邏輯:BPDU 交互
核心是交換機間通過交互 BPDU(橋協議數據單元 ),完成拓撲收斂,消除環路。
BPDU 里包含網橋優先級、MAC 地址、路徑開銷等參數,交換機,依靠這些參數,確定網絡角色(根網橋、端口角色 ),構建無環拓撲。
?2.BPDU參數
2.1網橋ID
由交換機的優先級和MAC地址組成。網橋優先級取值范圍必須在0-65535之中,同時也必須是4.96的倍數。
2.2端口ID
由發送端口的優先級與端口號組成。端口優先級取值范圍0-255(默認128),必須是16的倍數。
2.3路徑開銷?
3. 角色選舉
基于 BPDU 交互,STP 會依次完成以下關鍵動作,最終讓網絡無環且保留冗余:
3.1 選根網橋
- 規則:網橋優先級(默認 32768 )+ MAC 地址,數值越小越優先。
- 作用:選 1 臺 “主交換機” 當根,所有交換機以它為中心計算拓撲,避免多中心導致環路。
3.2 非根交換機選根端口
- 規則:非根交換機上,選 “到根網橋路徑開銷最小” 的端口(路徑開銷由鏈路帶寬等決定,帶寬越小開銷越大 )。
- 作用:每臺非根交換機只留 1 條最優 “上聯根網橋” 的通道,避免同一設備多條路徑回根引發環路。
3.3 每個網段選指定端口
- 規則:每個物理網段(如兩臺交換機之間的鏈路 )里,選 “到根網橋路徑開銷最小” 的端口(網段內所有設備對比,最終 1 個端口當選 )。
當每個交換機的根端口選舉出來之后,切換視角,以鏈路為視角。鏈路兩邊的BPDU進行評比,選舉角色。
1.如果兩個端口中,一個是根端口,另一個就是指定端口
2.如果這個端口是根網橋上的端口,那么就一定是指定端口
3.如果另一端連接的是主機,那么這個端口一定時指定端口
4.看鏈路連接的兩個端口中的BPDU,比較BPDU的優劣,優的一方作為指定端口,劣的一方作為堵塞端口。
- 作用:保證每個網段只有 1 個 “轉發端口” 向根網橋傳遞流量,防止網段內環路。
3.4 阻塞冗余端口(非根非指定端口)
- 規則:既不是根端口、也不是指定端口的端口,進入阻塞(Blocking )狀態,不轉發用戶數據(僅收 BPDU 維持拓撲 )。
- 作用:直接 “切斷” 冗余鏈路的轉發功能,從物理拓撲上消除環路;但鏈路仍保留,故障時可自動激活。
3.4?逐個網段分析(以圖為例)
(1)LANA 網段(連 SWA 和 SWB )
- SWA 的端口:到根網橋(自己)的路徑開銷是?0(根網橋自己的開銷為 0 ),所以 SWA 在 LANA 網段的端口總開銷 = 0 + LANA 鏈路開銷(4 )= 4 。
- SWB 的端口:到根網橋的總路徑開銷是?4(SWB → LANA → SWA ,開銷 4 ),所以 SWB 在 LANA 網段的端口總開銷 = 4 + LANA 鏈路開銷(4 )= 8 。
比較兩個端口的總開銷:4(SWA 端口) < 8(SWB 端口)
?→?SWA 在 LANA 網段的端口被選為指定端口。
(2)LANB 網段(連 SWA 和 SWC )
- SWA 的端口:到根網橋開銷 0 ,總開銷 = 0 + LANB 鏈路開銷(4 )= 4 。
- SWC 的端口:到根網橋的總路徑開銷是?4(SWC → LANB → SWA ,開銷 4 ),總開銷 = 4 + LANB 鏈路開銷(4 )= 8 。
比較后:4(SWA 端口) < 8(SWC 端口)
?→?SWA 在 LANB 網段的端口被選為指定端口。
(3)LANC 網段(連 SWB 和 SWC )
- SWB 的端口:到根網橋的總路徑開銷是?4(SWB → LANA → SWA ),所以 SWB 在 LANC 網段的端口總開銷 = 4 + LANC 鏈路開銷(4 )= 8 。
- SWC 的端口:到根網橋的總路徑開銷是?4(SWC → LANB → SWA ),所以 SWC 在 LANC 網段的端口總開銷 = 4 + LANC 鏈路開銷(4 )= 8 。
此時,路徑開銷相同,需要比?橋 ID:
- SWB 的橋 ID:32768 + 00e0-fc41-4259
- SWC 的橋 ID:32768 + 00e0-fc41-43b9
比較 MAC 地址(十六進制):00e0-fc41-4259 < 00e0-fc41-43b9
?→?SWB 的橋 ID 更小?→?SWB 在 LANC 網段的端口被選為指定端口,SWC 對應的端口成為?Alternate Port
(備用端口,阻塞狀態 )。
(4)LAND 網段(連 SWB )
這個網段只有 SWB 一個交換機的端口(因為 LAND 是末端網段,沒有其他交換機 )。根據規則,單個交換機的端口自動成為指定端口?→ SWB 在 LAND 網段的端口是指定端口。
(5)LANE 網段(連 SWC )
同理,LANE 是末端網段,只有 SWC 的端口 →?SWC 在 LANE 網段的端口自動成為指定端口。
?綜合分析:
4.STP協議報文
五、STP解決臨時環路問題
1 .STP端口狀態
STP 為了避免網絡環路,給交換機端口定義了?5 種狀態,不同狀態下端口的行為(收發 BPDU、學習 MAC、轉發數據)不同,目的是有序控制端口角色,逐步放開數據轉發,防止環路:
端口狀態 | 中文描述 | 轉發數據幀 | 學習 MAC 地址表 | 參與生成樹計算 | 處理 BPDU |
---|---|---|---|---|---|
Disabled | 端口沒有啟用 | ? | ? | ? | ? |
Blocking | 阻塞狀態 | ? | ? | ? | 接收并處理 |
Listening | 偵聽狀態 | ? | ? | ? | 接收并發送 |
Learning | 學習狀態 | ? | ? | ? | 接收并發送 |
Forwarding | 轉發狀態 | ? | ? | ? | 接收并發送 |
2. 時間計時器
STP 中的計時器用于控制 BPDU 的傳播和端口狀態的轉換,進一步防止臨時環路。
Hello Timer(Hello 時間)
作用:根網橋周期性發送 “配置 BPDU” 的時間間隔,默認 2 秒。
?觸發:非根網橋靠收根橋的 BPDU 維持狀態,若收不到,會觸發拓撲重新計算。
Forward Delay(轉發時延)
作用:端口狀態遷移的 “過渡時間”,默認 15 秒,控制 “監聽→學習→轉發” 的等待時長。
- ?端口從監聽狀態到學習狀態,需要等待一個 Forward Delay 時長,即 15 秒;
- ?從學習狀態到轉發狀態 ,又需要等待一個 Forward Delay 時長,同樣是 15 秒。
- ?所以,端口從監聽狀態最終進入轉發狀態,經歷了兩次 Forward Delay 的等待, 總計 30 秒。
Message Age(消息老化時間)
作用:記錄 “配置 BPDU 從根網橋生成后,到當前交換機的時間”,每經過一個交換機,Message Age 會累加(默認每跳 + 1 )。
網橋在轉發 BPDU 時,會根據 Message Age 判斷 BPDU 的時效性。如果 Message Age 超過 Max Message Age,網橋會認為該 BPDU 已經過期,不再使用這個 BPDU 中的信息,可能會導致端口狀態的重新計算和遷移。例如,當網絡中的鏈路出現故障,BPDU 的傳遞路徑發生改變,Message Age 可能會增加,若超過限制,端口可能會重新進入阻塞狀態,重新參與生成樹計算 。
Max Message Age(最大老化時間)
作用:規定了配置 BPDU 存活的最大時間,默認 20 秒(10 個 Hello 周期) ,用于保證 BPDU 信息的有效性。
與端口狀態遷移聯系:非根網橋若超過 20 秒沒收到新 BPDU,會認為根橋可能故障,觸發重新選舉根橋和拓撲計算。
3.STP 的傳統缺陷—— 拓撲變化時收斂慢?
4.拓撲發生改變處理機制
4.1觸發條件
前提:拓撲變化觸發
情況 1:網絡里新接了一臺交換機,或者原本阻塞的端口(Blocking)被激活,變成 Forwarding 狀態(能轉發流量了 )。
- 條件細化:
不僅要 “有端口進入 Forwarding”,還得滿足?“該交換機至少有一個指定端口(Designated Port)”?。- 解釋:“指定端口” 是 STP 里每個網段(鏈路)中負責轉發 BPDU 的端口,有指定端口說明交換機在網絡里 “有正式角色”,不是孤立的。如果新激活的端口所在交換機是 “孤網”(沒指定端口),就算端口狀態變,也不用發 TCN(發了也沒人處理 )。
情況 2:有端口 “丟失活躍鏈路”(從 Forwarding/Learning 轉 Blocking)
- 場景:常見的如鏈路中斷(網線被拔、設備斷電 )、端口被手動關閉,或者 STP 重新計算后,端口從 Forwarding(轉發流量 )或 Learning(學習 MAC 地址 )狀態,被迫變成 Blocking(阻塞,不轉發流量,防止環路 )。
- 本質:原本能轉發 / 學習的路徑失效了,網絡拓撲實際 “斷了一塊”,需要通知全網更新。
?4.2 TCN BPDU
在STP中,只有根網橋才能發送配置BPDU,下面的拓撲發生改變,根網橋是不知道的。所以需要定義一個新的BPDU用于通知根網橋——TCN BPDU。又為了保證可靠性,就有了TCA BPDU。上游交換機根網橋一旦收到TCN BPDU,那么就會發送TC置為的BPDU,通知各個網橋更改MAC表的老化時間由300s改為15s。
4.3 TCA 及TC置為的BPDU
4.5.總結
??1.流程分步解析
1. (綠虛線,TCN 消息)SWD → SWC:上報拓撲變化
SWD 發現鏈路中斷,符合?TCN拓撲變化通知,于是向自己的指定上游交換機(SWC )?發?TCN BPDU?,說 “拓撲變啦,快處理” 。
2. (紅虛線,TCA 消息)SWC → SWD:確認收到 TCN
SWC 收到 SWD 的 TCN 后,需要回復?TCA拓撲變化確認,告訴 SWD“我收到消息了,你別一直發” 。這一步是 “確認機制”,避免 TCN 消息一直刷屏 。
3. (綠虛線,TCN 消息)SWC → SWA:繼續上報給根橋
SWC 除了回 TCA 給 SWD ,還要把 TCN 消息繼續往根橋(SWA )?轉發(因為拓撲變化必須讓根橋知道,根橋才能發全網更新指令 ),同樣走 “逐級上報” 邏輯 。
4. (紫實線,TCA 消息)SWA → SWB、SWA → SWC:根橋回 TCA
根橋 SWA 收到 SWC 轉發的 TCN 后,會向所有非根橋交換機(這里是 SWB、SWC )?發?帶 TCA 置位的配置 BPDU?,確認 “我收到拓撲變化消息了” 。這一步是根橋對全網的 “確認反饋” 。
5. (紫實線,TC 置位 BPDU )SWA → SWB、SWA → SWC:根橋發全網更新指令
根橋 SWA 確認拓撲變化后,開始發?帶 TC(Topology Change,拓撲變化執行)置位的 BPDU?,告訴所有交換機:“拓撲變了,趕緊把 MAC 地址表老化時間從默認 300 秒改成 15 秒” 。這樣交換機能快速老化舊表項,重新學習新拓撲下的 MAC 映射,保證流量轉發正確 。
6. (隱含邏輯)全網更新 MAC 表
所有收到?TC 置位 BPDU?的交換機(SWB、SWC、SWD 等 ),會加速老化自己的 MAC 地址表。比如原本主機 A 走 SWB→SWD 的路徑,鏈路斷了后,新路徑可能變 SWB→SWC→SWD ,加速老化能讓交換機更快 “忘掉” 舊路徑,學習新路徑的 MAC 映射,網絡重新收斂 。
當拓撲變化(如鏈路故障)時:
檢測變化的交換機向根網橋發送 TCN? BPDU。
上游交換機收到TCN BPDU會給下游交換機回復一個TCA BPDU,同時將TCN BPDU傳給根網橋。
根橋收到后廣播 TC? BPDU,通知全網:
全網橋收到后,縮短MAC表老化時間(默認300秒 → 15秒) 快速清除舊路徑的MAC地址。?
5.網絡拓撲變化--STP網絡收斂
在生成樹協議中,直接收斂和間接收斂是網絡拓撲發生變化后,生成樹重新計算并達到穩定狀態的兩種不同方式。
5.1直接收斂
SW3 的阻塞端口能直接收到根網橋(SW1)的 BPDU,直接切換為根端口,經 “監聽→學習→轉發”(2 個 Forward Delay,默認 15 秒 / 個,共 30 秒 )完成收斂。?
5.2 間接收斂
SW2 收不到根網橋 BPDU,“自封” 根網橋,收斂時間50秒。
將檢測拓撲變化的最長時間(Max Message Age)和端口狀態遷移的總時間相加,就得到了間接收斂的大致時長:20 秒(Max Message Age) + 30 秒(兩次 Forward Delay) = 50 秒。
5.3 直接收斂vs間接收斂
若故障導致交換機失去到達根橋的唯一路徑或需要重新選舉根端口,則一定是間接收斂!
圖中,SW2的根端口發生故障,指定端口對面又是堵塞端口,所以沒有路能通往根橋了,就是間接收斂。
六、STP 的缺點
1.收斂時間長(主動收斂,被動收斂,拓撲改變TCN,MAC表老化)
2.處理拓撲改變機制不靈活(主機頻繁上下線時,網絡會纏上大量TCN)
1.?收斂速度極慢(30-50秒)
根源:
Blocking→Listening→Learning→Forwarding
?強制等待?50秒(20秒 Max Age + 15秒×2 Forward Delay)。
?2.處理機制不靈活
TCN機制低效:
拓撲變更需逐級上報至根橋 → 延遲高,且根橋單點瓶頸。