生成樹協(xié)議的發(fā)展過程
生成樹協(xié)議是一種二層管理協(xié)議,它通過有選擇性地阻塞網(wǎng)絡(luò)冗余鏈路來達(dá)到消除網(wǎng)絡(luò)二層環(huán)路的目的,同時(shí)具備鏈路的備份功能。
由于生成樹協(xié)議本身比較小,所以并不像路由協(xié)議那樣廣為人知。但是它卻掌管著端口的轉(zhuǎn)發(fā)大權(quán)—“小樹枝抖一抖,上層協(xié)議就得另謀生路”。真實(shí)情況也確實(shí)如此,特別是在和別的協(xié)議一起運(yùn)行的時(shí)候,生成樹就有可能斷了其他協(xié)議的報(bào)文通路,造成種種奇怪的現(xiàn)象。
生成樹協(xié)議和其他協(xié)議一樣,是隨著網(wǎng)絡(luò)的不斷發(fā)展而不斷更新?lián)Q代的。本文標(biāo)題中的“生成樹協(xié)議”是一個(gè)廣義的概念,并不是特指IEEE 802.1D中定義的STP協(xié)議,而是包括STP以及各種在STP基礎(chǔ)上經(jīng)過改進(jìn)了的生成樹協(xié)議。
在生成樹協(xié)議發(fā)展過程中,老的缺陷不斷被克服,新的特性不斷被開發(fā)出來。按照大功能點(diǎn)的改進(jìn)情況,我們可以粗略地把生成樹協(xié)議的發(fā)展過程劃分成三代,下面一一道來。
STP/RSTP
在網(wǎng)絡(luò)發(fā)展初期,透明網(wǎng)橋是一個(gè)不得不提的重要角色。它比只會(huì)放大和廣播信號(hào)的集線器聰明得多。它會(huì)悄悄把發(fā)向它的數(shù)據(jù)幀的源MAC地址和 端口號(hào)記錄下來,下次碰到這個(gè)目的MAC地址的報(bào)文就只從記錄中的端口號(hào)發(fā)送出去,除非目的MAC地址沒有記錄在案或者目的MAC地址本身就是多播地址才 會(huì)向所有端口發(fā)送。通過透明網(wǎng)橋,不同的局域網(wǎng)之間可以實(shí)現(xiàn)互通,網(wǎng)絡(luò)可操作的范圍得以擴(kuò)大,而且由于透明網(wǎng)橋具備MAC地址學(xué)習(xí)功能而不會(huì)像Hub那樣 造成網(wǎng)絡(luò)報(bào)文沖撞泛濫。
但是,金無足赤,透明網(wǎng)橋也有它的缺陷,它的缺陷就在于它的透明傳輸。透明網(wǎng)橋并不能像路由器那樣知 道報(bào)文可以經(jīng)過多少次轉(zhuǎn)發(fā),一旦網(wǎng)絡(luò)存 在環(huán)路就會(huì)造成報(bào)文在環(huán)路內(nèi)不斷循環(huán)和增生,甚至造成恐怖的“廣播風(fēng)暴”。之所以用“恐怖”二字是因?yàn)樵谶@種情況下,網(wǎng)絡(luò)將變得不可用,而且在大型網(wǎng)絡(luò)中 故障不好定位,所以廣播風(fēng)暴是二層網(wǎng)絡(luò)中災(zāi)難性的故障。
在這種大環(huán)境下,扮演著救世主角色的STP(Spanning TreeProtocol)協(xié)議來到人間,其中以IEEE的802.1D版本最為流行。
圖1 生成樹工作過程示意圖
STP協(xié)議的基本思想十分簡(jiǎn)單。大家知道,自然界中生長(zhǎng)的樹是不會(huì)出現(xiàn)環(huán)路的,如果網(wǎng)絡(luò)也能夠像一棵樹一樣生長(zhǎng)就不會(huì)出現(xiàn)環(huán)路。于 是,STP協(xié)議中定義了根橋(RootBridge)、根端口(RootPort)、指定端口(DesignatedPort)、路徑開銷 (PathCost)等概念,目的就在于通過構(gòu)造一棵自然樹的方法達(dá)到裁剪冗余環(huán)路的目的,同時(shí)實(shí)現(xiàn)鏈路備份和路徑最優(yōu)化。用于構(gòu)造這棵樹的算法稱為生成 樹算法SPA(Spanning TreeAlgorithm)。
要實(shí)現(xiàn)這些功能,網(wǎng)橋之間必須要進(jìn)行一些信息的交流,這些 信息交流單元就稱為配置消息BPDU(BridgeProtocol Data Unit)。STP BPDU是一種二層報(bào)文,目的MAC是多播地址01-80-C2-00-00-00,所有支持STP協(xié)議的網(wǎng)橋都會(huì)接收并處理收到的BPDU報(bào)文。該報(bào)文 的數(shù)據(jù)區(qū)里攜帶了用于生成樹計(jì)算的所有有用信息。
要了解生成樹協(xié)議的工作過程也不難,首先進(jìn)行根橋的選舉。選舉的依據(jù)是網(wǎng)橋 優(yōu)先級(jí)和網(wǎng)橋MAC地址組合成的橋ID(Bridge ID),橋ID最小的網(wǎng)橋?qū)⒊蔀榫W(wǎng)絡(luò)中的根橋。在圖1所示的網(wǎng)絡(luò)中,各網(wǎng)橋都以默認(rèn)配置啟動(dòng),在網(wǎng)橋優(yōu)先級(jí)都一樣(默認(rèn)優(yōu)先級(jí)是32768)的情況 下,MAC地址最小的網(wǎng)橋成為根橋,例如圖1中的SW1,它的所有端口的角色都成為指定端口,進(jìn)入轉(zhuǎn)發(fā)狀態(tài)。
接下來,其他網(wǎng)橋 將各自選擇一條 “最粗壯”的樹枝作為到根橋的路徑,相應(yīng)端口的角色就成為根端口。假設(shè)圖1中SW2和SW2、SW3之間的鏈路是千兆GE鏈路,SW1和SW3之間的鏈路 是百兆FE鏈路,SW3從端口1到根橋的路徑開銷的默認(rèn)值是19,而從端口2經(jīng)過SW2到根橋的路徑開銷是4+4=8,所以端口2成為根端口,進(jìn)入轉(zhuǎn)發(fā)狀 態(tài)。同理,SW2的端口2成為根端口,端口1成為指定端口,進(jìn)入轉(zhuǎn)發(fā)狀態(tài)。
根橋和根端口都確定之后一棵樹就生成了,如圖中實(shí)線所示。下面的任務(wù)是裁剪冗余的環(huán)路。這個(gè)工作是通過阻塞非根橋上相應(yīng)端口來實(shí)現(xiàn)的,例如SW3的端口1的角色成為禁用端口,進(jìn)入阻塞狀態(tài)(圖中用“×”表示)。
#p#
生成樹經(jīng)過一段時(shí)間(默認(rèn)值是30秒左右)穩(wěn)定之后,所有端口要么進(jìn)入轉(zhuǎn)發(fā)狀態(tài),要么進(jìn)入阻塞狀態(tài)。STPBPDU仍然會(huì)定時(shí)從各個(gè)網(wǎng)橋的指定端口發(fā)出,以維護(hù)鏈路的狀態(tài)。如果網(wǎng)絡(luò)拓?fù)浒l(fā)生變化,生成樹就會(huì)重新計(jì)算,端口狀態(tài)也會(huì)隨之改變。
當(dāng)然生成樹協(xié)議還有很多內(nèi)容,在這里不可能一一介紹。之所以花這么多筆墨介紹生成樹的基本原理是因?yàn)樗?ldquo;基本”了,其他各種改進(jìn)型的生成樹協(xié)議都是以此為基礎(chǔ)的,基本思想和概念都大同小異。
STP協(xié)議給透明網(wǎng)橋帶來了新生。但是,隨著應(yīng)用的深入和網(wǎng)絡(luò)技術(shù)的發(fā)展,它的缺點(diǎn)在應(yīng)用中也被暴露了出來。STP協(xié)議的缺陷主要表現(xiàn)在收斂速度上。
當(dāng)拓?fù)浒l(fā)生變化,新的配置消息要經(jīng)過一定的時(shí)延才能傳播到整個(gè)網(wǎng)絡(luò),這個(gè)時(shí)延稱為Forward Delay,協(xié)議默認(rèn)值是15秒。在所有網(wǎng)橋收到這個(gè)變化的消息之前,若舊拓?fù)浣Y(jié)構(gòu)中處于轉(zhuǎn)發(fā)的端口還沒有發(fā)現(xiàn)自己應(yīng)該在新的拓?fù)渲型V罐D(zhuǎn)發(fā),則可能存在 臨時(shí)環(huán)路。為了解決臨時(shí)環(huán)路的問題,生成樹使用了一種定時(shí)器策略,即在端口從阻塞狀態(tài)到轉(zhuǎn)發(fā)狀態(tài)中間加上一個(gè)只學(xué)習(xí)MAC地址但不參與轉(zhuǎn)發(fā)的中間狀態(tài),兩 次狀態(tài)切換的時(shí)間長(zhǎng)度都是Forward Delay,這樣就可以保證在拓?fù)渥兓臅r(shí)候不會(huì)產(chǎn)生臨時(shí)環(huán)路。但是,這個(gè)看似良好的解決方案實(shí)際上帶來的卻是至少兩倍Forward Delay的收斂時(shí)間!
為了解決STP協(xié)議的這個(gè)缺陷,在世紀(jì)之初IEEE推出了802.1w標(biāo)準(zhǔn),作為對(duì)802.1D標(biāo)準(zhǔn)的補(bǔ) 充。在IEEE 802.1w標(biāo)準(zhǔn)里定義了快速生成樹協(xié)議RSTP(Rapid Spanning Tree Protocol)。RSTP協(xié)議在STP協(xié)議基礎(chǔ)上做了三點(diǎn)重要改進(jìn),使得收斂速度快得多(最快1秒以內(nèi))。
第一點(diǎn)改進(jìn):為 根端口和指定端口設(shè)置了快速切換用的替換端口(Alternate Port)和備份端口(Backup Port)兩種角色,當(dāng)根端口/指定端口失效的情況下,替換端口/備份端口就會(huì)無時(shí)延地進(jìn)入轉(zhuǎn)發(fā)狀態(tài)。圖2中所有網(wǎng)橋都運(yùn)行RSTP協(xié)議,SW1是根橋, 假設(shè)SW2的端口1是根端口,端口2將能夠識(shí)別這種拓?fù)浣Y(jié)構(gòu),成為根端口的替換端口,進(jìn)入阻塞狀態(tài)。當(dāng)端口1所在鏈路失效的情況下,端口2就能夠立即進(jìn)入 轉(zhuǎn)發(fā)狀態(tài),無需等待兩倍Forward Delay時(shí)間。
圖2 RSTP冗余鏈路快速切換示意圖
第二點(diǎn)改進(jìn):在只連接了兩個(gè)交換端口的點(diǎn)對(duì)點(diǎn)鏈路中,指定端口只需與下游網(wǎng)橋進(jìn)行一次握手就可以無時(shí)延地進(jìn)入轉(zhuǎn)發(fā)狀態(tài)。如果是連接了三個(gè)以上網(wǎng)橋的共享鏈路,下游網(wǎng)橋是不會(huì)響應(yīng)上游指定端口發(fā)出的握手請(qǐng)求的,只能等待兩倍Forward Delay時(shí)間進(jìn)入轉(zhuǎn)發(fā)狀態(tài)。
第三點(diǎn)改進(jìn):直接與終端相連而不是把其他網(wǎng)橋相連的端口定義為邊緣端口(Edge Port)。邊緣端口可以直接進(jìn)入轉(zhuǎn)發(fā)狀態(tài),不需要任何延時(shí)。由于網(wǎng)橋無法知道端口是否是直接與終端相連,所以需要人工配置。
可見,RSTP協(xié)議相對(duì)于STP協(xié)議的確改進(jìn)了很多。為了支持這些改進(jìn),BPDU的格式做了一些修改,但RSTP協(xié)議仍然向下兼容STP協(xié) 議,可以混合組網(wǎng)。雖然如此,RSTP和STP一樣同屬于單生成樹SST(SingleSpanning Tree),有它自身的諸多缺陷,主要表現(xiàn)在三個(gè)方面。
第一點(diǎn)缺陷:由于整個(gè)交換網(wǎng)絡(luò)只有一棵生成樹,在網(wǎng)絡(luò)規(guī)模比較大的時(shí)候會(huì)導(dǎo)致較長(zhǎng)的收斂時(shí)間,拓?fù)涓淖兊挠绊懨嬉草^大。
第二點(diǎn)缺陷:近些年IEEE802.1Q大行其道,逐漸成為交換機(jī)的標(biāo)準(zhǔn)協(xié)議。在網(wǎng)絡(luò)結(jié)構(gòu)對(duì)稱的情況下,單生成樹也沒什么大礙。但是,在網(wǎng)絡(luò)結(jié)構(gòu)不對(duì)稱的時(shí)候,單生成樹就會(huì)影響網(wǎng)絡(luò)的連通性。
圖3 非對(duì)稱網(wǎng)絡(luò)示意圖
圖3中假設(shè)SW1是根橋,實(shí)線鏈路是VLAN 10,虛線鏈路是802.1Q的Trunk鏈路,Trunk了VLAN 10和VLAN 20.當(dāng)SW2的Trunk端口被阻塞的時(shí)候,顯然SW1和SW2之間VLAN 20的通路就被切斷了。
第三點(diǎn)缺陷:當(dāng)鏈路被阻塞后將不承載任何流量,造成了帶寬的極大浪費(fèi),這在環(huán)行城域網(wǎng)的情況下比較明顯。
圖4 SST帶寬利用率低下示意圖
圖4中假設(shè)SW1是根橋,SW4的一個(gè)端口被阻塞。在這種情況下,SW2和SW4之間鋪設(shè)的光纖將不承載任何流量,所有SW2和SW4之間的業(yè)務(wù)流量都將經(jīng)過SW1和SW3轉(zhuǎn)發(fā),增加了其他幾條鏈路的負(fù)擔(dān)。
這些缺陷都是單生成樹SST無法克服的,于是支持VLAN的多生成樹協(xié)議出現(xiàn)了。
#p#
聰明伶俐的第二代生成樹協(xié)議:
PVST/PVST+
每個(gè)VLAN都生成一棵樹是一種比較直接,而且最簡(jiǎn)單的解決方法。它能夠保證每一個(gè)VLAN都不存在環(huán)路。但是由于種種原因,以這種方式工 作的生成樹協(xié)議并沒有形成標(biāo)準(zhǔn),而是各個(gè)廠商各有一套,尤其是以Cisco的VLAN生成樹PVST(Per VLAN Spanning Tree)為代表。
為了攜帶更多的信息,PVSTBPDU的格式和STP/RSTPBPDU格式已經(jīng)不一樣,發(fā)送的目的地址也 改成了Cisco保留地址 01-00-0C-CC-CC-CD,而且在VLAN Trunk的情況下PVST BPDU被打上了802.1Q VLAN標(biāo)簽。所以,PVST協(xié)議并不兼容STP/RSTP協(xié)議。
Cisco很快又推出了經(jīng)過改進(jìn)的PVST+協(xié)議,并成為了 交換機(jī)產(chǎn)品的默認(rèn)生成樹協(xié)議。經(jīng)過改進(jìn)的PVST+協(xié)議在VLAN 1上運(yùn)行的是普通STP協(xié)議,在其他VLAN上運(yùn)行PVST協(xié)議。PVST+協(xié)議可以與STP/RSTP互通,在VLAN 1上生成樹狀態(tài)按照STP協(xié)議計(jì)算。在其他VLAN上,普通交換機(jī)只會(huì)把PVST BPDU當(dāng)作多播報(bào)文按照VLAN號(hào)進(jìn)行轉(zhuǎn)發(fā)。但這并不影響環(huán)路的消除,只是有可能VLAN 1和其他VLAN的根橋狀態(tài)可能不一致。
圖5 PVST+與SST對(duì)接示意圖
圖5中所有鏈路默認(rèn)VLAN是VLAN 1,并且都Trunk了VLAN 10和VLAN 20.SW1和SW3運(yùn)行單生成樹SST協(xié)議,而SW2運(yùn)行PVST+協(xié)議。在VLAN 1上,可能SW1是根橋,SW2的端口1被阻塞。在VLAN 10和VLAN 20上,SW2只能看到自己的PVSTBPDU,所以在這兩個(gè)VLAN上它認(rèn)為自己是根橋。VLAN 10和VLAN 20的PVST BPDU會(huì)被SW1和SW3轉(zhuǎn)發(fā),所以SW2檢測(cè)到這種環(huán)路后,會(huì)在端口2上阻塞VLAN 10和VLAN 20.這就是PVST+協(xié)議提供的STP/RSTP兼容性??梢钥闯?,網(wǎng)絡(luò)中的二層環(huán)路能夠被識(shí)別并消除,強(qiáng)求根橋的一致性是沒有任何意義的。