為了提高網絡可靠性,交換機網絡中通常會使用冗余鏈路,冗余鏈路會給交換機帶來環路風險,並導致 廣播風暴 以及 MAC地址表不穩定 等問題,生成樹協議STP(Spanning Tree Protocol)可以在提高可靠性的同時又避免環路帶來的各種問題。
根據交換機的轉發原則, 如果交換機從壹個端口上接收到的是壹個廣播幀, 或者是壹個目的MAC地址未知的單播幀,則會將這個幀向除源端口之外的所有其他端口轉發。如果交換網絡中有環路,則這個幀會被無限轉發,此時便會形成廣播風暴,網絡中也會充斥著重復的數據幀。
STP的主要作用: 利用生成樹算法、在以太網絡中,創建壹個以某臺交換機的某個端口為根的生成樹,自動地在邏輯上阻塞壹個或多個冗余端口,避免環路。
STP的基本工作原理為:通過 BPDU (Bridge Protocol Data Unit,橋接協議數據單元)的交互來傳遞STP計算所需要的條件,隨後根據特定的算法,阻塞特定端口,從而得到無環的樹形拓撲。
為了計算生成樹, 交換機之間需要交換相關的信息和參數, 這些信息和參數被封裝在BPDU(Bridge Protocol Data Unit) 中。
BPDU有兩種類型:配置BPDU和TCN BPDU(拓撲變更BPDU)。
STP中根橋的選舉依據的是橋ID, STP中的每個交換機都會有壹個橋ID(Bridge ID) 。 橋ID由16位的橋優先級(Bridge Priority) 和48位的MAC地址構成。 在STP網絡中, 橋優先級是可以配置的, 取值範圍是0~65535, 默認值為32768。 優先級最高的設備(數值越小越優先) 會被選舉為根橋。 如果優先級相同, 則會比較MAC地址, MAC地址越小則越優先 。
非根交換機在選舉根端口時分別依據該端口的 根路徑開銷、 對端BID(Bridge ID) 、 對端PID(Port ID) 和本端PID。
交換機的每個端口都有壹個 端口開銷 (Port Cost) 參數, 此參數表示該端口在STP中的開銷值。 默認情況下端口的開銷和端口的帶寬有關,帶寬越高,開銷越小。從壹個非根橋到達根橋的路徑可能有多條,每壹條路徑都有壹個總的開銷值,此開銷值是該路徑上所有接收BPDU端口的端口開銷總和(即BPDU的入方向端口),稱為路徑開銷。非根橋通過對比多條路徑的路徑開銷,選出到達根橋的最短路徑,這條最短路徑的路徑開銷被稱為 RPC (Root Path Cost, 根路徑開銷),並生成無環樹狀網絡。 根橋的根路徑開銷是0。
如果有兩個或兩個以上的端口計算得到的累計路徑開銷相同,那麽選擇收到發送者BID最小的那個端口作為根端口。
運行STP交換機的每個端口都有壹個端口ID,端口ID由端口優先級和端口號構成。端口優先級取值範圍是0到240,步長為16,即取值必須為16的整數倍。缺省情況下,端口優先級是128。端口ID(Port ID)可以用來確定端口角色,值小者優先。
在網段上抑制其他端口(無論是自己的還是其他設備的)發送BPDU報文的端口,就是該網段的指定端口。
根橋的每個端口總是指定端口。
根端口相對應的端口(即與根端口直連的端口)皆為指定端口。
指定端口的選舉也是首先比較累計路徑開銷,累計路徑開銷最小的端口就是指定端口。如果累計路徑開銷相同,則比較端口所在交換機的橋ID,所在橋ID最小的端口被選舉為指定端口。如果通過累計路徑開銷和所在橋ID選舉不出來,則比較端口ID,端口ID最小的被選舉為指定端口。(同根端口選舉)
網絡收斂後,只有指定端口和根端口可以轉發數據。其他端口為預備端口,被阻塞,不能轉發數據,只能夠從所連網段的指定交換機接收到BPDU報文,並以此來監視鏈路的狀態。
1、 Forwarding:轉發狀態。 端口既可轉發用戶流量也可轉發BPDU報文, 只有根端口或指定端口才能進入Forwarding狀態。
2、 Learning:學習狀態。 端口可根據收到的用戶流量構建MAC地址表,但不轉發用戶流量。 增加Learning狀態是為了防止臨時環路。
3、 Listening:偵聽狀態。 端口可以轉發BPDU報文, 但不能轉發用戶流量。
4、 Blocking:阻塞狀態。 端口僅僅能接收並處理BPDU, 不能轉發BPDU, 也不能轉發用戶流量。 此狀態是預備端口的最終狀態。
5、 Disabled:禁用狀態。 端口既不處理和轉發BPDU報文, 也不轉發用戶流量。
在穩定的STP拓撲裏, 非根橋會定期收到來自根橋的BPDU報文。如果根橋發生了故障,停止發送BPDU報文,下遊交換機就無法收到來自根橋的BPDU報文。如果下遊交換機壹直收不到BPDU報文,Max Age定時器就會超時(Max Age的默認值為20秒),從而導致已經收到的BPDU報文失效,此時,非根交換機會互相發送配置BPDU報文,重新選舉新的根橋。根橋故障會導致50秒左右的恢復時間,恢復時間約等於Max Age加上兩倍的Forward Delay收斂時間。
1、SWA和SWB使用了兩條鏈路互連,其中壹條是主用鏈路,另外壹條是備份鏈路。生成樹正常收斂之後,如果SWB檢測到根端口的鏈路發生物理故障,則其Alternate端口會遷移到Listening、Learning、Forwarding狀態,經過兩倍的Forward Delay後恢復到轉發狀態。
2、SWB經過集線器與SWA通過兩條鏈路互連,當主用鏈路故障時,SWB尚未檢測到信號丟失,因此保持原狀態不變,但是,根端口已經無法收到來至根橋的BPDU報文,經過T=Max_Age-Message_Age 時間後,原BPDU報文過期,SWB的Alternate端口會遷移到Listening、Learning、Forwarding狀態, 經過兩倍的Forward Delay後恢復到轉發狀態。因此,鏈路經過2xForward_Time + (Max_Age-Message_Age)時間後恢復。
SWB與SWA之間的鏈路發生了某種故障(非物理層故障),SWB因此壹直收不到來自SWA的BPDU報文。 等待Max Age定時器超時後,SWB會認為根橋SWA不再有效,並認為自己是根橋,於是開始發送自己的BPDU報文給SWC,通知SWC自己作為新的根橋。在此期間,由於SWC的Alternate端口再也不能收到包含原根橋ID的BPDU報文。其Max Age定時器超時後,SWC會切換Alternate端口為指定端口並且轉發來自其根端口的BPDU報文給SWB。所以,Max Age定時器超時後,SWB、SWC幾乎同時會收到對方發來的BPDU。 經過STP重新計算後,SWB放棄宣稱自己是根橋並重新確定端口角色。非直連鏈路故障後,由於需要等待Max Age加上兩倍的Forward Delay時間,端口需要大約50秒才能恢復到轉發狀態。
實驗拓撲如上圖所示,PCA的IP地址為2.2.2.1/24,PCB的IP地址配置為2.2.2.2/24。
由於網絡中存在環路,此時可以看到交換機的所有互聯端口以及連接主機的端口的指示燈均快速閃動,表示形成了廣播風暴。此時PCA 無法ping通PCB。
在SW1上通過命令stp mode配置生成樹協議的模式為RSTP,通過命令stp enable在交換機上使能生成樹協議。
SW2、SW3、SW4的配置和SW1相同。啟用生成樹協議後可以看到交換機各端口指示燈停止快速閃動,網絡恢復正常。此時PCA可以ping通PCB。
通過命令display stp brief可以查看交換機各端口的STP狀態以及端口角色:
由上可以看出各交換機的根端口為連接SW3的端口,SW3不存在根端口,說明SW3即為網絡中的根橋。
2中已知SW3為現根橋,我們可以通過以下命令指定根橋:
該配置將SW1設置為根橋,將SW2設置為備份根橋,我們也可以通過更改橋優先級控制根橋的選舉,將SW3的優先級修改為8192,SW2的優先級修改為4096。
查看STP信息:
可以看到,SW2已成為新的根橋。
步驟3後,SW3的GigabitEthernet0/0/3端口為根端口,與根橋SW2互聯,端口優先級默認為128,數值越大優先級越小。
將SW2的端口GigabitEthernet0/0/3端口優先級設置為32,GigabitEthernet0/0/6端口優先級設置為16:
註意:此處是修改SW2的端口優先級,而不是修改SW3的端口優先級。
在SW3上查看端口角色:
SW3的GigabitEthernet0/0/6端口成為了根端口。
SW4的GigabitEthernet0/0/3為替代端口,SW1的GigabitEthernet0/0/3為指定端口,修改SW1端口GigabitEthernet0/0/2路徑開銷為2000000。
查看當前端口角色信息。
STP能夠提供無環網絡,但是收斂速度較慢。如果STP網絡的拓撲結構頻繁變化,網絡也會隨之頻繁失去連通性,從而導致用戶通信頻繁中斷。快速生成樹協議RSTP使用了Proposal/Agreement機制保證鏈路及時協商,從而有效避免收斂計時器在生成樹收斂前超時。
RSTP的端口角色***有4種: 根端口、指定端口、Alternate端口和Backup端口。
Alternate端口:由於學習到其它網橋發送的更優配置BPDU報文而阻塞的端口;作為根端口的備份端口。
Backup端口:由於學習到自己發送的更優配置BPDU報文而阻塞的端口;作為指定端口的備份端口。
Discarding狀態 , 端口既不轉發用戶流量也不學習MAC地址。
Learning狀態 , 端口不轉發用戶流量但是學習MAC地址。
Forwarding狀態 , 端口既轉發用戶流量又學習MAC地址。
RSTP收斂遵循STP基本原理。網絡初始化時,網絡中所有的RSTP交換機都認為自己時“根橋”,並設置每個端口為指定端口,此時,端口為Discarding狀態。
每個認為自己是“根橋” 的交換機生成壹個RST BPDU報文來協商指定網段的端口狀態,此RST BPDU報文的Flags字段裏面的Proposal位需要置位。當壹個端口收到RST BPDU報文時,此端口會比較收到的RST BPDU報文和本地的RST BPDU報文。如果本地的RST BPDU報文優於接收的RST BPDU報文,則端口會丟棄接收的RST BPDU報文,並發送Proposal置位的本地RST BPDU報文來回復對端設備。
當確認下遊指定端口遷移到Discarding狀態後,設備發送RST BPDU報文回復上遊交換機發送的Proposal消息。在此過程中,端口已經確認為根端口,因此RST BPDU報文Flags字段裏面設置了Agreement標記位和根端口角色。
在P/A進程的最後階段,上遊交換機收到Agreement置位的RST BPDU報文後,指定端口立即從Discarding狀態遷移為Forwarding狀態,然後,下遊網段開始使用同樣的P/A進程協商端口角色。
首先,RSTP將網絡拓撲的變化定義為端口角色的變化,因為網絡拓撲的變化可以描述為某些網絡端口在轉發/阻塞態之間的轉換,而RSTP將端口角色和端口狀態進行了明確的定義(這是RSTP比STP優勝的地方)。
其次,RSTP端口角色的變化直接影響端口狀態的變化。R-Port、D-Port、Edge Port處於Forwarding狀態;Alternated Port(以下簡稱A-Port)和Backup Port處於Discarding狀態。
若某條鏈路失效,即鏈路兩端的端口從轉發態變為阻塞態。從生成樹協議的目的來看,並不會使得網絡形成環路。RSTP僅需要找到處於合適的阻塞態端口,並將其轉為轉發態,使拓撲重新連通起來。由於RSTP在計算時已經分配好R-Port的備份端口A-Port,因此若從轉發態變為阻塞態的是R-Port,則把對應的A-Port改為轉發態;同理,D-Port的則色也可置相應的Backup Port為轉發來實現。而Edge Port並不影響生成樹的計算,故忽略。這樣,當某個(些)端口狀態從轉發到阻塞,對於RSTP而言,無需重新計算(是不是有點熟悉,好像哪兒見過不用計算直接使用備用路徑的算法。聰明的妳壹定想到了:DUAL)。
由於某條鏈路的連通有可能導致生成樹域成環。在RSTP裏,該行為定義為D-Port從阻塞態轉化為轉發態,相對的檢查機制應的就是P/A機制,即從需要進入轉發態的D-Port,建議對端進行同步,待收到確認後進入轉發態。
對端Bridge在接收到“建議”消息後,壹方面阻塞自身所有D-Port,並返回“同意”消息給“建議”消息發送方;另壹方面,對自身端口進行同步。同步分兩種類型:若端口為E-Port,或者原來就是非轉發態,則為“已同步”;若端口原來為轉發態,為重新進入轉發態,將對對端進行“建議”並等待確認。
下面將結合圖例,演示P/A機制的流程:
1、B、E之間建立壹條新鏈路,首先進行端口角色選擇;
2、B、E通過該鏈路交換BPDU,由於B端口發送的BPDU較優(superior),因此B端口角色為D-Port;與此同時,E從B收到的BPDU比從C收到的較優,因此E把連接B的端口轉換為Root Port,同時,連接C的端口轉換為A-Port。要註意的是,RSTP相對STP進行了根端口轉發的改進,壹旦確定了舊的R-Port非轉發態,且新的R-Port已確定,則新的R-Port立即進入轉發態;
3、此刻B端口仍為Discarding狀態,並期望進入Forwarding狀態,因此它將從該D-Port發送“Proposal“置位的配置BPDU給E;E接收到該BPDU後,進入同步狀態:即將所有轉發態端口轉為丟棄,並檢查端口同步情況;
4、從同步原理可知,E中只有連接D的端口為轉發態,因此E繼續阻塞該端口,並向B返回”同意“置位的BPDU。自此,B-E鏈路進入已完成同步,立即進行流量轉發;而由於D連接E的端口為A-Port,不轉發BPDU,因此E發出的”Proposal“置位BPDU將不會被”Agreement“置位的BPDU回應。該端口將壹直保持阻塞態。
實驗拓撲如上圖所示,交換機各端口均屬於VLAN1,PCA的IP地址為2.2.2.1/24,PCB的IP地址配置為2.2.2.2/24。
測試SW2和SW3的連通性:
查看SW2的端口角色
SW2的GigabitEthernet0/0/3為根端口,用ping測試S1到S2的連通性20次。
提示:SW2執行ping操作之後立刻關閉SW3的GigabitEthernet0/0/3接口。
查看SW2的端口角色
SW2的GigabitEthernet0/0/6 成為根端口,端口進入FORWARDING狀態,1個包超時。
在SW1上通過命令stp mode配置生成樹協議的模式為RSTP,通過命令stp enable在交換機上使能生成樹協議。
SW2、SW3、SW4的配置和SW1相同。
配置SW2為STP生成樹,其他配置保持不變。
查看SW2端口角色信息
SW2的GigabitEthernet0/0/3為根端口,用ping測試S1到S2的連通性30次。
提示:SW2執行ping操作之後立刻關閉SW3的GigabitEthernet0/0/3接口。
查看SW2端口信息
SW2的GigabitEthernet0/0/6 成為根端口,端口進入FORWARDING狀態,16個包超時。
RSTP兼容STP,但收斂方式以STP模式運行。
不管是STP還是RSTP,在網絡中進行生成樹計算的時候都沒有考慮到VLAN的情況。它們都是對單壹生成樹實例進行應用的。也就是說,在STP和RSTP中所有的VLAN都***享相同的生成樹。
為了解決這壹個問題,思科提出了第二代生成樹 - PVST、PVST+。按照PVST協議規定,每壹個VLAN都有壹個生成樹,而且是每隔2秒就會發送壹個BPDU,這對於壹個有著上千萬個VLAN網絡來說,壹方面這麽多生成樹維護起來比較困難,另壹方面,為每個VLAN每隔2秒就發送壹個BPDU,交換機也是難以承受的。
為了解決PVST帶來的困難,思科又提出了第三代生成樹 - MST(MSTP)多生成樹協議。MSTP可以對網絡中眾多的VLAN進行分組,把VLAN分到組裏。這裏的組就是後面講的MST實例(Instance)。每個實例壹個生成樹,BPDU只對實例進行發送。這樣就達到了負載均衡。
多生成樹協議MSTP(Multiple Spanning Tree Protocol)是IEEE 802.1s中定義的壹種新型生成樹協議。簡單說來,STP/RSTP是基於端口的,PVST+是基於VLAN的,而MSTP是基於實例的。與STP/RSTP和PVST+相比,MSTP中引入了“實例”(Instance)和“域”(Region) “的概念。
所謂“實例”就是多個VLAN的壹個集合,這種通過多個VLAN捆綁到壹個實例中去的方法可以節省通信開銷和資源占用率。MSTP各個實例拓撲的計算是獨立的,在這些實例上就可以實現負載均衡。使用的時候,可以把多個相同拓撲結構的VLAN映射到某壹個實例中,這些VLAN在端口上的轉發狀態將取決於對應實例在MSTP裏的轉發狀態。
所謂“域”,即MST域(MST Region),由域名(Configuration Name)、修訂級別(Revision Level)、格式選擇器(Configuration Identifier Format Selector)、VLAN與實例的映射關系(mapping of VIDs to spanning trees),其中域名、格式選擇器和修訂級別在BPDU報文中都有相關字段,而VLAN與實例的映射關系在BPDU報文中表現摘要信息(Configuration Digest),該摘要是根據映射關系計算得到的壹個16字節簽名。只有上述四者都壹樣且相互連接的交換機才認為在同壹個域內。如上圖所示,每個域內所有交換機都有相同的MST域配置(具有相同的域名;具有相同的VLAN到生成樹實例映射配置;具有相同的MSTP修訂級別配置)。缺省時,域名就是交換機的橋MAC地址,修訂級別等於0,格式選擇器等於0,所有的VLAN都映射到實例0上。
MSTP的實例0具有特殊的作用,稱為CIST(Common Internal Spanning Tree),即公***與內部生成樹,其他的實例稱為MSTI(Multiple Spanning Tree Instance),即多生成樹實例。CIST由通過STP/RSTP計算得到的單生成樹和MSTP計算得到的域組成,是為了保證在所有橋接的局域網是簡單的和全連接的。CST(Common Spanning Tree)是STP/RSTP也是MSTP計算出的用於連接MST域的單生成樹。IST(Internal Spanning Tree)是在壹個給定的MST域內由CIST提供的連通性。如上圖所示,如果把每個MST域看作是壹個“交換機”,CST就是這些“交換機”通過STP/RSTP或者MSTP協議計算生成的壹棵生成樹。IST是CIST在MST域內的片段,是壹個特殊的多生成樹實例。
與STP和RSTP相比,MSTP中引入了總根和域根的概念。總根是壹個全局概念,對於所有互連的運行STP/RSTP/MSTP的交換機只能有壹個總根,也即是CIST的根;而域根是壹個局部概念,是相對於某個域的某個實例而言的。上圖所示,所有相連的設備,總根只有壹個,而每個域所包含的域根數目與實例個數相關。
與STP和RSTP相比,MSTP中引入了外部路徑開銷和內部路徑開銷的概念。外部路徑開銷是相對於CIST而言的,同壹個域內外部路徑開銷是相同的;內部路徑開銷是域內相對於某個實例而言的,同壹端口對於不同實例對應不同的內部路徑開銷。
與STP和RSTP相比,MSTP中引入了域邊緣端口和Master端口的概念。域邊緣端口是連接不同MST域、MST域和運行STP的區域、MST域和運行RSTP的區域的端口,位於MST域的邊緣;在某個不包含總根的域中,Master端口是所有邊界端口中,到達總根具有最小開銷的端口,也就是連接MST域到總根的端口,位於整個域到總根的最短路徑上;Alternate端口是Master端口的備份端口,如果Master端口被阻塞後,Alternate端口將成為新的Master端口。
MSTP協議在計算生成樹時使用的算法和原理與STP/RSTP大同小異,只是因為在MSTP中引入了域和內部路徑開銷等參數,故MSTP中的優先級向量是7維,而STP/RSTP是5維。
STP/RSTP中的優先級向量是:
{根橋標識符,根路徑開銷,橋標識符, 發送BPDU報文端口標識符, 接收BPDU報文端口標識符}
MSTP中的優先級向量是:
{CIST根橋標識符,CIST外部根路徑開銷,CIST域根標識符,CIST內部根路徑開銷,CIST指定橋標識符,CIST指定端口標識符,CIST接收端口標識符}
其中STP/RSTP中的橋標識符實際上是發送BPDU的設備的標識符,與MSTP中的CIST指定橋標識符對應。MSTP中的CIST域根標識符有兩種情況,壹種是總根所在域內,BPDU報文中該字段是參考總根的標識符,另壹種情況是不包含總根的域中,BPDU報文該字段是參考主設備的標識符。運行MSTP的實體初始化時認為自己是總根、域根,通過交互配置消息,按照上面介紹的7維向量計算CIST生成樹和MSTI。
網絡中的設備發送接受BPDU報文,在經過比較配置消息後,在整個網絡中選擇壹個優先級最高的交換機作為CIST的樹根。在每個MST域內MSTP通過計算生成IST;同時MSTP將每個MST域作為單臺交換機對待,通過計算在MST域間生成CST。如前所述,CST和IST構成了整個交換機網絡的CIST。
在MST域內,MSTP根據VLAN和生成樹實例的映射關系,針對不同的VLAN生成不同的生成樹實例。每棵生成樹獨立進行計算,計算過程與STP/RSTP計算生成樹的過程類似。
MSTI的特點:
MSTP拓撲變化處理與RSTP拓撲變化處理過程類似。
在RSTP中檢測拓撲是否發生變化只有壹個標準:壹個非邊緣端口遷移到Forwarding狀態。
如此,網絡中就會產生RST BPDU的泛洪。
定義VLAN1-10屬於INSTANCE 1,VLAN11-20屬於INSTANCE 2。
配置SW2在實例1中的優先級為4096, 在實例2中的優先級為8192。
配置SW3在實例2中的優先級為4096,在實例1中的優先級為8192。
查看實例1和實例2的狀態
SW2為實例1的根橋,SW3為實例2的根橋。
查看MSTP實例1的端口角色
實例1中SW2為根網橋,SW1的VLAN 1到VLAN10的用戶經過GigabitEthernet0/0/1 接口和SW2、 SW3、 SW4的VLAN 1到VLAN10的用戶通訊。