基礎概念:
BID:8位元組,16位的優先級和48位MAC位址組成,高16位的優先級分成兩段(前4位是優先級;後12位是系統擴充ID,STP和RSTP取值為0,MST取值為Instance号),在選舉根橋時,橋ID越小越優先。預設的橋優先級為32768。 stp root primary,将優先級配置為0 , stp root secondary,将優先級配置為4096.
端口ID: 2位元組,端口優先級1位元組,端口号1位元組,但在配置時端口優先級僅能配置高4位,後12位當成端口号。預設的端口優先級為128。 在生成樹計算時,PID小的會被選舉為指定端口
端口成本:華為交換機,預設使用的是802.1T的成本格式,在華為交換機有三種成本格式,切換指令 stp pathcost-standard {dot1d-1998|dot1t|legacy},802.1t取值最線性。
802.1d | 802.1t | 華為實作 | |
10M | 100 | 2,000,000 | 200,000 |
100M | 19 | 200 | |
1000M | 4 | 20,000 | 20 |
10G | 2 | 2000 | |
40G | 1 | 500 |
在計算過程中先确定根橋,然後的根端口,再是指定端口及其他端口資訊。
在STP中,如果發生拓撲變化,需要觸發TCN BPDU的發送,那麼故障點所在的網橋向根端口發送TCN BPDU,上遊交換機收到以後,會回應一個TCA置位的配置BPDU,以用來确認收到TCN BPDU,并向根端口轉發,直到根橋,根橋也會回應TCA置位的BPDU進行确認,然後,根橋會發送TC置位的配置BPDU,用于通知下遊交換機清空MAC表。
在監聽狀态的過程中,網橋将處理它所接收的BPDU。對于作為指定端口和根端口的端口,它們将在15秒(轉發延遲)之後過渡到學習狀态。
轉發延遲:轉發延遲是在監聽狀态和學習狀态所停留的時間,預設為15秒。
最大壽命:MaxAge控制網橋端口儲存配置BPDU資訊的最大時間長度。預設是20秒。
STP:生成樹協定,用于二層防環路。
如果在有實體環路的情況下,沒有運作STP,會導緻什麼問題:1. 多幀複制 2. MAC位址表振蕩 3. 廣播風暴導緻環路 (具體可參見思科教程)
一、 端口狀态
802.1D的端口狀态
端口狀态 | 目的 | 說明 |
Forwarding | 端口既轉發使用者流量,也處理BPDU封包 | 隻有根端口或者指定端口才能進入轉發狀态 |
Learning | 裝置會根據收到的使用者流量建構MAC位址表,但不轉發使用者流量 | 過渡狀态,增加Learning狀态防止臨時環路 |
Listening | 确定端口角色,将選出根橋、根端口和指定端口 | 過渡狀态 |
Blocking | 端口僅僅接收并處理BPDU,不轉發使用者流量 | 阻塞端口的最終狀态 |
Disable | 端口不處理BPDU封包,不轉發使用者流量 | 端口處在非操作狀态 |
802.1W端口狀态
802.1D | 802.1W | 是否參與生成樹計算 | 是否學習MAC位址 |
Discarding | 否 | ||
是 | |||
二、端口角色
在802.1D中,根端口、指定端口、非根非指定端口
在802.1W中,根端口、指定端口、替代端口、備份端口
DP端口對端的端口是AP或者RP,而不是BP。
1. 根端口:交換機上收到最優BPDU的端口,是到根橋最近的端口。BPDU使用{根橋ID,到根橋的成本,鄰居交換機網橋ID,鄰居交換機的PortID}描述到根橋的拓撲資訊。
在計算時,先比較根橋ID,再比較到根橋的成本,如果到根橋的成本一緻,再比較指定橋ID
非根交換機有一個根端口;根交換機沒有根端口,都是指定端口;在拓撲計算時,先算根端口,再算其他端口角色;802.1D STP模式,根端口從确定角色到進入轉發狀态需要等待2個Foward-Delay。
2. 指定端口:一個網段裡通告BPDU的端口為指定端口,擁有該端口的交換機是指定交換機。通過指定交換機轉發過來的BPDU由網段上其他RP/AP等端口接收。
每一個網段隻有一個DP端口,負責轉發到根橋的流量; DP端口的最終狀态是轉發狀态,但對于進入轉發狀态所需時間,如果是STP模式,則需等待2個Forward-delay。
PS:選擇指定端口時,也可以按{根橋ID,到根橋的成本,發送者網橋ID,發送者的PortID}來計算,不過在計算一個網段的指定端口時,它這個發送者網橋ID和發送者端口ID應該站在網段的角度來看,也可以了解為哪個交換機發出的BPDU優,哪個交換機所在的最優端口就是DP。
3. Alternate端口:備用端口,它是RP的備用端口,處于Disarding狀态。它所屬的交換機不是端口所連接配接網段的指定交換機。
4. Backup端口:備份端口,它是DP的備份端口,處于Discarding狀态。它所屬的交換機是所連網段的指定交換機,但這個端口不是最優端口,它的PID沒有DP的優。
說明:BP、AP、RP端口都是接收BPDU的端口,DP是發送BPDU的端口,AP端口是處在百指定交換機上的阻塞端口,同時,AP端口也是本交換機RP端口的備份。而BP端口則是出現在指定交換機上的阻塞端口,同是也是相同網段上DP端口的備份,即DP端口失效後,BP端口會成為新的DP端口。
三、各種時間
PS: 修改各種時間,需要在根橋上操作,其他交換機使用根交換機的計時器工作
1. Hello時間:根交換機産生的BPDU的通告時間間隔,它用于充當裝置間檢測鍊路的Keep Alive,也用來傳遞STP計算所需的拓撲資訊。
2. Forward Delay:裝置狀态遷移的延遲時間。鍊路故障會引發網絡重新進行生成樹的計算,生成樹的結構将發生相應的變化。不過重新計算得到的新拓撲資訊無法立即傳到整個網絡,此時若立即選出根端口和指定端口并置于資料轉發的狀态,則可能會出現臨時的環路。是以STP使用了一種狀态遷移機制,要求新選出的根端口和指定端口要經過2位Forwarding Delay後,才能進入轉發狀态。這個時延足夠保證新的配置消息能傳遍整個網絡,全網都執行免環的計算,環路不會發生。 Forward Delay計時器是指一個端口遷移到轉發狀态前處于Discarding和Learning狀态的各自持續時間,預設是15秒。即Discarding狀态持續15秒,随後的Learning狀态也持續15秒。在這兩種狀态下端口會處于阻塞資料狀态,計時器逾時後,這個端口才進入轉發狀态。
3. Max-age: 802.1D算法中定義端口可以緩存收到的最好BPDU,這份BPDU的最大老化時間就是Max Age,預設時間20秒。 802.1D規範定義:“如果端口接收到的BPDU内包含的配置消息優于端口上儲存的配置消息,則端口上原來儲存的配置消息被新收到的配置消息替代。端口同時更新交換裝置儲存的全局配置消息。反之,新收到的BPDU被丢棄。” 運作STP協定的網絡中非根橋裝置接收配置BPDU封包後,封包中Message Age和Max Age會進行比較:
如果Message Age小于等于Max Age,則該非根橋裝置繼續轉發配置BPDU封包 #Message Age,每經過1跳,值加1,根發出來的值為0
如果Message Age大于Max Age,則該配置BPDU封包将被老化。該非根橋裝置直接丢棄該配置BPDU,可以認為網絡直徑過大,導緻根橋連接配接失敗。
華為交換機不再使用MaxAge來決定端口角色變化需等待的逾時時間。目前,華為交換機STP/RSTP實作中,若收到次的BPDU,端口會立即處理并計算新的端口角色。若接收不到BPDU,端口角色也會在至少3個Hello間隔後重新計算 ,整個過程 Max Age不再參與。 (Max Age在TCN的35秒時有用到。)
四、 選舉
1. 根橋: 橋ID最小的成為根橋
2. 根端口:根橋ID,到根橋的Cost值,發送者的橋ID,發送者的PID (這裡的發送者是上遊鄰居)
3. 指定端口: 根橋ID,到根橋的Cost值,發送者的橋ID,發送者的PID (這裡的發送者是自己)
五、 收斂
在标準的802.1D,如果是AP收到了次優BPDU,需要等待Maxage逾時,才會回應本地緩存的最優BPDU給對端,是以收斂需要50S
在标準的802.1D,如果是DP收到了次優BPDU,不需要等待MaxAge逾時,立即回應本地緩存的最優BPDU,是以收斂需要30S
在标準的的802.1D中,如果鍊路故障,隻有在交換機丢失根端口的情況下,才會認為自己為根,将所有端口置為DP-Discarding,并向外發送配置BPDU。
在标準的802.1D中,如果鍊路故障,指定端口丢失,該交換機有Backup端口,需要等待MaxAge過期,才能重新計算端口角色,并在2倍轉發延遲後,進入轉發狀态,是以收斂需要50秒。
華為的實作:
1. 在華為的STP實作中,若目前交換機有AP端口,則RP端口失效時,最好的AP端口會立即成為RP端口,而不需要重新計算角色。
2. 在華為的STP實作中,如果一個AP端口收到了次優BPDU,它不需要等待MaxAge逾時,而是直接将最優BPDU回送給對端交換機。
3. 在華為的STP實作中,如果DP失效,交換機有BP,需要等待3倍Hello時間(3*2*3=18秒),端口角色重新計算,再等待2倍轉發延遲,再收斂。
六、 802.1D的TCN過程
- 在網絡拓撲發生變化後,下遊裝置會不間斷地向上遊裝置發送TCN BPDU封包。TCN從RP端口發出,間隔2S,不受根交換機Hello時間的影響。
- 上遊裝置收到下遊裝置發來的TCN BPDU封包後,隻有指定端口處理TCN BPDU封包。其他端口也有可能收到TCN BPDU封包,但不會處理。
- 上遊裝置會把配置BPDU封包中的Flags的TCA位置1,然後發送給下遊裝置,充當收到TCN的确認,否則下遊裝置會一直發送TCN BPDU封包。
- 上遊裝置重複該過程,把TCN BPDU繼續向其RP端口發送,直至從上遊收到TCA置位的配置BPDU。
- TCN BPDU會一直向上發送,直到根橋(根橋的第一個包,TCA置位,TC置位)
- 根橋知道網絡中有拓撲變化後,根橋把配置BPDU封包中的Flags的TC置位後發送,TC置位的配置BPDU會泛洪到全網,收到的華為交換機會直接删除橋MAC位址表項。
- 根橋持續發送TC置位的BPDU,時間為Forward-delay+MaxAge的時間,為35秒。
說明:
- TCN BPDU封包主要用來向上遊裝置乃至根橋通知拓撲變化,由感覺到故障的交換機發出
- TCA置位的配置BPDU封包主要是上遊裝置用來告知下遊裝置已經知道拓撲變化,通知下遊裝置立即停止發送TCN BPDU
- TC置位的配置BPDU封包主要是上遊裝置用來告知下遊裝置拓撲發生變化,以使下遊裝置删除橋MAC位址表項,進而降低資料通信中斷時間
在802.1D的STP中,發生拓撲變更,由感覺到拓撲變化的交換機,從根端口向上遊發出TCN BPDU,上遊交換機收到後,回應TCA置位的配置BPDU,告訴下遊不再發送TCN,并且上遊也會同時向其上遊發送TCN,這樣直到根橋。根橋收到後,第一個包,回TCA置位和TC置位的配置BPDU,後續回TC置位的配置BPDU,這種TC置位的意思是告訴下遊,網絡拓撲發生改變了,清空MAC表吧。這種TC置位的配置BPDU一共發送35秒,約17個。
标準STP下,什麼時候發送TCN: 資料來源(CCNP BCMSN)
- 對于處于轉發和監控狀态的端口,它過渡到阻塞狀态(鍊路故障的情況)
- 端口進入轉發狀态,并且網橋已擁有指定端口。
- 非根橋在它的指定端口接收到TCN(傳播TCN被發送)
而華為的實作: 隻有當端口進入轉發狀态,并且網橋已經擁有指定端口,才會發送TCN,換句話說,鍊路Down,不會觸發TCN。
七、802.1W的拓撲變更機制
在RSTP中,隻有當非邊緣端口進入轉發狀态的時候,才能導緻拓撲變更。與802.1D不同的是,連接配接丢失不會産生拓撲變更。
拓撲變更過程:
- 為本交換裝置的所有非邊緣指定端口和根端口啟動一個TC While Timer,該計時器值是Hello Time的兩倍。在這個時間内,清空所有端口上學習到的MAC位址。
同時,由非邊緣指定端口和根端口向外發送RST BPDU,其中TC置位。一旦TC While Timer逾時,則停止發送RST BPDU。
- 其他交換裝置接收到RST BPDU後,清空所有端口學習到MAC位址,除了收到RST BPDU的端口。然後也為自己所有的非邊緣指定端口和根端口啟動TC While Timer,重複上述過程。
八、 RSTP是如何實作快速收斂的?是否需要等待Hold Time逾時
快速收斂是建立在點到點的鍊路,使用P/A機制進行快速收斂的。如果是共享鍊路類型,則使用802.1D的方式進行收斂。
P/A機制僅用于在DP和RP之間的協商,進行快速轉發;如果下遊交換機通過BPDU進行計算,該鍊路上的端口不是RP,而是AP,則不能進入快速轉發,該鍊路上的DP和AP都需要經過兩個Forward Delay的時延才能進入轉發狀态,即跟802.1D是一樣的。
處于DP/Discarding的端口,如果是點到點的鍊路,會在BPDU的Flags字段中,将Agreement字段置1。在進行P/A協商時,如果交換機認為在這個網段上,自己是指定端口,會将Proposal位置位,直到端口進入轉發狀态。
AP端口在收到Proposal置位的BPDU,不回應,不處理,等待2倍Forward Delay後,進入轉發狀态。
Proposal置位的配置BPDU,隻有DP端口在Discarding和Learning狀态下才會發送,當DP在Forwarding狀态下,是不發送Proposal置位的BPDU的。
802.1W的快速收斂機制:
- RP端口的快速切換機制,當RP端口消失時,AP端口立即成為RP端口并立即進入轉發狀态
- DP端口主動P/A協商進入到Forwarding狀态(鍊路是點到點的全雙工,下遊端口是RP的情況)
- 至少3個Hello間隔收不到BPDU時,端口角色便發生重新計算;收到次優BPDU後,端口角色也立即重新計算。
- Edge Port:端口UP後,如果被設定為邊緣端口,可立即進入轉發狀态。
總結:
華為在802.1D的實作上,做了一些改變,标準的802.1D,當一個阻塞端口收到次優BPDU,需要等待Maxage逾時,才會重新計算,需要50秒收斂。華為的AP端口收到次優BPDU會立即将Best的BPDU進行回應,30秒可收斂。
在802.1D,指定端口收到了次優BPDU,會立即回應Best的BPDU,收斂時間為30秒。
标準的802.1D中,鍊路故障和網橋已有指定端口而另外的端口進入轉發狀态都會觸發TCN,而華為的實作中鍊路故障不會觸發TCN。
在802.1W中,通過在點對點鍊路進行P/A協商,以及AP收到次收BPDU立即回應加速收斂。
在運作802.1W的網絡中,以及華為802.1D的實作中,如果端口收不到BPDU,會等待Hold Time(3倍Hello時間)後,再重新計算,華為的Hold time是18秒,因為它3倍的時間因子。再進行收斂。如果符合802.1W的快速收斂,則快速收斂,否則按802.1D的标準收斂。
802.1W的點到點鍊路,指全雙工的直連鍊路,如果不是直連的,可能會引發環路。
華為交換機上,運作802.1D時,如果鍊路出現變化,隻有在端口(狀态UP)收不到BPDU時,才會等待Hold Time逾時,然後過渡到轉發狀态,需要大約48秒;其他情況下是30S收斂,因為它的AP收到次優BPDU,也會立即回應Best BPDU。