本篇我主要講的是STP的端口遷移和P/A機制
1. STP的端口遷移
STP的端口狀态有五種:禁用(去能)狀态,阻塞狀态,偵聽狀态,學習狀态,轉發狀态
(1)STP端口的五種狀态:
(2)端口狀态遷移:
我将圍繞這個圖講解:
1.STP交換機的端口在初始啟動時,首先會從Disabled狀态進入到Blocking狀态,在Blocking狀态,端口隻能接收和分析BPDU,但不能發送BPDU。
2.如果端口選為根端口或者指定端口,則會進入Listening狀态,此時端口接收并發送BPDU,這種狀态會持續一個Forward Delay的時間長度(預設值:15s);如果沒有因”意外情況“,而回到Blocking狀态,則端口會進入到Learning狀态,并在此狀态持續一個Forward Delay的時間長度。
3.處于Learning狀态的端口可以接收和發送BPDU,同時開始建構MAC位址映射表,為轉發使用者資料幀做好準備。處于Learning狀态的端口不能轉發使用者資料幀(因為此時網絡中還存在因STP樹的計算過程不同步而産生的臨時環路)
4.最後,端口由Learning狀态進入Forwarding狀态,開始使用者資料幀的轉發工作。
5.總結:
(1)在整個狀态的遷移過程中,端口一旦被關閉或者發送鍊路故障,就會進入到禁用狀态;
(2)在端口狀态的遷移過程中,如果端口的角色被判定為非根端口或非指定端口,則其端口狀态就會退回到Blocking。
6.MSTP(多生成樹協定)定義的3種狀态:Discarding、Learning、Forwarding。
2.STP端口狀态遷移的示例:
下面示範STP交換機的端口角色和端口選舉過程:
(1)假設交換機S1,S2,S3大概同一時刻啟動,各交換機的各個端口了解從Disabled狀态進入Blocking狀态,由于處于Blocking狀态的端口隻能接收不能發送BPDU,是以任何端口都收不到BPDU,在等待Max Age時間(預設值:20s)後,每台交換機都會認為自己是根橋,所有的端口都設定為指定端口,并且端口的狀态遷移為Listening。
(2)交換機的端口進入Listening狀态後,開始發送自己的Configuration BPDU,同時也接收其他交換機發送的Configuration BPDU。
假設S2最先發送Configuration BPDU,當S3的GE0/0/2端口收到S2發送的Configuration BPDU後,會認為S2是根橋(因為S2的BID小于S3的BID),于是S3會把GE0/0/2設定為根端口,然後自己重新産生的,根橋為S2的Configuration BPDU從自己(S3)的GE0/0/1發送出去
【1】當S1的GE0/0/1收到S3發送的Configuration BPDU後,會發現自己更應該成為根橋,于是立即向S3發送自己的Configuration BPDU;
【2】當然,如果S1從自己的GE0/0/2收到S2發送的Configuration BPDU 也會立即發送自己的Configuration BPDU。
【1】(根端口确認) S2和S3收到S1發送的Configuration BPDU後,會确認S1就是根橋,于是S2的GE0/0/1和S3的GE0/0/1設定為根端口,
【2】(備用端口和指定端口确認)S2和S3會各自從GE0/0/2端口發送新的Configuration BPDU,然後,S3的GE0/0/2将成為備用端口(因為S2的BID小于S3的BID),端口進入Blocking狀态,S2的GE0/0/2将成為指定端口。
因為交換機發送BPDU的時間先後有一定的滞後性和随機性,是以上述過程不是唯一的。
總結:無論各個交換機的端口最開始的狀态是如何的,也無論中間的過程差異如何,最終的結果總是确定并且唯一的;
<1>BID最小的交換機将成為根橋,<2>各端口的角色會變化成為自己應該扮演的角色。
(3)各個端口(除S3的GE0/0/2)将進入Learning狀态後,會持續Forward Delay的時間長度(預設值:15s)後,在此時間中,交換機開始學習MAC位址與端口的映射關系。同時希望STP樹在這段時間能夠完成完全收斂。
(4)然後,各個端口(除S3的GE0/0/2)将進入Forwarding狀态,開始轉發使用者資料幀的工作。

3.P/A機制
(1)RSTP端口狀态:
Forwarding:能轉發使用者資料幀,能學習MAC位址
Learning:不能轉發使用者資料幀,能學習MAC位址
Discarding:不能轉發使用者資料幀,也不能學習MAC位址
(2)在STP計算中,一個端口在成為指定端口後,需要等待至少兩倍的Forward Delay的時間才能夠進入到Forwarding狀态。
在RSTP計算中,一個端口在成為指定端口後,此端口的先進入到Discarding狀态(不能轉發使用者資料幀,也不能學習MAC位址),後采用Proposal/Agreement機制(P/A機制)主要與對端端口進行協商,通過協商動作後,就可以立即進入到Forwarding狀态(能轉發使用者資料幀,能學習MAC位址)
角色縮寫: DP=指定端口,AP=阻塞端口(非指定端口) RP=根端口
- P/A的根本目的:為了加快某DP端口和RP端口互聯鍊路上兩端口快速進入轉發狀态不等30s的2xforwarding delay。要成功進行PA快速協商機制隻會出現在上邊DP下邊RP的情況下。
(1)首先兩台裝置比BPDU确定誰是上遊DP,誰是下遊RP(或AP)。
(2)所謂P/A機制,就是在這個過程以後,上遊DP捉急要進入轉發狀态,這才向下發P置位BPDU的請求。P/A協商根本目的就是為了加快某DP端口和RP端口互聯鍊路上兩端口快速進入轉發狀态而無需等30s(2倍forwarding delay )。
(3)P/A簡要過程:
0.比如兩台裝置新加了一條線路。然後在這條線路上依次進行下述步驟(初始上下遊接口均為DP角色,在第1步的操作後才變為DP/AP/RP):
1.兩台裝置互聯接口互比緩存BPDU,确認誰是上遊(端口角色為DP)誰是下遊(端口角色為RP或AP。如果下遊是RP端口則繼續看step2,如果下遊是AP端口則直接參見第三段文字)
2.上遊因為是DP,特别着急進入forwarding狀态,是以才發送P置位BPDU發起P/A協商。
3.如果下遊接口在第一步比較BPDU中确定為RP,則會将自己的所有下遊DP接口(除edge port以外)和原RP接口變為discarding狀态阻塞掉(即端口sync)。
4.sync完成後,下遊直接将其RP口變成forwarding狀态,并向上遊發送A置位BPDU(該BPDU源自上遊發送的P置位的最新BPDU)以示同意。
5.然後上遊交換機收到下遊交換機發送的A置位BPDU,則會将其DP端口直接變成forwarding狀态。至此上下遊的DP端口和RP端口均已進入轉發狀态,免去等待30s的痛苦。
6.下遊交換機繼續向其被discarding的其他DP口發起P/A協商以便快點進入forwarding狀态。注:相比STP協定中DP端口變forwarding前需要等待兩個轉發延遲的30s時間,這個P/A協商可能隻需要幾秒鐘就協商完進入forwarding狀态了。
注:如果下遊的接口并未被選舉為RP而隻是個普通AP怎麼辦?如果下遊裝置發現這個接口收到的BPDU沒其他某個接口(如現存的RP接口)收到的BPDU優先則下遊裝置會認為這個接口角色應為AP接口而不是RP。則該(AP)接口就不會去回應上遊發送A置位BPDU而隻發送普通BPDU。這樣上遊會一直每兩秒發一個P置位BPDU,下遊一直不響應A置位BPDU。直到等待1個forwarding delay後該上遊DP才會由discarding變為learning狀态,再等一個forwarding delay後上遊DP才會變為forwarding狀态。
感謝作者ZZZZ對P/A機制的解釋。我對P/A的了解也是處于了解的階段,并沒有太過深入的了解。希望我的文章對你學習有所幫助。十分感想讀者的通路和閱讀。希望可以得到你們的關注和收藏。
作者:ZZZZ
連結:
https://www.zhihu.com/question/35495673/answer/79530293