16.HCNA-HNTD——STP原理與配置
STP(Spanning Tree Protocol)是生成樹協議的英文縮寫。該協議可應用於在網路中建立樹形拓撲,消除網路中的環路,並且可以通過一定的方法實現路徑冗餘,但不是一定可以實現路徑冗餘。生成樹協議適合所有廠商的網路裝置,在配置上和體現功能強度上有所差別,但是在原理和應用效果是一致的。
STP是為克服冗餘網路中透明橋接的問題而建立的,目的是通過協商一條到根網橋的無環路徑來避免和消除網路中的環路,它通過判定網路中存在環路的地方並動態阻斷冗餘鏈路來實現這個目的。通過這種方式,它確保到每個目的地都只有一個路徑,所以永遠都不會產生環路。
生成樹協議的主要功能有兩個:一是在利用生成樹演算法、在乙太網絡中,建立一個以某臺交換機的某個埠為根的生成樹,避免環路。二是在乙太網絡拓撲發生變化時,通過生成樹協議達到收斂保護的目的。
為了提高網路可靠性,交換網路中通常會使用冗餘鏈路。然而,冗餘鏈路會給交換網路帶來環路風險,並導致廣播風暴以及MAC地址表不穩定等問題,進而會影響到使用者的通訊質量。生成樹協議可以在提高可靠性的同時又能避免環路帶來的各種問題。
學習目標:
1. 掌握STP的工作原理
2. 掌握STP的基本配置
環路引起的問題
隨著區域網規模的不斷擴大,越來越多的交換機被用來實現主機之間的互連。如果交換機之間僅使用一條鏈路互連,則可能會出現單點故障, 導致業務中斷。為了解決此類問題,交換機在互連時一般都會使用冗餘鏈路來實現備份。
冗餘鏈路雖然增強了網路的可靠性,但是也會產生環路,而環路會帶來一系列的問題,繼而導致通訊質量下降和通訊業務中斷等問題。
廣播風暴
根據交換機的轉發原則,如果交換機從一個埠上接收到的是一個廣播幀,或者是一個目的MAC地址未知的單播幀,則會將這個幀向除源埠之外的所有其他埠轉發。如果交換網路中有環路,則這個幀會被無限轉發,此時便會形成廣播風暴,網路中也會充斥著重複的資料幀。
本例中,主機A向外傳送了一個單播幀,假設此單播幀的目的MAC地址在網路中所有交換機的MAC地址表中都暫時不存在。SWB接收到此幀後,將其轉發到SWA和SWC,SWA和SWC也會將此幀轉發到除了接收此幀的其他所有埠,結果此幀又會被再次轉發給SWB,這種迴圈會一 直持續,於是便產生了廣播風暴。交換機效能會因此急速下降,並會導致業務中斷。
MAC地址表震盪
交換機是根據所接收到的資料幀的源地址和接收埠生成MAC地址表項的。
主機A向外傳送一個單播幀,假設此單播幀的目的MAC地址在網路中所有交換機的MAC地址表中都暫時不存在。SWB收到此資料幀之後,在 MAC地址表中生成一個MAC地址表項,00-01-02-03-04-AA,對應埠為G0/0/3,並將其從G0/0/1和G0/0/2埠轉發。此例僅以SWB從G0/0/1 埠轉發此幀為例進行說明。
SWA接收到此幀後,由於MAC地址表中沒有對應此幀目的MAC地址的表項,所以SWA會將此幀從G0/0/2轉發出去。
SWC接收到此幀後,由於MAC地址表中也沒有對應此幀目的MAC地址的表項,所以SWC會將此幀從G0/0/2埠傳送回SWB,也會發給主機B 。
SWB從G0/0/2介面接收到此資料幀之後,會在MAC地址表中刪除原有的相關表項,生成一個新的表項,00-01-02-03-04-AA,對應埠為 G0/0/2。此過程會不斷重複,從而導致MAC地址表震盪。
STP工作原理
STP的作用
在乙太網中,二層網路的環路會帶來廣播風暴,MAC地址表震盪,重複資料幀等問題,為解決交換網路中的環路問題,提出了STP。
STP的主要作用:
1. 消除環路:通過阻斷冗餘鏈路來消除網路中可能存在的環路。
2. 鏈路備份:當活動路徑發生故障時,啟用備份鏈路,及時恢復網路連通性。
STP操作
STP通過構造一棵樹來消除交換網路中的環路。
每個STP網路中,都會存在一個根橋,其他交換機為非根橋。根橋或者根交換機位於整個邏輯樹的根部,是STP網路的邏輯中心,非根橋是根橋的下游裝置。當現有根橋產生故障時,非根橋之間會互動資訊並重新選擇根橋,互動的這種資訊被稱為BPDU。BPDU中包含交換機在參加生成樹計算時的各種引數資訊,後面會有詳細介紹。
STP中定義了三種埠角色:指定埠,根埠和預備埠。 指定埠是交換機向所連網段轉發配置BPDU的埠,每個網段有且只能有一個指定埠。一般情況下,根橋的每個埠總是指定埠。
根埠是非根交換機去往根橋路徑最優的埠。在一個執行STP協議的交換機上最多隻有一個根埠,但根橋上沒有根埠。
如果一個埠既不是指定埠也不是根埠,則此埠為預備埠。預備埠將被阻塞。
根橋選舉
STP中根橋的選舉依據的是橋ID,STP中的每個交換機都會有一個橋ID(Bridge ID) 。橋ID由16位的橋優先順序(Bridge Priority)和48位的 MAC地址構成。在STP網路中,橋優先順序是可以配置的,取值範圍是 0~65535,預設值為32768。優先順序最高的裝置(橋ID最小)會被選舉為根橋。如果優先順序相同,則會比較MAC地址,MAC地址越小則越優先。
交換機啟動後就自動開始進行生成樹收斂計算。預設情況下,所有交換機啟動時都認為自己是根橋,自己的所有埠都為指定埠,這樣BPDU報文就可以通過所有埠轉發。對端交換機收到BPDU報文後, 會比較BPDU中的根橋ID和自己的橋ID。如果收到的BPDU報文中的橋ID優先順序低,接收交換機會繼續通告自己的配置BPDU報文給鄰居交換機。如果收到的BPDU報文中的橋ID優先順序高,則交換機會修改自己的BPDU報文的根橋ID欄位,宣告新的根橋。
根埠選舉
非根交換機在選舉根埠時分別依據該埠的根路徑開銷、對端BID (Bridge ID)、對端PID(Port ID)和本端PID。
交換機的每個埠都有一個埠開銷(Port Cost)引數,此引數表示該埠傳送資料時的開銷值,即出埠的開銷。STP認為從一個埠接收資料是沒有開銷的。埠的開銷和埠的頻寬有關,頻寬越高,開銷越小。從一個非根橋到達根橋的路徑可能有多條,每一條路徑都有一個總的開銷值,此開銷值是該路徑上所有出埠的埠開銷總和,即根路徑開銷RPC(Root Path Cost)。非根橋根據根路徑開銷來確定到達根橋的最短路徑,並生成無環樹狀網路。根橋的根路徑開銷是0。
一般情況下,企業網路中會存在多廠商的交換裝置,華為X7系列交換機支援多種STP的路徑開銷計算標準,提供最大程度的相容性。預設情況下,華為X7系列交換機使用IEEE 802.1t標準來計算路徑開銷。
執行STP交換機的每個埠都有一個埠ID,埠ID由埠優先順序和埠號構成。埠優先順序取值範圍是0到240,步長為16,即取值必須為16的整數倍。預設情況下,埠優先順序是128。埠ID(port ID)可以用來確定埠角色。
每個非根橋都要選舉一個根埠。根埠是距離根橋最近的埠,這個最近的衡量標準是靠累計根路徑開銷來判定的,即累計根路徑開銷最小的埠就是根埠。埠收到一個BPDU報文後,抽取該BPDU報文中累計根路徑開銷欄位的值,加上該埠本身的路徑開銷即為累計根路徑開銷。如果有兩個或兩個以上的埠計算得到的累計根路徑開銷相同, 那麼選擇收到傳送者BID最小的那個埠作為根埠。
如果兩個或兩個以上的埠連線到同一臺交換機上,則選擇傳送者PID最小的那個埠作為根埠。如果兩個或兩個以上的埠通過Hub連線到同一臺交換機的同一個介面上,則選擇本交換機的這些埠中的PID最小的作為根埠。
指定埠選舉
在網段上抑制其他埠(無論是自己的還是其他裝置的)傳送BPDU報文的埠,就是該網段的指定埠。每個網段都應該有一個指定埠, 根橋的所有埠都是指定埠(除非根橋在物理上存在環路)。
指定埠的選舉也是首先比較累計根路徑開銷,累計根路徑開銷最小的埠就是指定埠。如果累計根路徑開銷相同,則比較埠所在交換機的橋ID,所在橋ID最小的埠被選舉為指定埠。如果通過累計根路徑開銷和所在橋ID選舉出來,則比較埠ID,埠ID最小的被選舉為指定埠。
網路收斂後,只有指定埠和根埠可以轉發資料。其他埠為預備埠,被阻塞,不能轉發資料,只能夠從所連網段的指定交換機接收到BPDU報文,並以此來監視鏈路的狀態。
埠狀態
圖中所示為STP的埠狀態遷移機制,執行STP協議的裝置上埠狀態有5種:
1. Forwarding:轉發狀態。埠既可轉發使用者流量也可轉發BPDU報文,只有根埠或指定端口才能進入Forwarding狀態。
2. Learning:學習狀態。埠可根據收到的使用者流量構建MAC地址表 ,但不轉發使用者流量。增加Learning狀態是為了防止臨時環路。
3. Listening:偵聽狀態。埠可以轉發BPDU報文,但不能轉發使用者流量。
4. Blocking:阻塞狀態。埠僅僅能接收並處理BPDU,不能轉發 BPDU,也不能轉發使用者流量。此狀態是預備埠的最終狀態。
5. Disabled:禁用狀態。埠既不處理和轉發BPDU報文,也不轉發使用者流量。
BPDU
為了計算生成樹,交換機指間需要交換相關的資訊和引數,這些資訊和引數被封裝在BPDU(Bridge Protocol Data Unit)中。
BPDU有兩種型別:配置BPDU和TCN BPDU。
1. 配置BPDU包含了橋ID、路徑開銷和埠ID等引數。STP協議通過在交換機指間傳遞配置BPDU來選舉根交換機,以及確定每個交換機埠的角色和狀態。在初始化過程中,每個橋都主動傳送配置BPDU 。在網路拓撲穩定以後,只有根橋主動傳送配置BPDU,其他交換機在收到上游傳來的配置BPDU後,才會傳送自己的配置BPDU。
2. TCN BPDU是指下游交換機感知到拓撲發生變化時向上遊傳送的拓撲變化通知。
配置BPDU中包含了足夠的資訊來保證裝置完成生成樹計算,其中包含的重要資訊如下:
根橋ID:由根橋的優先順序和MAC地址組成,每個STP網路中有且僅有一個根。
根路徑開銷:到根橋的最短路徑開銷。
指定橋ID:由指定橋的優先順序和MAC地址組成。 指定埠ID:由指定埠的優先順序和埠號組成。
Message Age:配置BPDU在網路中傳播的生存期。
Max Age:配置BPDU在裝置中能夠儲存的最大生存期。
Hello Time:配置BPDU傳送的週期。
Forward Delay:埠狀態遷移的延時。
計時器
STP協議中包含一些重要的時間引數,這裡舉例說明如下:
1. Hello Time是指執行STP協議的裝置傳送配置BPDU的時間間隔,用於檢測鏈路是否存在故障。交換機每隔Hello Time時間會向周圍的交換機發送配置BPDU報文,以確認鏈路是否存在故障。當網路拓撲穩定後,該值只有在根橋上修改才有效。
2. Message Age:如果配置BPDU是根橋發出的,則Message Age為0 。否則,Message Age是從根橋傳送到當前橋接收到BPDU的總時間,包括傳輸延時等。實際實現中,配置BPDU報文每經過一個交換機,Message Age增加1。
3. Max Age是指BPDU報文的老化時間,可在根橋上通過命令人為改動這個值。Max Age通過配置BPDU報文的傳遞,可以保證Max Age在整網中一致。非根橋裝置收到配置BPDU報文後,會將報文中的 Message Age和Max Age進行比較:如果Message Age小於等於 Max Age,則該非根橋裝置會繼續轉發配置BPDU報文。如果 Message Age大於Max Age,則該配置BPDU報文將被老化掉。該非根橋裝置將直接丟棄該配置BPDU,並認為是網路直徑過大,導致了根橋連線失敗。
STP拓撲變化
根橋故障
在穩定的STP拓撲裡,非根橋會定期收到來自根橋的BPDU報文。如果根橋發生了故障,停止傳送BPDU報文,下游交換機就無法收到來自根橋的BPDU報文。如果下游交換機一直收不到BPDU報文,Max Age定時器就會超時(Max Age的預設值為20秒),從而導致已經收到的BPDU報文失效,此時,非根交換機會互相傳送配置BPDU報文,重新選舉新的根橋。根橋故障會導致50秒左右的恢復時間,恢復時間約等於 Max Age加上兩倍的Forward Delay收斂時間。
直接鏈路故障
此例中,SWA和SWB使用了兩條鏈路互連,其中一條是主用鏈路,另外一條是備份鏈路。生成樹正常收斂之後,如果SWB檢測到根埠的鏈路發生物理故障,則其Alternate埠會遷移到Listening、 Learning、 Forwarding狀態,經過2倍的Forward Delay後恢復到轉發狀態。
非直接鏈路故障
本例中,SWB不SWA之間的鏈路發生了某種故障(非物理層故障), SWB因此一直收不到來自SWA的BPDU報文。此時,SWB會認為根橋SWA不再有效,於是開始傳送BPDU報文給SWC,通知SWC自己作為新的根橋。SWC也會繼續從原根橋接收BPDU報文,因此會忽略SWB 傳送的BPDU報文。由於SWC的Alternate埠再也不能收到包含原根橋 ID的BPDU報文。其Max Age定時器超時後,SWC會切換Alternate埠為指定埠並且轉發來自其根埠的BPDU報文給SWB。SWB放棄宣稱自己是根橋並開始收斂埠為根埠。非直連鏈路故障後,由於需要等待Max Age加上兩倍的Forward Delay時間,埠需要大約50秒才能恢復到轉發狀態。
拓撲改變導致MAC地址表錯誤
在交換網路中,交換機依賴MAC地址錶轉發資料幀。預設情況下, MAC地址表項的老化時間是300秒。如果生成樹拓撲發生變化,交換機轉發資料的路徑也會隨著發生改變,此時MAC地址表中未及時老化掉的表項會導致資料轉發錯誤,因此在拓撲發生變化後需要及時更新MAC地址表項。
本例中,SWB中的MAC地址表項定義了通過埠GigabitEthernet 0/0/3 可以到達主機A,通過埠GigabitEthernet 0/0/1可以到達主機B。由於SWC的根埠產生故障,導致生成樹拓撲重新收斂,在生成樹拓撲完成收斂之後,從主機A到主機B的幀仍然不能到達目的地。這是因為MAC地址表項老化時間是300秒,主機A發往主機B的幀到達SWB後,SWB會繼續通過埠GigabitEthernet 0/0/1轉發該資料幀。
拓撲改變導致MAC地址表變化
拓撲變化過程中,根橋通過TCN BPDU報文獲知生成樹拓撲裡發生了故障。根橋生成TC用來通知其他交換機加速老化現有的MAC地址表項。
拓撲變更以及MAC地址表項更新的具體過程如下:
1. SWC感知到網路拓撲發生變化後,會不間斷地向SWB傳送TCN
BPDU報文。
2. SWB收到SWC發來的TCN BPDU報文後,會把配置BPDU報文中的 Flags的TCA位設定1,然後傳送給SWC,告知SWC停止傳送TCN BPDU報文。
3. SWB向根橋轉發TCN BPDU報文。
4. SWA把配置BPDU報文中的Flags的TC位設定為1後傳送,通知下游裝置把MAC地址表項的老化時間由預設的300秒修改為Forwarding Delay的時間(預設為15秒)。
5. 最多等待15秒之後,SWB中的錯誤對映關係會被自動清除。此後, SWB就能通過G0/0/2埠把從主機A到主機B的幀正確地進行轉發。
STP的配置
STP模式
華為X7系列交換機支援三種生成樹協議模式。
stp mode { mstp | stp | rstp }命令用來配置交換機的生成樹協議模式。 預設情況下,華為X7系列交換機工作在MSTP模式。在使用STP前, STP模式必須重新配置。
配置交換機優先順序
基於企業業務對網路的需求,一般建議手動指定網路中配置高、效能好的交換機為根橋。
可以通過配置橋優先順序來指定網路中的根橋,以確保企業網路裡面的資料流量使用最優路徑轉發。
stp priority priority命令用來配置裝置優先順序值。priority值為整數,取值範圍為0到61440,步長為4096。預設情況下,交換裝置的優先順序取值是32768。另外,可以通過stp root primary命令指定生成樹裡的根橋。
配置路徑開銷
華為X7系列交換機支援三種路徑開銷標準,以確保和友商裝置保持相容 。預設情況下,路徑開銷標準為IEEE 802.1t。
stp pathcost-standard { dot1d-1998 | dot1t | legacy }命令用來配置指定交換機上路徑開銷值的標準。
每個埠的路徑開銷也可以手動指定。此STP路徑開銷控制方法須謹慎使用,手動指定埠的路徑開銷可能會生成次優生成樹拓撲。
stp cost cost命令取決於路徑開銷計算方法:
1. 使用華為的私有計算方法時,cost取值範圍是1~200000。
2. 使用IEEE 802.1d標準方法時,cost取值範圍是1~65535。
3. 使用IEEE 802.1t標準方法時,cost取值範圍是1~200000000。
配置驗證
display stp命令用來檢查當前交換機的STP配置。命令輸出中資訊介紹如下。
CIST Bridge引數標識指定交換機當前橋ID,包含交換機的優先順序和MAC地址。
Bridge Times引數標識Hello定時器、Forward Delay定時器、Max Age 定時器的值。
CIST Root/ERPC引數標識根橋ID以及此交換機到根橋的根路徑開銷。
display stp命令顯示交換機上所有埠資訊;display stp interface interface命令顯示交換機上指定埠資訊。其他一些資訊還包括埠角 色、埠狀態、以及使用的保護機制等。
總結:
1. 根橋產生故障後,其他交換機會被選舉為根橋,那麼原來的根橋恢復正常之後,網路又會發生什麼變化呢?
2. 路徑開銷和根路徑開銷的區別是什麼?
答:
1. 如果生成樹網路裡面根橋發生了故障,則其它交換機中優先順序最高的交換機會被選舉為新的根橋。如果原來根橋再次啟用,則網路又會根據BID來重新選舉新的根橋。
2. 根路徑開銷是到根橋的路徑的總開銷,而路徑開銷指的是交換機埠的開銷。