交換基礎之生成樹協議

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報文格式:

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初始化角色選舉過程

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字段中沒有用上的位數統統利用了起來;
BPDU報文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端口;

MSTP端口角色

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報文結構

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,下列有該字段的詳細內容;

MSTI Configuration ID字段詳細信息圖

報文字段 解釋說明
Configuration ID Format Selector 配置標識符格式選擇器,固定爲0;
Configuration Name MST域名,每個MST域有唯一的域名;
Revision Level MST配置修訂級別;
Configuration Digest 配置摘要,利用HMAC-MD5算法將VLAN與實例的映射關係加密爲16字節的摘要;

MSTI Configuration Message字段詳細信息圖

報文字段 解釋說明
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中的剩餘跳數;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章