Spanning Tree Protocol介紹

Spanning Tree Protocol(STP)主要是用在網橋上,用來避免網絡迴路,並製造冗餘連接(也就是保證網絡的可靠性). 

這裏只是一個大概的介紹,具體的還是要去看IEEE 的 802.1D STP的文檔。 

先看下面的圖: 




我們可以看到在stp中,只有一個根節點,然後root port指的是將此網橋和root連接起來的那個端口,而designated port指的是在連接這個lan的端口中,距離root最近的那個port。 

這裏虛線部分就是沒有激活的link,而對應的端口也是關閉的,這些連接其實就是冗餘連接,當實線的某些連接不可用時,這些虛線部分的一些就會根據stp的算法進行激活。 

而要實現stp的這些目標,就需要在各個網橋之間傳遞相應的幀(比如樹的平衡,還有上面所說的情況等等).而這個幀就叫做bridge protocol data units(UPDUS). 

在stp中,只有根節點纔會生成BPDUS,而另外的節點只會接收BPDUS或者update它。 

在stp中,每個端口都有狀態,分別是下面5種: 

disabled(關閉),blocking(端口啓用,可是stp阻塞了它),listening(端口打開,但不能傳輸數據),learning(學習網橋地址被激活),forwarding(數據能被傳輸). 

來看它的狀態圖: 


 

這裏要注意每個狀態的轉化都會啓動一個相應的定時器。 

每個網橋和端口的角色以及狀態都依賴於一些設置的參數,這些參數都有默認值,可是也能通過用戶控件來改變。

Bridge ID(網橋id),Port ID(端口id)。 

而下面的幾個參數是用來改變網橋和端口的優先級: 

Port cost(端口的權重,值越小,權重越大),Timers(stp使用每個端口,每個網橋都有定時器). 

下面來看參數的構成(這裏是802.1t,他是改變了一些位的表示,相比於802.1D): 




可以看到多了system id位,有了它就可以用4096個不同的網橋id來共享相同的mac地址,之前的話就需要4096個mac地址。這裏要注意4096不是一個隨機的數字,它表示了在802.1Q協議中最大的vlans數目。 

802.1t的改變並沒有影響stp,從他的觀點來看,橋id就是一個8字節的值,端口id就一個2字節的值。它只是影響了用戶空間的config工具。 

下面來介紹BPDUs 

BPDUS分爲兩種類型: 

1 Configuration BPDU 

主要用來防止迴路。 

2 Topology Change Notification (TCN) BPDU 

當整個網絡拓撲改變的時候,一個網橋發給根節點網橋 。比如在當前網絡加入一個新的網橋。 

來看他們幀的結構: 




這裏的protocol id和version字段是爲了標示stp,rstp還有mstp這幾個的區別(後兩種都是stp協議的增強),其中後兩種linux內核還沒有實現。 




通過上面的幀的結構那張圖我們能看到一個configuration bpdu的所有域,這裏重點看一下它的priority vector,它又4個字段組成: 

Root Bridge ID, Root Path Cost, Bridge ID, and Port ID,而兩個優先級向量之間的比較是每個字段依次比較的。也就是說通過這個我們就能確定根節點。 

接下來看當一個網絡拓撲改變後會發生什麼事。 





在上面的這個圖中,a2和d1中的網絡斷掉了,此時a2將會連接到d2. 

當改變後a2將會開啓定時器然後發送tcn到d2,然後d2也會開啓定時器,發送tcn到c1,當c1接收到tcn後,他會發送一個config bpdu with tca flag,當a2接收到這個幀後,就會關閉定時器,然後此次拓撲修改就完成。 


最後我們來看一下當新加入一個網橋後,會出現的情況。 

每一個新加入的網橋都會首先認爲自己是根節點,因此它就會發送一個config bpdu,然後他也會接收到一個根節點傳過來的bpdu,通過優先級向量的比較,當它的優先級低時,就會設置根節點爲本身網絡的根節點,而當他優先級高的時候,所有接收到它的bpdu的幀的端口也都修改相應的值。 


我這裏只是介紹了協議的大概,比如定時器一些都沒有涉及,詳細的介紹還是應該去看ieee的specifications和源碼。 

而另外的rstp和mstp都是思科提出來的,內核暫時還沒有實現,因此這裏就沒有介紹。。 

發佈了7 篇原創文章 · 獲贊 4 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章