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

轉載請保留作者信息:
作者:紅頭髮(aka CCIE#15101/JNCIP Candidate)
出處:http://www.91lab.com

一.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).

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環路).

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

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

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時,它立刻替換掉之前的BPDU並進行存儲:


如上圖,由於C知道根橋仍然是可用的,它就立刻向B發送關於根橋的BPDU信息.結果是B停止發送它自己的BPDU,接收來自C的BPDU信息並將連接到C的端口做爲新的RP.

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

邊緣端口(EP)的概念,和CISCO中Port Fast特性非常相似.由於連接端工作站的端口,是不可能導致層2環路的,因此這類端口就沒有必要經過監聽和學習狀態,從而可以直接轉變爲轉發狀態.但是和Port Fast不同的是,一旦EP收到了BPDU,它將立即轉變爲普通的RSTP端口:

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

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

假設根橋和交換機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).當P2收到這個認可信息後,它立即進入轉發狀態.由於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那樣先報告給根橋:

三.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.

在談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減少了不必要的STP的實例.如下圖,假設D1和D2分別爲VLAN 1到500和VLAN 501到1000的根橋,如果用PVST+,就將有1000個STP的實例,但是實際上整個層2網絡只有2個邏輯拓撲,所以優化辦法是將STP的實例減少到2個,同時保留STP負載均衡的優點:

從技術角度來看,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.1s的定義,MST網橋必須能夠處理至少兩種實例:
1.一個IST(Internal Spanning Tree).
2.一個或多個MSTI(Multiple Spanning Tree Instance).
當然到目前爲止,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環境裏,你可能會看到堵塞M和B之間的通信;同樣的,你可能期望堵塞圖中MST區域裏的某個端口(而不是堵塞D).但是,由於IST是做爲整個MST區域的代表,因此,你看到的就是對B和D的堵塞.

MSTI也是RSTP的簡化版實例,它只存在於MST區域的內部.MSTI默認自動運行RSTP,而無需額外的配置.和IST不同的是,MSTI永遠不會和MST區域外部通信.另外,只有IST會向MST區域外發送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實例信息.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章