-
STP技術
以太網交換網絡上為了進行鏈路備份 ,通常 會使用冗余鏈路, 但是使用冗余鏈路會在 交換網絡上形成環路, 並導致廣播風暴以及MAC地址表不穩定等故障現象。生成樹協議(STP)運行於以太網交換機上, 為解決網絡中的環路問題在網絡上修剪出一棵無環的樹 , 並在主鏈路出現故障后自動啟用備份鏈路, 使網絡工作正常 。最新的STP標准由1998年發布的IEEE8 02.1D標准文檔定義 本節將針對STP的基本工作過程進行詳細介紹, 具體可概括為以下5點內容。
-
STP產生的背景
-
STP的工作原理
-
STP的協議報文
-
RSTP的工作機制
-
MSTP的工作機制
-
-
二層環路
交換機基於MAC地址表進行轉發,MAC地址表說明了目的MAC地址和目的端口的對應關系。如圖所示,假設PCA向PCB發送一個數據幀,此數據幀的目的MAC地址設置為PCB的MAC地址00-OD-56-BF-88-20。交換機會執行以下動作。
(1)交換機SWA接收到此數據幀之后需要查找MAC地址表 ,根據MAC地址表中的記錄將數據幀從 E0/1口向外轉發 。交換機在轉發數據幀的時候 ,對數據幀不做任何修改 。如果交換機接收到的是一 個廣播數據幀或者是目標地址不在MAC地址表中的數據幀,則向所有端口轉發(源端口除外 )。
(2)交換機SWB接收到了此數據幀之后查找MAC地址表,根據MAC地址表中的記錄,將數據從EO/3端口上轉發出去。此次轉發仍然不會對數據幀做任何修改。
(3)PCB接收到數據幀之后查看目的MAC地址,由於目的MAC地址為接收者本身 ,所以PCB處理此數據幀並上送上層協議處理數據幀所攜帶的數據。
如果為了保證網絡運行的穩定性,在以太網交換網絡上使用冗余鏈路進行了鏈路備份,如圖所示
在使用了冗余鏈路后,出現了二層交換網絡的環路,引發了廣播風暴,MAC地址表不穩定等問題。
-
廣播風暴
如圖所示:交換機SWA 的 E0/1和SWB 的 E0/1 相連,SWA的 E0/2和SWB 的 E0/2 相連。
根據交換機的轉發原則,如果交換機從一個端口上接收到的是一個廣播數據幀,則向所有其他端口轉發,而且交換機在轉發數據幀的時候,對數據幀不做任何修改。
假設SWA從E0/3 接口接收到一個廣播幀.根據交換機的轉發原則,應該向除 E0/3 外的所有端口轉發該廣播幀,包括E0/1和E0/2接口(在本例中,只考慮從E0/2接口發出的廣播報文)。當該廣播幀從SWA的E0/2轉發到交換機SWB 后,SWB會通過E0/1向SWA繼續轉發該廣播幀。這樣該廣播幀就會沿着SWA-E0/2-SWB-E0/2-SWB-E0/1-SWA-E0/1-SWA-E0/2…無限轉發下去。反方向SWA-E0/1- SWB-E0/1-SWB-E0/2-SWA-E0/2 -SWA-E0/1…也是一樣的。
因此, 如果交換網絡中存在環路,盡管PCA發送的廣播報文是有限的幾個廣播報文, 但這些廣播幀會在二層網絡中被無限期地轉發。而且廣播幀在經過交換機轉發時會進行復制,從而導致廣播幀數量越來越多,造成鏈路堵塞,這就是所謂的廣播風暴。
-
MAC地址表不穩定
交換機是根據 MAC地址表進行轉發的,MAC地址表在交換機啟動時是空的.交換機有一個學習MAC地址表的過程 ,根據接收到的數據幀的源地址和接收端口的對應關系來進行學習。
在存在環路的二層網絡中,MAC地址表也會變得不穩定,如圖所示。
PCA向外發送了一個數據幀,假設此數據幀的源MAC地址在網絡中所有交換機 的MAC地址表中都暫時不存在。SWA收到此數據幀之后,在MAC地址表中生成一個MAC地址表項,00-00-56-BF-88-10,對應端口為E0/3。
由於SWA的MAC地址表中沒有對應此數據幀目的MAC地址的表項,則SWA將此數據幀同時從E0/1和E0/2 端口轉發出去。此時數據 包被發送到 SWB,由於SWB的MAC地址表中也沒有對應此數據幀目的MAC地址的表項, 則從E0/1接口接收到的數據幀會被從E0/2接口發送回SWA。
SWA 從E0/4接收到此數據幀之后,會在MAC地址表中刪除原有的相關表項.生成一個新的表項,00-00-56-BF-88-10,對應端口為E0/2。如果此時PCA再次發送一個數據幀,則SWA在接收到該數據幀后又會將MAC地址的表項改回E0/3接口。
在整個數據轉發流程中, 交換機上的MAC地址表會一直重復這個過程,MAC地址表也會一直處於動盪學習的過程中。
因此,二層環路造成了MAC地址表不穩定,在重復的學習中還會導致錯誤的MAC地址表項,如上圖所示。在某些時候,MAC地址表中 00-00-56-BF-88-10對應的接口會是 E0/1或者 E0/2。
如上所述,存在環路結構的二層網絡會導致廣播風暴 、MAC地址表不穩定等問題,這些都會導致網絡運行異常。那么是否意昧着應該盡力去避免二層環路的結構呢?或者,反過來說,二層的環路結構,對於二層網絡的組網結構能否提供一些正面的作用呢?
從網絡的可靠性方面考慮,存在冗余鏈路的環路結構更能滿足客戶業務的可靠性需求。如上述的組網中,即使E0/1接口鏈路中斷,仍然能通過E0/2接口進行數據的轉發,從而實現對用戶業務的保護。
環路結構能夠提供二層業務的保護, 但環路結構的存在也可造成廣播風暴等問題。那么,能不能做到在網絡正常的時候,冗余鏈路不處於工作狀態,整個網絡中不存在環路結構,而當網絡出現鏈路或者端口故障的時候,冗余鏈路恢復工作來保證網絡的正常運行呢?如圖所示,在正常情況下,SWB的端口E0/20處於阻塞狀態,整個網絡是無環的網絡。當SWA的E0/20端口出現故障的時候,協議檢測到故障,把SWB的E0/20端口狀態轉為正常工作狀態, 從而保證整個網絡業務的正常運行。
為了要實現鏈路的冗余備份,又不引起二層鏈路的環路,在此引入了生成樹協議( STP)。
-
-
STP工作原理
STP主要用於在存在環路結構的二層網絡中構建一個無環的樹形的二層拓撲,協議由IEEE 802.1D定義。
-
基本術語。
STP定義了根橋(Root Bridge)、 根端口(Root Port) 、 指定端口(Designated Port) 、路徑開銷(Path Cost)等概念。通過構造一棵無環的樹的方法達到裁剪冗余的環路的目的, 同時實現鏈路備份和路徑最優化。
-
橋ID(bridge id)
由於早期用於連接不同終端的二層網絡設備只有兩個端口, 功能類似 "橋" 的概念, 因此被稱為 "網橋"。后來, 網橋被具有更多端口、 同時也可隔離沖突域的交換機所取代。但在部分場景的描述中, 有時仍然用 "網橋" 的概念來進行描述,但實際指的是交換機設備。本章節中, 涉及 "橋" 的概念描述,都可以描述為 "交換機" ,譬如 橋ID ,也可描述為 交換機ID ,"根橋" 也可描述為 "根交換機" 。
在二層網絡中用"橋ID" 來描述網絡中的交換機。一個"橋ID"由兩部分組成, 前16位表示的是交換機的優先級,后48位表示的是交換機的MAC地址, 如圖所示。橋ID的優先級可以人為設定,默認取值32768 。
-
根橋
根橋( Root Bridge )是橋ID最小的交換機,可以認為是樹形二層拓撲的根。對於STP來說,網絡中所有的交換機選舉出一個根交換機,然后,其他交換機角色和端口角色的選舉,都會參考根橋的判斷來進行選擇。除了根橋外,網絡中其余所有的交換機都稱為非根交換機
-
端口開銷
端口開銷( Port Cost)表示數據從該端口發送時的開銷值,也即出端口的開銷。STP認為從一個端口接收數據是沒有開銷的。交換機的每個端口都有一個端口開銷值。 端口的開銷和端口的帶寬有關,帶寬越高,開銷越小。華為平台中,百兆端口的開銷值為200。
-
根端口
根端口( Root Port)是指從一個非根交換機到根交換機總開銷最小的路徑所經過的本地端口。 這個最小的總開銷值也稱為交換機的根路徑開銷( Root Path Cost )。
-
端口ID
端口ID ( Port Identifier )是用於區分描述交換機上不同端口的。
端口ID的定義方法有多種, 下圖中給出了其中的兩種常見定義。第一種定義中, 高4位是端口優先級,低12位是端口號。第二種定義中,高8位是端口優先級,低8位是端口編號,端口優先級默認取值為128。
-
指定端口
STP為每個網段選出一個指定端口( Designated Port )。 指定端口為每個網段轉發發往根交換機方向的數據,並且轉發由根交換機方向發往該網段的數據。
-
預備端口
既不是根端口也不是指定端口的交換機端口稱為預備端口(Alternate Port)。 預備端口不轉發數據,處於阻塞狀態。 但被阻塞的端口仍會監昕STP幀 , 以便鏈路出現故障后快速恢復被阻塞端口,將流量引導到保護路徑上。
-
網橋協議數據單元
在STP計算中, 交換機之間需要交換信息,並利用這些信息進行STP的根交換機、 根端口等選舉。承載STP信息交換的報文被稱為網橋協議數據單元(Bridge Protocol Data Unit, BPDU )報文。
-
生成樹的工作原理
了解如何實現對於端口的冗余保護。當網絡正常的時候, 關閉冗余的鏈路接口,防止環路;當網絡出現故障的時候,開放冗余端口,形成保護。
為達到這個目的,STP首先選舉出了一個根交換機,然后在其余的非根交換機上選擇出一個根端口。接着在每一段鏈路上選舉出一個指定的端口,最后既不是根端口也不是指定端口的端口,就成為預備端口,被置為阻塞狀態。
-
根橋選舉
根橋是整個STP樹形拓撲的根節點。要進行STP生成樹的計算,首先要確定的就是根橋。運行STP的交換機之間的根橋選舉,是借助了BPDU報文進行的信息交互。在BPDU報文中,包含了BID的信息。
每台交換機初始啟動后,都認為自己是根橋,並且,會在發送給別的交換機的BPDU報文中宣告自己是根橋。當交換機接收到從其他交換機發送過來的BPDU報文時,會將自己的橋ID和BPDU中的根橋ID進行比較,擁有較小橋ID的交換機被選舉為根橋。
交換機之間不斷交互BPDU報文,同時也不斷對橋ID進行比較,最終整個交換機網絡會選舉出一台擁有最小橋ID的交換機作為整個網絡的根橋。如圖所示,交換機SWA,SWB,SWC都使用了默認優先級32768。按照之前的描述,根橋的選舉, 是對不同交換機的橋ID進行比較, 而橋ID又是由優先級和交換機的MAC地址組成的。所以,在交換機優先級相同的情況下, 就需要使用MAC地址進行比較了。圖示中,SWA擁有最小的MAC地址, 因此被選舉為根橋。
-
根端口選舉
在選定了根橋后, 其余交換機都被稱為非根橋。在部署了冗余鏈路的網絡中,一台非根橋交換機上可一能存在多條去往根交換機的路徑。在這些路徑中,STP會選出條最優的路徑,負責轉發該非根橋交換機到根橋交換機的數據。該路徑在非根交換機上的本地端口,稱為根端口。
根端口作為非根交換機與根交換機之間進行報文交互的端口,在一台非根交換機上是唯一的。
根端口所在的路徑是去往根交換機的最優路徑。衡量路徑是否最優,一個重要的依據是路徑開銷。在之前描述STP術語的時候,提過路徑開銷和端口開銷兩個概念,而路徑開銷即為該路徑上所有出端口的端口開銷的總和。端口的開銷和端口的帶寬有關,帶寬越高,開銷越小,如表所示:
根端口的選舉,首先比較端口去往根交換機的路徑開銷,最小的路徑開銷所在的端口即為根端口,根端口的路徑開銷,稱為根路徑開銷(Root Path Cost);如果多個端口的路徑開銷相同,則比較端口上行交換機的橋ID,上行設備橋ID較小的端口作為根端口;如果上行交換機的橋ID相同,再比較上行交換機的端口ID,上行交換機端口ID較小的端口作為根端口。
在下圖中,SWA為根交換機,其余交換機為非根交換機,圖中交換機所涉及的STP選舉參數都為默認參數。SWB和 SWC去往根交換機的路徑分別有兩條,在使用相同鏈路帶寬的情況, 譬如都是GE鏈路(1 Gbit/s),那么SWB和SWC的去往根交換機的兩個方向的路徑開銷分別為20和40,SWB和SWC的根端口通過比較路徑開銷就能夠得到。
在某些情況下,無法通過路徑開銷的方式得出根端口,那么遵循根端口的選舉原則,繼續比較上行交換機的橋ID和上行交換機的端口ID。
-
指定端口選舉
根端口的選舉確定了非根交換機和根交換機通信路徑的唯一性,但對於交換機之間的互聯網段來說,去往根交換機的路徑也存在有多條。如上圖中,LANC上的數據通過SWB去往根交換機,也可以通過SWC去往根交換機。指定端口的選舉,既是為了確定每個網段的唯一的一個負責轉發該網段數據的接口,該指定端口所在的交換機也被稱為該網段的指定交換機。
指定端口的選舉,首先比較該網段連接端口所屬交換機的根路徑開銷,越小越優先;如果根路徑開銷相同,則比較所連接端口所屬交換機的交換機標識,越小越優先;如果根路徑開銷相同,交換機標識也相同,則比較所連接的端口的端口標識,越小越優先。
下圖中,STP為每個網段選出一個指定端口。
對於根交換機來說,所有端口都是所連接網段的指定端口。因此LANA和LANB的指定端口都在SWA上。LAND和LANE都只連接了一個交換機端口,此端口即為指定端口。
對於LANC來說,同時連接到兩個交換機端口,並且兩個交換機的根路徑開銷相同,因此需要比較兩個端口所在交換機的交換機標識。由於SWB的交換機標識比SWC小( MAC地址更小),因此LANC的指定端口在SWB上。
(4)阻塞預備端口
在完成根端口和指定端口的選舉后, 交換機上所有的既非根端口,也非指定端口的端口, 統稱為預備端口。
為防止環路,STP會將交換機上的預備端口進行邏輯阻塞。被邏輯阻塞的端口,無法轉發用戶數據幀,但可以接收並處理STP的BPDU報文。一旦網絡出現故障。借助STP的重新收斂,能夠放開部分阻塞端口,實現業務的保護。
如上圖所示,SWC連接LANC的端口既非根端口,也非指定端口,因此,該端口被稱為預備端口,STP會將該端口的數據轉發阻塞, 從而構建出樹形的拓撲。最終的邏輯拓撲結構如下圖
當網絡發生故障時,譬如SWA和SWC之間鏈路發生故障時,STP重新進行選舉,SWC的預備端口會被選舉為根端口,恢復數據轉發的能力,從而實現對網絡的保護此時的邏輯拓撲結構如下圖
-
生成樹的端口狀態。
STP通過根端口、指定端口、預備端口的選舉,構建了無環的樹形拓撲各端口的狀態描述總結如表所示
根端口(Root Port):去往根橋路徑最近的端口,這個最近的衡量是靠RootPath Cost來判定的 有關Path Cost的計算,是每當一個端口收到一個BPDU后.會在該BPDU所指示的Path Cost上加上該端口的Port Path Cost(這是可以人為配置的)。比較RootPath Cost最小的端口就是根端口,如果有兩條開銷相同的路徑,那么就選擇上行交換機BID較小的.如果上行交換機BID相同,那么就選擇上行交換機PID較小的。
指定端口(Designated Port):一個LAN里面負責轉發BPDU的端口。
預備端口(Alternate Port):被對方的指定端口抑制的端口預備端口不轉發任何報文.但接收BPDU,監聽網絡變化。
除了端口角色之外, STP同樣對於端口的狀態進行了定義,如表所示:
端口正常啟用之后, 端口首先進入Listening狀態, 開始生成樹的計算過程。如果經過計算, 端口角色需要設置為預備端口( Alternate Port ),則端口狀態立即進入Blocking狀態。
如果經過計算,端口角色需要設置為根端口(Root Port)或指定端口( Designated Port),則端口狀 態在等待一個時間周期之后從Listening 狀態進入Learning 狀態, 然后繼續等待一個時間周期之后,從 Learning狀態進入Forwarding狀態,正常轉發數據幀。端口狀態的遷移過程如圖
1端口代表被選為指定端口或者根端口
2端口被選為預備端口
3端口從學習過渡到轉發所經過時間周期。此時間周期被稱為轉發時延,默認為15s。
在上圖的端口狀態遷移中,如果端口是被禁用,則端口立即進入Disabled狀態;如果端口被選舉為預備端口,端口也立即進入Blocking狀態;但如果端口是被選舉為根端口或者指定端口, 即端口是從不轉發狀態進入轉發狀態 ,那么在進入轉發狀態之前,端口需要等待兩次Forward Delay的間隔。Forward Delay的設置, 主要是為了防止臨時環路。
如下圖所示,初始時候,SWA為根交換機,SWD的E0/2接口為備用接口,被邏輯阻塞。但網絡變化,需要讓SWC成為新的根交換機。經過重新選舉,SWB的E0/2接口成為新的備用接口,而SWD的E0/2成為了新了根端口。如果Forward Delay為0,那么一旦SWD的E0/2接口被選舉為新的根端口,將馬上恢復數據轉發的能力。而此時,SWB的E0/2接口不一定來得及進入Blocking狀態,這時候網絡中會出現臨時環路。為了防止臨時環路的出現,定義了Forward Delay,端口在被選舉為根端口或者指定端口時,並不立即進入轉發狀態。
在STP中,定義的Forwad Delay的時間間隔是15S,再加上STP自身的收斂時間,網絡從阻塞狀態變成可轉發狀態,花費的時間估計會達到50 s左右。在某些場景中,50s的收斂時間不能滿足業務的要求,為了盡量加快STP的收斂時間,IEEE另外定義了 802.1w 快速生成樹協議( Rapid Spanning Tree Protocol, RSTP),用於實現 STP的快速收斂。
-
-
BPDU報文
STP生成樹的計算,根端口 指定端口的選舉,都是借助於BPDU報文來進行信息的傳遞和交換的。 在向整網泛洪STP拓撲信息的過程中, 會涉及兩種BPDU:配置BPDU 和TCN BPDU。
BPDU報文采用IEEE802.3的封裝格式,以多播的方式發送,多播地址為01-80-c2-00-00-00。默認每2s發送一個BPDU報文。
更多的BPDU的內容作為一個運維開發我也就了解到這里即可。
-
RSTP
快速生成樹協議(RSTP)是STP的升級版本,與STP相比,最顯著的特點就是通過新的機制,加快了收斂速度。
STP運行於交換機上,通過在交換網絡中修剪出一棵無環的樹,解決了交換網絡中的環路問題。但是STP在網絡拓撲變化之后的收斂速度非常慢.已經無法適應現行網絡的要求。因此,為了盡量加快STP的收斂時間,IEEE另外定義了802.1w規范來描述RSTP,用於實現STP的快速收斂。
-
MSTP
不同於RSTP的快速收斂,多生成樹協議(Multiple Spanning Tree Protocol, MSTP)用於解決啟用了VLAN的交換網絡中的環路問題。2005年版本的IEEE 802.10為MSTP當前的標准文擋。
1.單生成樹的弊端
如果在二層網絡上部署STP的同時也啟用了VLAN, 那么就有可能導致部分VLAN路徑不通無法使用流量分擔,次優二層路徑等問題。
-
部分VLAN路徑不通
如圖所示,SWC連接終端網段,上行使用兩條鏈路連接SWA和SWB。配置VLAN2通過兩條 鏈路上行,配置VLAN3只通過一條鏈路上行。
為了解決VLAN2的環路,需要運行生成樹,在運行單個生成樹的情況下,假設SWC與SWB相連的端口成為預備端口,進入Disearding狀態。此時,VLAN3的路徑被斷開,無法上行到SWB。
-
無法使用流量分擔
如圖下圖所示SWC連接終端網段,上行使用兩條鏈路分別連接SWA和SWB來實現流量分擔。為了實現流量分擔,在SWC上配置的兩條上行鏈路為Trunk 鏈路,配置的兩條鏈路上都通過所有VLAN, SWA和SWB之間的鏈路也配置 為Trunk鏈路,並通過所有VLAN。將VLAN2的三層接口配置在SWA上,將VLAN3的三層接口配置在SWB 上。
理想情況下,VLAN2和VLAN3使用不同的鏈路上行到相應的三層接口,可是 如果網絡中只有一個生成樹,swc和SWNSWB F斤形成的環路會被打開,例如,SWC連接到SWB的接口成為預備端口(Alternate Port) ,並處於Discarding狀態,則VLAN2和VLAN3的數據都只能通過一條上行鏈路上行到SWA,不能實現流量分擔。
-
次優二層路徑
如上圖所示,STP的運行除了無法使用流量分擔以外,還導致了另外一個問題, 就是次優二層路徑。VLAN3的三層接口被配置在SWB上,但由於SWC 上行SWB的端口被阻塞,導致VLAN3的訪問數據必須走SWC-SWA-SWB。所以,VLAN3到達三層接口的路徑就是次憂的,最憂的路徑應當是直接上行到SWB.
2.MSTP的基本概念
MSTP允許將一個或多個VLAN映射到一個多生成樹實例(MST Instance)上,MSTP為每個MST Instance單獨計算根交換機 單獨設置端口狀態,即在網絡中計算多個生成樹。
每個MST Instance都使用單獨的RSTP算法,計算單獨的生成樹。
如下圖中,在網絡中配置兩個MST Instance,VLAN2映射到MST Instance 1, VLAN3映射到MST Instance 2。
通過修改交換機上不同MST Instance的交換機優先級,可以將不同的交換機設置成不同MST Instance 的根交換機。在下圖中,SWA為MST Instance 1的根交換機;SWB為MST Instance 2的根交換機。
啟用了多生成樹之后, 可以看出,VLAN2的數據直接上行到SWA, VLAN3的數據直接上行到SWB。如此,流量分擔就可以實現了,某些VLAN路徑不可達的問題也可以解決了,二層路徑次優的問題也可以得以解決。
更多的MSTP的知識就不再敘述。
-
-
STP故障案例分析
STP協議,在存在環路結構的二層網絡中構建了一個無環路的樹形的二層拓撲,RSTP加快了STP的協議收斂速度,MSTP解決了啟用了多VLAN的交換機網絡中的環路問題。下面通過一個案例加深對STP的理解。
案例:未配置STP邊緣端口導致終端業務中斷。
如下圖所示,在SwitchA,Switch B和 Switch C這3台交換設備上使能STP。當拓撲穩定后,Switch A為根交換機,Switch C接口GE0/0/2 為Alternate接口阻塞。Switch A主備倒換后,發現交換網絡上的部分終端出現業務流量中斷現象。
故障原因分析:
Switch A設備在主備倒換的時候,為了防止環路的出現,設備會重新進行STP計算。而連接PC的接口也參與了STP計算,在主備倒換后,連接PC的接口仍然是指定接口,但是需要經過段學習時間才能轉發業務報文。
某些終端設備在自動獲取IP地址的時候,只發送有限的幾個(通常情況下是4個)請求分配IP的消息,而此時,交換機端口未設置成邊緣端口,網絡重新收斂需要30s的時間,期間端口不轉發數據,因此把終端發送的IP地址請求消息都丟棄了。在發送4個請求分配IP的消息沒有收到回應后,終端獲取IP地址失敗,無法上網,導致了故障的發生。
故障解決辦法:
解決該類型故障的思路可以從以下兩個方面考慮。
(1)加快交換機的收斂速度,譬如部署RSTP,配置邊緣端口 。
(2)從終端的角度解決,重啟終端設備的網卡,重新發起IP地址請求 。