STP(Spanning Tree Protocol)完整指南

STP(Spanning Tree Protocol)完整指南的重點整理。

為什麼需要

因為switch備援路線會導致網路有回環產生進而產生出廣播風暴和Mac address泛洪的問題,所以要解決這個問題就有人提出使用Spanning tree這項演算法來解決此問題。

01-為什麼需要

Spanning-tree standards

  • 802.1D
  • PVST+ Cisco私有協定,沒個VLAN有自己的Spanning tree
  • 802.1W RSTP
  • 802.1S MSTP 2大型網路
  • PVRST+ Cisco私有,對RSTP的增強版
協定 標準 所有資源 收斂速度
CST 802.1D 低 慢 所有VLAN
PVST+ 預設 Cisco 高 慢 單個VLAN
RSTP 802.1W 中 快 所有VLAN
RPVST+ 用更多的 Cisco 很高 快 單個VLAN
MST 用更多的 802.1S 中/高 快 VLAN列表

STP 802.1D

BPDU (bridge protocol data unit)

  • 利用BPDU傳送STP的各種訊息在switch之間來進行選舉。
  • 組播地址因為是L2所以是mac address 0180:c200:0000
  • 在廣播域選擇一個Root Switch且這台Switch的Port都是DR。
  • 其他台的Switch利用Root Switch的來計算對於Root Switch開銷。
  • 不是Root Switch的Switch選出一個RP且這個Port是朝向Root Switch,且會一直收到Root Switch的BPDU訊息來更新自己的STP。
  • 每個Segment選出一個DP。
  • 如果選舉出來有個Port沒有被選到就會是Block Port這樣回環就被打破了。

BPDU分成兩種類型一種是

  • Configuration BPDU:用於選舉與持續維護拓樸,穩定時仍會週期性傳播;也攜帶 TC/TCA flags。

  • TCN網路topology有改變時會發佈

  • BPDU訊息內容

    02-BPDU (bridge protocol data unit) - B
Byte 意義 描述
2 協議 代表上層協議(BPDU),必為0。
1 版本 (802.1D為0)。
1 message TYPE Configuration BPDU 為 0x00,TCN BPDU 為 0x80(十進位 128)。
1 Flag LSB最低有效為表示TC標示 ; MSB最高有效未表示TCA標示。
8 Root ID Root Switch ID收斂後就是Root Switch保持不變。
4 Cost 到達Root Switch的cost。
8 bridger ID 發送BPDU的switch的ID。
2 Port ID BPDU發送的bridger的Port ID(優先及(預設為128)+Port ID)。
2 Message age 訊息壽命 STP 資訊的累積年齡;Root 發出時為 0,中繼交換器會增加此值(Cisco 通常每跳加 1 秒),不是減一,也不是單純的 hop count。
2 Max age 最大壽命 該 port 保存的 BPDU 資訊累積年齡達此值時失效,預設 20 秒;不代表實體 port 一定故障。
2 HELLO時間 Root SW連續發送BPDU之間的時間間隔。default 2s
2 轉發Delay 在listen和學習狀態所停留的時間間隔。default 15s

Bridge ID

03-Bridge ID
  • priority ID
    • 只能設定4096的倍數
  • external system id
  • minimum mac address

bridge id : 16*4=64 bits 其中包括 48 bit mac address 和 12 bit external system id (vlan id) 和 4bit priority,priority最後要乘4096

04-Bridge ID

STP Cost

  1. root bridge 發出的cost為0的BPDU,因為交換port就在root bridge
  2. 當下一個接近的鄰居收到BPDU時,就會將BPDU到達的交換port之路徑成本與0相加。BPDU被接收時完成的
  3. 此鄰居將以新累加值作為root path cost的BPDU發送出去
  4. 下游的每個鄰居都會累加cost,並送出BPDU

強調是收到的時候是因為,當計算SPT時是用新的root path cost在BPDU進入時發生,而非離開的

Link Speed Cost IEEE規定的
10 Gb/s 以上 2
10 Gb/s 2
1 Gb/s 4
622 Mb/s 6
155 Mb/s 14
100 Mb/s 19
45 Mb/s 39
16 Mb/s 62
10 Mb/s 100
4 Mb/s 250

port id

  • 只能更改128部分小數點部份是按照順序的
05-port id
SW1(config-if)#spanning-tree port-priority <0-192 64的倍數>

802.1D STP 狀態

  • disable

    此狀態不屬於STP發展的一部分,也就是說沒辦法再show指令上觀察到disable相關的字眼

  • Blocking

    當交換port經過初始狀態,便處於blocking狀態,使得橋接loop無法產生。blocking狀態中不能接收或傳送資料,並且不法爸mac位置新增到他的位置表中;只能接收BPDU,以便聆聽其他鄰居的狀態

  • Listening 15s PC———SW PC開機

    Blocking轉換到listing,交換port還是不能發送或接收一般資料,但是可以收BPDU,使他可以主動餐與STP topology的程序中,由於交換器藉由發送BPDU通告此交換port,故此port可以成為PR或是DP。如果失去RP或DP的角色就會回到blocking

  • learing 15s

    在listening狀態中所花的時間稱為forwarding delay。當經過此段時間,可以接收發送BPDU,此外交換機可以學習mac address,learing的這段時間內,交換機還是可以做自己的事,收集mac address,但是還是無法接收發送資料。

  • forwarding

    可以開始發送接收資料,也可以接收發送BPDU。最終的狀態,除非是檢測到bridging loop,如有檢測到切換到blocking

STP status 交換port具備的功能 交換port不具備的功能 持續時間
disable N/A 發送資料或收到資料 N/A
blocking 接收BPDU 發送資料或是學習mac address 如果偵測到迴圈,則無期限封鎖
listening 發送接收BPDU 發送資料或是學習mac address forwarding delay 15s
learing 發送接收BPDU,學習mac address 收或發送資料 forwarding delay 15s
forwarding 發送接收BPDU,學習mac address,收或發送資料 只要交換機處於up且沒有偵測到loop時間無期限

802.1D STP Role

Role 功能
RP (root port) switch最靠近root bridge之switch port
DP (Designate port) lan segment最靠近root bridge的switch port。該port沿著stp向下發送BPDU
Blocking port 不是DP也不是RP的switch port
alternate port backup RP,也靠近root bridge,但會處於blocking port的狀態。藉由STP uplinkfast功能來識別這些替代port
Forwarding port 沒有偵測其他STP活動情況的交換port

802.1D STP 選舉的整體流程

  1. 先選出Root SW

    通常Root Bridge會放在distrlutein layer中因為這樣access layer and core layer可以更快地得知TCN的訊息

    STP Root bridge選舉操作

    透過BPDU傳送以下訊息來進行選舉,主要會看以下這兩個數值

    • priority是STP的優先權數越小的越先預設值32768
    • mac address是所有介面卡網卡的第一個mac address
    • 一開始所有的Switch都會發送BPDU訊息等到網路收斂完畢,Root 會週期性產生 Configuration BPDU,非 Root 依收到的資訊更新欄位,再從 DP 發送自己的 Configuration BPDU
    • 從RP收到Root Switch的BPDU訊息之後從DP傳送出去這個動作稱為Relay
  2. 在非Root bridge上選出一個RP

    STP RP選舉操作tie-breaking

    • 最低的root bridge id
    • 到Root SW的最低cost
    • sender最低的BID
    • sender最低的Port ID
  3. 在每個segment上選出DP

    STP DR選舉操作tie-breaking

    • 最低的root bridge id
    • 到Root SW的最低cost
    • sender最低的BID
    • sender最低的Port ID
  4. 非DP就是BLK Port

手動計算STP

任務 描述
1. 辨識鏈路cost 對於交換器的每條鏈路,寫出每台交換器使用該鏈路的成本
2.辨識出root bridge 找出bridge id最小的交換器
3.選出RP 每台交換器只有一個 找出前往根橋接器之最佳路徑的交換port,其中根路徑成本最低
4.選出DP 一段區段只有一個 對於交換器之間的每條鏈路,找出鏈路的某一端為DP。該port的路徑成本最低;如果相同,會使用tie-breaking的條件。
5.辨識出BLK port 非RP或DP就是BLK port

802.1D 選路範例

case 1

06-case 1

case 2

07-case 2

802.1D timer

  • hello timer

    由root bridge發送BPDU的時間間隔。會決定所有非root bridge發送BPDU的間隔時間。802.1D預設是hello 2s

  • forwarding delay timer

    進入Listening與Learning預設15s

  • Max age timer

    在丟棄BPDU前,儲存該BPDU的時間間隔,每個交換port會保留其最佳BPDU。如果沒有收到BPDU,等待max age逾期然後丟棄,預設20s

hello 組態BPDU的間隔時間
forwarding delay 進入forwarding狀態,所處listening和Learing狀態的時間而
max age 保存 STP 資訊的年齡上限;到期表示舊資訊失效,無法單憑此判斷哪台設備故障
  • command
    • hello timer

      sw(config)#spanning-tree [vlan vlan-id] hello-time seconds
      
    • forwading delay timer

      sw(config)#spanning-tree [vlan vlan-id] forwarding-time seconds
      
    • max age timer

      sw(config)#spanning-tree [vlan vlan-id] max-age seconds
      
    • 自動調整

      sw(config)#spanning-tree vlan vlan-id root {primary | secondary} [diameter diamter [hello-time hello-time]]
      

802.1D TC(Topology change)機制

以下討論傳統 802.1D STP,假設未啟用 UplinkFast/BackboneFast 等加速機制。重新選擇 RP/DP 是為了建立無迴圈路徑;TCN/TC 則通知網路加速淘汰舊的動態 MAC 紀錄。TCN 本身不負責選路,也不攜帶完整新拓樸。

08-802.1D TC(Topology change)機制

TCN、TC、TCA 的差別

名稱 承載方式 方向與用途
TCN(Topology Change Notification) 獨立的 TCN BPDU,Type = 0x80 非 Root 從自己的 RP 通知上游,逐跳向 Root 報告變更
TCA(Topology Change Acknowledgment) Configuration BPDU 的 TCA flag(bit 7) 上游從收到 TCN 的 DP 回覆直接下游,確認「這一跳已收到」
TC(Topology Change) Configuration BPDU 的 TC flag(bit 0) Root 啟動通知,各交換器沿 DP 向下傳播,促使動態 MAC 紀錄加速老化

TCN BPDU 的協定內容只有 4 bytes:Protocol ID(2)、Version(1)、Type(1)。它沒有 Root ID、Cost 或 Flags;TC/TCA 都在 Configuration BPDU 裡。

傳統 STP 的典型變更包含 port 進入 Forwarding,或原本 Forwarding 的 port 停止轉送;不能只用實體 link up/down 判斷。Cisco PortFast port 的主機端狀態變更通常不產生 TCN。Root 自己偵測到變更時,直接啟動 TC 通知,不需要往上送 TCN,因為 Root 沒有 RP。

逐跳通報與確認,不是一般 Ethernet flooding

假設 SW1 是 Root,SW3 現在經由 SW2 到達 Root:

TCN 往 Root:
SW3 ──TCN──→ SW2 ──新的 TCN──→ SW1(Root)

TCA 確認每一跳:
SW3 ←──Config + TCA── SW2 ←──Config + TCA── SW1

TC 向下通知:
SW1 ──Config + TC──→ SW2 ──Config + TC──→ SW3
  1. SW3 從 RP 發送 TCN;尚未收到上游確認時,依 Hello Time 重送。
  2. SW2 收到後,在連向 SW3 的 DP 回覆 TCA = 1。SW3 收到這個確認即可停止該次 TCN 重送,不必等待 SW1 的端到端確認。
  3. SW2 自己從 RP 向 SW1 通報,並等待 SW1 的 TCA;不是把 SW3 原本的 Ethernet frame 原封不動轉送。
  4. Root 收到後回覆 TCA,並在發出的 Configuration BPDU 設定 TC = 1。TC 通知期間為 Max Age + Forward Delay,預設 35 秒;後續變更可能延長此期間。

TCN 應描述為 hop-by-hop propagation toward the Root Bridge。它只往 RP 方向通報,不是往所有可用 port 複製 frame。Configuration BPDU 也由各橋接器處理後沿 DP 產生/傳播;即使文件廣義使用 flooding 描述通知擴散,也不等於一般 Broadcast/Unknown Unicast flooding。

Max Age 與 MAC aging 是兩件事

機制 影響的資料 作用
Max Age 每個 port 保存的 STP/BPDU 資訊 資訊未被有效更新而過期後,重新計算角色與路徑
收到 TC 後的 MAC aging 動態 MAC address table(CAM table) 暫時將老化時間縮短為 Forward Delay,預設 15 秒,讓舊轉送紀錄較快淘汰

Max Age 到期不是清空整張 MAC 表;收到 TC 也不是一律立即刪除所有 MAC。 已超過縮短後期限的動態紀錄可能很快被移除,持續被流量更新的紀錄則可保留。靜態 MAC 不適用此動態老化流程。

圖一:SW1–SW3 link 仍 up,但 SW3 收不到有效 BPDU

20-stp-indirect-bpdu-loss

原本 SW3 的 Gi1/0/1 是 RP;Gi1/0/2 朝向 SW2,處於 Blocking。這張圖的前提是故障也讓 SW1 的有效 BPDU 無法到達 SW3;若只有一般資料受損而 BPDU 仍正常,不能直接套用以下流程。

  1. SW3 沒有偵測到實體 link down,因此暫時保留 Gi1/0/1 原本的最佳路徑資訊。
  2. SW2 仍收到 SW1 的資訊,並持續從 DP 向 SW3 發送 Configuration BPDU。SW3 的 Blocking port 可以接收及處理 BPDU,不必等到 Forwarding 才收到它。
  3. SW3 的 Gi1/0/1 上舊資訊無法再更新,累積年齡達 Max Age 後,由 SW3 自己將該 port 的 STP 資訊判定失效。這不是 Root 發指令要求它清除。
  4. SW3 重新比較有效路徑,將通往 SW2 的 Gi1/0/2 選為新 RP,再經 Listening → Learning → Forwarding。
  5. 新 port 進入 Forwarding 時會觸發拓樸變更通報:SW3 → SW2 → SW1。Root 的 TC 通知則沿新樹走 SW1 → SW2 → SW3;改選 RP 不表示 SW1 被換成別台 Root。
舊 RP 資訊到期 → 重新選 RP → Listening 15s → Learning 15s → Forwarding

Max Age 預設 20 秒,實際剩餘等待取決於已累積的資訊年齡;接收時以 BPDU 的 Message Age 為起點繼續計時,並非每次故障一律重新等滿 20 秒。教學常以約 20 + 15 + 15 = 50 秒 表示此類傳統 STP 收斂。

SW1 在仍為 DP 且 link up 的原 SW1–SW3 port 上仍可能發送 BPDU,但故障使 SW3 無法有效收到;成功的 TC 通知可經 SW2 到達 SW3。

圖二:SW1–SW2 實體斷線,SW3 等待舊資訊失效

21-stp-link-failure-tcn

這張圖和圖一的斷線位置不同:故障對 SW1/SW2 是直接故障,對 SW3 則是間接得知的變更。

  1. SW1 與 SW2 立即偵測直連 link down。SW2 原 RP 已斷,無法經它把 TCN 送到 SW1;SW1 本身是 Root,直接在仍可用的 DP(往 SW3)發送帶 TC 的 Configuration BPDU。
  2. SW2 暫時沒有更好的 Root 資訊,於是宣告自己是 Root,向 SW3 發送 Configuration BPDU。SW3 仍可直接到達 SW1,知道 SW1 的 Root ID 更好,因此 SW2 的宣告是 inferior BPDU。
  3. SW3 的 Gi1/0/2 仍保存先前由 SW2 通告、以 SW1 為 Root 的舊資訊。傳統 STP 不會用 SW2 新的較差宣告立刻取代它,而是等待這份舊資訊到期;等待的是 Gi1/0/2 的資訊,並非 SW3 朝向 SW1 的 RP。
  4. 舊資訊到期後,SW3 的 Gi1/0/2 成為該 segment 的 DP,進入 Listening,開始向 SW2 通告仍以 SW1 為 Root 的 Configuration BPDU。控制 BPDU 不必等到 Forwarding 才能送。
  5. SW2 收到較佳資訊,把 Gi1/0/3 選為新 RP,重新經由 SW2 → SW3 → SW1 到達 Root;需要轉入 Forwarding 的 port 仍經過 Listening/Learning。
  6. 此後 SW2 的 TCN 可以沿 SW2 → SW3 → SW1 通報,TC 通知則沿 SW1 → SW3 → SW2 傳播。

圖上的簡化用語 圖二的「flushes the MAC address table」應配合傳統 STP 的縮短老化時間理解,不能當作立即清空整張表的通則。「discards SW2’s BPDUs」指不採納 SW2 較差的 Root 宣告,不是 SW3 完全不接收 BPDU。收到 TC 也不會跳過 Max Age 或 Listening/Learning 等待。

與 RSTP 的界線及參考

上述 TCN 往 Root、TCA 逐跳確認、Root 再向下傳 TC 是傳統 STP 機制。RSTP 原生使用帶 TC 的 RST BPDU 擴散變更,不必先等 Root 統一通知;只有與舊 STP 互通時才涉及傳統 TCN 流程,不能混用。


RSTP 802.1W

  • 802.1D STP能夠在大約1min內恢復連接

  • 802.1W STP能夠快速收斂

  • 切換模式指令

    SW1(config)#spanning-tree mode rapid-pvst
    

802.1W 狀態

09-802.1W 狀態
  • discarding : 將收到的data丟棄且無法學習到Mac address這種狀態合併了802.1D disable、listening、blocking,因為這三個狀態都無法傳送資料。況且listening根本多餘,因為RSTP能夠迅速的協商狀態變化,無須聆聽BPDU
  • learning : 會丟棄data,可以學到mac address
  • forwarding : 根據mac address來轉發data

802.1W interface Role

10-802.1W interface Role
  • RP : 在交換機中,由到達root bridge最低的cost的switch擔任此角色,但是root bridge沒有此角色root bridge只有DP跟802.1D一樣
  • DP : 在每個lan segment,由到達root bridge的cost最低switch port功能與802.1D一樣發送BPDU
  • AP : 由擁有前往root bridge的替代路徑,與RP採用的路徑不同。替代路徑成本高一些例如 : 如廣將access layer two uplink,其中一個將成為root port另一個成為alternate port。
  • BP : 由連接到該segment的備援路徑,也就是說DP的backup,這個port有可能沒有

802.1W BPDU

RSTP使用的是802.1D的BPDU格式,以便向下兼容,RSTP使用message type這欄位。發送RSTP角色和狀態來辨識自己。RSTP的BPDU version被設定為2以便和802.1D做區別。無論是否有收到root bridge BPDU,所有switch port都每隔hello時間發送一次hello,網路中任何交換器都會主動維護Topology,如果連續三次沒有收到BPDU,就會認為該鄰接switch出問題了,就會把該前往該鄰接的資料刪除。代表802.1W使用3個hello (6s),802.1D使用max age(20s)

如果有遇到802.1D就需要轉換封包格式,這時候會有一種「鎖住」的協定措施,以免再短時間收到802.1D和802.1W的BPDU,在轉換的過程中會有migration delay timer會鎖住協定類型,以免平凡切換STP類型。


Link Type

  • Edge Port :

    與一台主機相連就屬於edge port,習慣上是透過portfast來決定RSTP承襲了PortFast的概念,這類的switch port可以立即進入forwarding sstatus,如果再edge port上收到BPDU就會失去此資格。

    • command

      SW(config-if)#spanning-tree portfast 
      
  • Root Port :

    與Root Bridge最低cost就是屬於此type, 一般來說只能有一個RP但是會選出AP這個角色來當作備用,所以當RP出事了,備用port會立即變成forwarding status。

  • Point-to-Point Port

    任何連接其他交換機並成為DP的switch port就屬於這個type。直接相連的switch可以利用handshake就能同意switch port的狀態,不需要等到timer到期。並以proposal和agreement的方式交換BPDU。一台交換機成為DP,如果另一台接受,將其同意訊息進行回應。

    p2p port以雙工的模式來決定,採用全雙工可以視為p2p port type,可以透過handshake快速交換訊息完成STP convergence,如果是半雙工就不屬於此類型,且只能使用傳統802.1D的收斂方式。

    • command

      正常來說是自動判別的但是可能某須原因需要半雙工,就可以使用此指令更改預設

      Sw(config-if)#spanning-tree link-type point-to-point
      

802.1W Sync

  1. 如果proposal的發送者擁有更好的BPDU,則交換器本身認為發送者有資格成為DP,因此自己的交換port必須成為新的root port
  2. 交換機同意任何事情前,自己必須與topology進行同步
  3. 所有非edge port進入discarding (blocking)狀態,防止bridge loop
  4. 向發送者回覆同意BPDU,同意選出來新的DP這邊也告訴發送者,此交換機正在同步中
  5. RP立即進入forwarding。發送者的switch port也能夠立即開始轉送
  6. 對於目前處於discarding狀態的非edge port,提議訊息會被傳送到各自的鄰居
  7. 期望從非edge port上收到同意訊息
  8. not edge port 進入forwarding
11-802.1W Sync

802.1W TC機制

12-802.1W TC機制
  • 直接通告給鄰居不用再經過root bridge
  1. root bridge知道網路topology產生變更時,設定BPDU的TC
  2. 此BPDU傳輸給網路中的所有bridge
  3. bridge接收到了TC位置BPDU後,將bridge table老化時間300s降到forwarding delay 15s

802.1W設定

  • 配置模式

    SW1(config)#spanning-tree mode rapid-pvst
    
  • 指定root

    • 32768 - 4096*2
    Switch(config)#spanning-tree vlan 1 root primary
    
  • 指定secondary root

    • 32768 - 4096
    Switch(config)#spanning-tree vlan 1 root secondary
    
  • 指定priority

    SW(config)#spanning-tree vlan 1 priority priority
    

MST 802.1S (Multiple Spanning Tree Protocol)

  • 802.1Q : 所有VLAN採用同一個STP如果有500個vlan總共只有一個STP不會像傳統的會有500個STP,因此稱為共同擴展樹(CST),運作在trunk navite vlan

MST 概觀

RSTP的問題,RSTP都是Pre-VLAN Base也就是說STP的樹木就等於VLAN數目如果,有100 vlan就要處理100 STP這樣會耗費大量的RAM和CPU,所以MSTP提出了instance,同一組instance的vlan共用一組STP,舉例來說vlan 100到200,可以把vlan 100至 vlan 150用到inst的STP

MST area

雖然MST和802.1Q and PVST+相容,但MST與他們都不同。如果switch使用MST,就必須知道鄰居使用的STP類型。透過將switch加入到MST area,使得area內部的switch可以使用相同的參數執行mst

MST內部的STP

  • CST

    MST能夠與其他STP相容,因此需要支援各種版本的STP,可以將企業網路想成一個CST topology,所有任何東西,包括vlan MST area都共用一個STP。CST只是維護not loop的topology,同時集合了各種可用的STP。

  • IST

    每個MST內部需要有一個計算not loop的機制,只要在一個MST area執行IST(internal spanning tree),便會在CST和MST區域交界處的鏈路及區域內部的交換器之間,建立一個沒有loop的topology。你可以將IST視為本地的CST,並以MST area為邊界

13-MST內部的STP - IST

MSTP設定

  • 指定模式

    switch(config)#spanning-tree mode mst
    
  • 參數配置

    switch(config)#spanning-tree mst configuration
    
    • name

      switch(config-mst)#name school
      
    • Revision number版本號,每次設定應都要加1

      switch(config-mst)#revision 1
      
    • vlan instance對照表

      switch(config-mst)#instance inst-num vlan range
      
  • 設定primary secondary rootsr和設定priority

    Switch(config)#spanning-tree mst inst-num root [primary | secondary]
    
    Switch(config)#spanning-tree mst inst-num priority <0-61440 4096的倍數> 
    
  • 查看

    SWitch(config-mst)#show pending
    
  • 生效

    SWitch(config-mst)#exit
    
  • MST設定的一些指令

任務 指令
設定root bridge Switch(config)#spanning-tree mst instance-id root {primary | secondary} [diameter diameter]
設定priority Switch(config)#spanning-tree mst instance-id priority bridge-priority
設定cost Switch(config-if)#spanning-tree mst instance-id cost cost
設定port priority Switch(config-if)#spanning-tree mst instance-id port-priority port-priority
設定STP timer Switch(config)#spanning-tree mst hello-time seconds Switch(config)#spanning-tree mst forward-time seconds Switch(config)#spanning-tree mst max-age seconds

保護STP的topology

防止非預期的BPDU

portfast

14-portfast
  • 能夠使得L2介面立即進入轉發狀態,在一秒內
  • 連接用終端用戶的介面可以開啟
  • cisco private
  • command
    • 介面設定

      Switch(config-if)#spanning-tree portfast
      
    • 全域設定 所有的access都開啟portfast

      Switch(config-if)#spanning-tree portfast default
      
      15-portfast
    • 介面禁用

      Switch(config-if)#no spanning-tree portfast
      
    • 指定access啟用portfast

      Switch(config-if)#switchport host
      

RootGuard

  • 防止搶佔掉root SW

  • 啟用防護的介面不能成為RP,將成為DP

  • 該介面收到更好的BPDU,根防護特性就會進入 root-inconsistent狀態

  • root-inconsistent處於listen狀態

  • 等到沒有收到更優BPDU,會自動恢復

  • 使用的地方access layer Switch

  • command

    SW(config-if)#spanning-tree guard root
    

BPDUguard

  • 如果再Access layer Switch上接上一台switch且priority為0,會跟root SW搶佔root的位置,就會造成網路的不穩定,所以可以使用BPDUfilter或是BPDUguard

  • 如果從portfast介面收到BPDU,就會把狀態設定為error disable,可以透過sh和no sh重新開啟介面

    16-BPDUguard
  • command

    • 只有portfast才會生效

      SW2(config)#spanning-tree portfast bpduguard default
      
      SW2(config-if)#spanning-tree bpduguard enable
      
    • 自動恢復功能

      SW2(config)#errdisable recovery casue bpduguard
      S鏈路
      

BPDUfilter

  • 過濾BPDU封包

  • 很像passive interface

  • 能夠限制交換機開啟了portfast端口發送不必要的BPDU

  • 可以在全域開啟BPDUfilter,portfast要開啟,不然會沒有作用

  • 介面開啟不發送BPDU也不接收,收到後丟棄

  • BPDUfile < BPDU Guard

  • BPDUGuard BPDUfile同時開啟BPDUfile有效

  • command

    • 只有portfast才會生效
    SW(config)#spanning-tree portfast bpdufilter default
    
    SW(config-if)#spanning-tree portfast bpdufilter enable
    

防止BPDU意外遺失

LoopGuard

  • 如果switch的某個port處於blocking狀態,但是blocking要一直收到BPDU封包,但是出於某些原因沒辦法收到了,this port就會認為接入其他設備,也就會變成DP role,這樣就有可能會造成bridge loop,此功能就是會持續會記錄非DP role的BPDU活動情況;當收到BPDU正常工作,沒有收到時進入loop-inconsistent狀態
  • 避免bridge loop,提高網路穩定性(主要是防止鏈路產生單向故障)
  • 使用場景 : 都可以,因為一般網路線也會有RX TX、光纖、半雙工網路環境
17-LoopGuard
  1. 當SW2的TX出現問題後,SW3過渡到STP狀態,將產生環路
  2. 開啟loopguard,BPDU max-age(20s)之後,Blocking將會進入到loop-inconsistent狀態
  • command

    SW(config)#spanning-tree loopguard default
    
    SW(config-if)#spanning-tree guard loop
    

UDLD (Unidirectional link detection)

  • 能夠檢測並禁用單向鏈路

  • 是一個二層協定、與一層機制協同工作

  • 啟用UDLD,交換機會定期像鄰居發送UDLD封包,並且要求收到回應,否則判斷為單向鏈路,並且關閉該介面

  • 模式

    • Normal mode , 只能檢測光纖,未收到UDLD訊息時,介面會undeteermined狀態產生log,並不會引響流量轉發
    • aggressive mode ,檢測光纖一般網路線都可,未收到UDLD訊息,就會重新建立鄰居關係,嘗試連接8次都失敗,就會變成error-diable狀態
  • command

    sw(config)#udld enable
    sw(config)#udld aggressive
    
    sw(config-if)#udld port
    sw(config-if)#udld port aggressive
    
    SW#udld reset
    
  • Loopguard和UDLD差別

LoopGuard UDLD
檢測基於 基於VLAN 基於端口
自動恢復 是 具有err-disable超時性
防止由於設定問題所影響的DP介面不能發送BPDU所到至的故障 是 否
防止配線錯誤 否 是

uplinkfast

18-uplinkfast
  • 同常用在root SW和一般的交換機之間,當線路故障時就可以使用uplinkfast就會加快收斂速度,

    因為有隱藏alternate port,所以可以快速的切換RP port切換成有alternate port的switch port

  • A會去檢測有沒有收root SW BPDU,如果沒有收到就使用uplinkfast切換到backup陷入

  • 從blocking→forwarding≤5s

  • 在A上開

  • 啟用條件

    • 交換機至少要有一個介面處於blocking狀態
    • 鏈路失效發生在根端口
  • 啟用後會更改的value

    • priority有32768→49152加了3*4096
    • cost增加到3000
    • priority與cost不變
  • 設定

    sw(config)#spanning-tree uplinkfast
    
    sw(config)#spanning-tree uplinkfast max-update-rate <0-32000>
    max-update-rate代表每秒鐘發送的多播數據的數目,預設是每秒150個
    

BackboneFast

19-BackboneFast
  • 用於檢測鏈路,使介面blocking快速到listening (跳過20s)

  • 通過檢查次級的BPDU來知道發生故障了

  • root SW和backup SW開啟

  • command

    SW(config)#spanning-tree backbonefast
    

保護STP的topology的指令總結

global command interface command
RootGuard Switch(config-if)#spanning-tree guard root
BPDUGuard Switch(config)#spanning-tree portfast bpduguard defalut Switch(config-if)#spanning-tree bpduguard enable
loopGuard Switch(config)#spanning-tree loopguard default Switch(config-if)#spanning-tree guard loop
UDLD Switch(config)#udld {enable | aggressive |message time seconds} Switch(config)#udld {enable | aggressive |disable}
BPDUfilter Switch(config)#spanning-tree bpdufilter default Switch(config-if)#spanning-tree bpdufilter enable
command
列出被標記inconsistent的port show spanning-tree inconsistentports
顯示BPDUGuard、BPDUfilter、loopGuard 的狀態 show spanning-tree summary
顯示一個或所有switch port udld狀態 show udld [type mode/num]
遭到udld童用的errdisable port udld reset

參考資料

  • 故障案例圖參考:Brad Edgeworth、Ramiro Garza Rios、Jason Gooley、David Hucaby,《CCNP and CCIE Enterprise Core ENCOR 350-401 Official Cert Guide》第 2 版,第 2 章圖 2-4、2-5(Pearson 書籍資料)。