A. STP、RSTP
為了提高網路可靠性,避免單點故障而導致網路中斷,常常需要在網路中部署冗餘鏈路或冗餘設備,但是部署了冗餘鏈路或冗餘設備的網路,也會從無環的樹型網路結構變為環形網路結構,環形網路結構會帶來新的問題:
1、廣播風暴導致網路不可用
因為交換機收到廣播幀,會將廣播幀從接收埠外的所有介面轉發出去;
廣播幀就會在環形網路中無限循環轉發,隨著廣播幀的增加,最終導致整個網路的資源被耗盡,網路癱瘓不可用;
2、MAC地址表震盪導致MAC地址表被破壞
即使是單播報文,也有可能導致交換機的MAC地址表項混亂,破壞交換機的MAC地址表;
因為交換機接收到未知單播幀後,也會向除接收埠外的所有介面轉發;
未知單播幀就會在環形網路中無限循環轉發,同一交換機不斷的從不同的介面學到未知單播幀,交換機就會不停的修改MAC地址表,導致MAC地址表震盪,破壞MAC地址;
STP根據IEEE 802.1D標准建立,用於在區域網中消除二層環路的問題;
運行STP協議的設備通過彼此交互信息發現網路中的環路,並有選擇地對某些埠進行阻塞,最終實現將環路網路結構修剪成無環路的樹型網路結構,從而防止報文在環形網路中不斷循環,避免設備由於重復接收相同的報文造成處理能力下降。
STP僅在網路中存在冗餘鏈路或者存在環形網路拓撲結構時才需要使用;
使用STP技術,其實更多是抱著以防萬一的心態,怕網路中存在這樣的物理封閉環路;
因為STP技術在保證正常使用冗餘鏈路備份的同時,又能確保不會出現二層通信環路;
一個根橋、兩個度量、三個要素、四個原則、五個埠狀態
一個根橋:
樹型的網路拓撲結構必須有一個樹根,就像一棵樹只有一個樹根一樣,對於一個運行STP協議的網路,根橋在全網中只有一個,就是網路中具有最小橋ID的交換機;
網路中除根橋外的其它交換機成為非根橋;
網路收斂後,根橋會按照一定的時間間隔向外發送配置BPDU,非根橋僅對該報文進行轉發,傳達拓撲變化記錄,保證拓撲的穩定;
兩個度量:
在STP計算中要確定兩個方面,一是哪台交換機作為根橋,二是非根橋的哪些埠收發數據,哪些埠該被阻塞,以便最終形成無環路的樹型網路拓撲結構;
STP計算依據的就是ID和路徑開銷這兩個度量;
1、ID
ID包括BID橋ID和PID埠ID兩種;
BID Bridge ID一共64位,高16位為Bridge Priority橋優先順序,低48位為橋背板MAC地址;
BID決定了哪台交換機成為網路中的根橋,BID最小的交換機被選舉為根橋;
從橋優先順序欄位和橋MAC地址欄位所處位置可以看出,橋優先順序越小,橋ID越小,橋優先順序相同,取橋MAC地址小的作為根橋;
橋優先順序數值范圍0 - 61440,數值越小越優先;
PID Port ID一共16位,高4位是埠優先順序,低12位是埠號;
在確定根埠、指定埠的過程中,如果根路徑開銷、發送者橋ID均相同,發送者PID小的埠成為根埠或指定埠;
埠優先順序數值范圍0 - 255,數值越小越優先;
2、路徑開銷
路徑開銷是一個埠參數,由具體埠的鏈路速率決定,是STP協議用於選擇鏈路的參考值;
對於聚合鏈路,鏈路速率是聚合組中所有狀態位UP的成員口的速率之和;
STP協議通過計算各埠的路徑開銷,選擇較為強壯的鏈路,阻塞多餘的鏈路,將網路修剪成無環路的樹型網路結構;
根路徑開銷是某埠到根橋累計的路徑開銷,就是所經過的各個橋上的各埠的路徑開銷累加值;
根橋上所有埠的根路徑開銷,以及同交換機上不同埠間的路徑開銷值均為零;
某介面的根路徑開銷 = 根埠接收配置BPDU攜帶的根路徑開銷 + 根埠的路徑開銷
三個選舉要素
由環形網路拓撲結構修剪為樹型結構,需要使用STP中的三個選舉要素,即根橋、根埠和指定埠;
根橋 就是STP網路中BID橋ID最小的橋,通過交互配置BPDU報文選出最小的BID作為根橋;
根埠 非根橋上接收最優配置BPDU的埠,即離根橋最近的埠;
最優配置BPDU根據BPDU優先順序確定;
在一個運行STP協議的設備上,根埠有且只有一個,根橋上沒有根埠;
指定埠 就是向一個網段上發送最優配置BPDU的埠;
一旦根橋、根埠、指定埠選舉成功,整個樹型網路拓撲結構就建立完成了;
拓撲穩定後,只有根埠、指定埠轉發流量,其餘埠處於阻塞狀態;
四個比較原則
STP計算依據的是各個埠發送配置BPDU報文攜帶的4個欄位:
1、根橋ID 每個STP網路只生成一棵樹,一棵樹只有一個樹根;
2、根路徑開銷 發送該配置BPDU的埠到根橋的累計路徑開銷;
3、發送者橋ID 發送該配置BPDU的橋ID;
4、發送者埠ID 發送該配置BPDU的埠ID;
BPDU優先順序按照上述順序依次比較這四個欄位確定,四個欄位都是數值越小越優先;
需要注意的是,當非根橋從多個埠收到多個不同的配置BPDU時,根路徑開銷的比較是接收配置BPDU攜帶的根路徑開銷值加上接收埠路徑開銷值進行比較;
五個埠狀態
運行STP協議的設備,有以下5個埠狀態:
1、disabled 禁用狀態
2、blocking 可以收發BPDU
該狀態下正在確定根橋、根埠、指定埠;
3、listening 可以收發BPDU
在埠被選舉為根埠或指定埠後,進入到該狀態,是一種過渡狀態;
4、learning 可以收發BPDU、學習MAC地址表項
經過一個轉發延時後進入該狀態,需要再經過一個轉發延時後才能進入forwarding狀態,也是一種過渡狀態;
5、forwarding 可以收發BPDU、學習MAC地址表項、轉發用戶流量
只有根埠、指定埠才能進入轉發狀態;
新選出的根埠、指定埠要經過兩倍的轉發延時後,才能進入轉發狀態,確保新的配置BPDU傳遍整個網路,可以防止臨時環路的產生;
STP的3個定時器
1、hello time hello time定時器 預設2s
設備會每隔hello time時間向周圍的設備發送配置BPDU,以確認鏈路是否存在故障;
網路拓撲穩定之後,只有根橋每隔hello time時間從指定埠發送配置BPDU;
非根橋從根埠接收到配置BPDU之後,才會從指定埠發送配置BPDU;
根橋上的hello time時間被修改後,會在下一次發出的配置BPDU報文中更新hello time這個欄位,來向非根橋傳遞hello time定時器信息;
當網路拓撲發生變化之後,TCN BPDU的發送不受這個定時器的管理;
2、forward delay 轉發延時 預設15s
鏈路故障會引發網路重新進行生成樹的計算,生成樹的結構將發生改變,但是重新計算得到的新配置消息不可能立即傳遍整個網路,如果此時新選出的根埠和指定埠就立即開始數據轉發的話,很可能會造成臨時的二層環路;
因此,STP採用了一種狀態遷移機制,新選出的根埠和指定埠要經過兩倍的forward delay延時後才能進入轉發狀態,這個延時保證了新的配置消息傳遍整個網路,從而防止產生臨時的二層環路;
轉發延時是狀態遷移的延遲時間,預設值15s,即listening狀態持續15s,隨後進入learning狀態再持續15s;
3、max age 最大生成時間 預設20s
運行STP協議的網路中,非根橋設備收到配置BPDU報文後,會對報文中的Message Age消息生存時間和Max Age最大生存時間進行比較,如果Message Age小於等於Max Age,非根橋設備就繼續轉發配置BPDU報文;
如果Message Age大於Max Age,則該配置BPDU報文將被老化,該非根橋設備直接丟棄該配置BPDU,可認為網路直徑過大,導致根橋連接失敗;
當配置BPDU從根橋發出時,報文中的Message Age值為0,配置BPDU報文每經過一個交換機,Message Age增加1;
STP BPDU報文
STP協議採用的是BPDU Bridge Protocol Data Unit 橋協議數據單元類型報文,也稱為配置消息,STP就是通過在設備直接傳遞BPDU來確定最終修剪完成的樹型網路拓撲結構;
STP BPDU報文被封裝在乙太網數據幀中,此時目的MAC地址是組播MAC地址:01-80-C2-00-00-00,在LLC頭部中IEEE為STP保留的DSAP和SSAP值均為0x42,Control為0x03;
STP BPDU分為兩類,配置BPDU和TCN BPDU
1、Configuration BPDU 配置BPDU 用於生成樹計算與維護
配置BPDU是一種心跳報文,只要埠使能STP協議,設備就會按照hello time定時器的時間間隔從指定埠發送配置BPDU;
在初始化過程中,每個交換機都會主動發送配置BPDU,但在網路拓撲穩定以後,只有根橋主動從指定埠發送配置BPDU;
非根橋從根埠收到配置BPDU後才觸發從指定埠發送自己的配置BPDU;
配置BPDU在以下3中情況下會產生:
1)根橋每隔hello time時間周期性從指定埠發送配置BPDU;
2)非根橋從根埠收到配置BPDU後,觸發從指定埠發送自己的配置BPDU;
3)當指定埠收到次優配置BPDU時,會立刻從該指定埠發送自己的配置BPDU;
配置BPDU中的欄位:
protocol identifier協議ID:2位元組,總是為0;
protocol version協議版本:1位元組,總是為0;
message type消息類型:1位元組,0x00為配置BPDU,0x80為TCN BPDU
flags標志:1位元組,最低位TC Topology Change標志位,最高位TCA Topology Change Acknowledgment標志位;
Root Identifier根橋ID:8位元組,2位元組橋優先順序,6位元組橋MAC;
Root Path Cost根路徑開銷:4位元組,發送該BPDU的埠到根橋的累計路徑開銷;
Bridge Identifier橋ID:8位元組,發送該BPDU的橋ID,2位元組橋優先順序,6位元組橋ID;
Port Identifier埠ID:2位元組,發送該BPDU的埠ID,高4位埠優先順序,低12位埠號;
Message Age消息生存時間:2位元組,根橋發送的配置BPDU中該欄位為0,每經過一個交換機加1,小於等於Max Age的配置BPDU才會被轉發,否則被丟棄;
Max Age最大生存時間:2位元組,配置BPDU的生存時間超過Max Age就會失效,預設20s;
Hello Time:2位元組,根橋每隔hello time周期性發送配置BPDU,預設2s;
Forward Delay轉發延時:2位元組,listening和learning各自持續的時間,防止臨時的二層環路,預設15s;
2、Topology Change Notificaition BPDU TCP BPDU 用於下游設備通知上游設備網路拓撲變化,直到根橋
TCN BPDU是在設備檢測到網路拓撲發生變化時才發出的;
TCN BPDU在如下兩種情況下會產生:
1)存在指定埠的設備上,埠狀態變為forwarding;
2)從指定埠收到TCN BPDU後向根橋復制TCN BPDU;
TCN BPDU中的欄位:
protocol identifier協議ID:2位元組,總是為0;
protocol version協議版本:1位元組,總是為0;
message type消息類型:1位元組,0x00為配置BPDU,0x80為TCN BPDU;
STP的不足
STP協議雖然解決了二層環路問題,但是由於網路拓撲收斂速度慢,會影響用戶通信質量;
Blocking到Forwarding需要經過兩個轉發延時間隔,另外配置BPDU超時需要20s;
如果網路中的拓撲結構頻繁變化,網路也會隨之頻繁失去連通性,從而導致用戶通信頻繁中斷;
1)STP協議採用的是被動演算法,依賴定時器等待的方式確定拓撲,如轉發延時,所以收斂速度慢;
2)STP網路拓撲穩定後,只有根橋主動發送配置BPDU,非根橋只能被動轉發,也導致收斂速度慢;
3)沒有細致區分埠狀態和埠角色;
STP是最原始的生成樹協議,它的主要不足是網路拓撲收斂速度慢;
RSTP是在STP基礎上改進的生成樹協議版本,提高了網路拓撲收斂速度;
IEEE802.1w定義的RSTP保留了STP的大部分演算法和計時器,只在一些細節上做了改進,但這些改進相當關鍵,極大的提升了STP性能,能滿足低延時、高可靠性的網路要求;
RSTP對STP的改進主要體現在埠角色、埠狀態、BPDU的變化和P/A收斂機制四個方面:
1、新增三種埠角色
RSTP在STP中根埠、指定埠的基礎上,對其它埠進行了細分;
1)Alternate替代埠
作為根埠的備份埠,根埠故障後,替代埠就會無延時地進入轉發狀態;
2)Backup備份埠
作為指定埠的備份埠,指定埠故障後,備份埠就會無延時地進入轉發狀態;
3)Edge邊緣埠
用於連接主機,不參與生成樹計算,不收發BPDU,能夠直接進入forwarding狀態;
如果收到BPDU報文就會失去邊緣埠屬性,開始收發報文進行STP生成樹計算;
2、重新劃分埠狀態
RSTP把STP中的Disabled、Blocking、Listening三種埠狀態用Discarding狀態替代,即:
1)Discarding 收發BPDU
2)Learning 收發BPDU、學習MAC地址
3)Forwarding 收發BPDU、學習MAC地址,轉發用戶流量
3、BPDU的變化
RSTP協議與STP協議一樣在交換機間使用BPDU交互信息,但是RSTP只有配置BPDU,即RST BPDU,沒有TCN BPDU;
RSTP在BPDU方面的改變主要體現在BPDU格式、拓撲變化BPDU的使用和配置BPDU處理方式的改變三個方面:
1)BPDU格式上的改變
Protocol Version欄位:RST BPDU是2,不再為0,運行STP的設備收到RST BPDU會丟棄;
BPDU Flag欄位:最高位TCA和最低位TC保持不變,RST BPDU使用了STP配置BPDU中Flag欄位保留的中間6位,增加了埠狀態、埠角色和PA機制三個功能的標志;
PA機制:Agreement位和Proposal位用於RSTP的點到點鏈路的PA機制;
埠狀態:Forwarding位和Learning位用於表示發送RST BPDU的埠的RSTP埠狀態;
埠角色:占兩個比特,00表示發送RST BPDU的埠的埠角色未知;
01表示發送RST BPDU的埠的RSTP埠角色為Alternate替代埠或Backup備份埠;
10表示發送RST BPDU的埠的RSTP埠角色為根埠;
11表示發送RST BPDU的埠的RSTP埠角色為指定埠;
2)拓撲變化BPDU的使用
在RSTP中不再需要從根埠依次向上發送TCN BPDU,直至根橋;
RSTP直接發送TC置1的RST BPDU,接收的交換機直接清空MAC地址表;
交換機清空MAC地址表不再需要等待根橋發送的TC置1的配置BPDU,提高了收斂速度;
3)配置BPDU處理方式的改變
配置BPDU處理方式的改變主要體現在配置BPDU的發送方式、超時時間和處理次優BPDU三個方面:
配置BPDU的發送方式:
拓撲穩定後,STP中只有根橋按照hello time時間間隔發送配置BPDU,非根交換機需要等待從根埠收到配置BPDU,才會從指定埠發送自己的配置BPDU,這樣導致STP計算復雜和緩慢;
RSTP中所有交換機都按照hello time時間間隔周期性發送配置BPDU,無需等待根橋發出的配置BPDU;
配置BPDU的超時時間:
STP中需要等待Max Age 20s最大生存時間後,配置BPDU失效才會認為上游鄰居故障;
RSTP中如果連續三個hello time時間間隔沒有收到RST BPDU,就認為上游鄰居故障;
處理次優BPDU:
STP中只對指定埠收到的次優配置BPDU,立即發送自己更優的配置BPDU;
對於根埠收到的次優配置BPDU,不會做同樣處理,而是等待Max Age最大生存時間超時,才會進行BPDU協商;
RSTP埠收到次優BPDU都會立即發送自身更優的RST BPDU,無需等待20sMax Age最大生存時間超時時間;
RSTP處理次優BPDU不再像STP那樣依賴於定時器通過超時完成拓撲收斂,從而加快了拓撲收斂;
4、P/A收斂機制
STP中確定一個埠為指定埠後,埠從Listening到Learning,Learning到Forwarding,要經過兩倍的轉發延時時間才能進入Forwarding狀態,這種保守的設計可以防止臨時的二層環路,但是收斂速度慢;
RSTP的提議確認機制,是為了讓指定埠盡快進入Forwarding狀態,而不必等待轉發延遲;
P/A機制只能在點到點鏈路上使用,即埠所在的乙太網對端只有一台設備,否則要從Learning到Forwarding要等待一個轉發延時時間;
1)當一個指定埠處於Discarding或learning狀態時,會向下游設備發送Proposal位置1的RST BPDU,請求快速切換到Forwarding狀態;
2)下游設備根埠收到後,會讓除根埠除外的所有非邊緣埠進入Discarding狀態,然後從根埠向上游設備發送Agreement位置1的RST BPDU,同意上游設備指定埠進入Forwarding狀態;
3)上游設備收到後,指定埠直接進入Forwarding狀態;
4)下游設備通過同樣的方式恢復指定埠的轉發;
5、RSTP保護功能
1)BPDU保護
邊緣埠在收到BPDU以後埠狀態將變為非邊緣埠,此時就會造成生成樹的重新計算,如果攻擊者偽造RST BPDU惡意攻擊交換設備,就會引起網路震盪;
啟動了BPDU保護功能後,如果邊緣埠收到RST BPDU,邊緣埠將被error-down,但是邊緣埠屬性不變,同時通知網管系統被錯誤down掉的邊緣埠只能由網路管理員手動恢復;
也可以配置埠自動恢復功能,並設置延遲時間,使被錯誤down掉的邊緣埠可自動恢復;
2)Root保護
由於維護人員的錯誤配置或網路中的惡意攻擊,根橋收到優先順序更高的RST BPDU會失去根橋的地位,重新計算生成樹,並且由於拓撲結構變化,可能造成高速流量遷移到低速鏈路,引起網路擁塞;
對於啟動Root保護功能的指定埠,埠角色只能保持為指定埠,一旦啟用Root保護功能的指定埠收到優先順序更高的RST BPDU,埠將進入Discarding狀態,不再轉發報文;
在經過一段時間(通常為兩倍的Forward Delay),如果埠一直沒有收到高優先順序的RST BPDU,埠自動恢復到正常的Forwarding狀態;
3)環路保護
當出現鏈路擁塞或者單向鏈路故障時,根埠和Alternate替代埠會被老化,根埠老化會導致交換機重新選擇根埠,Alternate替代埠老化將遷移到forwarding狀態,這樣會產生環路;
在啟動了環路保護功能後,如果根埠或Alternate埠長時間收不到來自上游的RST BPDU,則向網管發出通知信息,根埠進入Discarding狀態,直到根埠收到RST BPDU,埠狀態才恢復正常到forwarding狀態,而阻塞埠則會一直保持在阻塞狀態不轉發報文,從而不會在網路中形成環路;
4)防TC - BPDU報文攻擊保護
交換設備在接收到TC - BPDU報文後,會執行MAC地址表和ARP表的刪除操作,如果頻繁操作則會對CPU的沖擊很大;
啟用防TC -BPDU報文攻擊功能後,可配置單位時間內交換機可以處理TC-BPDU報文的次數;
如果單位時間內交換設備在收到TC-BPDU報文數量大於配置的閥值,那麼設備只會處理閥值指定的次數;對於其它超出閥值的TC-BPDU,定時器到期後交換機只對其統一處理一次;這樣可以避免頻繁地刪除MAC地址表和ARP表,達到保護設備的作用;
RSTP與STP的互操作:
RSTP可以和STP互操作,但是此時會喪失RSTP快速收斂特性;
當一個網段既有運行STP的交換網路,又有運行RSTP的交換設備時,STP設備會忽略RST BPDU,而運行RSTP設備的埠接收到STP的配置BPDU時,會在兩個Hello time時間之後將自己的埠轉換到STP工作模式,發送STP 配置BPDU,這樣就實現了互操作;