轉自 http://sunxuewei.blog.51cto.com/902684/978573
需求:
在大型局域網中,為了維護網絡的健壯性和可靠性,在核心層會采取多台設備進行冗余備份,而在匯聚層也會采取雙歸屬或者環路來達到負載分擔和冗余備份。因此在此類網絡中從一點到達另一點可能會有多條路徑可達。因而在報文轉發時不可避免的會產生廣播風暴。
STP的計算將錯綜復雜的物理網絡整合成一棵邏輯轉發樹,將那些沒有必要的鏈路阻塞。而當某些當前在用的鏈路發生故障時,又可以快速啟用被阻塞的的鏈路來代替,保證網絡的連通性。簡單地說,想做冗余又怕環路所以用 STP 解決。
作用:
交換機內的生成樹算法(STA)使你可以創建一條備用鏈路(當網絡中存在多台交換機時)。在主鏈路正常工作時,備用鏈路處於空閑狀態(不工作);只有在主鏈路出現問題時,備用鏈路才不需要任何人工干預自動地接替主鏈路。這種自動重構的功能,使得網絡上的用戶能夠最大限度地與網絡保持正常的連接。
STP協議在邏輯上斷開網絡的環路,防止廣播風暴的產生,而一旦正在使用的線路出現故障,邏輯上被斷開的線路又被連同,起到了冗余備份的作用。
原理
什么是STP協議?
STP(Spanning Tree Protocol)生成樹協議
舉例:當網絡存在環路的時候,A查找MAC地址,不存在,那么它向B、C廣播,B、C也不存在,那么它們也向外廣播,這樣一來,就會形成雙向廣播環,廣播風暴最終會導致網絡資源耗盡,交換機死機。
在這個時候,STP就起到作用了
stp協議是邏輯上斷開環路,防止廣播風暴的產生
當線路出現故障,斷開的接口被激活,恢復通信,起備份線路的作用
STP將一個環形網絡生成無環拓朴的步驟:
選擇根網橋(Root Bridge)
選擇根端口(Root Ports)
選擇指定端口(Designated Ports)
網橋ID(BID)
網橋ID是唯一的,交換機之間選擇BID值最小的交換機作為網絡中的根網橋
取值范圍:0 ~ 65535
缺省值:32768
交換機A的BID只最小(000d.2800.b100),所以它將被選為根網橋(root bridge)
下一步選擇跟端口,
在非根網橋上選擇一個到根網橋最近的端口作為根端口
選擇根端口的依據是:
根路徑成本最低
直連的網橋ID最小
端口ID最小
根路徑成本-是網橋到根網橋的路徑上所有鏈路的成本之和
鏈路帶寬(Mb/s) 路徑成本
10 100
16 62
45 39
100 19
155 14
622 6
1000 4
10000 2
我們只需要記住3個路徑成本就夠了(100,19,4)這是比較常用的三個
指定端口
在每個網段上,選擇1個指定端口
根橋上的端口全是指定端口
非根橋上的指定端口:
根路徑成本最低
端口所在的網橋的ID值較小
端口ID值較小
接下來我做一個經過stp計算,最終形成無環拓撲結構的過程,看圖
A很明顯是根網橋
圖沒截好,BC上面的根端口 也已經出來了 (因為與根網橋直連的端口是根端口)
接下來,指定端口的選擇
A是根網橋,所以它上面的所有端口都是指定端口
如圖所說,B的網橋ID較小,所以B上面的端口為指定端口,
這樣,經過stp計算,無環拓撲網絡結構就出來了
好了 過程大家看明白了吧,但是有沒有想過,交換機怎么知道其他交換機的網橋ID?怎么知道哪個端口的根路徑成本最小?
這就涉及到BPDU(橋協議數據單元)
交換機之間使用BPDU來交換STP信息
BPDU
Bridge Protocol Data Unit -橋協議數據單元
使用組播發送BPDU,組播地址為:
01-80-c2-00-00-00
BPDU分為2種類型:
配置BPDU - 用於生成樹計算
拓朴變更通告(TCN)BPDU - 用於通告網絡拓朴的變化
BPDU所包含的關鍵字
1,交換機啟動時,假定自己是根網橋,在向外發送的BPDU中,根網橋ID字段填寫自己的網橋ID,
2,當接收到其他交換機發出的BPDU后,比較網橋ID,選擇較小的添加到根網橋ID中
3,當全網所有的交換機接收到全部的BPDU並作比較后,就可以選擇出唯一的一個根網橋
4,根網橋發送根路徑成本為0的BPDU
5,其他交換機接收到根網橋的BPDU后,在根路徑成本上添加接收接口的路徑成本,然后轉發
交換機的5種stp狀態
狀態 用途
轉發(Forwarding) 發送和接收用戶數據
學習(Learning) 構建網橋表
偵聽(Listening) 構建“活動”拓朴
阻塞(Blocking) 只接收BPDU
禁用(Disable) 強制關閉
生成樹計時器
交換機開機需要等待30秒時間開始轉發數據
當某個正在使用的鏈路斷掉,阻塞的端口需要50秒時間開始轉發數據
0--------------20-----------15-----------15
阻斷 傾聽 學習 轉發
OK,比較亂,認真看就明白了