STP(Spanning-Tree Protocol,生成樹協議),該協議可應用於在網絡中建立樹形拓撲,消除網絡中的環路,並且可以通過一定的方法實現路徑冗餘。
1.1 冗餘拓撲中存在的問題
圖1-1 單一鏈路的拓撲
圖1-2 有冗餘鏈路的拓撲
圖1-1中,PC1和PC2只通過單一鏈路傳輸,如果該鏈路出現故障,會導致通信中斷。
圖1-2中,加入了冗餘鏈路,解決了SW1和SW2單鏈路故障引起的網絡中斷。
但是圖1-2中,可能存在的問題:
1、廣播風暴
存在廣播通過f1/1口出去,然後又通過f1/2口回來,再出去,再回來的,迴環問題。
2、MAC地址表不穩定
3、重複幀拷貝
1.2 STP介紹
通過冗餘可以解決由於單鏈路或單交換機故障引起的網絡中斷,提高網絡的可用性,但是在第二層採用冗餘時,又會帶來廣播風暴、MAC地址不穩定、重複幀拷貝等問題,STP被用來解決上述問題。
1.2.1 STP算法
STP通過阻塞冗餘路徑上的一些端口,確保到達任何目的地址只有一條邏輯鏈路。STP使用STA(Spanning Tree Algorithm,生成樹算法)決定交換機上的哪些端口被阻塞來防止環路的發生。STA選擇一臺交換機作爲根交換機,也稱根橋(Root Bridge),以該交換機作爲參考點計算所有的路徑。所有交換機交換BPDU(Bridge Protocol Data Unit,橋接數據單元),BPDU中包括BID(Bridge ID,橋ID),BID用來識別是哪臺交換機發出的BPDU。
1、根交換機選舉
BID一般由3部分組成:優先級、發送交換機的MAC地址和Extended System ID(擴展的系統ID,可選項)。
SW1#show spanning-tree (brief) 查看生成樹
BID由優先級和MAC組成(老交換機,裏面集成了很多MAC)
BID由優先級、Extended System ID(擴展的系統ID)和MAC地址組成(新交換機)
默認情況下,選取同一個VLAN中BID最小的交換機作爲根交換機。
SW1(config)#spanning-tree vlan 1 priority (4096的倍數) 更改優先級
SW(config)#spanning-tree vlan 1 root primary 設置該交換機爲新的根交換機
2、端口花費和路徑花費
(1)端口花費默認和帶寬有關:
速度 | 花費 |
10Gb/s | 2 |
1Gb/s | 4 |
100Mb/s | 19 |
10Mb/s | 100 |
端口花費修改:
SW(config)#int fa 1/1 SW(config-if)#spanning-tree cost <1-65535>
(2)路徑花費等於從根交換機到達最終交換機前進方向上進入方向的端口花費總和。
1.2.2 BPDU
交換機間通過交換BPDU來選擇根橋。
Bytes | Field | 解釋 |
2 | Protocol ID | |
1 | Version | |
1 | Message type | |
1 | Flags | 標記域。包含這些信息:TC(Topology Change,拓撲改變)比特位,表示拓撲發生改變事件;TCA(Topology Change Acknowledgment,拓撲改變確認)比特位,表示收到了拓撲變化通知,進行確認 |
8 | Root ID | 根交換機的BID |
4 | Cost of path | 到根交換機的路徑花費 |
8 | Bridge ID | 轉發BPDU的交換機的BID |
2 | Port ID | 轉發BPDU的交換機的端口PID,等於端口優先級(默認是128)+端口編號 |
2 | Message age | BPDU已經存在的時間 |
2 | Max age | BPDU的最大存在時間 |
2 | Hellotime | 根橋發送配置信息的間隔時間,這個默認是2秒 |
2 | Forward delay | 轉發延遲 |
1.2.3 端口角色
當STA決定使用哪一條路徑後,STA配置交換機的端口角色,端口角色描述了它與根橋的關係和是否允許轉發流量。交換機的端口角色有:
(1)根端口(Root Port,簡稱RP)。非根交換機上離根交換機最近的端口稱作根端口,每個非根交換機有且僅有一個根端口。處於Forwarding(轉發)狀態。
(2)指派端口(Designated Port,簡稱DP)。每個網段都有一個指派端口,指派端口是該網段到根交換機最近的交換機的端口。處於Forwarding(轉發)狀態。
(3)非指派端口。既不是根端口,也不是指派端口的激活端口稱作非指派端口。處於Blocking(阻塞)狀態
(4)禁用端口。shutdown端口,不參與生成樹算法。
1.2.4 端口狀態和BPDU時間。
1、端口狀態轉換
端口狀態:Down、Blocking、Listening、Learning、Forwarding5種。
①Down(禁用)狀態。可以使用“no shut”命令和插入網線進行激活。
②Blocking(阻塞)狀態。鏈路激活,端口轉換到Blocking狀態,這個狀態逗留20秒左右,主要用來決定該端口的角色,如果該端口是根端口或者指派端口,將轉換到下一狀態;如果該端口是非指派端口,狀態將繼續停留在Blocking狀態;本來處在Blocking狀態的端口,如果接收不到BPDU了,也會裝換到下一狀態。
③Listening(偵聽)狀態。除了接收BPDU外,還向鄰居交換機發送BPDU,通知鄰居交換機它將參與激活拓撲。這個狀態會逗留大約15秒。
④Learning(學習)狀態。開始學習MAC地址。這個狀態逗留約15秒。
⑤Forwarding(轉發)狀態。端口可以轉發數據幀。
2、端口所處狀態功能
接收BPDU | 發送BPDU | 學習MAC | 轉發DATA | |
Down | × | × | × | × |
Blocking | √ | × | × | × |
Listening | √ | √ | × | × |
Learning | √ | √ | √ | × |
Forwarding | √ | √ | √ | √ |
3、BPDU的時間
BPDU中相關的時間參數有:Hello time(2秒)、Max age(20秒)、Forward delay(15秒)。
SW(config)#spanning-tree vlan 1 max-age 30 不建議修改
1.3 STP收斂
收斂就是整個網絡達到一個穩定的狀態:選舉出根交換機,並決定出所有端口的角色,排除所有潛在的環路。
1.3.1 生成樹的選舉
爲了使採用STP的網絡最終收斂爲一個邏輯上沒有環路的網絡拓撲,需要通過以下4步實現。
①每個廣播域只能有一個根交換機
②每個非根交換機有且只有一個根端口 花費>發送者的BID>發送者的PID
③每個網段有且只有一個指派端口
④既不是根端口,也不是指派端口的端口將被阻塞
1.3.2 增強的STP功能
在連接主機的端口上配置快速端口。可以立即進入轉發狀態。
SW(config-if)#spanning-tree portfast %Warning: portfast should only be enabled on ports connected to a single host. Connecting hubs, concentrators, switches, bridges, etc... to this interface when portfast is enabled, can cause temporary bridging loops. Use with CAUTION %Portfast has been configured on FastEthernet0/1 but will only have effect when the interface is in a non-trunking mode.
1.4 高級的STP
思科私有 | PVST(Per-VLAN STP,每個VLAN一個生成樹協議) 支持ISL封裝協議 每個VLAN有一個生成樹實例 能夠實現第二層的負載均衡 支持BackhomeFast、UplinkFast和PortFast特性 |
PVST+(Per-VLAN STP plus,每個VLAN一個生成樹協議加) 支持ISL和302.1Q封裝協議 支持思科STP私有屬性的擴展 增加了BPDU guard和Root guard功能 | |
Rapid-PVST+(Rapid per-VLAN STP,快速的每個VLAN一個生成樹協議) 基於快速生成樹的標準 比802.1D收斂的速度更快 支持BackhomeFast、UplinkFast和PortFast特性 | |
IEEE標準 | RSTP(Rapid STP,快速生成樹協議) 1982年被提出,比802.1D收斂的速度更快 實現思科普通私有屬性的擴展 IEEE把RSTP合成到802.1D中,叫做IEEE 802.1D-2004規範 |
MSTP(Multiple STP,多生成樹協議) 多個VLAN被映射到同一個生成樹實例 IEEE 802.1Q-2003現在包含MSTP |
SW(config)#spanning-tree mode ? 查看該交換機支持的生成樹協議