交換網絡中通常會使用冗余鏈路來提高網絡的可靠性。然而,冗余鏈路會給交換網絡帶來環路風險,並導致廣播風暴以及MAC地址表不穩定等問題,進而會影響到用戶的通信質量。
生成樹協議STP(Spanning Tree Protocol)是可以用來解決冗余鏈路所帶來的問題。
冗余鏈路解決了單條鏈路出現故障導致業務中斷問題,雖然增強了網絡的可靠性,但是也會產生環路,而環路會帶來一系列的問題,繼而導致通信質量下降和通信業務中斷等問題。
1、環路引發的問題
1.1 廣播風暴
| 廣播幀在有環路的交換網絡中會被無限轉發,網絡中的主機接受到大量的重復數據幀,這種情況稱之為網絡風暴。造成的影響:
|
![]() |
| 本例中,假設此單播幀的目的MAC地址在網絡中所有交換機的MAC地址表中都暫時不存在。 主機A向外發送了一個單播幀,將其轉發到SWA和SWC,SWA和SWC也會將此幀轉發到除了接收此幀的其他所有端口,結果此幀又會被再次轉發給SWB,這種循環會一直持續,於是便產生了廣播風暴。 |
1.2 MAC地址表震盪
| MAC地址表震盪就是,同一個交換機有兩個或兩個以上接口可以接收到同一個MAC地址,導致MAC地址與交換機端口的對應關系經常發生變化。 |
![]() |
| 交換機是根據所接收到的數據幀的源地址和接收端口生成MAC地址表項的。假設此單播幀的目的MAC地址在網絡中所有交換機的MAC地址表中都暫時不存在。
此過程會不斷重復,從而導致MAC地址表震盪。 |
2、STP生成樹協議
2.1 STP的主要作用:(無用時阻斷冗余鏈路,需要時啟用)
- 消除環路:通過阻塞端口來消除網絡中可能存在的環路。
- 鏈路備份:當活動路徑發生故障時,激活備份鏈路,及時恢復網絡連通性。
2.2 STP工作方式
![]() |
| 每個STP網絡中,都會有且只有一個根橋(根交換機),其他交換機為非根橋。 根橋或者根交換機位於整個邏輯樹的根部,是STP網絡的邏輯中心;非根橋是根橋的下游設備。當現有根橋產生故障時,非根橋之間會交互信息並重新選舉根橋,交互的這種信息被稱為BPDU。BPDU中包含交換機在參加生成樹計算時的各種參數信息。 STP中定義了三種端口角色:指定端口,根端口、預備端口(阻塞端口)。
|
2.3 根橋選舉(根橋的產生方式)
|
|
| STP中根橋的選舉依據的是橋ID,STP中的每個交換機都會有一個橋ID(Bridge ID) 。橋ID=16位的橋優先級+48位的MAC地址。 在STP網絡中,橋優先級的取值范圍是0~65535,默認值為32768。優先級最高的設備(數值越小越優先)會被選舉為根橋。如果優先級相同,則會比較MAC地址,MAC地址越小則越優先。 交換機啟動后就自動開始進行生成樹收斂計算(橋ID比較)。 默認情況下,所有啟動STP的交換機啟動時都認為自己是根橋,自己的所有端口都為指定端口,這樣BPDU報文(橋協議數據單元)就可以通過所有端口轉發。當某一個端口收到自己發送的BPDU報文后,會阻塞掉該端口;而對端交換機收到BPDU報文后,會比較BPDU中的根橋ID和自己的橋ID。
最后會在整個網絡中會有一個橋ID最小的交換機,這個交換機就是整個網絡的根橋。 |
2.4 根端口選舉(通往根橋最優端口的選舉)
![]() |
| 非根交換機在選舉根端口時分別依據該端口的根路徑開銷、對端BID(Bridge ID)、對端PID(Port ID)和自身本端PID。 端口開銷:交換機端口的一個參數,表示該端口在STP中的開銷值。參數大小與端口的帶寬有關,帶寬越高,開銷越小。 路徑開銷:非根橋到根橋的路徑上所有接收BPDU的端口的端口開銷總和(即BPDU的入方向端口),稱為路徑開銷。 根路徑開銷:非根橋通過對比多條路徑的路徑開銷,到達根橋的最短路徑,這條路徑的路徑開銷被稱為RPC(Root Path Cost,根路徑開銷),並生成無環樹狀網絡。根橋的根路徑開銷是0。 對端橋PID:運行STP交換機的每個端口都有一個端口ID,端口ID由端口優先級和端口號構成。端口優先級取值范圍是0到240,步長為16,即取值必須為16的整數倍。越小越優先。缺省情況下,端口優先級是128。端口ID(Port ID)可以用來確定端口角色。 對端橋BID:每個非根橋都要選舉一個根端口。根端口是距離根橋最近的端口,這個最近的衡量標准是靠路徑開銷來判定的,即路徑開銷最小的端口就是根端口。端口收到一個BPDU報文后,抽取該BPDU報文中根路徑開銷字段的值,加上該端口本身的端口開銷即為本端口路徑開銷。如果有兩個或兩個以上的端口計算得到的累計路徑開銷相同,那么選擇收到發送者BID最小的那個端口作為根端口。 本機PID:如果兩個或兩個以上的端口連接到同一台交換機上,則選擇發送者PID最小的那個端口作為根端口。如果兩個或兩個以上的端口通過Hub連接到同一台交換機的同一個接口上,則選擇本交換機的這些端口中的PID最小的作為根端口。 |
2.5 指定端口選舉(用於轉發BPDU報文的端口選舉)
![]() |
| 非根交換機在選舉指定端口時分別依據根路徑開銷、本機BID、PID。未被選舉為根端口或指定端口的端口為預備端口,將會被阻塞。 在網段上抑制其他端口(無論是自己的還是其他設備的)發送BPDU報文的端口,就是該網段的指定端口。每個網段都應該有一個指定端口,根橋的所有端口都是指定端口(除非根橋在物理上存在環路)。 指定端口的選舉也是首先比較累計路徑開銷,累計路徑開銷最小的端口就是指定端口。——》如果累計路徑開銷相同,則比較端口所在交換機的橋ID,所在橋ID最小的端口被選舉為指定端口。——》如果通過累計路徑開銷和所在橋ID選舉不出來,則比較端口ID,端口ID最小的被選舉為指定端口。 網絡收斂后,只有指定端口和根端口可以轉發數據。其他端口為預備端口,被阻塞,不能轉發數據,只能夠從所連網段的指定交換機接收到BPDU報文,並以此來監視鏈路的狀態。 |
2.6 端口狀態轉換
運行STP協議的設備上端口狀態有5種:https://www.cnblogs.com/lkztrovo-lsh/p/15292158.html
2.7 BPDU報文
BPDU報文詳解:https://www.cnblogs.com/lkztrovo-lsh/p/15249806.html
2.8 STP拓撲變化
STP的拓撲變化:https://www.cnblogs.com/lkztrovo-lsh/p/15292599.html
2.9 設備上的配置
| 1.STP配置交換機的生成樹協議模式的命令:stp mode { mstp | stp | rstp }。缺省情況下,在MSTP模式。在使用STP前,STP模式必須重新配置。 | |
| 2.STP配置設備優先級值命令:stp priority priority值。priority值為整數,取值范圍為0到61440,步長為4096。缺省情況下,交換設備的優先級取值是32768。 可以通過stp root primary命令指定生成樹里的根橋,確定網絡中的數據流量使用最優路徑轉發。 |
|
| 3.配置指定交換機上路徑開銷值標准de命令:stp pathcost-standard { dot1d-1998 | dot1t | legacy }
手動設置端口路徑開銷值的命令:stp cost cost值。 缺省情況下,路徑開銷標准為IEEE 802.1t。
|
|
| 4.檢查當前交換機的STP配置的命令:display stp。 |
|
|
|
命令輸出中信息介紹如下:
|
| 5.顯示交換機上指定端口信息的命令:display stp interface 接口(g0/0/1) |
|







