BPDU字段包含的信息:
Protocol ID 協議ID
Version STP版本(三種)
STP(802.1D)傳統生成樹 值為0 RSTP(802.1W)快速生成樹 值為2 MSTP(802.1S)多生成樹 值為3
Message Type 消息類型(常見的兩種)
配置BPDU:負責建立,維護STP拓撲
TCN BPDU:傳達拓撲變更
Root ID 根橋ID
Cost of Path 路徑開銷
Bridge ID 橋ID
Port ID 端口ID
Message Age 當前消息年齡(STP每經過一台交換機,該字段+1,同步不同位置的設備根橋超時)
Max Age 最大消息年齡(超過則代表根橋故障)
Hello Time 問候時間(根橋通過不斷發送STP維持自己的地位,Hello time 是發送的間隔時間)
Forward Delay 端口從listening -> learning 或 learning -> forwarding 的轉態需要時間
STP 選舉流程:
1.選舉根橋 2.非根交換機選舉根端口 3.每個線路選舉指定端口 4.阻塞非根,非指定端口
選舉根橋,根端口,指定端口,阻塞端口都以下面的規則來選,都是越小越好
這些信息在BPDU中都有。
比較規則:
1.bridge ID: 優先級(默認32768) + MAC地址 2.Cost路徑開銷: 根據接口帶寬比例計算 3.port ID: 優先級 (默認128)+ 端口號
根橋選舉:
1.選根橋:每個交換機假設自己為根,互相發送BPUD報文,然后通過比較規則競選根橋
2.選根端口:每個交換機根據接收由根橋發送的BPDU中的開銷來選舉根端口(最優路徑),交換機接收累加開銷,轉發不累加
3.選指定端口:每條鏈路根據比較規則來選出指定端口,每條鏈路必須有指定端口。
4.選阻塞端口:除了根端口,指定端口,剩下的為阻塞端口
下面是華為設備STP 的配置BPDU
從這里可以分析出,該端口的端口號是2,據開銷20000可知千兆口,所以為G0/0/2
很明顯該端口所屬的交換機不是根橋,並且是根橋的鄰居。BPDU類型是配置BPDU。
下面看下當某條鏈路斷開時,發生了拓撲變化的BPDU報文
比如有一台交換機,一個端口為根端口,另一個為阻塞端口。如果根端口被關閉了
那么阻塞端口會發送一個拓撲變更BPDU的報文給相鄰的交換機,這個BPDU類型為:TCN
而相鄰的交換機會向這個阻塞端口發送一個確認拓撲變更的BPDU,這樣阻塞端口就知道自己的消息被收到並將會傳達。
這個BPDU類型為 TCA,同時相鄰的交換機就會把繼續把 TCN 向根端口方向轉發,之后也會收到上層交換機發來的TCA確認接收報文
如果根橋收到了這個由阻塞端口傳來的TCN,便會下發拓撲變更BPDU其類型為TC,每台收到此TC報文的交換機都會將自己的MAC緩存表刷新或減低過期時間。
然后再向下傳達這個TC報文。
看下下面的拓撲圖
在交換機 LSW5中 GE0/0/1原本為阻塞狀態,GE0/0/0為根端口
但是有一天GE0/0/2端口down掉了
如果沒有上述的拓撲變更BPDU的話,那么會發生如下情況
client6 發送 數據 給 client4
緩存表里client6的mac地址對應的卻是GE0/0/2的接口(已經down掉了)
這樣導致client6無法與外界通信,除非要等mac緩存表的過期時間300s也就是5min
這個時間實在太長了,解決的辦法就是發送拓撲變更給根橋,根橋同意變更后向下發送
TC BPDU,所有收到此報文的交換機都把MAC緩存表刷新或減少過期時間來避免收斂速度慢
與根橋的直連鏈路發生故障
LSW8交換機上的G0/0/1為根端口,G0/0/2為指定端口,
G0/0/1發生故障后,G0/0/2會的端口角色會編程根端口
當是狀態要從 listening->learning->forwarding需要30秒的時間
與根橋的非直連鏈路發生故障
在LSW8中GE 0/0/1為根端口,因為HUB集線器與根設備的線down掉了
所以LSW8 會在Max Age 的時間內不能收到根橋發送的BPDU,於是他會以
自身為根橋向周圍發送 BPDU,當LSW9收到兩邊的BPDU則會對比,發現LSW7
才適合做根橋,於是又會通知LSW8,這樣GE0/0/3就會轉變成根端口。
所用的時間為50s(MAX Age +Forward Delay)