在組網中,很可能會出現環路或者稱冗余鏈路,為避免形成廣播風暴,需要一種方法來避免形成環路,并且在主鏈路故障中斷時候,可以將冗余鏈路自動切換為轉發狀態,以恢復網絡的連通性。生成樹協議(STP、RSTP、MSTP)就可以實現這樣的功能。
STP(802.1D,Spanning Tree Protocol,生成樹協議)
基本思想
將網絡的拓撲修剪為樹形拓撲,拓撲圖形狀與一棵樹相似,這樣就不會產生環路了。
在每個運行STP協議的設備上依據一定的準則選舉出一個樹根節點作為網絡中的根橋,其他節點為非樹根節點。
每一個非樹根節點,會選擇最優的路徑和根橋相連,每個非樹根節點上位于最優路徑的端口,為該非樹根節點的根端口。
如果非樹根節點存在冗余鏈路,則會對相應端口進行阻塞
基本概念介紹
根橋(Root Bridge):是整個生成樹的根節點,所有網橋中優先級最高的橋。
指定橋(Designate Bridge):負責一個物理段(相對于兩個網橋而言是一個物理段)上數據轉發任務的橋。
根端口(Root Port):指一個網橋上距離跟橋最近的端口。根橋上沒有根端口,只有非根橋上有且僅有一個根端口。
指定端口(Designate Port):指定橋上的端口,就是用于轉發生成樹信息報文的端口。根橋上全是指定端口。
候補端口(Alternate Port):用來為根端口或指定端口做備份的端口,即為最終需要阻塞的端口。
橋ID(Bridge ID):每一個運行STP協議的網橋都會有一個橋ID,用于在網絡中唯一標識一個橋,由橋優先級和橋MAC地址組成,橋優先級占2字節,橋MAC地址占6個字節。橋優先級只能是4096的整數倍,最大為61440,默認為32768。
路徑開銷(Path Cost):STP中每條鏈路都具有開銷值,默認的開銷值取決于鏈路的帶寬,帶寬越大,開銷越小。例如IEEE標準的開銷,鏈路速度為10Gbps開銷為2,速度為100Mbps時開銷為19,速度為10Mbps時候開銷為100。
BPDU(Bridge Protocol Data Unit,橋協議數據單元):用于網橋之間傳遞BPDU來交互協議信息。BPDU分為配置BPDU和TCN BPDU。配置BPDU用來進行生成樹的計算和維護生成樹拓撲的報文。TCN BPDU是當拓撲結構改變時候,用來通知相關橋設備網絡拓撲結構發生變化的報文。
BPDU報文分析
Protocol Identifier:固定為0x0000,表示是生成樹協議
Protocol Version Identifier:協議版本號,STP版本號為0x00
BPDU Type:配置BPDU類型為0x00,TCN BPDU類型為0x80
Flags:由8位組成,最低位為TC標志位,最高位為TCA標志位,其他6位保留。當拓撲結構變化時候,下游網橋將會從根端口發送TCN BPDU報文,TC標志位置為1,上游網橋收到后進行相應處理,回復配置BPDU報文,TCA標志位置為1.
Root Identifier:根橋ID,包含優先級和MAC地址,標識網絡中的根橋。
Root Path Cost:根路徑開銷,指從發送該配置BPDU的網橋到根網橋的最小路徑開銷,是所有鏈路開銷的代數和。
Bridge Identifier:發送該配置BPDU的網橋ID,即該指定橋的ID。
Port Identifier:發送該配置BPDU的網橋的發送端口ID。
Message Age:從根橋生成配置BPDU開始,到當前時間為止配置BPDU的存活時間。
Max Age:配置BPDU存活的最大時間。
Hello Time:根橋生成并發送配置BPDU的周期,默認為2s
Forward Delay:配置BPDU傳播到全網的最大時延,默認為15s
接口狀態
狀態名稱 | 狀態描述 |
禁用(Disable) | 不能收發BPDU,也不能收發數據幀 |
阻塞(Blocking) | 該接口被STP阻塞。不能發送BPDU,但是會持續偵聽BPDU。不能收發數據幀 |
偵聽(Listening) | 表明STP初步認定該接口為根接口或指定接口,但STP還在計算過程中,可以收發BPDU,但不能收發數據幀,也不能進行MAC地址學習 |
學習(Learning) | 會偵聽業務數據幀,但不能轉發數據幀,并可以學習MAC |
轉發(Forwarding) | 正常收發數據幀,也會進行BPDU處理,只有根端口或指定端口才能進行轉發態 |
當交換機的一個接口被激活后,該接口會從禁用狀態自動進入阻塞狀態。阻塞狀態的接口如果被選舉為根接口或者指定接口,那么它將從阻塞狀態進入偵聽狀態,并在偵聽狀態停留15s(轉發延遲時間),為了讓STP完成整個網絡的計算。15s后如果還是根接口或者是指定接口,就會進入學習狀態,因為此時交換機沒有學習到任何MAC地址,這個狀態也要停留15秒,之后才會變成轉發態。
計算過程
確定跟橋
每一個交換機啟動stp服務,都會認為自己是跟橋,并向外發送以自己為根橋的配置BPDU報文。
交換機接收到BPDU報文,會和自己的橋ID對比,橋ID由優先級和mac地址組成,先比較優先級,優先級相同,再比較mac地址,值越小就會認為更優。比如接收到BPDU報文的root id為8192-0000.0000.0001,自己的橋id為32768-0000.0000.0002,因為先比較優先級,優先級8192優于32768,則認為自己不是根橋,就不發送認為自己是根橋的BPDU了,并通過接收到的BPDU報文更新自身的配置BPDU。直到網絡中所有的交換機都達成一致,認為某一個交換機為根橋,根橋的選舉結束,從而確認唯一根橋。
確定端口角色
當確認自己本身不是根橋的同時就開始確認端口角色了。
確定根端口
當一個交換機多個接口同時接收到了根橋發來的配置BPDU報文,會獲取Root Path Cost,也就是根路徑開銷,與接收端口的鏈路開銷相加,得到此端口到根橋的根路徑開銷,對比,根路徑開銷值最小的作為根端口。
如果根路徑開銷相同,對比BPDU報文中的Bridge Identifier,也就是發送該BPDU報文指定橋的ID,ID小的作為根端口。
如果指定橋ID也相同,則對比Port Identifier,發送口的端口ID,ID小的作為根端口
確定指定端口和Alternate備份端口
當確定根端口后,會將通過自己從根端口收到的BPDU報文計算生成的配置BPDU報文與非根端口接收到的配置BPDU進行比較,依次對比根路徑開銷、指定橋和端口id,自己計算產生的BPDU優于接收到的,則將此接收到的端口設置為指定端口,否則設置為Alternate端口(即阻塞起來)。
拓撲結構發生改變時
當有端口斷開或新網橋加入時,拓撲發生了改變,就會使用到TCN BPDU報文,目的是讓STP能快速的收斂。
產生BPDU報文的條件:
網橋上有端口轉變為Forwarding轉發狀態,且該網橋至少包含一個指定端口。
網橋上有端口從Forwarding狀態或Learning狀態轉變為Blocking狀態。
拓撲改變時候STP處理步驟:
會從該發生變化的交換機的根端口發送TCN BPDU報文
上游交換機收到TCN BPDU報文,會將下一個配置BPDU報文中的TCA置為1,發送給下游交換機,來確保通往根橋的鏈路有效性
重復1,2步驟,直到根橋交換機收到TCN BPDU報文,并將下一個配置BPDU報文中的TC置為1,發送給下游所有的交換機,各網橋收到TC置為1的配置BPDU報文后,會將MAC地址老化時間縮短為15秒
STP的不足
為避免環路,每一個端口在確認為根端口或指定端口后仍需要等待30s才能進入轉發狀態。
對于網絡中有大量主機時候,頻繁上下線會導致頻繁發送TCN BPDU報文,導致網橋MAC地址老化時間長期為15s。
RSTP(802.1W,Rapid Spanning Tree Protocol,快速生成樹協議)
STP與RSTP區別概要
STP | RSTP | |
端口狀態 | 禁用、阻塞、偵聽、學習、轉發 | 丟棄、學習、轉發 |
端口角色 | 根端口、指定端口、備份端口(Alternate) | 根端口、指定端口、根備份端口(Alternate)、指定端口備份端口(Backup) |
BPDU |
協議版本號為0x00 配置BPDU類型為0x00,TCN BPDU類型為0x80 |
協議版本號為0x02 類型為0x02 使用Flags字段的全部8位 最后增加了Versionl Length字段 |
STP與RSTP的接口狀態對應關系
STP的接口狀態 | RSTP的接口狀態 |
禁用(Disabled) | 丟棄(Discarding) |
阻塞(Blocking) | |
偵聽(Listening) | |
學習(Learning) | 學習(Learning) |
轉發(Forwarding) | 轉發(Forwarding) |
RSTP端口會在Discarding狀態完成角色的確定,當端口確定為根端口或指定端口后,經過Forward Delay時間會進入Learning狀態,比STP就少一個Forward Delay時間,并且有P/A快速機制,可以直接從Discarding直接到Forwarding狀態。不是根端口或指定端口就會維持Discarding狀態。
端口角色
根端口和指定端口角色的定義和STP相同,就不說了。
較STP新增了兩個端口概念,替代接口和備份接口。但同樣都是阻塞起來的,只是為了指定端口出故障時可以快速收斂。
替代接口(Alternate)
可以理解為根接口的備份接口,是由于收到了其他設備發送的BPDU且優于自身所要發送的BPDU從而被阻塞的接口。當根端口進入阻塞狀態時,會選擇優先級最高的替代接口作為新的根端口。當對端端口是Forwarding狀態,則可以立即進入轉發狀態。
備份接口(Backup)
一臺設備上收到了自己所發送的BPDU從而被阻塞的接口。
如圖,LSW2上的GE 0/0/3阻塞,因為是收到了LSW3的BPDU報文,形成了環路,且收到的BPDU報文比自己的優,從而阻塞,就變成了替代接口。而LSW2上的GE 0/0/5,因為收到的是自己發送過來的BPDU報文且端口id較大被阻塞,從而變成備份接口。
BPDU報文
與STP BPDU相比較
Protocol Version Identifier為2
BPDU Type為0x02,表示為RST BPDU
BPDU flags使用全部的8位
在報文的最后增加了Versionl Length字段,值為0,表示本BPDU中不包含Versionl內容。
最高位和最低位TCA和TC與STP相同。Agreement(同意)及Proposal(提議)用于RSTP的P/A機制,會大大提高RSTP的收斂速度。Port Role(接口角色)兩個bit位,01表示根接口,10表示替代接口,11表示指定接口,00保留。Forwarding(轉發)和Learning(學習)用于表示該RST BPDU發送接口的接口狀態。
RSTP與STP不同,在網絡穩定后,STP的非根橋之會轉發根橋發來的BPDU報文,而RSTP無論是非根橋還是根橋都會周期性的發送BPDU。
在STP中只有在指定端口收到低優先級的配置BPDU時才會立即回應(發送自己計算的配置BPDU報文),阻塞狀態端口不會對低優先級的配置BPDU做出回應。
在RSTP中,指定端口或阻塞狀態的端口收到低優先級的RST BPDU,也可以立即對其做出回應。
P/A快速收斂機制
當網絡中增加新的鏈路或故障鏈路恢復時,鏈路兩端必有一個端口的角色是指定端口,在STP中,該指定端口需要等待30s才能進入Forwarding狀態。
P/A機制是指定端口可以通過與對端網橋進行一次握手,即可快速進入轉發狀態,無需任何定時器。
前提條件是必須是點到點的鏈路。
當新鏈路連接時候,鏈路兩端的端口初始都為指定端口并處于阻塞的狀態。
當指定端口處于Discarding和Learning狀態時,所發送的BPDU中的Proposal位將被置為1,端口的角色位11,是指定端口。(都是指定端口發的喲)
收到Proposal置位的RST BPDU報文后,交換機會判斷接收端口是否為根端口,如果是根端口,會進行同步過程,同步過程是阻塞除邊緣端口(直接與用戶終端相連,沒有連接到其他交換機或者網橋,一般需要手動配置為邊緣端口,可以忽略Forward Delay時間直接進入Forwarding狀態,無時延)之外的所有端口,為了消除本交換機產生環路的可能。
完成同步過程后,根端口進入轉發狀態并從根端口回發Agreement置為1的RST BPDU報文,內容復制收到的Proposal置為的RST BPDU報文,唯一不同的就是Flags字段的Agreement也置為1。
收到Agreement置1的BPDU報文后,該接口會立即進入轉發狀態。
同步過程阻塞的接口也會繼續往下進行這個過程。
如果指定端口發出Proposal置位的BPDU后沒有收到Agreement BPDU報文,則該端口需要等待30s(兩個延遲時間)才會進入轉發狀態。
拓撲改變處理
在STP中,端口變為Forwarding狀態或從Forwarding變為Blocking狀態均會觸發拓撲改變處理過程,而RSTP只在非邊緣端口轉為Forwarding狀態時才會觸發處理過程。
當交換機由非邊緣端口轉變為Forwarding狀態時,網橋會在兩倍的Hello Time時間內向根端口以及指定端口發送TC置位為1的RST BPDU,同時清除這些端口學習到的MAC地址。
其他交換機收到TC置位的RST BPDU時候,會清除接收TC報文的端口以及邊緣端口之外的其余端口MAC地址,并同樣會在兩倍的Hello Time時間內向根端口以及指定端口發送TC置位為1的RST BPDU報文。
交換機收到TC置位的RST BPDU后不需要在Max Age+Forward Delay時間內將MAC地址老化時間設置為Forward Delay,而是直接清除端口MAC地址,重新進行學習,從而實現更快的收斂。
注:本人使用華為模擬器,拓撲改變收到拓撲改變的報文,并沒有立即清除端口mac,好像是一個Foreard Delay時間后才清除mac。
RSTP和STP的兼容
當運行RSTP的交換機連續3次接收到配置BPDU時候,認為改端口和STP相連,該端口將切換到STP協議運行。
MSTP(802.1S,Multiple Spanning Tree Protocol,多生成樹協議)
基本思想
基于實例(Instance)計算出多棵生成樹,每個實例都會生成自己的生成樹,并且每個實例可以包含一個或多個VLAN,每一個VLAN只能映射到一個實例。交換機可以通過配置多個實例,實現不同VLAN組之間的負載分擔。
基本概念解釋
MST域是一個具有相同域名、修訂級別和摘要信息的網橋或交換機構成的集合,一個域可以包含多個實例。
域名,本域的名稱,MSTP中每一個域都有一個獨一無二的名稱,配置不同域名會被認為屬于不同的域。
修訂級別,目前保留,默認為0。
配置摘要,由網橋的vlan和實例映射關系生成的長度為16字節的HMAC-MD5簽名。
IST是MST域內的一顆生成樹,每顆生成樹對應一個實例。實例號為0,一定存在的
MSTI是多生成樹實例,實例號從1開始,為0的實例號是IST
MSTI域根,是每一個MSTI實例上優先級最高的網橋
CST(公共生成樹)是網絡內所有MST域通過計算得到的一棵樹。
CIST(公共和內部生成樹)是整個網絡所有設備經過生成樹計算得到的一棵樹。由IST和CST共同構成。
CIST總根,是整個網絡中優先級最高的橋,是CIST的根橋。
CIST域根,IST的根橋即為CIST的域根,是MST域內距離總根最近的橋,也稱為Master橋。
端口角色
相較RSTP,橋的角色上,MSTP增加了Master橋。端口角色上,增加了域邊界端口以及Master端口。根端口、指定端口、Alternate端口、Backup端口定義和RSTP一樣。
IST(實例號為0網絡)中距離總根最近的橋為Master橋,該橋為IST的根,Master橋指向總根(整個網絡中優先級最高的橋)的端口為Master端口。
MST域內網橋和其他MST域或STP/RSTP網橋相連的端口稱為域邊界端口,Master端口也是域邊界端口。
如下圖創建了三個區域,暫時都只有IST(實例0),優先級和MAC都是我編的,然后下圖標注了MSTP所有的概念,更方便理解吧。
BPDU報文
BPDU Type:0x02
BPDU flags:CIST標志字段
Root Identifier:CIST總根交換機ID
Root Path Cost:CIST外部路徑開銷,指從本交換機所屬的MST域到CIST根交換機的累計路徑開銷。
Bridge Identifier:CIST的域根交換機ID(每個域距離根橋最近的交換機,域根并不是只有一個,每個域都有一個域根,很多資料上也稱為CIST域根,我理解一半天),即IST Master的ID。如果總根在這個域內,那么域根交換機ID就是總根交換機ID。
Port Identifier:CIST的指定端口ID(當前報文的上游交換機發送端口)
Version 3 Length:表示MST專有字段的長度,用于接收到BPDU后進行校驗。
MST Config ID:格式選擇字符固定為0x00。
MST Config name:域名
MST Config revision:修訂級別,為0
MST Config digest:配置摘要
CIST Internal Root Path Cost:CIST內部路徑開銷,表示發送此BPDU的網橋到達CIST域根的路徑開銷。
CIST Bridge Identifier:發送此BPDU的網橋ID
CIST Remaining hops:CIST剩余跳數,限制MST域的規模,從域根開始,BPDU每經過一個網橋,跳數就減一,網橋會丟棄收到的跳數為0的BPDU,從而限制MST域的規模。默認為20
MSTI配置信息中的內容只在各自實例中有效,且每個實例中這些字段值是獨立的
MSTI flag:一個字節,從第一位到第七位的定義和RSTP相同,第八位為Master標志位
Region Root:表示該實例的域根ID
Internal root path cost:表示發送此BPDU的網橋到達MSTI域根的路徑開銷
Bridge Identifier priority:表示發送此BPDU的網橋,即指定橋的優先級,其中高4位為優先級位,第四位固定為0
Port Identifier priority:表示發送此BPDU的端口的優先級,其中高4位為優先級位,第四位固定為0
Remaining hops:表示BPDU在該MST實例中的剩余跳數。
優先級向量
MSTP計算可以分為CIST和MSTI計算兩部分
CIST優先級向量
用于計算生成CIST生成樹和CST生成樹,總根,域根等
{CIST總根ID、外部路徑開銷、域根ID、內部路徑開銷、指定交換設備ID、指定端口ID、接收端口ID}
再次注意(怕你已經被弄暈了),
外部路徑開銷是當前域的Master橋到總根的路徑開銷
內部路徑開銷是當前交換機到當前域根的路徑開銷
指定交換設備ID就是發送這個報文的交換機的ID
指定端口ID就是發送這個報文的交換機的端口ID
對比是按照從左往右的順序,值小者為優,給個報文的圖直觀一些
MSTI優先級向量用于計算生成區域內的生成樹和端口狀態等,計算范圍僅限區域內
{域根ID、內部路徑開銷、指定交換設備ID、指定端口ID、接收端口ID}
MSTP計算方法
每個BPDU既包含CIST計算所需的信息,也包含MSTI計算所需要的信息。
計算生成樹時候和RSTP類似,在進行CST計算時,會把MST域看做邏輯上的一個網橋,網橋ID為IST域根的ID也就是Master橋ID(距離總根最近的橋)。
當網橋收到BPDU并判斷不是同一個域后,不會解析MST專有字段的信息。
初始時每個網橋都認為自己是總根,發送以自己為總根、域根和指定橋的BPDU。
計算端口角色和交換機角色過程與RSTP相同。
CST(公共生成樹)的計算過程
需要對比的優先級向量為{總根、外部路徑開銷、域根、指定端口ID、接收端口ID},因為生成CST時候把相同的域當做一個網橋了,網橋ID為MST域的Master橋ID,所以自然無需對比內部路徑開銷和指定橋ID了。
初始時,每個域根向其他域根發送以自己為總根的BPDU。
確定“根網橋”(一個域看成一個網橋),也是CIST的總根。
確定端口角色“根端口”也就是一個域的Master端口,“根端口”的網橋也就是域根。
確定指定端口、Alternate端口或者Backup端口。
阻塞域之間的Alternate端口和Backup端口。
IST(內部生成樹)和MSTI(內部生成樹實例)的計算過程
經過CST的計算生成了域內的根橋(即Master橋)
所需要比較的優先級向量為MSTI優先級向量,即{域根ID、內部路徑開銷、指定交換設備ID、指定端口ID、接收端口ID}
域內網橋通過比較內部路徑開銷來確定根端口。
通過比較BPDU的優先級確定指定端口、Alternate端口或者Backup端口。
阻塞IST上的Alternate端口和Backup端口。
MSTP與RSTP交互
RSTP網橋收到MSTP的BPDU時,會將MSTP的BPDU報文里的CIST總根ID,外部路徑開銷,域根ID,指定端口ID分別與RSTP的BPDU報文里的根橋ID,根橋開銷,指定橋ID,指定端口ID對應。
MSTP網橋收到RSTP的BPDU時,會將RSTP的BPDU報文里的根橋ID,根橋開銷,指定橋ID,指定端口ID分別與MSTP的BPDU報文里的CIST總根ID,外部路徑開銷,域根ID,指定端口ID對應。
P/A快速收斂機制
MSTP支持RSTP的快速收斂機制,但有不同點。詳細的可以看上面的RSTP的P/A機制,這里只寫區別。
RSTP是上游交換機指定端口發送Proposal置位的BPDU,下游網橋執行同步操作之后回應Agreement置位的BPDU,上游網橋收到Agreement置位的BPDU后其指定端口可以立即進入轉發狀態。
MSTP是上游交換機指定端口發送Proposal置位和Agreement置位的BPDU,下游網橋收到BPDU后執行同步操作然后回應Agreement置位的BPDU,上游網橋收到Agreement置位的BPDU后其指定端口可以立即進入轉發狀態。
補充
MSTP和實例相關的講的較少,因為同一個MST域中可以有多個實例,每個實例可以運行通過一個或n個VLAN,但是一個VLAN只能存在一個實例中,然后每個實例都會各自生成生成樹,除了IST(實例為0)的根節點是Master橋,其余實例都是按照RSTP類似方法計算出各自實例自己的根橋,指定橋,根端口和指定端口的。
MSTP因為有多個實例,每個端口上對實例的狀態可能不一樣,比如在實例1端口為根端口,實例2上這個端口為指定端口,所以會出現端口既會發BPDU報文也會收BPDU報文。
拓撲改變的處理和RSTP相同。
MSTP比RSTP就是多了分區域多實例,細化看,每個實例運行的都是RSTP。
RSTP和MSTP啟動時簡單介紹
當一臺交換設備啟動RSTP和MSTP時候,會默認自己為根橋,且所有使能RSTP或者MSTP的端口都為指定端口Discarding狀態,這樣就會觸發P/A快速機制,當一個指定端口發送P/A機制報文沒收到對端發送過來的回復報文,則需要經過2倍的Forward delay時間才能到轉發態。假如下游有一個交換設備同時開啟了RSTP或者MSTP,則都會發送P/A機制報文,收到報文后兩個指定端口會對比報文確定自己的角色從而繼續P/A快速機制。P/A會阻塞除邊緣端口和根端口外的其他所有端口,端口兩兩進行這種操作從而生成整個生成樹。
MSTP啟動時,多個實例都會在互不干擾的生成對應的生成樹,類似多線程一樣。
MSTP收到其他區域報文時候,只會對比CIST的信息,MIST內容會忽略。
審核編輯:郭婷
-
交換機
+關注
關注
21文章
2622瀏覽量
99266
原文標題:MSTP(802.1S,Multiple Spanning Tree Protocol,多生成樹協議)
文章出處:【微信號:網絡技術干貨圈,微信公眾號:網絡技術干貨圈】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論