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