STP協議詳解

一.STP:
在談本主題以前,先簡單的對STP(802.1d)作個回顧.STP是用於打破層2環路的協議,但這個協議有個最明顯的缺點,就是當層2網絡從新收斂的時候,至少要等待50秒的時間(轉發延遲+老化時間).50秒的時間對於一個大型的層2網絡來講,是一個漫長的過程(況且這只是個理論時間,實際狀況還會更長).雖然CISCO對STP的這些缺點開發出了些彌補性的特性,好比Port Fast,Uplink Fast和Backbone Fast,用於加快層2網絡的收斂時間.套用王朔的話"看上去很美".雖然這些"新"特性可以改善STP的一些不足,可是,這些特性是CISCO私有的,而非行業標準;此外,這些特性要求咱們作額外的配置,若是缺少對這些技術的理解,還有可能致使環路問題.算法

二.RSTP:
RSTP是IEEE 802.1w標準定義的,目的就是爲了改進STP的一些不足,而且在某些狀況下,RSTP要比以前所提到的那些Port Fast,Uplink Fast和Backbone Fast技術更爲方便.可是在比較古老的交換機型號中好比CATALYST 2900XL/3500XL裏,不支持RSTP與RPVST+(或叫PVRST+),還有些型號好比CATALYST 2948G-L3/4908G-L3,CATALYST 5000/5500和CATALYST 8500不支持RSTP.網絡

802.1d標準中對端口狀態的定義有:
1.監聽(listening).
2.學習(learning).
3.堵塞(blocking).
4.轉發(forwarding).
5.禁用(disabled).app

802.1w標準中對端口狀態的定義有:
1.丟棄(discarding).
2.堵塞(blocking).
3.轉發(forwarding).
丟棄狀態,實際上就相似802.1d中監聽,學習和禁用狀態的集合.負載均衡

在802.1w中,根端口(root port,RP)指定端口(designated port,DP)仍然得以保留;而堵塞端口被改進爲備份端口(backup port,BP)替代端口(alternate port,AP).不過,生成樹算法(STA)仍然是依據BPDU決定端口的角色.和802.1d中對RP的定義同樣,到達根橋(root bridge)最近的端口即爲RP.一樣的,每一個橋接網段上,經過比較BPDU,決定出誰是DP.一個橋接網段上只能有一個DP(同時出現兩個的話就造成了層2環路).ide

在802.1d中,非RP和DP的端口,它的狀態就爲堵塞狀態,這種狀態雖然不轉發數據,可是仍然須要接收BPDU來保持處於堵塞狀態.AP和BP一樣也是這樣.AP提供了到達根橋的替代路徑,所以,一旦RP掛掉後,AP能夠取代RP的位置.BP也提供了到達同一橋接網段以及AP所不能保證到根橋鏈接性的冗餘鏈路.性能

理解透徹--802.1d,802.1w,802.1s與802.1q

在RSTP裏,BPDU的格式稍稍變化了一些,在802.1d裏,BPDU只有兩個標籤選項:
1.拓撲改變(TC).
2.拓撲改變確認(TCA).
而RSTP中的BPDU採用的是版本2的BPDU,換句話說802.1d網橋將丟棄這種新的BPDU.這種新的BPDU,在原先的BPDU基礎上增長了6個標籤選項:學習

理解透徹--802.1d,802.1w,802.1s與802.1q

BPDU的處理方式,和802.1d也有些不一樣,取代原先的BPDU中繼方式(非根橋的RP收到來自根橋的BPDU後,會從新生成一份BPDU朝下游交換機發送出去),802.1w裏的每一個網橋,在BPDU hello time(默認2秒)的時間裏生成BPDU發送出去(即便沒有從根橋那裏接收到任何BPDU).若是在連續3個hello time裏沒有收到任何BPDU,那麼BPDU信息將超時不被予以信任.所以,在802.1w裏,BPDU更像是一種保活(keepalive)機制.即,若是連續三次未收到BPDU,那麼網橋將認識它丟失了到相鄰網橋RP或DP的鏈接.這種快速老化的方式使得鏈路故障能夠很快的被檢測出來.優化

在RSTP裏,相似Backbone Fast的下級BPDU(inferior BPDU)也被集成進去.當交換機收到來自RP或DP的下級BPDU時,它(這裏指B)馬上替換掉以前的BPDU並進行存儲:spa

理解透徹--802.1d,802.1w,802.1s與802.1q


如上圖,因爲C知道根橋仍然是可用的,它就馬上向B發送關於根橋的BPDU信息.結果是B中止發送它本身的BPDU,接收來自C的BPDU信息並將鏈接到C的端口作爲新的RP.3d

傳統的802.1d標準裏,STA是被動的等待層2網絡的收斂(因爲轉發延遲的定義).對STP默認的計時器進行修改,可能又會致使STP的穩定性問題;而RSTP能夠主動的將端口當即轉變爲轉發狀態,而無需經過調整計時器的方式去縮短收斂時間.爲了可以達到這種目的,就出現了兩個新的變量:邊緣端口(edge port)和鏈路類型(link type).

邊緣端口(EP)的概念,和CISCO中Port Fast特性很是類似.因爲鏈接端工做站的端口,是不可能致使層2環路的,所以這類端口就沒有必要通過監聽和學習狀態,從而能夠直接轉變爲轉發狀態.可是和Port Fast不一樣的是,一旦EP收到了BPDU,它將當即轉變爲普通的RSTP端口:

理解透徹--802.1d,802.1w,802.1s與802.1q

RSTP快速轉變爲轉發狀態的這一特性,能夠在EP點到點鏈路上實現的.因爲全雙工操做的端口被認爲是點到點型的鏈路;半雙工端口被認爲是共享型鏈路.所以RSTP會將全雙工操做的端口當成是點到點鏈路,從而達到快速收斂.

理解透徹--802.1d,802.1w,802.1s與802.1q

當STA決定出DP後,對於802.1d,仍然要等待30秒的轉發延遲才能進入轉發狀態;在802.1w裏:

理解透徹--802.1d,802.1w,802.1s與802.1q

假設根橋和交換機A之間建立了一條新的鏈路,鏈路兩端的端口剛開始均處於堵塞狀態,直到收到對方的BPDU.當DP處於丟棄或者學習狀態,它將在本身將要發送出去的BPDU裏設置提議位(proposal bit),如上圖的p0和步驟1.因爲交換機A收到了上級(superior)信息,它將意識到本身的P1應該當即成爲RP.此時交換機A將採起同步(sync)動做,將該上級BPDU信息洪泛到其餘的全部端口上並保證這些端口處於同步狀態(in-sync).

當端口知足下列標準之一時,即處於同步狀態:
1.端口爲EP.
2.端口爲堵塞狀態
(即丟棄,或者爲穩定拓撲).

假設交換機A的P2爲AP,P3爲DP,P4爲EP.P2和P4知足上述標準之一,所以爲了處於同步狀態,交換機A將堵塞P3,指定它爲丟棄狀態,其餘端口處於同步狀態(步驟2).交換機A將解除P1的堵塞狀態作爲新的RP,並向根橋反饋確認信息(步驟3),這個信息實際上是以前步驟1所發的提議BPDU信息的拷貝,只不過是把提議位設置成了承認位(agreement bit).當P0收到這個承認信息後,它當即進入轉發狀態.因爲P3以前被堵塞了,當步驟3完成後,P3也執行以前P0所通過的步驟1,向下遊交換機發出提議BPDU信息,嘗試快速進入轉發狀態.依次類推.

因爲提議機制很是迅速,所以RSTP不需依賴任何計時器.若是一個指定爲丟棄狀態的端口,在發出提議BPDU信息後沒有收到承認信息,該端口會回退到802.1d標準,從監聽到學習,再慢慢進入轉發狀態.這種狀況多發生在不理解RSTP BPDU的交換機端口上.

RSTP裏另一個快速進入轉發狀態的機制,和CISCO對STP的擴展技術Uplink Fast很類似.當網橋丟失了RP後,它會把本身的AP直接設置爲轉發狀態(新的RP).所以對於RSTP來講,Uplink Fast的特性無需手動配置.還有一點和802.1d不一樣的是,當交換機檢測到拓撲變化後,產生TC信息,直接洪泛給整個網絡,而無需像802.1d那樣先報告給根橋:

理解透徹--802.1d,802.1w,802.1s與802.1q

三.MST:
MST是由IEEE 802.1s標準制定,來自CISCO私的MISTP協議(Multiple Instances Spanning Tree Protocol).和RSTP同樣,MST在某些CATALYST交換機上也不支持,好比:CATALYST 2900/3500XL,CATALYST 2948G-L3/4908G-L3,CATALYST 5000/5500以及CATALYST 8500.

簡單的說,STP/RSTP是基於端口的,PVST/PVST+是基於VLAN的,而MISTP就是基於實例的.所謂實例就是多個VLAN的一個集合,經過多個vlan捆綁到一個實例中去的方法能夠節省通訊開銷和資源佔用率.

在談MST以前先說說關於trunk的原始版本IEEE 802.1q,該標準制定了CST(Common Spanning Tree).CST假定整個層2網絡只有一個STP的實例,也就是說無論整個層2網絡劃分了多少個VLAN,都只有一個STP的實例.CST的一些優劣:
1.缺點:沒法實現STP的負載均衡.
2.優勢:節約CPU資源,整個層2網絡只須要維護一個STP的實例.

後續的802.1q加強了對VLAN的支持,出現了PVST+(每1個VLAN有1個STP的實例).

802.1s結合了PVST+802.1q的優勢,將多個VLAN映射到較少的STP實例.以前的PVST+的優勢,能夠實現STP的負載均衡,對CPU資源是個負擔.而MST(802.1S)減小了沒必要要的STP的實例.以下圖,假設D1和D2分別爲VLAN 1到500和VLAN 501到1000的根橋,若是用PVST+,就將有1000個STP的實例,可是實際上整個層2網絡只有2個邏輯拓撲,因此優化辦法是將STP的實例減小到2個,同時保留STP負載均衡的優勢:

理解透徹--802.1d,802.1w,802.1s與802.1q

從技術角度來看,MST的確是最佳解決方案,可是對端用戶而言卻並非必需的,由於MST一般要求比802.1d和802.1w更爲複雜的配置,而且還可能遇到與802.1d的協同操做問題.

之間提到了,多個VLAN能夠映射到一個STP的實例上.可是,決定哪一個VLAN和哪一個STP實例相關聯,以及BPDU的標籤方式以便交換機能夠鑑別出VLAN與STP實例信息,這是個問題.這個時候就出現了一個相似BGP裏AS的概念:區域(Region).MST的區域是指處於同一管理範圍的交換機組.爲了可以成爲MST區域裏的一部分,交換機必須享有相同的配置屬性:
1.以26個字母命名的配置名(32字節).
2.配置修正號(2字節).
3.對應4096個VLAN的元素表
.

在作VLAN到STP實例映射的時候,要先定義MST的區域,但這個信息不會在BPDU裏傳播,由於對於交換機來講,它只須要知道本身鄰居交換機是否處於同一個MST區域.所以,只有一份VLAN到STP實例的映射摘要信息,配置修正號,與配置名隨着BPDU被傳播出.當交換機端口收到該BPDU後,它將解讀該摘要信息,和自身的摘要信息作個比較,若是結果不一樣,那麼該端口將成爲MST區域的邊界:

理解透徹--802.1d,802.1w,802.1s與802.1q

根據802.1s的定義,MST網橋必須可以處理至少兩種實例:
1.一個IST(Internal Spanning Tree).--->(single spanning tree,單生成樹)
2.一個或多個MSTI(Multiple Spanning Tree Instance).

IST是一種RSTP實例,它擴展了MST區域內的802.1D單一輩子成樹.IST鏈接全部MST網橋,並從邊界端口發出,做爲貫穿整個網橋域的虛擬網橋.

MST實例(MSTI)是一種僅存在於區域內部的RSTP實例.它能夠默認運行RSTP,無須額外配置.不一樣於IST的是,MSTI在區域外既不與BPDU交互,也不發送BPDU.

cisco實例定義了16種實例:一個IST(實例0)和15個MSTI,而IEEE 802.1S則支持一個IST和63個MSTI.
固然到目前爲止,802.1s只是個"準標準",這些術語可能隨着最終版的802.1s而有不一樣的叫法.CISCO支持1個IST和15個MSTI.

因爲MST源自IEEE 802.1s,所以,要必須讓802.1s和802.1q(CST)協同操做.IST實例向CST發送或從CST那裏接收BPDU.IST實例實際上是RSTP實例的簡化,它擴展了MST區域裏的CST.IST能夠看作CST外部的整個MST區域的表明:

理解透徹--802.1d,802.1w,802.1s與802.1q

如上圖,這兩種圖例職能相同.在典型的802.1d環境裏,你可能會看到堵塞M和B之間的通訊;一樣的,你可能指望堵塞圖中MST區域裏(MST Region)的某個端口(而不是堵塞D).可是,因爲IST是作爲整個MST區域(MST REgion)表明,所以,你看到的就是對B和D的堵塞.

MSTI也是RSTP的簡化版實例,它只存在於MST區域的內部.MSTI默認自動運行RSTP,而無需額外的配置.和IST不一樣的是,MSTI永遠不會和MST區域(MST Region)外部通訊.另外,只有IST會向MST區域(MST Region)外發送BPDU,而MSTI不會.在MST區域內,網橋相互交換MST BPDU,這些MST BPDU對IST來講能夠當作是RSTP BPDU.

配置MST示例:
Switch(config)# spanning-tree mst configuration /---進入MST配置模式---/
Switch(config-mst)# instance 1 vlan 10-20 /---將VLAN 10到20映射到實例1裏,VLAN範圍爲1-4094,實例範圍爲0-4094---/
Switch(config-mst)# name region1 /---命名MST區域,32字節長的字符,大小寫敏感---/
Switch(config-mst)# revision 1 /---配置修正號,範圍是0到65535---/
Switch(config-mst)# show pending /---顯示等待用戶確認的配置信息---/

Pending MST configuration
Name [region1]
Revision 1
Instance Vlans Mapped
-------- ---------------------
0 1-9,21-4094
1 10-20
-------------------------------

Switch(config-mst)# exit /---應用配置並退出MST配置模式---/
Switch(config)# spanning-tree mode mst /---啓用MST,同時讓RSTP生效---/

指定MST根橋與配置MST網橋的優先級:
Switch(config)# spanning-tree mst {instance-id} root {primary|secondary} [diameter net-diameter [hello-time ses]]
對於MST,半徑範圍只能爲0;默認配置信息2秒發送1次,可選修改範圍爲1-10秒.
Switch(config)# spanning-tree mst {instance-id} priority {priority}
端口優先級的值範圍是0-61440,以4096遞增,值越低,優先級越高,默認爲32768.

配置MST端口優先級與路徑開銷:
Switch(config)# spanning-tree mst {instance-id} port-priority {priority}
端口優先級的值範圍是0-240,以16遞增,值越低,優先級越高.
Switch(config)# spanning-tree mst {instance-id} cost {cost}
路徑開銷的值範圍是1到200000000,取決於接口帶寬.

配置MST的相關計時器:
Switch(config)# spanning-tree mst hello-time {sec}
默認配置信息2秒發送1次,可選修改範圍爲1-10.
Switch(config)# spanning-tree mst forward-time {sec}
默認轉發延遲爲15秒,可選修改範圍爲4-30.
Switch(config)# spanning-tree mst max-age {sec}
指定MST實例的最大生存週期,默認爲20秒,可選修改範圍爲6-40.

指定BPDU的最大跳數:
Switch(config)# spanning-tree mst max-hops {hop-count}
默認爲20跳,可選修改範圍爲1-255.

定義鏈路類型爲點到點:
Switch(config-if)# spanning-tree link-type point-to-point

一些驗證命令:Switch#show spanning-tree mst configuration驗證MST區域信息.Switch#show spanning-tree mst [instance-id]驗證MST實例信息.Switch#show spanning-tree mst interface [interface-id]驗證特定接口的MST實例信息.

相關文章
相關標籤/搜索