首先簡單比較802.1D和802.1W在PDU上的一些結構和差別。
生成樹協定一共有兩種BPDU:
一、Configuration BPDU:
l 在802.1D裡,配置BPDU在生成樹初始化時由各Bridge自己生成,當接收到更優(superior)BPDU後,改用更優的BPDU。當STP域收斂時,全網的配置BPDU都是Root Bridge的配置BPDU。當然,每台Bridge都有可能修改BPDU的内容,例如TCA标記;
l 在802.1W裡,該BPDU改為全部由Bridge自己生成,隻是在Root ID裡填上已知Root Bridge的Bridge ID。配置BPDU由本機産生這點很重要,這直接使得RSTP在拓撲變更時無需等待Root Bridge的配置BPDU,即可重新整理MAC表。
二、TCN BPDU
l 在802.1D中,TCN BPDU由獲知網絡拓撲發生變化的Bridge生成,并從根端口(以下簡稱R-Port)往Root Bridge方向發送。接收到TCN BPDU的Bridge有兩個動作:1、繼續從R-Port轉發,并期待從R-Port接收到TCA置位的配置BPDU;另一方面,在下一次配置BPDU發送時,向該指定端口(以下簡稱D-Port)發送TCA置位的配置BPDU進行确認。Bridge将一直生成并發送TCN BPDU,直到收到TCA置位的配置BPDU為止。該行為一直延伸到Root Bridge接收到TCN BPDU為止。然後Root Bridge發送新的配置BPDU,使整個STP域的Bridge老化其MAC表,準備學習新的拓撲。由于STP域内所有Bridge的收斂行為均由Root Bridge的配置BPDU驅動,可稱為同步收斂;
l 在802.1W中,不存在TCN BPDU,因為RSTP域内狀态的同步無需由Root Bridge發起。Topology Change(TC)的通告發生在毗鄰Bridge之間,當且僅當某D-Port狀态從Discarding到Forwarding時需要使用TC置位的配置BPDU。該BPDU僅從該D-Port轉發出去,且一個新增的位(Proposal Bit)将被置位。這将引發一系列同步操作,也就是RSTP新增的一個協商機制:P/A機制。通過P/A機制,STP域内收斂行為發生在相鄰的Bridge之間,各自完成自己的同步過程,可稱為異步收斂。
STP與RSTP對端口狀态的描述:
STP
Blocking
Listening
Learning
Forwarding
RSTP
Discarding
RSTP BPDU如下:
Protocol ID
Protocol Version ID
BPDU
Type
Flags
Root ID
Root Path Cost
Bridge ID
Port ID
Message Age
Max Age
Hello Time
Forward Delay
其中Flags一項與STP比較而言變化較大:
Topology Change(TC):1 Bit,由獲知STP域拓撲發生改變的Bridge生成。在STP中,該Bridge将生成TC置位的TCN BPDU,并向Root Bridge方向泛洪。Root Bridge接收後,往其下遊繼續泛洪,直到STP域内所有Bridge都獲知該資訊。在RSTP中,BPDU僅在相鄰Bridge間進行轉發,是以TCN BPDU和TCA BPDU都僅在裝置間生效。
Proposal:1 Bit。用于向對端協商成為轉發狀态。所有處于Discarding/Learning狀态的端口,生成的BPDU都将Proposal比特置位。若接收到對端Agreement置位的BPDU,則立即進入Learning狀态,并在随後進入Forwarding狀态。
Port Role:2 Bit。用于辨別發送本BPDU端口的角色。
Learning:1 Bit。處于Learning狀态的端口,生成Learning比特置位的BPDU。
Forwarding:1 Bit。處于Forwarding狀态的端口,生成Forwarding比特置位的BPDU。
Agreement:1 Bit。接收到Proposal比特置位的BPDU後,若Bridge的所有端口均處于Synced狀态,則傳回Agreement置位的BPDU。
Topology Change Acknowledgment(TCA):1Bit,由接收到TCN BPDU的Bridge生成,作為對端Bridge的回應。
Port Role:R-Port(10),非根交換機到根交換機的最優端口;D-Port(11):網段到根交換機的最優端口;A-Port(01):R-Port的替換端口;Backup Port(01):D-Port的替換端口;Unknown Port(00):未知角色端口;Edge Port:連接配接終端的端口,因Edge Port不發送BPDU,是以BPDU包裡沒有該定義。
<a></a>
介紹完端口角色,接下來就是介紹RSTP如何實作快速收斂。
首先,RSTP将網絡拓撲的變化定義為端口角色的變化,這個應該比較容易了解,因為網絡拓撲的變化可以描述為某些網絡端口在轉發/阻塞态之間的轉換,而RSTP将端口角色和端口狀态進行了明确的定義(這是RSTP比STP優勝的地方)。
其次,RSTP端口角色的變化直接影響端口狀态的變化。R-Port、D-Port、Edge Port處于Forwarding狀态;Alternated Port(以下簡稱A-Port)和Backup Port處于Discarding狀态。
一、Forwarding-〉Discarding
若某條鍊路失效,即鍊路兩端的端口從轉發态變為阻塞态。從生成樹協定的目的來看,并不會使得網絡形成環路。RSTP僅需要找到處于合适的阻塞态端口,并将其轉為轉發态,使拓撲重新連通起來。由于RSTP在計算時已經配置設定好R-Port的備份端口A-Port,是以若從轉發态變為阻塞态的是R-Port,則把對應的A-Port改為轉發态;同理,D-Port的則色也可置相應的Backup Port為轉發來實作。而Edge Port并不影響生成樹的計算,故忽略。這樣,當某個(些)端口狀态從轉發到阻塞,對于RSTP而言,無需重新計算(是不是有點熟悉,好像哪兒見過不用計算直接使用備用路徑的算法。聰明的你一定想到了:DUAL)。
二、Discarding-〉Forwarding
由于某條鍊路的連通有可能導緻生成樹域成環。在RSTP裡,該行為定義為D-Port從阻塞态轉化為轉發态,相對的檢查機制應的就是P/A機制,即從需要進入轉發态的D-Port,建議對端進行同步,待收到确認後進入轉發态。
對端Bridge在接收到“建議”消息後,一方面阻塞自身所有D-Port,并傳回“同意”消息給“建議”消息發送方;另一方面,對自身端口進行同步。同步分兩種類型:若端口為E-Port,或者原來就是非轉發态,則為“已同步”;若端口原來為轉發态,為重新進入轉發态,将對對端進行“建議”并等待确認。
下面将結合圖例,示範P/A機制的流程:
(一)B、E之間建立一條新鍊路,首先進行端口角色選擇;
<a href="http://golehuang.blog.51cto.com/attachment/201209/10/7499_1347299733F2vX.png"></a>
(二)B、E通過該鍊路交換BPDU,由于B端口發送的BPDU較優(superior),是以B端口角色為D-Port;與此同時,E從B收到的BPDU比從C收到的較優,是以E把連接配接B的端口轉換為Root Port,同時,連接配接C的端口轉換為A-Port。要注意的是,RSTP相對STP進行了根端口轉發的改進,一旦确定了舊的R-Port非轉發态,且新的R-Port已确定,則新的R-Port立即進入轉發态;
<a href="http://golehuang.blog.51cto.com/attachment/201209/10/7499_1347299735Cdcs.png"></a>
(三)此刻B端口仍為Discarding狀态,并期望進入Forwarding狀态,是以它将從該D-Port發送“Proposal“置位的配置BPDU給E;E接收到該BPDU後,進入同步狀态:即将所有轉發态端口轉為丢棄,并檢查端口同步情況;
<a href="http://golehuang.blog.51cto.com/attachment/201209/10/7499_1347299737VeYU.png"></a>
(四)從同步原理可知,E中隻有連接配接D的端口為轉發态,是以E繼續阻塞該端口,并向B傳回”同意“置位的BPDU。自此,B-E鍊路進入已完成同步,立即進行流量轉發;而由于D連接配接E的端口為A-Port,不轉發BPDU,是以E發出的”Proposal“置位BPDU将不會被”Agreement“置位的BPDU回應。該端口将一直保持阻塞态。
本文轉自 gole_huang 51CTO部落格,原文連結:http://blog.51cto.com/golehuang/986975