STP(Spanning Tree Protocol,生成樹協議)是根據IEEE協會製定的802.1D標準建立的,用於在局域網中消除數據鏈路層物理環路的協議。運行該協議的設備通過彼此交互信息發現網絡中的環路,並有選擇的對某些端口進行阻塞,最終將環路網絡結構修剪成無環路的樹型網絡結構,從而防止報文在環路網絡中不斷增生和無限循環,避免設備由於重複接收相同的報文造成的報文處理能力下降的問題發生。
STP包含了兩個含義,狹義的STP是指IEEE 802.1D中定義的STP協議,廣義的STP是指包括IEEE 802.1D定義的STP協議以及各種在它的基礎上經過改進的生成樹協議。
STP采用的協議報文是BPDU(Bridge Protocol Data Unit,橋協議數據單元),也稱為配置消息。
STP通過在設備之間傳遞BPDU來確定網絡的拓撲結構。BPDU中包含了足夠的信息來保證設備完成生成樹的計算過程。
BPDU在STP協議中分為兩類:
l 配置BPDU(Configuration BPDU):用來進行生成樹計算和維護生成樹拓撲的報文。
l TCN BPDU(Topology Change Notification BPDU):當拓撲結構發生變化時,用來通知相關設備網絡拓撲結構發生變化的報文。
(1) 根橋
樹形的網絡結構,必須要有樹根,於是STP引入了根橋(Root Bridge)的概念。
根橋在全網中隻有一個,而且根橋會根據網絡拓撲的變化而改變,因此根橋並不是固定的。
網絡收斂後,根橋會按照一定的時間間隔產生並向外發送配置BPDU,其它的設備對該配置BPDU進行轉發,從而保證拓撲的穩定。
(2) 根端口
所謂根端口,是指一個非根橋的設備上離根橋最近的端口。根端口負責與根橋進行通信。非根橋設備上有且隻有一個根端口。根橋上沒有根端口。
(3) 指定橋與指定端口
指定橋與指定端口的含義,請參見表1的說明。
分類 | 指定橋 | 指定端口 |
對於一台設備而言 | 與本機直接相連並且負責向本機轉發配置消息的設備 | 指定橋向本機轉發配置消息的端口 |
對於一個局域網而言 | 負責向本網段轉發配置消息的設備 | 指定橋向本網段轉發配置消息的端口 |
指定橋與指定端口如圖1所示,AP1、AP2、BP1、BP2、CP1、CP2分別表示設備Device A、Device B、Device C的端口。
l Device A通過端口AP1向Device B轉發配置消息,則Device B的指定橋就是Device A,指定端口就是Device A的端口AP1;
l 與局域網LAN相連的有兩台設備:Device B和Device C,如果Device B負責向LAN轉發配置消息,則LAN的指定橋就是Device B,指定端口就是Device B的BP2。
& 說明:
根橋上的所有端口都是指定端口。
(4) 路徑開銷
路徑開銷是STP協議用於選擇鏈路的參考值。STP協議通過計算路徑開銷,選擇較為“強壯”的鏈路,阻塞多餘的鏈路,將網絡修剪成無環路的樹型網絡結構。
STP通過在設備之間傳遞BPDU來確定網絡的拓撲結構。配置消息中包含了足夠的信息來保證設備完成生成樹的計算過程,其中包含的幾個重要信息如下:
l 根橋ID:由根橋的優先級和MAC地址組成;
l 指定橋ID:由指定橋的優先級和MAC地址組成;
l 指定端口ID:由指定端口的優先級和端口名稱組成;
& 說明:
為描述方便,在下麵的描述及舉例中僅考慮配置消息的其中四項內容:
l 根橋ID(以設備的優先級表示);
l 根路徑開銷;
l 指定橋ID(以設備的優先級表示);
l 指定端口ID(以端口名稱表示)。
(1) STP算法實現的具體過程
l 初始狀態
各台設備的各個端口在初始時會生成以自己為根橋的配置消息,根路徑開銷為0,指定橋ID為自身設備ID,指定端口為本端口。
l 最優配置消息的選擇
各台設備都向外發送自己的配置消息,同時也會收到其它設備發送的配置消息。
最優配置消息的選擇過程如表2所示。
步驟 | 內容 |
1 | 每個端口收到配置消息後的處理過程如下: l 當端口收到的配置消息比本端口配置消息的優先級低時,設備會將接收到的配置消息丟棄,對該端口的配置消息不作任何處理。 l 當端口收到的配置消息比本端口配置消息的優先級高時,設備就用接收到的配置消息中的內容替換該端口的配置消息中的內容。 |
2 | 設備將所有端口的配置消息進行比較,選出最優的配置消息。 |
& 說明:
配置消息的比較原則如下:
l 根橋ID較小的配置消息優先級高;
l 若根橋ID相同,則比較根路徑開銷,比較方法為:用配置消息中的根路徑開銷加上本端口對應的路徑開銷,假設兩者之和為S,則S較小的配置消息優先級較高;
l 若根路徑開銷也相同,則依次比較指定橋ID、指定端口ID、接收該配置消息的端口ID等,上述值較小的配置消息優先級較高。
l 根橋的選擇
網絡初始化時,網絡中所有的STP設備都認為自己是“根橋”,根橋ID為自身的設備ID。通過交換配置消息,設備之間比較根橋ID,網絡中根橋ID最小的設備被選為根橋。
l 根端口、指定端口的選擇
根端口、指定端口的選擇過程如表3所示。
表3 根端口和指定端口的選擇過程
步驟 | 內容 |
1 | 非根橋設備將接收最優配置消息的那個端口定為根端口 |
2 | 設備根據根端口的配置消息和根端口的路徑開銷,為每個端口計算一個指定端口配置消息: l 根橋ID替換為根端口的配置消息的根橋ID; l 根路徑開銷替換為根端口配置消息的根路徑開銷加上根端口對應的路徑開銷; l 指定橋ID替換為自身設備的ID; l 指定端口ID替換為自身端口ID。 |
3 | 設備使用計算出來的配置消息和需要確定端口角色的端口上的配置消息進行比較,並根據比較結果進行不同的處理: l 如果計算出來的配置消息優,則設備就將該端口定為指定端口,端口上的配置消息被計算出來的配置消息替換,並周期性向外發送; l 如果端口上的配置消息優,則設備不更新該端口的配置消息並將此端口阻塞,此端口將不再轉發數據,隻接收但不發送配置消息。 |
& 說明:
在拓撲穩定狀態,隻有根端口和指定端口轉發流量,其它的端口都處於阻塞狀態,它們隻接收STP協議報文而不轉發用戶流量。
一旦根橋、根端口、指定端口選舉成功,則整個樹形拓撲就建立完畢了。
下麵結合例子說明STP算法實現的計算過程。具體的組網如圖2所示,Device A的優先級為0,Device B的優先級為1,Device C的優先級為2,各個鏈路的路徑開銷分別為5、10、4。
圖2 STP算法計算過程組網圖
各台設備的初始狀態如表4所示。
設備 | 端口名稱 | 端口的配置消息 |
Device A | AP1 | {0,0,0,AP1} |
AP2 | {0,0,0,AP2} | |
Device B | BP1 | {1,0,1,BP1} |
BP2 | {1,0,1,BP2} | |
Device C | CP1 | {2,0,2,CP1} |
CP2 | {2,0,2,CP2} |
l 各台設備的比較過程及結果
各台設備的比較過程及結果如表5所示。
表5 各台設備的比較過程及結果
設備 | 比較過程 | 比較後端口的配置消息 |
Device A | l 端口AP1收到Device B的配置消息{1,0,1,BP1},Device A發現本端口的配置消息{0,0,0,AP1}優於接收到的配置消息,就把接收到的配置消息丟棄。 l 端口AP2收到Device C的配置消息{2,0,2,CP1},Device A發現本端口的配置消息{0,0,0,AP2}優於接收到的配置消息,就把接收到的配置消息丟棄。 l Device A發現自己各個端口的配置消息中根橋和指定橋都是自己,則認為自己是根橋,各個端口的配置消息都不作任何修改,以後周期性的向外發送配置消息。 | AP1:{0,0,0,AP1} AP2:{0,0,0,AP2} |
Device B | l 端口BP1收到來自Device A的配置消息{0,0,0,AP1},Device B發現接收到的配置消息優於本端口的配置消息{1,0,1,BP1},於是更新端口BP1的配置消息。 l 端口BP2收到來自Device C的配置消息{2,0,2,CP2},Device B發現本端口的配置消息{1,0,1,BP2}優於接收到的配置消息,就把接收到的配置消息丟棄。 | BP1:{0,0,0,AP1} BP2:{1,0,1,BP2} |
l Device B對各個端口的配置消息進行比較,選出端口BP1的配置消息為最優配置消息,然後將端口BP1定為根端口,它的配置消息不作改變。 l Device B根據根端口BP1的配置消息和根端口的路徑開銷5,為BP2端口計算一個指定端口配置消息{0,5,1,BP2}。 l Device B使用計算出來的配置消息{0,5,1,BP2}和端口BP2上的配置消息進行比較,比較的結果是計算出來的配置消息較優,則Device B將端口BP2定為指定端口,它的配置消息被計算出來的配置消息替換,並周期性向外發送。 | 根端口BP1: {0,0,0,AP1} 指定端口BP2: {0,5,1,BP2} | |
Device C | l 端口CP1收到來自Device A的配置消息{0,0,0,AP2},Device C發現接收到的配置消息優於本端口的配置消息{2,0,2,CP1},於是更新端口CP1的配置消息。 l 端口CP2收到來自Device B端口BP2更新前的配置消息{1,0,1,BP2},Device C發現接收到的配置消息優於本端口的配置消息{2,0,2,CP2},於是更新端口CP2的配置消息。 | CP1:{0,0,0,AP2} CP2:{1,0,1,BP2} |
經過比較: l 端口CP1的配置消息被選為最優的配置消息,端口CP1就被定為根端口,它的配置消息不作改變。 l 將計算出來的指定端口配置消息{0,10,2,CP2}和端口CP2的配置消息進行比較後,端口CP2轉為指定端口,它的配置消息被計算出來的配置消息替換。 | 根端口CP1: {0,0,0,AP2} 指定端口CP2: {0,10,2,CP2} | |
l 接著端口CP2會收到Device B更新後的配置消息{0,5,1,BP2},由於收到的配置消息比原配置消息優,則Device C觸發更新過程。 l 同時端口CP1收到Device A周期性發送來的配置消息,比較後Device C不會觸發更新過程。 | CP1:{0,0,0,AP2} CP2:{0,5,1,BP2} | |
經過比較: l 端口CP2的根路徑開銷9(配置消息的根路徑開銷5+端口CP2對應的路徑開銷4)小於端口CP1的根路徑開銷10(配置消息的根路徑開銷0+端口CP1對應的路徑開銷10),所以端口CP2的配置消息被選為最優的配置消息,端口CP2就被定為根端口,它的配置消息就不作改變。 l 將端口CP1的配置消息和計算出來的指定端口配置消息比較後,端口CP1被阻塞,端口配置消息不變,同時不接收從Device A轉發的數據,直到新的情況觸發生成樹的計算,比如從Device B到Device C的鏈路down掉。 | 阻塞端口CP1: {0,0,0,AP2} 根端口CP2: {0,5,1,BP2} |
經過上表的比較過程,此時以Device A為根橋的生成樹就確定下來了,形狀如圖3所示。
& 說明:
為了便於描述,本例簡化了生成樹的計算過程,實際的過程要更加複雜。
(2) STP的配置消息傳遞機製
l 當網絡初始化時,所有的設備都將自己作為根橋,生成以自己為根的配置消息,並以Hello Time為周期定時向外發送。
l 接收到配置消息的端口如果是根端口,且接收的配置消息比該端口的配置消息優,則設備將配置消息中攜帶的Message Age按照一定的原則遞增,並啟動定時器為這條配置消息計時,同時將此配置消息從設備的指定端口轉發出去。
l 如果指定端口收到的配置消息比本端口的配置消息優先級低時,會立刻發出自己的更好的配置消息進行回應。
l 如果某條路徑發生故障,則這條路徑上的根端口不會再收到新的配置消息,舊的配置消息將會因為超時而被丟棄,設備重新生成以自己為根的配置消息並向外發送,從而引發生成樹的重新計算,得到一條新的通路替代發生故障的鏈路,恢複網絡連通性。
不過,重新計算得到的新配置消息不會立刻就傳遍整個網絡,因此舊的根端口和指定端口由於沒有發現網絡拓撲變化,將仍按原來的路徑繼續轉發數據。如果新選出的根端口和指定端口立刻就開始數據轉發的話,可能會造成暫時性的環路。
(3) STP定時器
STP計算中,需要使用三個重要的時間參數:Forward Delay、Hello Time和Max Age。
l Forward Delay為設備狀態遷移的延遲時間。鏈路故障會引發網絡重新進行生成樹的計算,生成樹的結構將發生相應的變化。不過重新計算得到的新配置消息無法立刻傳遍整個網絡,如果新選出的根端口和指定端口立刻就開始數據轉發的話,可能會造成暫時性的環路。為此,STP采用了一種狀態遷移的機製,新選出的根端口和指定端口要經過2倍的Forward Delay延時後才能進入轉發狀態,這個延時保證了新的配置消息已經傳遍整個網絡。
l Hello Time用於設備檢測鏈路是否存在故障。設備每隔Hello Time時間會向周圍的設備發送hello報文,以確認鏈路是否存在故障。
l Max Age是用來判斷配置消息在設備內保存時間是否“過時”的參數,設備會將過時的配置消息丟棄。
(1) STP、RSTP存在的不足
STP不能快速遷移,即使是在點對點鏈路或邊緣端口(邊緣端口指的是該端口直接與用戶終端相連,而沒有連接到其它設備或共享網段上),也必須等待2倍的Forward Delay的時間延遲,端口才能遷移到轉發狀態。
RSTP(Rapid Spanning Tree Protocol,快速生成樹協議)是STP協議的優化版。其“快速”體現在,當一個端口被選為根端口和指定端口後,其進入轉發狀態的延時在某種條件下大大縮短,從而縮短了網絡最終達到拓撲穩定所需要的時間。
& 說明:
l RSTP中,根端口的端口狀態快速遷移的條件是:本設備上舊的根端口已經停止轉發數據,而且上遊指定端口已經開始轉發數據。
l RSTP中,指定端口的端口狀態快速遷移的條件是:指定端口是邊緣端口或者指定端口與點對點鏈路相連。如果指定端口是邊緣端口,則指定端口可以直接進入轉發狀態;如果指定端口連接著點對點鏈路,則設備可以通過與下遊設備握手,得到響應後即刻進入轉發狀態。
RSTP可以快速收斂,但是和STP一樣存在以下缺陷:局域網內所有網橋共享一棵生成樹,不能按VLAN阻塞冗餘鏈路,所有VLAN的報文都沿著一棵生成樹進行轉發。
(2) MSTP的特點
MSTP(Multiple Spanning Tree Protocol,多生成樹協議)可以彌補STP和RSTP的缺陷,它既可以快速收斂,也能使不同VLAN的流量沿各自的路徑轉發,從而為冗餘鏈路提供了更好的負載分擔機製。
MSTP的特點如下:
l MSTP設置VLAN映射表(即VLAN和生成樹的對應關係表),把VLAN和生成樹聯係起來。通過增加“實例”(將多個VLAN整合到一個集合中)這個概念,將多個VLAN捆綁到一個實例中,以節省通信開銷和資源占用率。
l MSTP把一個交換網絡劃分成多個域,每個域內形成多棵生成樹,生成樹之間彼此獨立。
l MSTP將環路網絡修剪成為一個無環的樹型網絡,避免報文在環路網絡中的增生和無限循環,同時還提供了數據轉發的多個冗餘路徑,在數據轉發過程中實現VLAN數據的負載分擔。
l MSTP兼容STP和RSTP。
在圖4中的每台設備都運行MSTP。下麵將結合圖形解釋MSTP的一些基本概念。
圖4 MSTP的基本概念示意圖
(1) MST域
MST域(Multiple Spanning Tree Regions,多生成樹域)是由交換網絡中的多台設備以及它們之間的網段所構成。這些設備具有下列特點:
l 都啟動了MSTP;
l 具有相同的域名;
l 具有相同的VLAN到生成樹實例映射配置;
l 具有相同的MSTP修訂級別配置;
l 這些設備之間在物理上有鏈路連通。
例如圖4中的區域A0,域內所有設備都有相同的MST域配置:
l 域名相同;
l VLAN與生成樹實例的映射關係相同(VLAN 1映射到生成樹實例1,VLAN 2映射到生成樹實例2,其餘VLAN映射到CIST。其中,CIST即指生成樹實例0);
l 相同的MSTP修訂級別(此配置在圖中沒有體現)。
一個交換網絡可以存在多個MST域。用戶可以通過MSTP配置命令把多台設備劃分在同一個MST域內。
(2) VLAN映射表
VLAN映射表是MST域的一個屬性,用來描述VLAN和生成樹實例的映射關係。
例如圖4中,域A0的VLAN映射表就是:VLAN 1映射到生成樹實例1,VLAN 2映射到生成樹實例2,其餘VLAN映射到CIST。MSTP就是根據VLAN映射表來實現負載分擔的。
(3) IST
IST(Internal Spanning Tree,內部生成樹)是MST域內的一棵生成樹。
IST和CST(Common Spanning Tree,公共生成樹)共同構成整個交換網絡的生成樹CIST(Common and Internal Spanning Tree,公共和內部生成樹)。IST是CIST在MST域內的片段。
例如圖4中CIST在每個MST域內都有一個片段,這個片段就是各個域內的IST。
(4) CST
CST是連接交換網絡內所有MST域的單生成樹。如果把每個MST域看作是一個“設備”,CST就是這些“設備”通過STP協議、RSTP協議計算生成的一棵生成樹。
例如圖4中紅色線條描繪的就是CST。
(5) CIST
CIST是連接一個交換網絡內所有設備的單生成樹,由IST和CST共同構成。
例如圖4中,每個MST域內的IST加上MST域間的CST就構成整個網絡的CIST。
(6) MSTI
一個MST域內可以通過MSTP生成多棵生成樹,各棵生成樹之間彼此獨立。每棵生成樹都稱為一個MSTI(Multiple Spanning Tree Instance,多生成樹實例)。
例如圖4中,每個域內可以存在多棵生成樹,每棵生成樹和相應的VLAN對應。這些生成樹就被稱為MSTI。
(7) 域根
MST域內IST和MSTI的根橋就是域根。MST域內各棵生成樹的拓撲不同,域根也可能不同。
例如圖4中,區域D0中,生成樹實例1的域根為設備B,生成樹實例2的域根為設備C。
(8) 總根
總根(Common Root Bridge)是指CIST的根橋。
例如圖4中,總根為區域A0內的某台設備。
(9) 域邊界端口
域邊界端口是指位於MST域的邊緣,用於連接不同MST域、MST域和運行STP的區域、MST域和運行RSTP的區域的端口。
在進行MSTP計算的時候,域邊界端口在MST實例上的角色和CIST的角色保持一致,即如果域邊界端口在CIST上的角色是Master端口,則它在域內所有MST實例上的角色也是Master端口。例如圖4中,如果區域A0的一台設備和區域D0的一台設備的第一個端口相連,整個交換網絡的總根位於A0內,則區域D0中這台設備上的第一個端口就是區域D0的域邊界端口。
(10) 端口角色
在MSTP的計算過程中,端口角色主要有根端口、指定端口、Master端口、Alternate端口、Backup端口等。
l 根端口:負責向根橋方向轉發數據的端口。
l 指定端口:負責向下遊網段或設備轉發數據的端口。
l Master端口:連接MST域到總根的端口,位於整個域到總根的最短路徑上。從CST上看,Master端口就是域的“根端口”(把域看作是一個節點)。Master端口在IST/CIST上的角色是根端口,在其它各個實例上的角色都是Master端口。
l Alternate端口:根端口和Master端口的備份端口。當根端口或Master端口被阻塞後,Alternate端口將成為新的根端口或Master端口。
l Backup端口:指定端口的備份端口。當指定端口被阻塞後,Backup端口就會快速轉換為新的指定端口,並無時延的轉發數據。當開啟了MSTP的同一台設備的兩個端口互相連接時就存在一個環路,此時設備會將其中一個端口阻塞,Backup端口是被阻塞的那個端口。
端口在不同的生成樹實例中可以擔任不同的角色。
請參考圖5理解上述概念。圖中:
l 設備A、B、C、D構成一個MST域。
l 設備A的端口1、端口2向總根方向連接。
l 設備C的端口5、端口6構成了環路。
l 設備D的端口3、端口4向下連接其它的MST域。
(11) 端口狀態
MSTP中,根據端口是否學習MAC地址和是否轉發用戶流量,可將端口狀態劃分為以下三種:
l Forwarding狀態:學習MAC地址,轉發用戶流量;
l Learning狀態:學習MAC地址,不轉發用戶流量;
l Discarding狀態:不學習MAC地址,不轉發用戶流量。
& 說明:
同一端口在不同的生成樹實例中的端口狀態可以不同。
端口狀態和端口角色是沒有必然聯係的,表6給出了各種端口角色能夠具有的端口狀態(“√”表示此端口角色能夠具有此端口狀態;“-”表示此端口角色不能具有此端口狀態)。
端口角色 端口狀態 | 根端口 /Master端口 | 指定端口 | Alternate端口 | Backup端口 |
Forwarding | √ | √ | - | - |
Learning | √ | √ | - | - |
Discarding | √ | √ | √ | √ |
MSTP將整個二層網絡劃分為多個MST域,各個域之間通過計算生成CST;域內則通過計算生成多棵生成樹,每棵生成樹都被稱為是一個多生成樹實例。其中實例0被稱為IST,其它的多生成樹實例為MSTI。MSTP同STP一樣,使用配置消息進行生成樹的計算,隻是配置消息中攜帶的是設備上MSTP的配置信息。
(1) CIST生成樹的計算
通過比較配置消息後,在整個網絡中選擇一個優先級最高的設備作為CIST的根橋。在每個MST域內MSTP通過計算生成IST;同時MSTP將每個MST域作為單台設備對待,通過計算在域間生成CST。CST和IST構成了整個網絡的CIST。
(2) MSTI的計算
在MST域內,MSTP根據VLAN和生成樹實例的映射關係,針對不同的VLAN生成不同的生成樹實例。每棵生成樹獨立進行計算,計算過程與STP計算生成樹的過程類似,請參見“STP的基本原理”。
MSTP中,一個VLAN報文將沿著如下路徑進行轉發:
l 在MST域內,沿著其對應的MSTI轉發;
l 在MST域間,沿著CST轉發。