介紹如果企業(yè)只使用一臺交換機(jī)來組網(wǎng),就會存在單點故障,如果交換機(jī)壞了,此時的幾個模塊之間都無法進(jìn)行正常的工作,客戶機(jī)不能訪問服務(wù)器,不能連接internet,不能訪問打印機(jī),也就是一點發(fā)生故障,則整網(wǎng)絡(luò)無法正常工作。所以在一般的交換式網(wǎng)絡(luò)中,我們都需要對交換機(jī)進(jìn)行冗余,但是引入冗余又會發(fā)生一個問題,一個很嚴(yán)重的問題,就是網(wǎng)絡(luò)環(huán)路。那么網(wǎng)絡(luò)環(huán)路會帶來廣播風(fēng)暴、多重復(fù)數(shù)據(jù)幀、MAC地址表不穩(wěn)定等因素。那么大家可以看到網(wǎng)絡(luò)環(huán)路的問題確實不小,解決方法就是利用生成樹協(xié)議STP。
Spanning-Tree Protocol:簡稱為STP,該協(xié)議可應(yīng)用于環(huán)路網(wǎng)絡(luò),通過一定的算法實現(xiàn)路徑冗余,同時將環(huán)路修剪成無環(huán)路的樹型網(wǎng)絡(luò),從而避免報文在環(huán)路網(wǎng)絡(luò)中“長生不老”。
以太網(wǎng)交換所所實現(xiàn)的快速生成樹協(xié)議RSTP(Rapid Spanning Tree Procotol)是生成樹協(xié)議的優(yōu)化版,其“快速”體現(xiàn)在根端口和指定端口進(jìn)入轉(zhuǎn)發(fā)狀態(tài)的延時在某種條件下大大縮短,從而縮短了網(wǎng)絡(luò)拓?fù)浞€(wěn)定所需要的時間。
MSTP(Multiple Spanning Tree Procotol)是多生成樹協(xié)議的縮寫,該協(xié)議兼容STP和RSTP。
咱們來詳細(xì)介紹一下STP:STP是為克服冗余網(wǎng)絡(luò)中透明橋接的問題而創(chuàng)建的,目的是通過協(xié)商一條到根網(wǎng)橋的無環(huán)路徑來避免和消除網(wǎng)絡(luò)中的環(huán)路,它通過判定網(wǎng)絡(luò)中存在環(huán)路的地方并動態(tài)阻斷冗余鏈路來實現(xiàn)這個目的。通過這種方式,它確保到每個目的地都只有一個路徑,所以永遠(yuǎn)都不會產(chǎn)生環(huán)路。
將環(huán)路中的一個次優(yōu)接口設(shè)置在Block(阻止)狀態(tài),從而將環(huán)路打破。注意,僅僅是該接口設(shè)置為Block狀態(tài),僅僅是一個狀態(tài),而不是真正的將此接口關(guān)閉。因為一旦網(wǎng)絡(luò)中其他鏈路出現(xiàn)了問題,這個被block的接口還可以還原為forwarding(轉(zhuǎn)發(fā))狀態(tài)。如圖所示:
基本思想:在此把每個交換機(jī)稱為網(wǎng)橋,所以我們在介紹的時候,如果講到網(wǎng)橋,就知道是指的交換機(jī)就可以了。每個交換機(jī)在啟動的時候,都認(rèn)為自己是根橋,那么就討論開始競爭到底誰當(dāng)根,大家定義好一個游戲規(guī)則,在網(wǎng)橋之間傳遞特殊的消息BPDU(Bridge Procotol Data Unit)網(wǎng)橋協(xié)議數(shù)據(jù)單元,包含足夠的信息做以下工作:從網(wǎng)絡(luò)中的所有網(wǎng)橋中,選出一個作為根網(wǎng)橋,然后再計算本網(wǎng)橋到根網(wǎng)橋的最短路徑。而且根橋是每2秒鐘發(fā)送一次BPDU。BPDU數(shù)據(jù)幀中包括了很多內(nèi)容,如圖所示:
我們在這里只關(guān)心網(wǎng)橋ID(包括兩個字節(jié)的優(yōu)先級和6個字節(jié)的MAC地址)。
選擇根橋的方法是比較每一個交換機(jī)的Bridge ID也就是橋ID,這個橋ID的格式是:
有兩部分組成:一個是橋優(yōu)先級,一個是MAC地址,但是思科的交換機(jī)優(yōu)先級默認(rèn)都是32768,如果優(yōu)先級相同,再比較后面的MAC地址,MAC肯定是不同的,所以小的就是根橋,
在一個網(wǎng)絡(luò)中,只能有一個根網(wǎng)橋,其他的網(wǎng)橋就稱為非根橋;根橋上的每一個端口都稱為指派端口,也可以說根橋上的每個端口都是根端口,但是非根橋上的端口叫法就不同的,非根橋有一個端口叫根端口,其他端口叫非指派端口。
剛才我們說了,如果有多個交換機(jī),選擇根網(wǎng)橋使用的是bridgeID,那這里在非根橋上我怎么知道哪個是根端口,哪個是非指派端口呢,這里也有一個準(zhǔn)則,就是依次比較每個端口到達(dá)根網(wǎng)橋所花代價+優(yōu)先級+MAC地址+端口號(從左到右依次比較軟小者),這里又可以分為是一個交換機(jī)的多個端口和多個交換機(jī)的多個端口之間如果選擇。
#p#副標(biāo)題#e#
如果是同一個交換機(jī),那么起決定作用的就是到達(dá)根橋代價最小的端口是根端口,關(guān)鍵是這里怎么知道哪個端口代價最小呢,這是根據(jù)帶寬定義的:
其中這個代價指的就是開銷,開銷越小就說明連接速率越大,速度越快。我們再看上面的那個圖,有兩個鏈路,一個是100BASET,一個是10BASE-T,一個開銷是100,一個開銷是19,明顯選擇上面的那個端口作為根端口。那么下面的那個端口就是非指派端口,就會將它指定為BLOCK,不可用狀態(tài),直到根端口不可用時,它才會“翻身”。但是要注意的是這個端口怎么Block了,不能發(fā)送用戶數(shù)據(jù),但可以繼續(xù)接收BPDU。
那么如果是多個非根網(wǎng)橋希望選擇一個根端口,則先比較代價,如果代價相同再比較優(yōu)先級,如果優(yōu)先級也相同再比較MAC地址,這肯定是不同的。
針對這個圖來說,處理Block狀態(tài)的端口應(yīng)該是交換機(jī)Y的端口1,因為兩邊的鏈路代價是一樣的,優(yōu)先級默認(rèn)也相同,所以就比較MAC地址,但因為交換機(jī)X的MAC地址小,所以它的端口都是forwarding狀態(tài)。但是交換機(jī)y的端口1就Block了。
以上是我們所分析的根橋以及根端口和指派端口和非指派端口的選擇問題。那么一個端口從開機(jī)到正常工作會處于四種狀態(tài),分別是block,listening,learning,forward,我們來分析一下:
Block------為了防止網(wǎng)橋發(fā)生loop,所有的端口開始都處于Block狀態(tài)。如果交換機(jī)在其他端口收到了同一個BPDU,那么交換機(jī)就認(rèn)為有另一條鏈路可到達(dá)根橋,如果生成樹決定其他鏈路是到根橋更好的路徑,那么這個端口繼續(xù)保持block,那么如果本端口被交換機(jī)認(rèn)為是最好的端口,那么進(jìn)入到下面的狀態(tài)。這個時間是20秒,稱為最大生存周期。
listening-----端口從block狀態(tài)轉(zhuǎn)為listening狀態(tài),它利用這段時間來listening是否還有到根橋的其他路徑。在此狀態(tài),端口可以傾聽到配置消息,但是不能轉(zhuǎn)發(fā)或接收用戶數(shù)據(jù)。也不允許端口將它所聽到的任何信息放到地址表中,這有15秒的時間。在這一段時間里的listening狀態(tài)實際上就是用來說明端口已經(jīng)準(zhǔn)備好進(jìn)行傳輸,但是它愿意再傾聽一下以確認(rèn)它不會產(chǎn)生loop.
learning-------學(xué)習(xí)狀態(tài)與傾聽狀態(tài)非常相似,除了端口可以將它所學(xué)到的信息添加到地址表這一點之外,它依然不可以發(fā)送和接收用戶數(shù)據(jù)。這個過程也是15秒。
forward-----這個狀態(tài)意味著可以發(fā)送和接收用戶數(shù)據(jù)。
那么如果一個非根交換機(jī)在20秒內(nèi)沒有收到任何配置信息,也就是沒有收到BPDU就會認(rèn)為該端口連接的鏈路發(fā)生了故障,于是就重新計算STP。再一次選擇根橋,根端口,指派端口以及非指派端口。
以上就是關(guān)于生成樹協(xié)議的比較詳細(xì)的介紹,但需要注意STP只是針對二層的環(huán)路起作用,對于物理層的環(huán)路是不起作用的,一層環(huán)路可以說純粹是人為的原因。
當(dāng)然我們哆哩哆嗦的講了這么多,真正要我們配置的命令并不多,因為思科默認(rèn)就已經(jīng)開啟了生成樹協(xié)議,在本節(jié)的結(jié)尾我會附上相關(guān)的實驗來驗證stp的作用。
還要注意STP只是針對二層的環(huán)路起作用,對于物理層的環(huán)路是不起作用的,一層環(huán)路可以說純粹是人為的原因!!!
Lab1:生成樹協(xié)議(spanning-tree)
實驗?zāi)康模毫私馍蓸鋮f(xié)議的作用,以及網(wǎng)絡(luò)中有冗余環(huán)路的情況下不開生成樹協(xié)議的危害。
實驗設(shè)備:兩臺Cisco系統(tǒng)交換機(jī),一臺pc機(jī),兩條以太網(wǎng)交叉線,一條以太網(wǎng)直連線。
拓?fù)鋱D:
在兩臺交換機(jī)上都關(guān)閉生成樹協(xié)議:
Switch(config)#nospanning-tree
驗證方法:在兩臺交換機(jī)上都關(guān)閉生成樹協(xié)議之后很快就能發(fā)現(xiàn)兩臺交換機(jī)互連的接口燈狂閃,這就是產(chǎn)生廣播風(fēng)暴了,這時候大家可以打開PC機(jī)上的性能監(jiān)視器發(fā)現(xiàn)CPU的利用率也非常高。
可以使用show spanning-tree查看生成樹協(xié)議的一些信息,如圖所示:
可以看到這個交換機(jī)是根橋,還可以通過命令showspanning-treeinterface端口號,來查看端口信息!關(guān)于STP的內(nèi)容我們就介紹到這兒了,還算簡單吧!