STP的流程
1.選擇Root Bridge(根交換器):是依據每一台的BID(bridge ID)來決定。
STP在每台交換器的連接埠發送彼此的BPDU(Bridge Protocol Data Unit)封包,此封包內有8 bytes BID其中包含兩個值,Bridge Priority和MAC位址,交換器會先比較Bridge Priority數值較小的成為Root Bridge如果一樣則比較MAC位址。
2.選擇Root Port (根連接埠RP):除了Root Bridge以外每台交換器都會有一個RP,它是依據Path cost(路徑成本)來決定,如果相同就去跟另一端的交換器BID和port ID來做比較。
在選擇完Root Bridge後接下來就是分配每個連接埠的角色,總共有三種分別為RP、DP、NDP每一個Port都會被指定一種角色。一開始STP會選擇一個Port當作RP,此為交換器到Root Bridge的最佳路徑,判斷方式則是依據Path cost來比較越小的優先
假設Switch 2為根交換器當Switch 0要選擇RP時就有兩條路徑第一條Switch 0---->Switch 2 cost為19,第二條Switch 0---->Switch 1---->Switch 3---->Switch 2 cost為19+19+19=57,因此就以最小成本的第一條port當作RP其他交換器則依此類推。
3.選擇Designated Port(委任連接埠DP):每一個LAN區段只會有一個DP,如果有兩個要競爭則是選擇最低連接埠成本和BID來決定。
4.選擇Non-Designated Port(非委任連接埠NDP):剩下的就是NDP此埠會被封鎖。
接下來就是如何手動設定根交換器,設定方法有下列兩種
1.調整BID的值:
指令為spanning-tree vlan 1 priority 20480
在調整BID的數值時要注意必須為4096的倍數
因為在前面有提到BID是由兩個部分組成分別為Bridge Priority和MAC位址
但是在多重Vlan時就無法判別因此就有一種新的STP版本誕生了,就是PVSTP他將Bridge Priority有劃分為4bits與12bits分別表示Bridge Priority和Extend System ID(等於Vlan ID或sys-id-ext),在Bridge Priority的值就只能動到2的12次方以後也就是4096的倍數。
2.直接下spanning-tree vlan X root primary指令
BPDU Guard
設定此功能的介面只要收到BPDU封包就會將介面關閉並呈現error disable那為何要有此功能因為在PC連接交換器時是不可能有迴圈發生的因此也就不需要BPDU。
PortFast
在交換器接PC時是不會有迴圈發生的但是STP還是會檢查因此我們可以使用PortFast來停止STP的運作,當PortFast執行時會掉過學習和傾聽的過程直接重封鎖轉換到轉送,所以PC就可以直接使用網路,而不用等STP運行完畢。
Port State
1.Block(BLK):STP一運作時,port就會進入block,此時並不能傳送資料,只能接收BPDU來確認Root Bridge和Root Bridge ID。
2.Listen(LSN):此狀態port會接收別人的BPDU,和傳送自己的BPDU
3.Learn(LRN):此狀態開始學習MAC,並將其儲存到MAC Table中。
4.Forward(FWD):此狀態表示port已經在可以正常轉送資料,同時也會發送、接收BPDU。
5.Disable:此狀態為停用,通常是由管理者自行關閉。
STP與RSTP比較:
STP(IEEE802.1D)的收斂時間約為30秒因為在Port State轉換需要Timer(計數器),所以收斂時間較長,因此出現了RSTP(Rapid STP IEEE802.1w),在RSTP的Port State轉換是用Proposal and Agreememt(主動協商)所以收斂時間較快。在RSTP Port Role中將NDP用Alternate Port與Backup Port取代。
在RSTP Port State 中將Block、Disable合為Discard(丟棄),Listen、Learn合為Learn(學習)
指令
========================================================================
S1(config)#spanning-tree vlan x priority 20480(將vlan x 的BID調整為20480)
S1(config)#spanning-tree vlan X root primary(將S1的vlan x 設定為根交換器)
S1(config)#spanning-tree vlan X root secondary(將S1的vlan x 設定為備援根交換器)
S1(config)#spanning-tree portfast bpduguard default(將所有的Port啟動BPDU Guard)
S1(config-if)#spanning-tree portfast bpduguard ecable(在某介面啟用BPDU Guard)
S1(config-if)#spanning-tree portfast bpduguard disable(在某介面停用BPDU Guard)
S1(config)#spanning-tree portfast default(將所有的Port啟動PortFast)
S1#show spanning-tree (顯示STP)
S1#show spanning-tree vlan 5(顯示vlan 5 的STP)