STP 生成樹協定詳解:基本概念、相關術語、訊息格式,學起來!

2025.04.10
本期與大家分享STP生成樹協定詳解問答。



一、生成樹協定基本介紹
1. 生成樹的定義與目的
乙太網路交換網路中為了進行鏈路備份,提高網路可靠性,通常會使用冗餘鏈路。但是使用冗餘鏈路會在交換網路上產生環路,引發廣播風暴以及MAC位址表不穩定等故障現象,從而導致用戶通訊品質較差,甚至通訊中斷。

為解決交換網路中的環路問題,提出了生成樹協定STP(Spanning Tree Protocol)。生成樹協定演進如下:


生成樹協定中,MSTP相容於RSTP、STP,RSTP相容於STP。三種生成樹協定的比較如下表所示。



如上圖,在網路中部署STP協議,透過彼此互動資訊發現網路中的環路,並有選擇的對某個連接埠進行阻塞,最終將環形網路結構修剪成無環路的樹形網路結構,從而防止封包在環形網路中不斷增生和無限循環,避免裝置因重複接收相同的封包造成處理能力下降。

二、STP機制原理詳解
1. STP相關概念
STP基本概念如下:
生成樹協議目的:

在乙太網路交換網路中部署生成樹協定後,如果網路中出現環路,生成樹協定透過拓撲運算,可實現:

消除環路:透過阻塞冗餘鏈路來消除網路中可能存在的網路通訊環路。
鏈路備份:當前活動的路徑發生故障時,啟動冗餘備份鏈路,恢復網路連通性。
2. 生成樹協定的應用場景
在一個複雜的網路中,網路規劃者由於冗餘備份的需要,一般都傾向於在設備之間部署多條實體鏈路,其中一條作主用鏈路,其他鏈路作備份。這樣就難免會形成環形網絡,若網絡中存在環路,可能會造成廣播風暴和MAC表項被破壞。
PID:連接埠ID。 PID由兩部分構成的,高4位是連接埠優先權,低12位是埠號。

② 路徑開銷(Path Cost)描述了連接網路的連接埠 的“優劣”,連接埠類型和頻寬決定了該連接埠的路徑開銷,根交換器的根路徑開銷為零。其他交換器收到BPDU後,把報文中的根路徑開銷加上接收埠路徑開銷,得到該埠的「根路徑開銷」(Root Path Cost),根路徑開銷反映了某埠到根交換器的「遠近」。
(1) 一座根橋

樹形的網路結構必須有樹根,於是STP引進了根橋(Root Bridge)概念。

對於一個STP網絡,根橋在全網中只有一個,它是整個網路的邏輯中心,但不一定是實體中心。

(2) 兩種度量

生成樹的產生計算有兩大基本度量依據:ID和路徑開銷。

① ID,再分為:BID(Bridge ID)和PID(Port ID)。

BID:橋ID。 IEEE 802.1D標準中規定BID是由橋優先權(Bridge Priority)與橋MAC位址構成。 BID橋優先權佔據高16位(預設為32768,須為4096的整數倍,範圍0-61440),其餘的低48位是MAC位址。在STP網路中,橋ID最小的設備會被選舉為根橋。
(3) 三要素選舉

從環形網路拓撲結構到樹狀結構,整體來說有三個要素:根橋、根端口和指定端口。

選出一個網橋ID最小(最優)的交換器作為根網橋(Root Bridge)
每個非根交換器選擇一個根端口(Root Port RP),即去往根橋路徑開銷最小的端口
每個交換網段選擇一個除根連接埠以外的轉送連接埠—指定連接埠(Designated Port DP),用於傳送配置BPDU
堵塞其他(非根非指定端口)端口,該端口不轉送業務流量,但會持續接收和偵聽BPDU
(4) 四個比較原則

STP選舉有四個比較原則,構成訊息優先權向量:{ 根橋ID,根路徑開銷,傳送設備BID,傳送埠PID },即配置BPDU封包的比較如下:
先比較根橋ID,越小越好
如果根橋ID相等,根路徑開銷越小越好
如果根橋ID和根路徑開銷相等,發送設備BID越小越好
如果根橋ID、根路徑開銷和發送設備BID相等,發送連接埠PID越小越好
記住生成樹協定所有優先權比較都是「小優」!

(5) 五種連接埠狀態

運行STP協定的設備上連接埠狀態如下表所示:
2. STP封包格式
STP封包類型有2種:

配置BPDU:通常所說的BPDU封包多數指配置BPDU,它是一種心跳訊息,只要連接埠啟用STP,則配置BPDU就會依照Hello Time定時器規定的時間間隔從指定連接埠發出。
TCN BPDU:在設備偵測到網路拓撲發生變化時才發出,指在下游拓撲發生變化時向上游發送拓撲變化通知,直到根節點
3. STP的設定BPDU
STP的配置BPDU封包被封裝在乙太網路資料訊框中,特徵為:
目的MAC是組播MAC:01-80-C2-00-00-00,Length/Type欄位為MAC資料長度,後面是LLC頭,LLC之後是BPDU封包頭。

這裡注意,現在大多數網路應用都使用Ethernet V2格式,而交換器之間的BPDU則採用IEEE802.3 LLC格式封裝,兩者比較如下圖
在初始化過程中,每個橋都會主動發送配置BPDU。但在網路拓樸穩定以後,只有根橋主動發送配置BPDU,其他橋在收到上游傳來的配置BPDU後,才觸發發送自己的配置BPDU。

配置BPDU的長度至少要35個字節,主要攜帶(根網橋ID 、根路徑開銷、發送網橋ID、發送埠ID)這四個參數和(Hello time、Forwarding delay、MAXage)這三個計時器。

STP有三個計時器影響連接埠狀態和網路收斂:

(1) Hello time

根交換器發送配置BPDU的時間間隔,缺省2s
感知拓樸變化的交換器發送TCN的時間間隔
(2) Forwaring delay:連接埠在listening或learning狀態停留的時間,缺省15s

(3) MAXage:交換器快取的配置BPDU的老化時間,預設20s

STP配置BPDU封包基本格式如下圖所示:
參數表格詳解:

4. STP的TCN BPDU
TCN BPDU是指在下游拓撲發生變化時向上游發送拓撲變化通知,直到根節點。 TCN BPDU在下列兩種情況下會產生(STP/RSTP/MSTP機制皆一致):

連接埠狀態變為Forwarding狀態。
指定連接埠收到TCN BPDU,複製TCN BPDU並發送到根橋。
STP的TCN BPDU內容較簡單,只有表1所列的前3個欄位:協定號碼、版本和類型,總長度只有4個位元組,如下:
字段說明:

Protocol Identifier:協定編號為0
Protocol Version Identifier:協定版本號為0,表示為STP(2是RSTP,3是MSTP)
BPDU Type:類型欄位皆為固定值0x80,表示為TCN BPDU