文章目錄
STP介紹
STP(Spanning Tree Protocol,生成樹協議)是用於消除環形網絡的廣播風暴(數據包在網絡中不斷循環轉圈)和MAC地址表不穩定(MAC地址表不斷更改學習到的MAC地址條目)問題,從而實現既能解決環路問題,也能形成備份;STP是IEEE 802.1D標準;
STP相關術語
STP協議中涉及了很多術語,例如:根橋、根橋ID、橋ID、路徑開銷、端口ID、根端口、指定端口、阻塞端口等;
- 根橋:整個生成樹的根,全網只有一個根橋(根交換機),便於後續相關角色的選舉;
- 根橋ID/橋ID(RID/BID):由優先級與MAC地址兩部分組成,優先級範圍爲0-61440,優先級默認爲32768,MAC地址爲交換機面板的MAC地址,而非端口上的MAC地址;
- 端口ID(PID):由端口優先級與端口編號兩部分組成,優先級範圍爲0-255,默認爲100;
- 路徑開銷:端口參數,端口到達根橋的開銷,根橋的端口開銷爲0;
- 根端口:負責向根橋發送報文或接受根橋發送的報文,每個交換機只有一個根端口;
- 指定端口:負責發送根橋報文,每一個端口到端口的鏈路都會選出一個指定端口;
- 阻塞端口:除根端口和指定端口以外的所有端口;
STP端口狀態:
端口狀態 | 說明 |
---|---|
Disabled | 不接收不轉發BPDU報文,不進行MAC地址學習,不轉發用戶流量 |
Blacking | 只接收BPDU報文,不進行MAC地址學習,不轉發用戶流量 |
Listening | 接收並轉發BPDU報文,不進行MAC地址學習,不轉發用戶流量 |
Learning | 接收並轉發BPDU報文,進行MAC地址學習,不轉發用戶流量 |
Forwarding | 接收並轉發BPDU報文,進行MAC地址學習,轉發用戶流量 |
注:指定端口和根端口選舉後,需要兩倍轉發延遲後才能到轉發狀態;
注:Hello Time(Hello定時器):STP設備發送配置BPDU報文的時間間隔,缺省爲2s,TCN BPDU不受該定時器控制;
Forwarding Delay(轉發延遲):STP設備在listening和Learning端口狀態各自停留的時間,缺省爲15s,用於防止交換網絡在不同狀態間頻繁切換(例如:在一個時間間隔內頻繁的增減設備,使得端口角色不斷髮生變化,端口狀態也不斷髮生變化;存在轉發延遲後,就不會頻繁的從Forwarding狀態到Blocking,再到Forwarding狀態);
Max Age(最大生存時間):端口的BPDU的老化時間,缺省爲20s,收到BPDU報文後,會比較**Message Age(消息生存時間)**和Max Age,如果Message Age小於或等於 Max Age,就非根橋設備繼續轉發,如果Message Age大於 Max Age,就丟棄該報文;
配置BPDU每經過一個橋設備,Message Age數值就會增加1;
STP比較原則
根橋選舉是比較橋ID,根端口和指定端口是按照下述的比較方式比較的;
- 比較根橋ID(RBID),數值越小越優;
- 如果RBID相同,就比較到達根橋的路徑開銷(Cost),數值越小越優;
- 如果路徑開銷相同,就比較發送方的橋ID(中繼BID),數值越小越優;
- 如果發送方BID相同,就比較發送方的端口ID(PID),數值越小越優;
- 如果發送方的PID相同,就比較接收方的PID,數值越小越優;(適用於RSTP和MSTP)
STP BPDU報文格式
BPDU報文分爲配置BPDU和TCN BPDU;
配置BPDU是用於計算和維護生成樹的報文,是初始階段中各交換機發送的BPDU;
TCN BPDU是用於生成樹拓撲發生變化的報文,下游設備通過該報文通知上游設備拓撲結構發生了變化;
配置BPDU報文格式:
報文字段 | 說明 |
---|---|
Protocol ID | 協議ID字段,數值爲0; |
Protocol Version | 協議版本字段,數值“0”表示STP,數值“2”表示RSTP,數值爲“3”表示MSTP; |
Message Type | 消息類型字段,標識BPDU報文類型,“0x00”表示配置BPDU,“0x02”表示RST BPDU或MST BPDU,“0x08”表示TCN BPDU; |
Flags | 標識字段,用於表示字段發生了變化,TC爲置1表示通知下游設備刪除發生變化的MAC地址,TCA位置1表示已確認拓撲發生了變化; |
Root ID | 根橋ID字段,標識當前根橋設備的RID; |
Root Path COST | 根路徑開銷字段,標識發送給BPDU報文的端口累計到跟根橋的開銷; |
Bridge ID | 橋ID字段,標識發送BPDU報文的BID; |
Port ID | 端口ID字段,標識發送該報文端口的PID,即“發送者端口ID” |
Message Age | 消息生存時間字段,標識該BPDU已存在的時間,從根橋接收報文,數值爲“0”;實際實現時,配置BPDU每經過一個橋設備,Message Age就會增加1; |
Max Age | 最大生存時間字段,標識報文的最大生存時間,缺省爲20s,即老化時間;* |
Hello Time | 發送時間間隔字段,標識配置BPDU發送的時間間隔,缺省爲2s; |
Forwarding Delay | 轉發延遲字段,控制listening和learning的持續狀態,缺省爲15s; |
TCN BPDU報文格式:
TCN BPDU報文格式很簡單隻有上述報文的前三段:協議ID、協議版本和信息類型;
STP工作原理
STP的角色選舉都遵循STP比較原則。整個STP可以分爲初始階段角色選舉和拓撲變化后角色選舉。
STP初始化角色選舉過程
- 初始狀態(未標記爲默認值),網絡沒有根橋;
- 網絡中的所有交換機都認爲自己是根橋,開始發送配置BPDU報文,Switch1與Switch2會收到交互BPDU報文,發現Switch1的BID數值更小,優先級更大,認爲Switch1爲根橋,Switch1與Switch3比較的時候,Switch1的BID優先級更大,Switch1爲根橋;
注:STP中只有根橋設備纔會發送配置BPDU,RSTP和MSTP的所有STP設備都會發送配置BPDU報文; - 根橋設備選舉出來之後,每個非根橋設備要選舉出一個根端口;Switch2有兩個端口,比較兩個端口收到的配置BPDU報文(RID相同,G0/0/1的Cost路徑開銷小於G0/0/2[角色選舉的比較原則]),發現Switch2的G0/0/1爲根端口,同理Switch3的G0/0/2爲根端口;
- STP設備選舉出根端口後,開始爲每條端到端鏈路選舉一個指定端口;Switch1與Switch2鏈路兩端端口通過角色選舉的比較原則(RID相同,Switch1的COST更小),發現Switch1的G0/0/1爲指定端口,同理Switch1與Switch2之間Switch1的G0/0/2爲指定端口;
- Switch2與Switch3兩路兩端通過角色選舉比較原則(RID相同,COST開銷相同,Switch2的中繼BID更小),發現Switch2的G0/0/2爲指定端口,其他非根端口和非指定端口的爲阻塞端口(Switch3的g0/0/1爲阻塞端口);
注:生成樹拓撲結構穩定後,根橋設備會按照Hello Time週期性發送配置BPDU報文;
STP拓撲變化角色選舉過程
生成樹拓撲結構發生變化後,下游設備就會向上遊設備發送TCN BPDU報文,告知上游設備拓撲發送了變化。下游設備會不斷髮送TCN BPDU報文,只有指定端口接收到該報文才會處理;
拓撲變化后角色選舉過程(MAC地址表項重新學習):
- 當下遊設備發生拓撲變化時,下游設備會不斷向上遊設備發送TCN BPDU報文,上游設備的指定端口收到TCN BPDU報文後,會向下遊設備回覆配置BPDU報文(Flags字段TCA置爲1),告知下游設備已知道拓撲發生變化,並且設備會複製TCN BPDU報文,然後發送給上游設備,如此往復,直至發送將TCN BPDU報文發送給根橋設備;
- 根橋設備收到TCN BPDU報文,根橋設備會向下遊設備回覆配置BPDU報文(flags字段TC置爲1),要求下游設備直接刪除發生故障端口或發生變化端口的MAC地址表項(刪除接收到TCN BPDU報文的指定端口的MAC地址表項),進而達到快速收斂的目的;
注:TCN BPDU報文是用於告知上游設備,生成樹拓撲結構發生了變化;
Flags字段的TCA置爲1的配置BPDU報文,是上游設備用來告知下游設備已經知道拓撲結構發生了變化;
Flags字段的TC置爲1的配置BPDU報文,是根橋設備用來告知下游設備拓撲發生變化,要求下游設備刪除發生故障端口或發生變化變化端口的MAC地址表項(刪除接收到TCN BPDU報文的指定端口的MAC地址表項);
RSTP介紹
RSTP(Rapid STP,快速生成樹協議)是STP的升級版本,用於解決STP收斂速度慢(Listening和Learning有轉發延遲、只有根橋纔會發送配置BPDU報文)、端口狀態和端口角色劃分不合理(某些端口狀態功能類似,端口角色與端口狀態關聯性不強)等問題;RSTP是IEEE 802.1w標準;
RSTP端口角色
RSTP將端口角色更加細化,將阻塞端口劃分爲Alternate(替代)端口和Backup(備份)端口,新加了Edge(邊緣)端口;
端口角色 | 解釋說明 |
---|---|
根端口 | 每個非根橋設備都會有一個;用於接收配置BPDU報文; |
指定端口 | 每條端到端鏈路都會有一個;用於發送配置BPDU報文; |
替代端口 | 用於無延時進入轉發狀態代替根端口,是對根端口的備份,相當於多了一條接收配置BPDU報文的路徑; |
備份端口 | 用於無延時進入轉發狀態代替指定端口,是對指定端口的備份,相當於多了一條發送配置BPDU報文的路徑; |
邊緣端口 | 用於主機與STP設備相連的端口;不參與RSTP計算,直接是轉發狀態;防止主機頻繁切換(斷開或連接)造成網絡拓撲震盪; |
RSTP端口狀態
RSTP將STP中某些功能相似的狀態合併,使其STP的五個狀態合併爲RSTP的三個狀態,提高了RSTP的收斂速度(狀態少了,切換時間也會相應變短);
端口角色 | 角色說明 |
---|---|
Discarding | 不進行MAC地址學習,不轉發數據流量 |
Learning | 進行MAC地址學習,不轉發數據流量 |
Forwarding | 進行MAC地址學習,轉發數據流量 |
RSTP BPDU報文變化
RSTP的RST BPDU報文基本與STP的配置BPDU報文相似,較爲不同的是Flags字段。
RSTP將Flags字段中沒有用上的位數統統利用了起來;
報文字段 | 解釋說明 |
---|---|
TCA | 用於告知設備已知道拓撲結構發生了變化; |
Agreement | P/A(提議/確認)機制中的確認快速收斂,Agreement報文; |
Forwarding | 發送報文的端口處於轉發狀態; |
Learning | 發送報文的端口處於學習狀態; |
Port Role | 端口角色,“00”爲端口角色未知;“01”爲替代端口或備份端口;“10”爲根端口;“11”爲指定端口; |
Proposal | P/A機制中發起快速收斂的提議報文,Proposal報文; |
TC | 根橋告知下游設備拓撲發生變化並要求刪除相應的MAC地址表項; |
常見的Flags數值(僅供瞭解):
- 2c即0010 1100,表示發送BPDU報文的端口爲轉發狀態,端口角色爲指定端口;
- 0e即0000 1110,表示有指定端口發送的Proposal報文;
- 6c即0110 1100,表示發送Agreement報文的端口爲轉發狀態,端口角色爲指定端口;
- 2d即0010 1010,表示發送Proposal報文的端口爲轉發狀態,端口角色爲根端口;
RSTP拓撲變化角色選舉過程
RSTP取消了TCN BPDU報文,採用更加快捷的方式到達拓撲變化後快速收斂的目的;
RSTP雖然沒有TCN BPDU報文,在與STP兼容模式中仍然能夠發送和接收TCN BPDU報文(此時RSTP和STP的工作原理爲STP),當STP設備完全脫離後,RSTP設備會自動切換爲RSTP工作原理,開始快速收斂;
拓撲變化后角色選舉的工作過程(MAC地址表項重新學習):
- 當RSTP檢測到拓撲結構發生變化(非邊緣端口切換到轉發狀態),本設備就會啓動TC While定時器(數值爲Hello Time定時器的兩倍),在該定時器內,清空發生變化的端口上學習到的MAC地址表項,並由這些發生變化的端口發送**RST BPDU報文(Flags字段的TC置爲1)**給其他RSTP設備,TC while超時就停止發送;
- 其他RSTP設備的指定端口收到RST BPDU報文(Flags字段的TC置爲1)後,清空所有端口學習到的MAC地址表項,除了接收RST BPDU報文的端口,併爲所有非邊緣端口啓動TC While定時器,重複上述過程直至所有RSTP設備都進行MAC地址表重新學習,提高了收斂速度;
注:接收到RST BPDU報文(Flags字段的TC置爲1)的端口,不會再從該端口發送RST BPDU報文(Flags字段的TC置爲1);
處理BPDU報文的變化(相較於STP)
- 每臺RSTP的設備指定端口都可以發送配置BPDU報文;
- 如果一個端口連續3倍hello定時器內沒有收到上游發送的RST BPDU報文,就認爲鄰居之間協商失敗;
P/A快速收斂機制
Proposal/Agreement機制是爲了實現快速收斂,減少端口狀態切換的時間;P/A是在點到點鏈路裏;
P/A的端口變量協商過程:
- Proposing(請求提議):當一個設備的指定端口處於discarding或learning狀態時,端口的proposal變量置位,並向下遊設備發送RST BPDU報文(Flags字段的Proposal置爲1),用於請求快速切換到轉發狀態;
- Proposed(請求採納):當下遊設備的根端口收到上述RST BPDU報文(Flags字段的Proposal置爲1),接收報文的端口proposed變量置位,表示本鏈路的指定端口希望儘快進入轉發狀態;
- Sync(同步請求):當根端口proposed變量置位,本設備的其他端口都要將sync變量置位,使得非邊緣端口都進入discarding狀態(阻塞其他非邊緣端口),準備重新同步;
- Synced(同步完成):當非邊緣端口處於discarding狀態,其他端口都將synced變量置位,根端口監測到所有非邊緣端口都將synced置位後,也會將自己的synced變量置位,然後向上根端口所連接的鏈路發送RST BPDU(flags字段的Agreement置爲1);
- Agreed(提議確認):上游設備收到RST BPDU(flags字段的Agreement置爲1)後,會將接收到該報文的端口agreed變量置位,並立即進入Forwarding轉發狀態;
按照上述步驟,依次將非邊緣端口(處於discarding狀態)快速切換到Forwarding狀態,直至整個RSTP網絡都調整完畢;
MSTP介紹
MSTP(Multiple STP,多生成樹協議)是可以實現快速收斂,又能使不同VLAN的流量按照不同的路徑轉發,從而爲冗餘鏈路提供更好的負載分擔機制;每一個區域叫做MST域(多生成樹域),每個域中包含的多顆生成樹叫MSTI(多生成樹實例),每一顆生成樹採用RSTP算法生成;
注:MSTP僅需瞭解基本概念,以及同一MST域下不同MSTI配置。BPDU報文也只需要瞭解即可
MSTP相關術語
- VLAN映射表(MSTP):描述VLAN與MST域中對應的MSTI之間的映射關係;一個MSTI可以對應多個VLAN,一個VLAN只能對應一個MSTI;
- IST(Internal Spanning Tree,內部生成樹):每個MST區域只會生成一個IST生成樹,MST區域內的所有設備都屬於該IST;IST對應的實例號爲0(MSTI ID爲0);
- CST(Common Spanning Tree,公共生成樹):是計算整個MSTP網絡的生成樹,但是將IST這個整體作爲生成樹的一個節點,即每個MSTP網絡只有一個CST,每個MST域的IST是整個MSTP網絡的CST生成樹的節點;
- CIST(Common and Internal Spanning Tree,公共和內部生成樹):是通過STP或RSTP協議計算生成的,連接整個MSTP網絡的所有交換機生成的單生成樹,是由IST和CST共同組成的,即CIST是計算MSTP網絡的所有交換機組成的(CIST的生成樹節點爲單個交換機),CST是計算MSTP網絡所有IST組成的(CST的生成樹節點爲IST);
- SST(Single Spanning Tree,單生成樹):運行STP或RSTP的生成樹;MST域中只有一個交換機;
- 總根:CIST的根橋(一個MSTP網絡只有一個根橋);
- 域根:IST域根(IST的根橋,MST區域的根橋,一個MST域對應一個根橋)和MSTI域根(MST域中多生成樹實例的根橋,一個實例對應一個MSTI域根);
MSTP端口角色
MSTP協議相對於RSTP協議多了Master(主)端口和域邊緣端口;
端口角色 | 解釋說明 |
---|---|
根端口 | 每個非根橋設備都會有一個;用於接收配置BPDU報文; |
指定端口 | 每條端到端鏈路都會有一個;用於發送配置BPDU報文; |
替代端口 | 用於無延時進入轉發狀態代替根端口,是對根端口的備份,相當於多了一條接收配置BPDU報文的路徑; |
備份端口 | 用於無延時進入轉發狀態代替指定端口,是對指定端口的備份,相當於多了一條發送配置BPDU報文的路徑; |
邊緣端口 | 用於主機與STP設備相連的端口;不參與RSTP計算,直接是轉發狀態;防止主機頻繁切換(斷開或連接)造成網絡拓撲震盪; |
主端口 | MST域和總根之間最短路徑的端口,MST域內的報文去往總根都需要經過該端口;主端口是特殊的域邊緣端口,也是CST/CIST的根端口; |
域邊緣端口 | 位於MST域邊緣且與其他MST域或SST相連的端口;域邊緣端口的角色在MSTI和CIST上保持一致,即該端口在CIST裏是Master端口,則該端口在所有MSTI內都是Master端口; |
CIST角色比較原則
- 比較總根橋ID,數值越小越優;
- 如果總根橋ID相同,就比較到達總根橋的外部路徑開銷(ERPC),數值越小越優;
注:外部開銷是計算MST域外主端口到總根的開銷(MST域內部設備到達域根橋的開銷不計算);內部路徑開銷是計算MST域內非域根橋到達域根橋的開銷;- 如果外部路徑開銷相同,就比較域根橋ID(RBID),數值越小越優;
- 如果RBID相同,就比較到達根橋的內部路徑開銷(IRPC),數值越小越優;
- 如果路徑開銷相同,就比較發送方的橋ID(中繼BID),數值越小越優;
- 如果發送方BID相同,就比較發送方的端口ID(PID),數值越小越優;
- 如果發送方的PID相同,就比較接收方的PID,數值越小越優;(適用於RSTP和MSTP)
CIST計算原理
首先在經過配置BPDU報文比較後,在整個MSTP網絡中選舉出BID數值最小的交換機作爲CIST的總根,然後在MST域內通過MSTP算法計算出IST的所有端口角色,同時MSTP網絡將每個MST域作爲單獨的節點通過STP或RSTP算法計算出CST,最終CST和IST組合成整個MSPT網絡的CIST;
MSTI計算原理
每個MSTI當做單獨RST或STP計算出生成樹;
MSTP BPDU報文結構
報文字段 | 字節/Bytes | 解釋說明 |
---|---|---|
Version1 length=0 | 1 | Version1的BPDU報文長度,固定爲0; |
Version3 length | 1 | Version3的BPDU報文長度; |
MST configuration Identifier | 51 | MST域配置標識符字段,表示MST域的標籤;只有配置相同的MST標識符纔會處於同一個MST域;下列有該字段的詳細內容; |
CIST interval Root Path Cost | 4 | CIST內部路徑開銷字段,標識發送配置BPDU報文的端口到達根橋(Master端口)的累積路徑開銷; |
CIST Bridge ID | 8 | CIST橋ID字段,標識CIST的指定橋ID,相當於BridgeID字段; |
CIST Remaining Hops | 1 | CIST保持跳數字段,BPDU報文在CIST的剩餘字段(每經過一個橋設備數值減一); |
MSTI Configuration Message | 16 | MSTI配置信息字段,每個MSTI的詳細信息,用於告知總根該MST域中配置的所有MSTI詳細信息;可以包含多個MSTI,下列有該字段的詳細內容; |
報文字段 | 解釋說明 |
---|---|
Configuration ID Format Selector | 配置標識符格式選擇器,固定爲0; |
Configuration Name | MST域名,每個MST域有唯一的域名; |
Revision Level | MST配置修訂級別; |
Configuration Digest | 配置摘要,利用HMAC-MD5算法將VLAN與實例的映射關係加密爲16字節的摘要; |
報文字段 | 解釋說明 |
---|---|
MSTI Flags | MSTI標識字段,與上面Flags字段一樣; |
MSTI Regional Root Identifier | MSTI域根橋ID字段,表示實例中根橋的ID; |
MSTI Interval Root Path Cost | MSTI內部路徑開銷字段,表示發送BPDU報文的端口到實例根橋積累的路徑開銷; |
MSTI Bridge Priority | MSTI橋優先級,表示本設備的橋優先級; |
MSTI Port Priority | MSTI端口優先級,表示本設備的端口優先級; |
MSTI Remaining Hops | BPDU在MSTI中的剩餘跳數; |