1. 程式人生 > >生成樹協議配置管理——1

生成樹協議配置管理——1

生成樹協議——STP——Spanning Tree Protocol,主要以理解其原理和演算法為主。

生成樹協議就是用來消除網路中可能存在的二層環路,以防止廣播風暴,或者資料傳輸死迴圈。有STP(生成樹協議)、RSTP(快速生成樹協議)和MSTP(多生成樹協議)

    STP(SpanningTree Protocol,生成樹協議)是根據IEEE802.1D標準建立的,用於在區域網中消除資料鏈路層環路的協議。執行STP協議的裝置通過彼此互動資訊發現網路中的環路,並有選擇地對某些埠進行阻塞,以最終實現將環路網路結構修剪成無環路的樹形網路結構,防止報文在環路網路中不斷增生和無線迴圈

形成環路的結構:

環路導致的後果:

(1)廣播風暴導致網路不可用

(2)MAC地址表震盪導致MAC地址表項被破壞

STP基本概念

STP中涉及許多基本概念,如根橋、橋ID、橋優先順序、根埠、指定埠、埠狀態、埠ID、埠優先順序等——“一個根橋、兩種度量、三個選舉要素、四個比較原則和五種埠狀態”一句話形容。

1、一個根橋

樹形的網路結構必須有一個樹根,STP引入了根橋(RootBridge)概念。對於一個執行STP協議的網路,根橋在全網中只有一個,就是網路中具有最小橋ID(BID)的橋。網路中除根橋外的其他橋統稱為非根橋。

一般是需要將環路中所有交換機當中效能最好的一臺設定為根橋交換機,網路收斂後,根橋會按照一定的時間間隔產生並向外傳送配置BPDU,,其他裝置僅對該報文進行轉發,傳達拓撲變化記錄,從而保證拓撲的穩定。

2、兩種度量

STP生成樹的計算中要確定兩個方面:一是確定哪臺交換機將成為根橋,在非根橋的交換機中哪些埠具有收、發資料的功能,哪些又該被阻塞,以便最終形成無環路的樹形結構交換網路。STP生成樹計算所依據的就是STP中的ID和路徑開銷

(1)ID:STP中的ID包括:BIDBridge ID,橋IDPIDPort ID,埠ID兩種。

BID:BID一共64位,16位為橋優先順序(BridgePriority)值,低48位為橋背板MAC地址BID決定了哪臺交換機將成為交換網路中的根橋。在STP中規定BID最小的交換機將被選舉為根橋。根橋選舉中,首先要比較的就是高16位的橋優先順序,它是一個使用者可以設定的引數,數值範圍從0到61440,值越小,優先順序越高。如果各交換機的橋優先順序一樣才比較他們的BID中橋背板MAC地址,MAC地址最小的將成為該交換網路中的根橋。

PID:PID由兩部分構成,4位是埠優先順序,低12位是埠號。PID只在某些情況下對選擇“指定埠”有作用。即在選舉指定埠時,兩個埠的根路徑開銷和傳送BPDU交換機的BID都相同的情況下,比較埠的PID,PID小者為指定埠。埠優先順序可以影響埠在指定生成樹例項上的角色。(這裡可能有錯誤的,高8位是埠優先順序

(2)路徑開銷:路徑開銷(PathCost)是一個埠引數,由具體埠的鏈路速率決定(對於聚合鏈路,鏈路速率是聚合組中所有狀態為Up的成員口的速率之和),是STP協議用於選擇鏈路的參考值。STP協議通過計算各埠的路徑開銷,選擇較為“強壯”的鏈路,阻塞多餘的鏈路,將網路修剪成無環路的樹形網路結構。

在一個執行STP協議的交換網路中,某埠到根橋累計的路徑開銷就是所經過的各個橋上各埠的路徑開銷累加值,這個值叫做根路徑開銷(Root Path Cost。根橋上所有埠的根路徑開銷,以及同交換機上不同埠間的路徑開銷值均為零。

3、三個選舉要素

由環形網路拓撲結構修剪為樹形結構,需要使用STP中的3個選舉要素,即根橋、根埠和指定埠。

PC為Path Cost,即“路徑開銷”,RPC為Root PathCost,即“根路徑開銷”。

(1)根橋

根橋(Root Bridge,RB就是BID最小的橋裝置,通過互動配置BPDU報文來選出最小的BID,如上圖的S1為根橋。

(2)根埠

根埠(Root Port,RP負責向根橋方向轉發資料,是當前橋裝置上去往根橋“根路徑開銷”(Root Path Cost,RPC)值最小的埠,也即非根橋的交換機上離根橋“最近”的埠。——通過這一段,是否可以這樣說,根埠不在根橋上,在非根橋上

當多個埠根路徑開銷相同時,會先比較指定橋ID,對應最小指定橋ID的埠會成為根埠;當指定橋ID也相同時,才會比較指定橋上的PID,指定橋上具有最小PID的對應埠會成為根埠。埠優先順序的取值範圍為0到255,值越小,埠優先順序越高。在一個執行STP協議的裝置上根埠有且只有一個,但根橋上沒有根埠。——(PID的高4位是埠優先順序,怎麼會出現埠優先順序取值範圍為0到255呢??)

(3)指定埠

指定埠”(DesignatedPort,DP)與“指定橋”(Designated Bridge,DB)息息相關,但不是一一對應,如何確定要分以下兩種情況。

①對於一臺裝置而言,與本機直接相連並且負責向本機轉發配置訊息的裝置就是指定橋,指定橋中向本橋轉發配置訊息的埠就是指定埠。(這個概念說的很籠統)

②對於一個區域網而言,負責向本網段轉發配置訊息的裝置就是指定橋,指定橋上向本網段轉發配置訊息的埠就是指定埠。

一旦根橋、根埠、指定埠選舉成功,則整個樹形拓撲建立完畢。在拓撲穩定後,只有根埠和指定埠轉發流量,其他的非根、非指定埠(稱為阻塞埠)都處於阻塞(Blocking)狀態,它們只接收STP協議報文而不轉發使用者流量。

根橋上的所有埠都是指定埠

4、四個比較原則

STP生成樹的生成計算中依據的就是各個埠在傳送配置BPDU中所攜帶的4個優先順序向量{根橋ID,累計根路徑開銷,傳送者BID,傳送埠PID}

(1)根橋ID:每個STP網路中有且僅有一個根。

(2)累計根路徑開銷:傳送配置BPDU的埠到根橋的距離

(3)傳送者BID:傳送配置BPDU的裝置的BID

(4)傳送埠PID:傳送配置BPDU的埠的PID。

STP網路中的其他裝置收到配置BPDU訊息後,將比較這些欄位值,然後按照以下4個基本比較原則(在STP計算過程中,遵循數值越小越好的原則)。

(1)最小BID:用來選舉根橋。執行STP協議的裝置之間根據各自發送的配置BPDU中BID欄位值最小的作為根橋。根橋的選舉原則是通過BID中的橋優先順序和橋MAC地址進行比較,先進行橋優先順序比較,優先順序最高(優先順序最小)的將成為根橋;橋優先順序相同再比較橋MAC地址,MAC地址最小的將成為根橋。

(2)最小累計根路徑開銷:用來在非根橋上選擇根埠。在執行STP協議的裝置上到達根橋的總路徑開銷值最小的埠作為該橋的根埠。在根橋上,每個埠到根橋的根路徑開銷都是0,所以根埠都是在指定橋上的,而不是在根橋上的。

(3)最小發送者BID:用來在非根橋上選擇指定橋和根埠。當一臺執行STP協議的裝置要在兩個以上根路徑開銷相等的非根橋中選擇指定橋,要在接收配置BPDU的多個埠之中選擇根埠時,通過STP協議計算將選擇接收到的配置BPDU中傳送者的BID較小的那個橋作為自己的指定橋,接收該配置BPDU的埠就作為自己的根埠。

如圖8-4,假設S2的BID小於S3的BID,如果S4的A、B兩個埠接收到的BPDU裡面的根路徑開銷相等,那麼S2將成為S4的指定橋,S4埠B將成為S4的根埠。

(4)最小PID:用於在根路徑開銷相同的情況下,阻塞PID值較大的埠,PID值最小的埠將成為該橋上的指定埠

5、五種埠狀態

執行STP協議的裝置上有以下5種埠狀態

(1)Forwarding:轉發狀態,此時埠既轉發使用者流量也轉發BPDU報文。只有根埠或指定端口才能進入Forwording狀態

(2)Learning:學習狀態,此時裝置會根據收到的使用者流量構建MAC地址表,但不轉發使用者流量。這是一種過渡狀態,增加Learning狀態為防止臨時二層環路。

(3)Listening:監聽狀態,此時裝置正在確定埠角色,將選舉出根橋、根埠和指定埠。這是一種過渡狀態。

(4)Blocking:阻塞狀態,此時埠僅可接收並處理BPDU,不轉發使用者流量。

(5)Disabled:禁用狀態,此時埠不僅不能轉發BPDU報文,也不能轉發使用者流量。埠狀態為Down。

①:埠從禁用狀態開始初始化或者使能後首先進入阻塞狀態。

②:在埠突然被禁用或者鏈路失效時將從當前其他所有狀態下直接進入到禁用狀態。

③:在埠被選舉為根埠或指定埠後,由阻塞狀態進入到監聽狀態。

④:在埠不再是根埠或指定埠時,會從當前其他狀態直接進入阻塞狀態。

⑤:當新選出的根埠和指定埠要經過兩倍的轉發延時(即從監聽狀態進入學習狀態,再從學習狀態進入轉發狀態)後才能進入轉發狀態,以確保新的配置資訊傳遍整個網路,防止臨時環路的產生。

STP的3個定時器

對於STP,影響埠狀態和埠收斂有以下3個定時器引數。

1、Hello Time(Hello定時器)

Hello定時器是指執行STP協議的裝置傳送配置BPDU的時間間隔,即裝置會每隔HelloTime時間向周圍的裝置傳送配置訊息BPDU,以確認鏈路是否存在故障。

當網路拓撲穩定之後,該定時器的修改只有在根橋修改後才有效。新的根橋會在發出的BPDU報文中填充適當的欄位以向其他非根橋傳遞該定時器修改的資訊。當拓撲變化之後,TCN BPDU的傳送不受這個定時器的管理。

2、ForwardDelay(轉發延時)

轉發延時是裝置進行狀態遷移的延遲時間,是指一個埠處於Listening和Learning狀態的各自持續時間,預設是15s。即Listening狀態持續15s,隨後進入Learning狀態,然後再持續15s。

鏈路故障會引發網路重新進行生成樹的計算,生成樹的結構將發生相應的變化。但是重新計算得到的新配置訊息不可能立即傳遍整個網路,如果此時新選出的根埠和指定埠就立即開始資料轉發的話很可能造成臨時的二層環路。為此,STP採用了一種狀態遷移機制,新選出的根埠和指定埠要經過兩倍的Forward Delay延時後才能進入轉發狀態,這個延時保證了新的配置訊息傳遍整個網路,從而防止了臨時環路的產生。

3、Max Age(最大生存時間)

最大生存時間是指埠的BPDU報文的老化時間,可在根橋上通過命令人為改動老化時間。

Max Age通過配置BPDU報文的傳輸,可保證MaxAge在整網中一致。執行STP協議的網路中非根橋裝置收到配置BPDU報文後,會對報文中的Message Age(訊息生存時間)和Max Age進行比較:如果Message Age小於等於Max Age,則該非根橋裝置繼續轉發配置BPDU報文;如果Message Age大於Max Age,則該配置BPDU報文將被老化。該非根橋裝置直接丟棄該配置BPDU,可認為網路直徑過大,導致根橋連線失敗。

當配置BPDU從根橋發出時報文中的MessageAge值為0。當其他橋收到配置BPDU時,Message Age值為從根橋傳送到當前橋接收到BPDU的總時間,包括傳輸延時等。實際現實中,配置BPDU報文每經過一個橋,Message Age增加1。

STP BPDU報文

STP協議採用的是BPDU(BridgeProtocol Date Unit,橋協議資料單元)型別報文,也稱為配置訊息。STP就是通過在裝置之間傳遞BPDU來確定最終修剪完成的網路拓撲結構。STP BPDU又分為兩大類。

(1)配置BPDU(ConfigurationBPDU:用來進行生成樹計算和維護生成樹拓撲的報文,是初始的階段中各交換機發送的BPDU訊息。

(2)TCN BPDU(TopologyChange Notification BPDU:當拓撲結構發生變化時,下游裝置用來通知上游裝置網路拓撲結構發生變化的報文。它是當拓撲穩定後,網路中出現了鏈路故障,網路拓撲發生改變時所傳送的BPDU訊息。

“配置 BPDU”是一種心跳報文,只要埠使能STP協議,則裝置就會按照Hello Time定時器規定的時間間隔從指定埠傳送配置BPDU;而TCN BPDU是在裝置檢測到網路拓撲發生變化時才發出的。STP BPDU報文被封裝在乙太網資料幀中,此時目的MAC地址是組播MAC地址:01-80-C2-00-00-00LLC頭部中IEEE為STP保留的DSAP和SSAP值均為0x42,Control為0x03

1、配置BPDU

在STP中通常所說的BPDU報文多指配置BPDU。在初始化過程中每個橋都主動傳送配置BPDU。但在網路拓撲穩定後只有根橋主動傳送配置BPDU其他橋收到上游傳來的配置BPDU後才觸發傳送自己的配置BPDU。配置BPDU在以下3種情況下會產生

(1)只要埠使能STP,則配置BPDU就會按照HelloTime定時器規定的時間間隔從指定埠發出

(2)當根埠收到配置BPDU時,根埠所在的裝置會向自己的每一個指定埠複製一份配置BPDU。

(3)當指定埠收到比自己差的配置BPDU,會立刻向下遊裝置傳送自己的配置BPDU。

配置BPDU的長度至少要35個位元組,包含了ID、路徑開銷和埠ID等引數,如下圖。只有當“傳送者BID”或“傳送埠PID”兩個欄位中至少有一個和本橋接收埠不同,所收到的這個BPDU報文才會被處理,否則丟棄。這樣避免了處理和本埠資訊一致的BPDU報文。

2、TCN BPDU

TCN BPDU是指在下游拓撲發生變化時向上遊傳送拓撲變化通知直到根橋。TCN BPDU在如下兩種情況下會產生。

(1)埠狀態變為Forwarding狀態,且該裝置上至少有一個指定埠。

(2)指定埠在收到TCNBPDU後向根橋複製TCN BPDU。

TCN BPDU中的內容比較簡單,只有前3個欄位:協議ID、協議版本和訊息型別,長度只有4個位元組,且“訊息型別”欄位是固定值0x80

3、BPDU優先順序

收到其他橋發來的配置BPDU時會視情況對自己的配置BPDU進行更新,那麼當橋的多個埠收到多個不同的配置BPDU時該以哪個為準呢?這就要使用配置BPDU的優先順序來區分。即當同一橋收到了多個不同的配置BPDU優先順序高的BPDU則採用,其他的將被丟棄。假定有兩條配置BPDU X和Y,則他們的比較順序如下:

(1)如果X的根橋ID小於Y的根橋ID,則X優於Y。

(2)如果X和Y的根橋ID相同,但X的根路徑開銷小於Y,則X優於Y。

(3)如果X和Y的根橋ID,以及路徑開銷都相同,但X的ID小於Y,則X優於Y。

(4)如果X和Y的根橋ID、根路徑開銷以及橋ID都相同,但X的ID小於Y,則X優於Y。

STP拓撲計算原理深入剖析

STP協議拓撲結構生成樹的計算過程要區分初始化階段拓撲結構穩定後這兩個階段。

一、生成樹初始化階段的角色選舉

網路中所有的橋裝置在使能STP協議後,每一個橋裝置認為自己是根橋。此時每臺裝置僅僅收發配置BPDU,而不轉發使用者流量,所有的埠都處於Listening狀態。所有橋裝置通過交換配置BPDU後進行根橋、根埠和指定埠的選舉工作

1、根橋的選舉

“根橋的選舉”就是在交換網路中所有執行STP協議的交換機上選舉出一個唯一的根橋。“根橋”是STP生成樹的最頂端交換裝置,是STP生成樹的“樹根”。根橋的選舉依據是各橋的配置BPDU報文中BID(橋ID欄位值,BID欄位值最小的交換機將成為根橋。而橋配置BPDU報文中BID欄位共有8個位元組,即2個位元組的橋優先順序和6個位元組的橋背板MAC,其中橋優先順序的取值範圍是0~65535,預設值是32768。在進行BID比較時,先比較橋優先順序,優先順序值小的為根橋;當橋優先順序值相等時,再比較橋的背板MAC地址,MAC地址小的為根橋。

在初始化過程中,根橋的選舉要經歷兩個主要過程:一是每橋上確定自己的配置BPDU;二是在整個交換網路中通過各橋自己傳送的配置BPDU進行比較選舉整個交換網路中的根橋。

(1)橋配置BPDU的確定。一開始每個橋都認為自己是根橋,所以每個埠所發出的配置BPDU報文中,“ID”欄位都是用各自的BID,“根路徑開銷欄位值均為0,“傳送者BID”欄位自己的BID,“傳送埠PID”欄位是傳送該BPDU埠的埠ID。——也就是說,一開始的時候,每個橋都認為自己是根橋,所以配置BPDU中的RootID和BridgeID是相同的,是本橋的BridgeID,而BridgeID按照前面的說法,共8個位元組,前兩個位元組是優先順序,後6個是本裝置(即本交換機)的背板MAC地址,這裡需要搞明白交換機的背板MAC是什麼;PortID是傳送BPDU的埠的相關資訊,共2個位元組,高4位是優先順序,後12位是埠號;而根路徑開銷RPC都是0,因為本裝置被認為是根橋,而在根橋上,每個埠到根橋的根路徑開銷都是0

每個橋在向外傳送自己的配置BPDU的同時也會收到其他橋傳送的配置BPDU。但橋埠並不會對收到的所有配置BPDU都用來更新自己的配置BPDU,而是先會進行配置BPDU優先順序比較。當埠收到的配置BPDU比本埠的配置BPDU的優先順序低時,將丟棄所收到的這個配置BPDU,仍保留自己原來的配置BPDU,否則橋將收到的配置BPDU作為該埠的配置BPDU。然後,橋再將自己所有埠的配置BPDU進行比較選出最優的BPDU作為本橋的配置BPDU

埠第一次傳送配置BPDU,應該是所有的資訊相同,除了PortID外,在各個埠收到其他橋裝置發來的配置BPDU之後,埠自身的配置BPDU與收到的配置BPDU進行比較後取最優的,然後各個埠的最後取優的配置BPDU進行比較,最優的作為本橋的配置BPDU,在經過各個埠傳送出去,傳送的時候,配置BPDU中應該只有PortID不同;然後依次迭代。

埠傳送的應該也是裝置的配置BPDU。

(2)根橋的確定。每個橋的最優配置BPDU確定後,以後各橋間交換的配置BPDU都是各自最優的配置BPDU。如下圖,用{}標註的四元組表示了由根橋BID(圖中以S1_MAC和S2_MAC代表兩臺裝置的BID)、累計根路徑開銷傳送者BID(SBID)、傳送埠PID構成的有序組。配置BPDU會按照Hello Timer規定的時間間隔來發送,預設的時間是2s。

一旦某個埠收到比自己優的配置BPDU報文,此提取該配置BPDU報文中的某些資訊更新自己的資訊。該埠儲存更新後的配置BPDU報文後立即停止傳送自己的配置BPDU報文。圖中如果S2的埠B由於接收到了來自S1的更好的配置BPDU,從而認為此時S1是根橋,然後S2的其他埠再發送BPDU的時候,在根橋ID欄位裡面填充的就是S1-BID了。此過程不斷互動進行,直到所有交換裝置的所有埠都認為根橋是相同的,說明根橋已經選擇完畢。——也就是說S2的B埠收到S1的A埠發來的配置BPDU後,發現S1的配置BPDU更優,則跟新自己的配置BPDU,同時S2交換機比較所有埠的配置BPDU,以最優的作為本裝置的配置BPDU,所有埠傳送配置BPDU時以裝置配置BPDU為準,而作為接收最優BPDU的埠應該停止傳送配置BPDU。

2、根埠的選舉

“根埠的選舉”就是在所有非根橋上的不同埠之間選舉出一個到根橋最近的埠。這個“最近”的衡量標準不是根據到達根橋所經過的橋數,而是根據埠到根橋的累計根路徑開銷最小來判斷的。實質上是非根橋上接收到最優配置BPDU的那個埠即為根埠每個非根橋裝置都要選擇一個根埠根埠對於一個裝置來說有且只有一個

累計根路徑開銷的計算方法累加從埠到達根橋所在路徑的各埠根橋上的指定埠外各段鏈路路徑開銷值(也稱鏈路開銷值。要特別注意的是,同一交換機上不同埠之間的路徑開銷值為0。如果同一橋上有兩個以上的埠計算得到的累計根路徑開銷相同,那麼選擇收到傳送者BID最小的那個埠作為根埠。

如上圖所示交換網路中,S1為根橋,這時就需要選舉S2和S3非根橋的根埠。S2到達根橋S1有兩條路徑:一條是通過port5埠直接到達S1的port1埠,其累計根路徑開銷和容易得出,就是port5埠自身的路徑開銷值,即圖中標的是19。另一條是從port6埠發出,經過S3的port3和port4埠,到達根橋S1的port2埠,其累計根路徑開銷值就是port6、port3和port4埠的路徑開銷值之和。從圖中的標註可知道,port6埠的路徑開銷值為19,因為port3到port4埠在同一交換機S3上,所以port3到port4埠的路徑開銷值為0port4到S1的port2埠的路徑開銷值也為19,這樣port6埠累計根路徑開銷值就是19+0+19=38,很明顯高於port5埠的累計跟路徑開銷值19,所以port5埠最終選舉為S2的根埠。用同樣的方法可以得出S3橋上的根埠為port4。——對於演算法的理解:首先累計根路徑開銷是各段鏈路的路徑開銷和,那麼怎麼理解路徑開銷呢?從S2的port5到S1的port1埠之間的鏈路路徑開銷,就是port5埠自身的路徑開銷值來看,因為每個埠都有速率配置資訊,按照前面的學習,埠的速率配置一般是自協商確定的,兩端的埠速率應該是一樣的,這樣所謂的鏈路路徑開銷就是一個埠的速率所代表的開銷值,這裡取每一段鏈路起點埠的速率值代表的開銷值,如S2.port5——>S1.port1,選port5的PC值(Path Cost,路徑開銷),這個值在BPDU中怎麼體現??直接填在RPC欄位中嗎?這裡如果S2.port3是10M的速率,最後協商10M,則其PC值為100。

(百度上的:根路徑成本(開銷)-是網橋到根網橋的路徑上所有鏈路的成本之和,10Gbps=1,1Gbps=2,100Mbps=19,10Mbps=100。)

IEEE標準路徑開銷表:

鏈路速度

開銷(最新修訂)

開銷(以前)

10Gbps

2

1

1Gbps

4

1

100Mbps

19

10

10Mbps

100

100

所以,鏈路路徑開銷就是鏈路的速率(埠速率——兩端應該相同)對應上表的資料,兩個埠在同一裝置上的,路徑開銷為0,然後就這樣一段一段鏈路開銷相加。關鍵是在實際裝置中是怎樣實現的?

3、指定埠的選舉

“指定埠的選舉”是在每一個物理網段不同埠之間選舉出一個指定埠。“指定埠”與“根埠”相對,他可以理解為離下游裝置最近的埠,是本物理網段(這裡的“網段”是指一個交換機埠所連線的所有裝置)中唯一可以接收下游裝置資料的埠。它是依次根據以下三項條件來斷定的。

(1)某網段到根橋的路徑開銷最小。

(2)接收資料時傳送方(也就是鏈路對端的橋)的橋ID最小

(3)傳送方埠ID最小(埠ID有16位,它是由8位埠優先順序和8位埠編號組成的,其中埠優先順序的取值範圍是0~240,預設值是128,可以修改,但必須是16的倍數)。

如圖8-10所示,假定S1的MAC地址小於S2的MAC地址,則S1為根橋。根據上面的第一項指定埠判定原則可以得出S1的埠A會成為指定埠。在一個物理網段上擁有指定埠的裝置被稱為該網段的指定橋,由此可以得出圖8-10所示的S1-S2間網段的指定橋是S1。

網路收斂後,只有指定埠和根埠可以處於轉發狀態。其他埠都是Blocking狀態,不轉發使用者流量。根橋的所有埠都是指定埠(除根橋物理上存在環路)。——根橋也可能是指定橋。

看圖8-13所示交換網路中指定埠的選舉。S1為根橋,這樣很容易根據前面列出的指定埠判斷條件中的第一項得出在S2-S1網段,以及S3-S1網段中的指定埠分別為S1的port1和port2埠。而在S3-S2網段中,由於S3和S2橋到達根橋的路徑開銷均為19,所以這裡要比較前面提到的第二項條件,即傳送發的橋ID(即圖中標識的SBID)大小了。S3的port3的傳送方的橋ID為32768.000-0C12-3457,而S2的port6的傳送方的橋ID為32768.0C12-3458,經過比較發現S3的port3的傳送方的橋ID更小,所以最終選舉為S3-S2網段的指定埠。這樣一來就可確定port6埠為阻塞埠了。——對於S2-S1網段,以及S3-S1網段中的指定埠分別為S1的port1和port2,根據的是判斷條件中的第一項:某網段到根橋的路徑開銷最小。指定埠與指定橋相關,除根橋外,其他裝置都要有對應的指定橋,在指定橋上有指定埠。至於判斷的第一項,網段到根橋的路徑開銷概念有些模糊,

拓撲發生變化後的角色選舉

拓撲穩定後根橋仍然按照Hello定時器規定的時間間隔傳送配置BPDU報文非根橋裝置從根埠收到配置BPDU報文,通過指定埠轉發。如果接收到優先順序比自己高的配置BPDU,則非根橋裝置會根據收到的配置BPDU中攜帶的資訊更新自己相應的埠儲存的配置BPDU資訊。——對於根橋,其所有埠都是指定埠,所以也是指定埠轉發配置BPDU。同一裝置中根埠接收,指定埠轉發,報文在交換機內部交換。

在網路拓撲結構發生變化後,下游裝置會不斷地向上遊裝置傳送TCN BPDU報文上游裝置在收到下游裝置發來的TCN BPDU報文後,只有指定埠處理TCN BPDU報文。其他埠也有可能收到TCN BPDU報文,但不會處理。上游裝置會使用Flags欄位中TCA(拓撲變化確認)標誌位置1的配置BPDU報文傳送給下游裝置,告知下游裝置停止傳送TCN BPDU報文。與此同時,上游裝置複製一份TCN BPDU報文,向根橋方向傳送。當根橋收到TCN BPDU報文後,根橋會使用Flags欄位中TC(拓撲變化)標誌位置1的配置BPDU報文向對應下游裝置回送,通知下游裝置直接刪除發生故障的埠的MAC地址表項。——即阻止故障埠的做法就是在交換機的MAC地址表中刪除對應埠MAC。

由此可以看出,在發生拓撲變化時,下游裝置使用TCN BPDU報文向上遊裝置通知,但上游裝置使用的是TC,或TCA位置1配置BPDU,而不是TCN BPDU通知下游裝置。即TCN BPDU報文用來向上遊裝置乃至根橋通知拓撲變化;TCA標誌位置1的配置BPDU報文主要是上游裝置用來告知下游裝置已經知道拓撲變化,通知下游裝置停止傳送TCN BPDU報文;TC標誌位置1的配置BPDU報文主要是上游裝置用來告知下游裝置拓撲發生變化,要求下游裝置直接刪除有故障的埠的MAC地址表項,從而達到快速收斂的目的。——根裝置傳送TC置1的配置BPDU,直接下游裝置是否轉發此報文到它的下游裝置?上游裝置複製一份TCN BPDU向根橋方向傳送,對應的上游裝置是否也發TCA標誌置1的配置BPDU到轉發的裝置??

然後找到了一篇以前的資料,總結儲存如下:

生成樹協議產生的背景

透明網橋三大功能

1、地址學習功能

網橋基於目標MAC(介質訪問控制)地址做出轉發決定,所以它必須“學習”MAC地址的位置,這樣才能準確地做出轉發決定。每個乙太網物理網段上的工作站都將對所有在網段上傳輸的幀進行監聽。當網橋與物理網段連線時,網橋會對它監測到的所有幀進行檢查。網橋讀取幀的源MAC地址欄位後便做出一個假定:如果它監測到一個來自特殊埠上節點的幀,傳送幀工作站的資訊就必須駐留在這個埠上。網橋將這個資訊放置在一個網橋表(SAT—Source Address Table)中,它在將條目引入網橋表之前,還將執行幀檢驗序列(FCS—Frame Check Sequence),以阻止錯誤的條目進入網橋表。為了適應拓撲的變化,網橋中有一個程序定期掃描地址表,清除早於當前若干時間的全部表項

2、轉發功能和過濾功能

使用網橋表(SAT表)後,網橋可以作出轉發或不轉發(即過濾)幀的決定:

•  檢查資料包的DA是否在網橋表中;

•  如果在SAT中且埠號與收到此包的埠號不同,則將此資料包轉發到那個埠,傳送到網路。

•  如果在SAT表中且埠號與收到資料包的埠號相同,則丟棄此包。(這個有點異議,從埠來,又從端口出,自己ping自己的情況呢??

•  如果在SAT表中沒有,則此資料包將被轉發到交換機上的所有埠。(應該不包括接收到幀的埠

3、消除迴圈

由於網路中存在冗餘鏈路,因此可能導致報文在網路中迴圈轉發,甚至使得交換機過載。

 STP原理

STP是通過在一個網路中所有參與STP的交換機之間交換橋協議資料單元BPDU(Bridge Protocol Data Unit)來實現的。通過交換BPDU訊息可以實現:

1)為穩定的生成樹拓撲結構選擇一條根橋;

2)為每個交換網段選擇一臺指定交換機;

3)通過將冗餘的交換機埠置為Blocking來消除網路中的環路。

 BPDU報文格式

BPDU報文格式—IEEE 802.1d  BPDU

協議及狀態資訊:

Protocol ID:取值0,標識stp協議,佔用2個bytes;

Version ID:標準指定為0,佔用1個byte;

BPDU Type:填充0值,佔用1個byte;

BPDU Flags:佔用1個byte,只用前2個bits,TC(topology change)位指示拓撲結構改變,TCA(topology change acknowledgment)位表示收到對端交換機拓撲改變指示位而做出確認。

根網橋資訊:

Root Priority:佔用2個bytes,標識根網橋的優先順序,取值為0-65535,預設值一般為32768;

Root ID:佔用6個bytes,作為根網橋的標識,一般採用根網橋的MAC地址作為標識;

Root Path Cost:路徑費用,佔用4個bytes,表示從該網橋到根網橋的路徑費用總和;

本網橋資訊:

Bridge Priority:佔用2個bytes,表示本網橋的優先順序,取值為0-65535,預設值一般為32768 ;

Bridge ID:佔用6個bytes,表示本網橋的標識,一般採用MAC地址作為網橋標識;

埠資訊:

Port ID:包括兩個部分,埠優先順序及埠標識,各佔用1個byte;埠優先順序取值為0-255,預設值為128;(這裡描述了PID的組成,優先順序佔用1個位元組,而不是高4位,與前面的錯誤對應

記時器:

Message Age:佔用2個bytes,表示根網橋傳送有效BPDU報文的時間;

Max Age:佔用2個bytes,表示刪除根網橋配置資訊等待的最大時間;

Hello Time:佔用2個bytes,表示BPDU報文的傳送週期;

Forword Delay:佔用2個bytes,表示在過濾資料庫中,指示網路拓撲改變的BPDU動態條目的老化時間;同時也表示交換機埠從監聽狀態到學習狀態或從學習狀態到轉發狀態所經歷的時延。

生成樹演算法(STA—Spanning Tree Algorithm)

STA將具有最小標示值的網橋作為根網橋,在其它所有網橋上確定根埠,為每一個交換網段確定指定網橋及其指定埠

STA是由DEC公司開發的,後來成了IEEE 802.1d的基礎。但是,IEEE 802.1d演算法與DEC的演算法並不是相容的。這裡將使用IEEE 802.1d演算法作為標準的橋接協議。

STA的目的是創造一個“非迴圈”的環境。就像現實生活中的樹,所有樹幹的底部都有樹根,樹幹朝上分成大樹枝,大樹枝再分成小樹枝等等。所以,樹枝從來都不會蔓延到其他樹枝,即形成一個“非迴圈”的環境。

幾個重要概念

• 根網橋:為了創造一個“非迴圈”的環境,需要定義一個參考點,這就是根網橋。

• 根埠:離根網橋最近的埠為根埠。

指定網橋:在每一個網段中,離根網橋最近的網橋為指定網橋。(這裡說的是每一個網段,怎麼理解每一個網段呢?

• 指定埠:與指定網橋連線的埠為指定埠。(這裡也很模糊,到低是指定橋上的埠是指定埠,還是說與指定網橋連線的對端裝置上的埠是指定埠?經過理解,我覺得是指定網橋上的埠是指定埠。

STA演算法功能:

1)STA將具有最小標示值的網橋作為根網橋,即標示值越小,優先順序越高。

2)STA將在其他所有網橋上確定根埠。網橋的根埠是指用最小合計路徑代價到達根的網橋埠。該值也叫根路徑代價。

3)STA將確定指定網橋及其指定埠。指定網橋是指在每一個LAN上能夠提供最小根路徑代價的網橋。在某些情況下,兩個或多個網橋具有相同的根路徑代價。STA選擇具有最高優先順序標示符(值最小)的網橋作為指定網橋;如果標示符也相同,那麼STA選擇具有最高優先順序的網橋;如果網橋優先順序相同,那麼STA將使用埠標示符作為決定的標準。

STA工作過程

1、根網橋的選舉

比較所有參與者的橋ID,最小者為根橋。Bridge ID組成:

Bridge Priority(2 Bytes)+ bridge MAC(6 Bytes)

根橋上的參與STP計算的埠將被設定為Forwarding狀態。

Switch_A、Switch_B、Switch_C中,Switch_B的ID最小,所以被選為根網橋。

2、選定根埠,與根橋建立關聯

如果一個交換機能在多個埠上收到同一個BPDU,就說明存在到根橋的冗餘路徑。這時就要從這些埠中選擇一個作為根埠,被選為根埠的埠將被設定為Forwarding狀態。(這裡的同一個BPDU如何判斷?我的理解是通過RID、RPC、BID三元組來比較,不包括PID,因為不同埠接收到的配置BPDU,其PID應該也不同,如果三元組相同,則為同一個BPDU,這時通過PID選擇哪個埠為根埠。如果三元組不同,先比較RID,RID最優的為根埠,但是如果根裝置已經選擇出來,則RID應該是一樣的,RID不一樣是在選擇根裝置階段才出現的。所以選定根埠階段只比較RPC與BID二元組就行了。先比較RPC,小著優先,如果RPC相同,比較BID,小者優先,對應的埠就是根埠。下面的選擇依據很好的說明了這一點,應為直接就是從根路徑開銷開始比較,即RPC,然後是對端橋ID,即BID,然後是對端PID,最後是自己一端的PID。

選擇的依據是分別比較:

1)到達根橋的路徑開銷;

2)埠所連對端網橋ID;

3)埠所連對端埠ID;

4)自己的埠ID。

其中埠ID為埠優先順序(port Priority)+ 埠號(port number)

根埠的選擇還比較好理解,就是裝置本身對收到的BPDU進行比較最後選擇根埠。象上圖,Switch_D能夠從1、2和到Switch_C的埠三個埠接收到BPDU,然後進行比較選擇。

3、選定指定橋和指定埠

如果一個LAN可以通過多個交換機到達根橋,他將選擇其中的一個作為其指定橋,LAN與指定橋相連的埠就是該LAN的指定埠LAN的指定埠也將被設定為Forwarding狀態。(這裡不好理解的是一個LAN是什麼意思??前面做過這樣的解釋:指定網橋:在每一個網段中,離根網橋最近的網橋為指定網橋。指定埠:與指定網橋連線的埠為指定埠。拿上面的圖來說,一個LAN是否可理解為一臺交換機的所有埠,如Switch_B的LAN就是1、2和根埠組成一個LAN?對Switch_B來說能夠通過Switch_A和Switch_D到達根橋,在這兩個交換機中選擇指定橋,選擇的依據如下面順序。因為Switch_A直接就是根橋,路徑開銷最小,Switch_A為Switch_B的指定橋,也就是說,根橋可以是指定橋,或者說,根橋一定是指定橋,Switch_A連線Switch_B的埠就是指定埠,或者說,根橋上的所有埠都是指定埠。對於Switch_D來說,可通過Switch_B和Switch_C到達根橋,而RPC相同,BID比較後,Switch_B最優,所以Switch_B為Switch_D的指定橋,Switch_B到Switch_D有兩個埠相連,比較埠的優先順序,最後選擇Switch_B的1埠為指定埠。

選擇的依據是分別比較:

1)到達根橋的路徑開銷;

2)所連網橋ID;

3)LAN所連埠ID。(這裡是對端的埠ID,是相對於LAN或者說交換機的對端裝置。

也就是說除了根橋外,其他所有裝置通過配置BPDU選擇根埠,又可以根據所收到的BPDU,選擇指定橋和指定埠,指定橋是通過收到的所有BPDU的BID來判斷的,如果有多個BID(兩個或多個),說明此交換機連線了多臺其他的交換機,先比較通過這多臺交換機的RPC,找最優的,相同,比較BID,找最優的,相同(說明只連線了一臺交換機,即這兩臺裝置間有多條鏈路),比較PID,找最優的,按上圖,Switch_B的1埠為Switch_D的指定埠,這下有點明白了,指定埠是在對端裝置上的,而本裝置標註的應該是連線指定埠的埠,Switch_D阻塞2埠、與Switch_C連線的埠,而不是Switch_B上阻塞2埠。那麼Switch_B上的2埠是什麼狀態?這裡關鍵不太明白的是是這一句:“網路收斂後,只有指定埠和根埠可以處於轉發狀態。其他埠都是Blocking狀態,不轉發使用者流量”,就是對Switch_B的2埠的處理不明白。

這樣網路中參與STP計算的交換機其他埠將被設定成Blocking狀態。經過STP計算可以將以前網路拓撲中的一種圖狀連線變成一個樹狀連線,確保網路中從任何一點到另一點只有一條處於活動的主鏈路。

從下面的圖中可見,Switch_B的2埠還是開放的,Switch_B上2埠開放,那麼資料是否往這個埠轉發??——進一步理解,也許在2埠學習不到MAC地址,所以除了廣播幀,其他單播幀無法到達這個埠,而廣播幀從此埠轉發後,由於對端是Blocking狀態,幀也被丟棄