基本思想:在此把每個交換機稱為網(wǎng)橋,所以我們在介紹的時候,如果講到網(wǎ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地址)。
選擇根橋的方法是比較每一個交換機的Bridge ID也就是橋ID,這個橋ID的格式是:
有兩部分組成:一個是橋優(yōu)先級,一個是MAC地址,但是思科的交換機優(yōu)先級默認都是32768,如果優(yōu)先級相同,再比較后面的MAC地址,MAC肯定是不同的,所以小的就是根橋,
在一個網(wǎng)絡(luò)中,只能有一個根網(wǎng)橋,其他的網(wǎng)橋就稱為非根橋;根橋上的每一個端口都稱為指派端口,也可以說根橋上的每個端口都是根端口,但是非根橋上的端口叫法就不同的,非根橋有一個端口叫根端口,其他端口叫非指派端口。
剛才我們說了,如果有多個交換機,選擇根網(wǎng)橋使用的是bridgeID,那這里在非根橋上我怎么知道哪個是根端口,哪個是非指派端口呢,這里也有一個準則,就是依次比較每個端口到達根網(wǎng)橋所花代價+優(yōu)先級+MAC地址+端口號(從左到右依次比較軟小者),這里又可以分為是一個交換機的多個端口和多個交換機的多個端口之間如果選擇。
如果是同一個交換機,那么起決定作用的就是到達根橋代價最小的端口是根端口,關(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的端口1,因為兩邊的鏈路代價是一樣的,優(yōu)先級默認也相同,所以就比較MAC地址,但因為交換機X的MAC地址小,所以它的端口都是forwarding狀態(tài)。但是交換機y的端口1就Block了。
以上是我們所分析的根橋以及根端口和指派端口和非指派端口的選擇問題。那么一個端口從開機到正常工作會處于四種狀態(tài),分別是block,listening,learning,forward,我們來分析一下:
Block——為了防止網(wǎng)橋發(fā)生loop,所有的端口開始都處于Block狀態(tài)。如果交換機在其他端口收到了同一個BPDU,那么交換機就認為有另一條鏈路可到達根橋,如果生成樹決定其他鏈路是到根橋更好的路徑,那么這個端口繼續(xù)保持block,那么如果本端口被交換機認為是最好的端口,那么進入到下面的狀態(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)準備好進行傳輸,但是它愿意再傾聽一下以確認它不會產(chǎn)生 loop.
learning——-學習狀態(tài)與傾聽狀態(tài)非常相似,除了端口可以將它所學到的信息添加到地址表這一點之外,它依然不可以發(fā)送和接收用戶數(shù)據(jù)。這個過程也是15秒。
forward—–這個狀態(tài)意味著可以發(fā)送和接收用戶數(shù)據(jù)。
那么如果一個非根交換機在20秒內(nèi)沒有收到任何配置信息,也就是沒有收到BPDU就會認為該端口連接的鏈路發(fā)生了故障,于是就重新計算STP。再一次選擇根橋,根端口,指派端口以及非指派端口。
以上就是關(guān)于生成樹協(xié)議的比較詳細的介紹,但需要注意STP只是針對二層的環(huán)路起作用,對于物理層的環(huán)路是不起作用的,一層環(huán)路可以說純粹是人為的原因。
當然我們哆哩哆嗦的講了這么多,真正要我們配置的命令并不多,因為思科默認就已經(jīng)開啟了生成樹協(xié)議,在本節(jié)的結(jié)尾我會附上相關(guān)的實驗來驗證stp的作用。
還要注意STP只是針對二層的環(huán)路起作用,對于物理層的環(huán)路是不起作用的,一層環(huán)路可以說純粹是人為的原因!!!
Lab1:生成樹協(xié)議(spanning-tree)
實驗目的:了解生成樹協(xié)議的作用,以及網(wǎng)絡(luò)中有冗余環(huán)路的情況下不開生成樹協(xié)議的危害。
實驗設(shè)備:兩臺Cisco系統(tǒng)交換機,一臺pc機,兩條以太網(wǎng)交叉線,一條以太網(wǎng)直連線。
拓撲圖:
在兩臺交換機上都關(guān)閉生成樹協(xié)議:
Switch(config)#nospanning-tree
驗證方法:在兩臺交換機上都關(guān)閉生成樹協(xié)議之后很快就能發(fā)現(xiàn)兩臺交換機互連的接口燈狂閃,這就是產(chǎn)生廣播風暴了,這時候大家可以打開PC機上的性能監(jiān)視器發(fā)現(xiàn)CPU的利用率也非常高。
可以使用show spanning-tree查看生成樹協(xié)議的一些信息,如圖所示:
可以看到這個交換機是根橋,還可以通過命令showspanning-treeinterface端口號,來查看端口信息!關(guān)于STP的內(nèi)容我們就介紹到這兒了,還算簡單吧!