一,STP要解決的問題是什么?
為了保障核心層交換機的高可用。一般做雙上行鏈路,用作冗余備份。
但可能出現環路問題。會造成MCA地址表的不穩定,以及更嚴重的廣播風暴問題。
用戶在遇到廣播風暴后會感覺網絡越來越卡並在最后斷網。廣播風暴也會使設備無法被遠程登陸
此時就要用生成樹來解決二層環路問題,STP會在邏輯上阻塞一條鏈路,也可以在另外某條鏈路故障時打開,用作備用鏈路。
二,STP的過程?
1 在一個廣播域中選擇一個根橋設備。橋ID最小的成為根橋。
也可以修改優先級來實現,要求優先級修改為4096的倍數。
橋ID=優先級+MAC地址
優先級默認32768
2 在每個非根交換機上選舉一個根端口(RootPort)。到根橋設備的開銷cost最小的端口為根端口RP
華為交換機默認1G鏈路開銷是20000
當一個設備的兩個端口到達根橋設備的cost相同時,則比較對端設備的橋ID,選擇小的做根端口
例如在下圖中,根橋設備為SW1,此時SW4的兩個端口到根橋的開銷一樣,那么就比較左右端口的對端設備,也就是SW2和SW3的橋ID大小,選擇小的做RP

還有種特殊情況:

SW4的1口和2口,該怎么選RP呢?
此時就需要比較對端的端口ID(Port ID) ,選擇小的。端口ID(PID)=優先級+端口編號
優先級默認128.
3 每條鏈路選擇一個指定端口(Designated Port)。鏈路上有根端口時,選非根端口作為指定端口(DP)。
如果沒有,則比較各自到達根橋的開銷cost。所以根橋上的端口一定是指定端口,因為到達根橋設備的cost為0.
如果cost相同,則比較各自的橋ID(BID),選擇小的為指定端口(DP)
4 其他端口為阻塞端口(AP)。
三 怎么去直觀的理解這個過程?
發波對沖,這個波就是BPDU
BPDU:橋協議數據單元,一種二層的組播,每2s發送一次,20s超時
由DP發向RP
四 ,五種端口狀態是什么?
Disabled:關閉狀態
Blocking: 阻塞狀態
Forwarding:轉發狀態
Listening:監聽狀態 監聽拓撲變化TC(Topology Change),如發生拓撲變化,則需要重新選舉 15s延時
Learning:學習狀態 重新選舉之后進入學習狀態,先學習MAC表,避免太多泛洪 15s延時
最后進入轉發狀態
五,阻塞端口什么時候能打開?
端口變化是秒變的(比如AP端口變DP端口),但狀態變化需要時間(比如從Listening變道Forwarding)
一個阻塞端口被重選舉為根端口時,需要先進入監聽狀態穩定15s,然后再進入學習狀態穩定15s
之后進入轉發狀態。也即原RP故障后,原AP需要30s之后才能打開使用。
舉例:當故障點發生在C設備的RP端口時,阻塞端口(C設備的G0/0/2口)此時被選舉為新的根端口(RP)。從故障發生到新RP端口投入使用需要30s的時間。

而當故障點發生在B設備上的RP時,B發給C的BPDU不再是根橋BPDU,C等待根橋BPDU等待了20s沒等到,於是發生超時。超時后C就知道B出故障了。於是進行重新選舉,此時阻塞端口被選舉為指定端口(DP)。這種情況下從故障到轉發一共需要50s。

網絡架構:核心層 匯聚層 接入層
根橋放在核心層
流量一定都經過根設備嗎?
不一定
一 ,STP的不足點在哪里?
STP從初始狀態到完全收斂至少經過30s,時間太長。
STP為了破環,避免臨時環路,必須等待足夠長的時間(即確保BPDU能同步發送到全網各節點)確保全網的端口狀態全部確定,才能進入轉發。
在STP進入轉發前還需根據收到的用戶流量構建MAC地址表,仍需等待計時器超時才能進入轉發。
還有種情況如下圖:STP中連接終端的鏈路也要進行生成樹計算且鏈路進入轉發時間需要等待兩個Forword Delay。
而事實上,該端口下鏈接的只要是終端設備就不會出現環路,即沒有必要進行STP計算和等待計時器超時。

另外 ,存在拓撲變更機制
先由變更點朝根橋方向發送TCN消息,收到該消息的上有交換機就會回復TCA消息進行確認;最后TCN消息到達根橋后,再由根橋發送TC消息通知刪除橋MAC地址表項,機制復雜,效率低下。
*配置BPDU 一般情況都會出現
*TCN (Topology Change Notification)(拓撲更改通知 )BPDU 在拓撲變更時才出現

STP的Flags位只有Bit7位和Bit0位有用
其中,TCA是拓撲變更確認
