劉東旭 馬亞琦
摘要:生成樹算法的網(wǎng)橋協(xié)議STP(Spanning Tree Protocol) 它通過自動形成生成樹使得在網(wǎng)絡(luò)中一個透明的網(wǎng)橋以動態(tài)方式在復(fù)雜的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)中沿環(huán)狀工作。網(wǎng)絡(luò)中的環(huán)路由網(wǎng)橋之間通過交換配置橋協(xié)議數(shù)據(jù)單元消息來進(jìn)行監(jiān)測,通過關(guān)閉選擇的網(wǎng)橋接口的方式破除環(huán)路。局域網(wǎng)通常由多種網(wǎng)絡(luò)設(shè)備相互連接形成,我們只有消除網(wǎng)絡(luò)中的環(huán)路才能有效降低廣播風(fēng)暴的發(fā)生,也就是說網(wǎng)絡(luò)中的鏈路應(yīng)組成樹形的無環(huán)路結(jié)構(gòu),使用STP(生成樹協(xié)議)就可以解決這樣的問題。
關(guān)鍵詞:生成樹協(xié)議;路徑回環(huán);冗余鏈路
中圖分類號:TP393? ? ? ? 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2020)02-0028-02
Abstract: Spinning Tree Protocol STP(Spinning Tree Protocol) of the spanning tree algorithm guarantees that a known bridge works dynamically along a ring in the network topology by generating a generating tree. Bridges exchange BPDU messages with other bridges to monitor the loop, and then close the selected bridge interface to cancel the loop. A local network is usually made up of multiple switches. In order to avoid broadcast storms, we need to ensure that there is no path loop in the network, that is, all links should form a tree without loop. The STP(Spanning Tree Protocol) on the switch implements this function.
Key words: spanning tree protocol; path loop; redundant link
1 透明網(wǎng)橋以及廣播風(fēng)暴的危害
首先大家所熟知的計算機(jī)網(wǎng)絡(luò)中的透明網(wǎng)橋具有以下的特點(diǎn):
1) 將局域網(wǎng)中的一個IP地址段拓展到其他的IP地址段;
2) 在數(shù)據(jù)傳輸過程中,站點(diǎn)的地址信息被網(wǎng)橋記錄下來,網(wǎng)橋依據(jù)站點(diǎn)的地址轉(zhuǎn)發(fā)數(shù)據(jù)幀;
3) 網(wǎng)絡(luò)中IP地址段的沖突可以通過透明網(wǎng)橋加以控制。
封裝有源MAC地址的數(shù)據(jù)幀被網(wǎng)橋上的任意一個端口接收到后,網(wǎng)橋就把該MAC地址和流入該數(shù)據(jù)幀的端口號保存在物理地址列表中。MAC地址表可以顯示出接收到的MAC地址與對應(yīng)該網(wǎng)橋的哪個端口。當(dāng)數(shù)據(jù)幀傳到網(wǎng)橋時,通過查看MAC地址表對數(shù)據(jù)幀有三種處理結(jié)果:如果數(shù)據(jù)幀的目的端口和接收端口一致,則數(shù)據(jù)幀被完全丟棄;如果目的端口和接收端口不一致,則數(shù)據(jù)幀就從那個端口轉(zhuǎn)發(fā);如果目的地址的端口在MAC地址表中無法找到,則要以廣播的方式把數(shù)據(jù)幀從其他的出口廣播出去。另外如果廣播幀被網(wǎng)橋接收,那么網(wǎng)橋也會把廣播幀從其他端口廣播出去,由于網(wǎng)橋不具備路由器的功能,數(shù)據(jù)幀經(jīng)過網(wǎng)橋不會被修改,數(shù)據(jù)幀也不會記錄自己走過了多少個網(wǎng)橋,網(wǎng)絡(luò)中一旦有環(huán)路,環(huán)路就可能使報文在傳輸中不斷循環(huán)和增生,增加網(wǎng)絡(luò)負(fù)荷,造成擁堵,網(wǎng)絡(luò)中“路徑回環(huán)”問題的就由此而生。
在計算機(jī)網(wǎng)絡(luò)中,廣播風(fēng)暴以及環(huán)路是經(jīng)常發(fā)生的問題。發(fā)生后會大量消耗網(wǎng)絡(luò)帶寬,導(dǎo)致數(shù)據(jù)包無法正常地在網(wǎng)絡(luò)中傳送,從而導(dǎo)致數(shù)據(jù)的傳送的停滯、數(shù)據(jù)包的丟失等一系列問題,甚至導(dǎo)致整個局域網(wǎng)的癱瘓。如今使用最為廣泛的廣播風(fēng)暴預(yù)防措施是進(jìn)行STP的配置。預(yù)先破除網(wǎng)絡(luò)中的環(huán)路,從根源上抑制廣播風(fēng)暴以及環(huán)路的形成。
2 STP的基本原理及其作用
IEEE 802.1D規(guī)定了STP及其算法。一種特殊的配置消息在網(wǎng)絡(luò)中的網(wǎng)橋之間相互傳遞,將這種配置消息在802.1D中被定義為“配置BPDU”或者“配置橋協(xié)議數(shù)據(jù)單元”。這種特殊的配置消息中攜帶的信息可以讓網(wǎng)橋完成生成樹的計算,網(wǎng)絡(luò)交換設(shè)備會根據(jù)配置橋協(xié)議數(shù)據(jù)單元消息來完成以下的工作:
1) 在眾多進(jìn)行生成樹計算的網(wǎng)橋中,只有一個被推舉為根橋(Root Bridge);
2) 剩余的每個非根橋都會定義一個根端口(Root Port),根端口到達(dá)根橋的路徑是該網(wǎng)橋到根橋的最佳路徑;
3) 離根橋最近的那個網(wǎng)橋作為該IP地址段的指定網(wǎng)橋,指定網(wǎng)橋到該IP地址段的端口作為指定(Designated Port)端口,其主要功能是在該IP地址段上進(jìn)行數(shù)據(jù)轉(zhuǎn)發(fā);
4) 除指定端口和根端口之外的其他端口被置于阻塞狀態(tài)。
當(dāng)網(wǎng)絡(luò)中無回路時,網(wǎng)橋在網(wǎng)絡(luò)中發(fā)揮著重要作用。那么是不是回路不能生存在網(wǎng)絡(luò)中呢?這顯然也是不對的,因為當(dāng)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)中的某條鏈路因故斷開后,回路可以使網(wǎng)絡(luò)仍然處于連通的狀態(tài)。為此,生成樹算法將冗余鏈路斷開后,就可以把有回路的橋接網(wǎng)絡(luò)變?yōu)橐粋€無回路的樹型拓?fù)浣Y(jié)構(gòu),回路問題自然就被解決了,而且生成樹算法也可以在某條活動(active)的鏈路突然斷開時,通過激活被阻斷的冗余鏈路重新修剪拓?fù)浣Y(jié)構(gòu)以恢復(fù)網(wǎng)絡(luò)的連通。
3 BPDU的組成以及生成樹算法的實(shí)現(xiàn)過程
BPDU也被稱作配置消息,它主要包含四個方面的內(nèi)容:即橋接網(wǎng)絡(luò)中的根橋序列號,從指定網(wǎng)橋到根網(wǎng)橋的最短路徑,指定網(wǎng)橋序列號和指定端口序列號四項內(nèi)容。生成樹的計算就是網(wǎng)橋之間通過傳遞這四個方面的內(nèi)容來實(shí)現(xiàn)的。在實(shí)際傳輸過程中,我們可以用矢量形式(RootlD,RootPathCost,DesignatedBridgelD,DesignatedPortID)來表達(dá)每個網(wǎng)橋所發(fā)送的配置消息。
初始階段每個網(wǎng)橋只知道自身的存在,所以每個網(wǎng)橋自認(rèn)為自己是根橋并發(fā)送配置信息。當(dāng)網(wǎng)橋收到來自其他網(wǎng)橋發(fā)送的配置消息時,它就會把收到的配置消息和自身發(fā)送的配置信息進(jìn)行對比,看看哪個配置消息的優(yōu)先級最高,最后該網(wǎng)橋用對比后優(yōu)先級最高的配置消息替代自己的配置消息,并且完成下列的其他工作:
1) 推舉根網(wǎng)橋RootID:Root ID值為最小將成為最終的Root ID;
2) 到根橋的最短路徑花費(fèi)RootPathCost:如果網(wǎng)橋是根網(wǎng)橋,則最短路徑開銷為0,否則最短路徑開銷就是最優(yōu)配置消息中的路徑開銷加上接收端口對應(yīng)鏈路的路徑開銷;
3) 選擇根端口RootPort:網(wǎng)橋各個端口中到根橋路徑開銷最短的那個端口就是根端口,如果對應(yīng)最短路徑開銷的端口不止一個,則對應(yīng)收到的BPDU消息中DesignatedBridgelD號最小的端口將成為根端口,如果還不能選出根端口,則對應(yīng)收到的BPDU消息中DesignatedPortID號最小的端口將成為根端口;
4) 選擇指定端口:網(wǎng)橋端口發(fā)送的BPDU配置消息的優(yōu)先級比較接收的BPDU配置消息優(yōu)先級高,這個端口就是指定端口。
最后,新的配置消息被網(wǎng)橋從指定端口重新發(fā)送。
4 STP對于網(wǎng)絡(luò)故障的處理
4.1 鏈路故障處理
生成樹算法定義了一種定時器策略來解決網(wǎng)絡(luò)鏈路故障的問題,生存期的值被封裝在配置消息中,生存期為0的配置消息被根網(wǎng)橋通過自身所有端口按一定的周期發(fā)送出去,其他網(wǎng)橋收到配置消息后,把生存期為0的配置消息也從自身的指定端口發(fā)送出去。一旦生成樹的分支發(fā)生鏈路故障,則新鮮的配置消息就不會被故障鏈路下游的端口接收到,反而自身的配置消息的生存期值不斷增長,一直到無法增長,該網(wǎng)橋?qū)G棄這個超過極限的配置消息,新的生成樹計算從頭開始。在這個過程中使用hello time表示定時發(fā)送的周期,使用message age表示配置消息的生存期,使用maxage表示最大生存期。
4.2 臨時回路處理
STP中定義了若干中間狀態(tài)來解決網(wǎng)絡(luò)中臨時回路的問題。在802.1D的協(xié)議中,端口有這樣幾種狀態(tài):Disabled、Blocking、Listening、Learning、Forwarding。
當(dāng)端口的狀態(tài)為根端口或者指定端口,原先的blocking狀態(tài)就會改變?yōu)閘istening的中間狀態(tài);由于網(wǎng)絡(luò)延時forward? delay的存在,端口狀態(tài)繼續(xù)變?yōu)閘earning狀態(tài);網(wǎng)絡(luò)延時fovwarddely繼續(xù)疊加,端口狀態(tài)繼而變?yōu)閒orwarding狀態(tài)。由于網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)發(fā)生改變導(dǎo)致原先端口不再是根端口或指定端口,端口狀態(tài)就會馬上變?yōu)閎locking狀態(tài),并且不管端口處于何種狀態(tài),當(dāng)端口變?yōu)榭捎没蛘卟豢捎脮r端口的狀態(tài)都會變?yōu)閐isabled狀態(tài)。端口狀態(tài)listening變?yōu)閘earning,或者端口狀態(tài)learning變?yōu)閒orwarding狀態(tài),都要通過forwarddelay延時來實(shí)現(xiàn),forward? delay延時可以促使網(wǎng)絡(luò)中需要變?yōu)閎locking狀態(tài)的端口達(dá)到目的,從而解決了網(wǎng)絡(luò)中環(huán)路產(chǎn)生的問題。
4.3 網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)變化后的處理
生成樹中每個站點(diǎn)所處的位置會隨著網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)的變化而發(fā)生變動,原來保存在網(wǎng)橋中的MAC地址信息就會變得錯誤重重,所以應(yīng)該給MAC地址信息定義一個生存期,在生存期內(nèi)不能證明MAC地址信息正確,則丟棄掉這些MAC地址信息。在STP中存在兩個生存期:較長的生存期在網(wǎng)絡(luò)拓?fù)湎鄬Ψ€(wěn)定時使用、較短的生存期在拓?fù)浣Y(jié)構(gòu)經(jīng)常變化時使用。并不是所有的網(wǎng)橋都能夠發(fā)現(xiàn)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)變化,這就需要以報文的形式把拓?fù)浣Y(jié)構(gòu)改變的信息告知到每一個網(wǎng)橋。在STP中有三種報文被用來標(biāo)識拓?fù)涓淖儯和負(fù)涓淖兺ㄖⅲ負(fù)涓淖儜?yīng)答消息,拓?fù)涓淖兿ⅰ.?dāng)有網(wǎng)橋發(fā)現(xiàn)拓?fù)涓淖?,就會把拓?fù)涓淖兺ㄖ⒁詇ello time為周期定時從根端口向根網(wǎng)橋的方向發(fā)送,網(wǎng)絡(luò)中的其余非根網(wǎng)橋也同樣要向根橋的方向發(fā)送這個通知消息。非根網(wǎng)橋會響應(yīng)一個拓?fù)涓淖儜?yīng)答消息,當(dāng)網(wǎng)橋收到應(yīng)答消息后就停止發(fā)送通知消息。應(yīng)答消息用一個拓?fù)涓淖儜?yīng)答標(biāo)志位來標(biāo)識,它通常被攜帶在網(wǎng)橋發(fā)送的下一個配置消息中。拓?fù)涓淖儽桓W(wǎng)橋自行發(fā)現(xiàn)或者通過拓?fù)涓淖兺ㄖl(fā)現(xiàn),就會在一定時間內(nèi),把拓?fù)涓淖兊臉?biāo)志位攜帶在向其他網(wǎng)橋發(fā)送的配置消息中,網(wǎng)橋收到這個消息后較短的生存期將會應(yīng)用到該網(wǎng)橋的地址表項,直到拓?fù)涓淖兊臉?biāo)志位不再出現(xiàn)。
參考文獻(xiàn):
[1] 李玉鵬,王換招,趙青蘋.基于STP的以太網(wǎng)物理拓?fù)浒l(fā)現(xiàn)[J].北京電子科技學(xué)院學(xué)報,2004,12(2):8-13.
[2] 林狀輝.使用交換機(jī)時如何避免環(huán)路現(xiàn)象產(chǎn)生[J].科技信息,2009(24):159-160.
[3] 陳榮.淺析生成樹協(xié)議原理及其實(shí)驗設(shè)計[J].信息與電腦:理論版,2011(5):93-94.
[4] 王炅,張華,謝儲暉.生成樹協(xié)議的算法分析[J].重慶科技學(xué)院學(xué)報:自然科學(xué)版,2011,13(5):140-142.
【通聯(lián)編輯:唐一東】