華爲路由交換STP/RSTP/MSTP
STP生成樹
原理
通過發送BPDU來確拓撲結構,根據互相交互的BPDU來選舉出根橋和端口角色從而防止環路、防止廣播風暴
如圖:任意一臺交換機發出一個廣播就會促發其他交換機也發出廣播 就會陷入無限循環 而且交換機的mac地址表會不斷的變化 影響網絡的穩定和暢通
BPDU (網橋協議數據單元)
設備之間傳輸BPDU來建立生成樹結構,根據BPDU裏的信息,設備之間就可以選舉出根橋和對應的端口角色 BPDU分了兩種 分別是 配置BPDU 和 TCN BPDU
配置BPDU:採用組播地址0180-c200-0000發送 用於建立stp網絡結構,還用於維持stp的結構 兩秒發一次
TCN BPDU:下游設備檢測到網路結構發生變化後 發出的通知
根橋
根橋有且只有一個 通過比較 橋ID選舉出 橋ID=優先級+mac-小的優選 優先級默認爲32768
優先級的值只能設置爲4096的倍數,也就是步長爲4096
端口角色(指定、根、阻塞)
指定端口
設備發送配置BPDU的端口
- 根橋上的所有端口都是指定端口
- 指定端口可以存在多個
- 端口狀態爲轉發狀態
選舉:.非根橋之間通過比較 先比較開銷 再比較端口ID(優先級+端口號) 小的選爲根端口
根端口
設備接收BPDU的端口,和去往根橋的最優端口
- 跟橋上沒有根端口
- 根端口有且只有一個
- 根端口有且只有一個
- 根端口是設備去往根橋的最優路徑
- 根橋所連接的是指定端口
- 端口狀態爲轉發狀態
選舉:線比較去往根橋的開銷 小的優先—>比較上連設備橋ID小的優先—>比較對端 端口優先級小的優先—>比較對端端口號小的優先
阻塞端口
- 不是根端口也不是指定端口 那剩下的就是阻塞端口
- 阻塞端口20秒沒收到BPDU 就會發送自己的BPDU參與stp運算
- 端口狀態爲阻塞狀態(Bloking)
端口狀態
- 禁用(Disable)
DOWN狀態 - 阻塞(Bloking)
接收BPDU 不發送BPDU 不轉發用戶數據 - 偵聽(Lestening)
接收BPDU 發送BPDU 不轉發用戶數據 - 學習(Learning)
接收BPDU 發送BPDU 不轉發用戶數據 - 轉發(forwarding)
接收BPDU 發送BPDU 轉發用戶數據
當網絡結構發生變化後 一個阻塞端口轉變爲轉發狀態需要經歷50秒的時間 具體轉變過程如下
- 阻塞狀態----20秒沒收到 BPDU則認爲網絡發生變化,端口進入偵聽狀態參與STP運算
- 偵聽狀態—發送自己的BPDU 偵聽網絡中的BPDU 15秒後進入學習狀態
- 學習狀態—發送自己的BPDU 學習mac地址 15秒後進入轉發狀態
//15秒是爲了有充足的時間讓stp進行收斂,stp沒收斂完就發送用戶數據會有環路 - 轉發狀態—進行用戶數據的轉發
STP拓撲發生變化
根橋發生變化:非根橋交換機20秒後收不到來自根橋的BPDU就會進行重新計算stp 阻塞端口 進入 偵聽狀態 在進入學習狀態 在進入轉發狀態需要50秒
直連端口發生變化:阻塞端口變爲根端口計算生成樹需要兩個轉發時延15+15=30秒的時間
stp如何維持的
由根橋從指定端口發送BPDU 非根橋從根端口收到BPDU後 從指定端口向下遊轉發這個BPDU
若設備20秒沒收到BPDU就會認爲網絡結構發生變化 引起stp從新計算 根橋發送BPDU的頻率是2秒一次
RSTP快速生成樹
在stp中存在一個問題 就是收斂時間長 大概需要50秒的時間 所以需要RSTP的P/A機制(proppasl/agreement)來實現端口的快速轉變
相對於stp rstp新增了端口角色分別是Backup和Alternate
端口角色
- Backup端口:此端口作爲指定端口的備用端口,當指定端口發生故障時,此端口變爲指定端口(18秒後) 正常情況下是阻塞狀態
- Alternate端口:此端口作爲根端口的備用端口,當根端口發生故障時,此端口變爲根端口(立刻)進入轉發狀態 正常情況下是阻塞狀態
邊緣端口
不接收BPDU 不參與stp運算 可從禁用狀態直接變爲轉發狀態 但是一旦接收到BPDU就會立刻變爲普通接口 參與stp運算
// 邊緣端口通常設置在交換機和pc相連接的端口,因爲pc一旦接入交換機 交換機就會認爲網絡發生變化就會產生TCN BPDU 由於pc是經常開關的 所以會頻繁影響stp生成樹 設置爲邊緣端口就會解決這類問題
// 但是一旦邊緣端口連接到了其他交換機 那麼交換機就會向這個端口發送BPDU 一旦邊緣端口收到BPDU就會立刻變回普通的端口
端口狀態
RSTP將STP的五種端口狀態簡化爲三種,將 禁用 阻塞 偵聽合併爲禁用
禁用Discarding | 發送BPDU 接收BPDU 不轉發用戶數據 |
---|---|
學習Learning | 接收但不轉發用戶數據 構建MAC地址表 |
轉發Forwarding | 發送BPDU 接收BPDU 轉發用戶數據 |
RSTP維持
每臺設備都自主發送BPDU 不需要收到根橋的BPDU才觸發發送 頻率爲2秒一次
在stp中 20秒沒收到來自根橋的BPDU就會認爲鏈路出現故障 所以設備發現故障存在的時間需要20秒
而在RSTP中若三個hello time(6秒)沒收到上游鄰居發送的BPDU就會認爲鄰居出現故障 加快了設備發現故障的時間
故障處理
設備檢測網絡結構發生變化後會觸發TCN BPDU 釋放故障端口的MAC表項
設備收到TCN BPDU 後 釋放除了收到TCN的其他接口的MAC表項
保護機制
-
根保護
保護根橋的指定端口不會因爲網絡問題而改變端口角色
開啓根保護後 根橋的指定端口收到更優的BPDU就會進入偵聽狀態 若一段時間沒收到這個BPDU了就會變回轉發狀態
//根保護有利於保護根橋保持不變 不會變成非根交換機
//根保護只能配置在指定端口上 -
BPDU保護
開啓BPDU保護後 邊緣端口收到BPDU後會立刻關閉 需手動開啓或自動開啓
//邊緣端口是鏈接pc機的 正常情況下PC是不會發送BPDU的 若有人故意攻擊BPDU保護就起到了防止有人攻擊從而引起的網絡震盪 -
環路保護
端口如果長時間沒收到來自上游的BPDU 就會進入丟棄狀態 避免網絡中出現環路情況(光纖)
MSTP多生成樹
無論是stp還是RSTP所有網絡設備都是公用同一顆生成樹 這樣就會造成某些鏈路沒有數據在走,某些鏈路的傳輸壓力過大的問題
當lsw1 0/0/3接口被選爲阻塞端口後 所有數據都通過左邊鏈路 而右邊鏈路卻沒有任何用戶數據流通
造成左邊轉發壓力過大 右邊浪費帶寬的情況
MSTP多生成樹可以根據vlan來劃分 在一個網絡結構裏可以存在多個生成樹
如圖:
vlan3 的數據走左邊 vlan2的數據走右邊 這樣就可以實現負載均衡
小白菜 發現錯誤的請多多指導