1.狀態切換
序號 | 狀態切換 | 切換原因 |
① | to Disabled | 管理員shutdown端口或端口失效 |
② | to Blocking | 當前端口放棄Root Port或Designated Port角色,且經過選舉後被阻塞 |
③ | Disabled to Listening | 管理員激活端口或端口由失效恢復,此時端口爲Designated Port,開始發送BPDU |
④ | Blocking to Listening | 在Blocking State,通過BPDU信息,當前端口決定成爲Root Port或Designated Port |
⑤ | Listening to Learning & Learning to Forwarding | Forward Delay計時器超時 |
⑥ | Blocking to Forwarding | 配置了STP增強特性 |
注意:
當端口由Disabled to Listening時,能夠轉發BPDU,可以認爲是DesignatedPort
該端口此後如果能夠收到BPDU,則將根據BPDU決定成爲RootPort,或將端口狀態轉爲Blocking,或繼續維持DesignatedPort角色
2.狀態維護機制
2.1 Best BPDU
(1)何爲Best BPDU
Spanning Tree拓撲穩定時,交換機所瞭解到的最優BPDU參數
注意:
實際上交換機收到BPDU時,與本地STP數據庫中信息進行比較,這裏稱爲BestBPDU是爲了更加形象,易於描述
(2)Best BPDU參數
①RID
是當前Spanning Tree拓撲中,根橋的BID
②Root Path Cost
是當前交換機(Root Port)到根橋的開銷
③BID
每個Segment內Designated Bridge的BID(每個端口有所不同)
④PID
每個Segment內Designated Bridge的PID(每個端口有所不同)
(3)作用
用於維護Spanning Tree信息
2.2 維護機制
交換機端口收到BPDU時,便將其與該端口對應的Best BPDU相比較
(1)參數一致
刷新保持計時器
(2)收到的BPDU參數更優
端口角色、狀態將會發生改變
(3)本地Best BPDU更優
①Designated Port
發送BPDU,使遠端與本地保持一致
②Root Port或Blocking Port
由於這兩種端口都沒有發送BPDU的能力,因此簡單忽略該BPDU
2.3 Inferior BPDU
是指不如本地Best BPDU的消息
2.4 Better(Superior) BPDU
是指比本地保存的Best BPDU更優的消息
3.端口放棄Root Port角色
3.1 放棄Root Port可能導致的狀態切換
①Forwarding to Forwarding
②Forwarding to Blocking
③Forwarding to Disabled
3.2 何時放棄Root Port
爲了方便各種不同情況的判斷,下文均以僞代碼的形式表示STP的端口狀態判斷機制
(1)Root Port丟失到根橋連接
MaxAgeTime:expire
if(no BPDU rcv || haven't rcv BestBPDUon RootPort)
PortRole:RootPort to DesignatedPort
PortState:stay Forwarding
else if(port change state to down)
PortState:Forwardingto Disabled
注意:
特殊情況下,當前交換機如果由於根端口丟失到根橋連接,進而導致交換機所有端口無法瞭解到根橋信息時,當前交換機將認爲自己是根橋
(2)其它端口發現到根橋的更優路徑
BPDU:BPDU rcv onother ports
if(a new root port is on one of other ports)
PortRole:give up RootPort
PortState:RootPortto Blocking //這是通常情況
注意:
之所以說通常進入Blocking State是因爲原拓撲中,Root Port鏈路對端是Designated Port,距離根橋的距離更近
如果Spanning Tree拓撲發生較大變化,當前端口不排除成爲Designated Port的可能,此時則依然維持Forwarding State
(3)出現新根橋,且當前端口未能選舉成Root Port
BPDU:a BPDU rcv onother ports
if(this other port elected to be the new RootPort)
PortRole:give up RootPort
PortState:Forwarding
BPDU:a BPDU rcv on old RootPort
if(old RootPort is failed in the election)
PortState:Forwardingto Blocking
else
PortRole:to be DesignatedPort
PortState:stay Forwarding
4.端口放棄Designated Port角色
4.1 放棄Designated Port可能導致的狀態切換
①Forwarding to Forwarding
②Forwarding to Blocking
③Forwarding to Disabled
4.2 何時放棄Designated Port
(1)出現到根橋的新路徑
BPDU:a better BPDUrcv on DesignatedPort
if(a new DesignatedBridgeis elected in the segment)
PortRole:give up DesignatedPort
PortState:Forwardingto Blocking
else if(the DesignatedPort iselected to be the new RootPort on the bridge)
PortState:stay Forwarding
(2)出現新根橋,且當前端口未能選舉爲Designated Port
BPDU:a new BPDU rcvon DesignatedPort
Bridge:a new RootBridge found
supersede the old RootBridge
if(DesignatedPort is elected to be the new RootPort)
PortState:stay Forwarding
else if(DesignatedPort is failed in the election)
PortRole:give up DesignatedPort
PortState:Forwardingto Blocking
(3)Designated Port被失效或被手動關閉
放棄Designated Port角色,進入Disabled狀態
5.端口決定成爲Root Port
5.1 可能導致的狀態切換
①Blocking to Listening
②Forwarding to Forwarding
③Listeing to Listening
5.2 何時決定成爲Root Port
(1)Blocking端口發現去往根橋捷徑
BPDU:a better BPDUrcv on BlockingPort
if(PortState==Blocking &&Port is elected to be RootPort)
PortState:Blockingto Listening
(2)Blocking端口發現新根橋
a new RootBridge discovered
if(PortState==Blocking &&Port is elected to be RootPort)
PortState:Blockingto Listening
(3)Designated Port放棄當前角色
PortRole:DesignatedPort
BPDU:a better BPDUrcv on DesignatedPort
if(DesignatedPort change to RootPort)
PortState:stay Forwarding
(4)端口激活或恢復後,選舉爲Root Port
if(PortState change state to Up) //端口激活或恢復
PortState:Disabledto Listening
PortRole:DesignatedPort
ForwardDelayTimer:on
BPDU:a BPDU rcv onListeningPort
if(Port is elected to be RootPort)
PortState:go on with Listening
ForwardDelayTimer:goon
ForwardDelayTimer:expire
PortState:Listening to Learning
ForwardDelayTimer:expire
PortState:Learning to Forwarding
6.端口決定成爲Designated Port
6.1 可能導致的狀態切換
①Blocking to Listening
②Forwarding to Forwarding
③Listening to Listening
6.2 何時決定成爲Designated Port
Bridge:already has a RootPort
if(PortState == Blocking)
MaxAgeTime:expire
if(no BPDU rcv || haven't rcv BestBPDUon DesignatedPort)
PortRole:decide to be DesignatedPort
PortState:Blocking to Listening
else if(PortState ==Forwarding) //端口處於轉發狀態且不是指定端口,穩定拓撲中,則爲根端口
PortRole:RootPort
BPDU:a BPDU rcv onthis port
if(this port give up the RootPort role && BPDU isnot better than BestBPDU)
PortRole:DesignatedPort
PortState:stay Forwarding
else if(port was down && comes Up)
PortState:Disabled to Listening
PortRole:DesignatedPort
BPDU:a BPDU rcv onthis port
if(this BPDU is not better thanBestBPDU)
PortState:go on with Listening
ForwardDelayTimer:goon
ForwardDelayTimer:expire
PortState:Listening to Learning
ForwardDelayTimer:expire
PortState:Learning to Forwarding
6.3 成爲Designated Port以後
BPDU:a BPDU rcv onDesignatedPort
if(this BPDU is not better thanBestBPDU)
BPDU:send BPDU on DesignatedPort
注意:
與Root Port及non-Designated Port選擇忽略不同,指定端口由於具備BPDU發送能力,此時會主動同步下游設備