BPDU字段包含的信息:編程
Protocol ID 協議ID緩存
Version STP版本(三種)spa
STP(802.1D)傳統生成樹 值爲0 RSTP(802.1W)快速生成樹 值爲2 MSTP(802.1S)多生成樹 值爲3
Message Type 消息類型(常見的兩種)3d
配置BPDU:負責創建,維護STP拓撲
TCN BPDU:傳達拓撲變動
Root ID 根橋IDcode
Cost of Path 路徑開銷blog
Bridge ID 橋ID接口
Port ID 端口ID同步
Message Age 當前消息年齡(STP每通過一臺交換機,該字段+1,同步不一樣位置的設備根橋超時)io
Max Age 最大消息年齡(超過則表明根橋故障)class
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)