23-STP協議基本部署

1. STP協議和二層環路

在企業局域網絡中使用冗餘鏈路會帶來環路的風險,導致廣播風暴,MAC地址表震盪等各種問題,影響網絡的穩定性,好在STP(生成樹協議)協議解決了這個問題,總之STP協議可以解決冗餘鏈路帶來的環路問題,並且當交換機的某一條鏈路發生故障時,可以迅速切換到備用鏈路,保證網絡的可靠穩定性。

STP協議定義了三種端口角色:根端口(RP),指定端口(DP),非指定端口(NDP,也稱阻塞端口);同時STP協議也是基於這三種端口角色來保證當前網絡中沒有環路:

  1. 先選舉根橋
  2. 然後選舉根端口
  3. 再選舉指定端口

 

2. STP協議的選舉過程

什麼是根橋?說通俗點根橋其實就是一個交換機。

STP協議是通過構造一顆生成樹來解決網絡中的環路問題的,在每個STP網絡中都會存在一個根橋交換機,其他的則爲非根橋交換機,並且每個交換機都有一個橋ID(BID),這個BID由網橋優先級和MAC地址組成,網橋優先級是可以配置的,其範圍是0 - 65535,默認值爲32768,數值越小說明優先級越高,網橋優先級最高的交換機會被選舉爲根橋交換機,如果優先級相同,則會比較MAC地址,MAC地址越小的優先級越高,總結稱一句話就是:根橋交換機的選舉主要是依據橋ID和MAC地址(越小越優先)。

 

在上圖中SW1交換機的橋ID是1024,並且該橋ID在當前網絡中是最小的,那麼根據選舉根橋的規則直接選舉SW1交換機爲根橋,SW3爲備根,SW2爲非根。

 

STP協議除了要選舉根橋外,還要選舉端口:  

根端口(RP):離根橋交換機最近的非根交換機的端口,並且每個非根交換機最多隻有一個根端口,用於接收BPUD分組。

指定端口(DP):每條鏈路上必須且只有一個指定端口,並且離根橋交換機最近,用於發送BPDU分組。

非指定端口(NDP):每個網絡拓撲必須要有一個非指定端口,用於阻塞數據防止環路。

 

端口的選舉主要依據以下幾個參數(所有參數值都是越小越優先):

  1. 先選舉Cost值最短(到根)
  2. 再選舉BID最小
  3. 在選舉鄰居PID最小

 

現在根據端口的選舉規則分別選舉出根端口,指定端口,非指定端口,如下圖所示:

 

有同學可能會疑惑爲什麼要選舉根橋和端口?由於STP協議通過構造一棵生成樹來解決網絡的環路問題,作爲根橋是要發送BPDU分組,其他設備也要接收BPDU分組,以此來維護整個生成樹網絡,這就需要通過選舉端口來決定誰來收發BPDU分組了。

 

1. 首先是選舉DP端口,由於根橋要發送BPDU分組,那麼根據DP端口的定義和選舉規則,SW1交換機的f0/0和f0/1都選舉爲DP端口,用於發送BPDU分組。

2. 其次是選舉RP端口,一般來講,發送BPDU分組的對面就是接收BPDU分組的,所以SW2交換機的f0/0和SW3交換機的f0/0就是RP端口,用於接收BPDU分組。

3. 最後還要從SW2的f0/1到SW3的f0/1這條鏈路中分別選舉出DP端口和NDP口,還是根據端口的選舉規則,因爲這條鏈路上的端口Cost值一樣,所以無法參考Cost值來選舉端口。需要根據BID來選舉DP,由於SW3交換機的f0/1口的BID優先級更高,那麼SW3交換機的f0/1口選舉爲DP口,那麼SW2的f0/1口就是NDP口了,用於阻塞數據分組防止環路。

 

總結一下STP選舉的規則:

  1. 一般先選舉根橋,並且根橋的所有接口都是DP(因爲根橋的接口離本身最近)
  2. 一般DP的對面就是RP(因爲DP用於發送BPDU分組,而RP是用於接收BPDU分組)
  3. 選舉流程:
    1. 先選舉根橋
    2. 再選舉DP和RP
    3. 最後選NDP(阻塞端口)

 

3. 實驗——部署STP協議

STP協議也是基於Trunk鏈路的,在部署STP協議之前,所有交換機的鏈路必須設置爲Trunk模式。

另外,思科的設備爲防止環路默認情況下都開啓了STP協議,但在工程環境下是非常不推薦使用默認的STP協議,因爲默認的STP協議在選舉端口時會隨機選舉一個端口爲阻塞端口,特別是在一個大型企業網絡中,如果默認的STP協議在匯聚層的設備上隨機選舉了一個阻塞端口,就有可能會造成大面積的網絡故障。

所有鏈路設置爲Trunk模式,略過......

 

配置交換機的BID,SW1爲根橋,SW2爲備根,SW3爲非根:

SW1(config)#spanning-tree vlan 1 priority 0
SW2(config)#spanning-tree vlan 1 priority 1024
SW3(config)#spanning-tree vlan 1 priority 4096

 

show命令查看根橋SW1交換機的STP信息:

SW1#show spanning-tree vlan 1 brief

VLAN1
  Spanning tree enabled protocol ieee
  Root ID    Priority    0
             Address     cc01.08c8.0000
             This bridge is the root
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec

  Bridge ID  Priority    0
             Address     cc01.08c8.0000
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
             Aging Time 300

//主要關注Sts字段(端口的狀態)
Interface                                   Designated
Name                 Port ID Prio Cost  Sts Cost  Bridge ID            Port ID
-------------------- ------- ---- ----- --- ----- -------------------- -------
FastEthernet0/0      128.1    128    19 FWD     0     0 cc01.08c8.0000 128.1  
FastEthernet0/1      128.2    128    19 FWD     0     0 cc01.08c8.0000 128.2  

SW1#

STP協議的比較重要的幾個字段:

This bridge is the root:這句話說明,SW1交換機自己就是根橋設備。

Sts:Sts字段表示端口的狀態,一般有FWD和BLK兩種狀態,FWD表示轉發狀態(Sts字段很重要)。

Hello Time:表示hello分組的更新週期爲2秒,生命週期爲20秒,轉發延遲爲15秒

Address:MAC地址

Port ID:表示PID,越小越優先,端口的優先級默認是128,其範圍是0 ~ 255。

從上面給出的STP協議信息可以看出,SW1交換機已經選舉爲根橋了,同時SW1所有的端口都處於FWD狀態(轉發狀態)。

 

 

show命令查看根橋SW2交換機的STP信息:

SW2#show spanning-tree vlan 1 brief

VLAN1
  Spanning tree enabled protocol ieee
  Root ID    Priority    0
             Address     cc01.08c8.0000		//根橋的MAC地址
             Cost        19
             Port        1 (FastEthernet0/0)
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec

  Bridge ID  Priority    1024
             Address     cc02.1c80.0000		//自己的MAC地址
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
             Aging Time 300

Interface                                   Designated
Name                 Port ID Prio Cost  Sts Cost  Bridge ID            Port ID
-------------------- ------- ---- ----- --- ----- -------------------- -------
FastEthernet0/0      128.1    128    19 FWD     0     0 cc01.08c8.0000 128.1  
FastEthernet0/1      128.2    128    19 FWD    19  1024 cc02.1c80.0000 128.2  

Cost字段:備根到根橋的Cost值(所花費的開銷)。

我們可以看到SW2交換機所有的接口處於轉發狀態(FWD狀態)。

 

 

show命令查看根橋SW3交換機的STP信息:

SW3#show spanning-tree vlan 1 brief

VLAN1
  Spanning tree enabled protocol ieee
  Root ID    Priority    0
             Address     cc01.08c8.0000
             Cost        19
             Port        1 (FastEthernet0/0)
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec

  Bridge ID  Priority    4096
             Address     cc03.2f4c.0000
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
             Aging Time 300

Interface                                   Designated
Name                 Port ID Prio Cost  Sts Cost  Bridge ID            Port ID
-------------------- ------- ---- ----- --- ----- -------------------- -------
FastEthernet0/0      128.1    128    19 FWD     0     0 cc01.08c8.0000 128.2  
FastEthernet0/1      128.2    128    19 BLK    19  1024 cc02.1c80.0000 128.2  

SW3#

重點關注Sts字段,SW3交換機的優先級是4096,並且SW3的f0/1口是處於BLK狀態(阻塞),該端口用於防止環路。

 

接下來設置SW1交換機爲主根,配置如下:

SW1(config)#spanning-tree vlan 1 root primary
//這句話的意思是SW1設備已經設置爲主根了
% This switch is already the root of VLAN1 spanning tree
//優先級是0
 VLAN 1 bridge priority unchanged at 0
 VLAN 1 bridge max aging time unchanged at 20
 VLAN 1 bridge hello time unchanged at 2
 VLAN 1 bridge forward delay unchanged at 15
SW1(config)#

 

SW2交換機爲備根,配置如下:

SW2(config)#spanning-tree vlan 1 root secondary 
 VLAN 1 bridge priority set to 16384
 VLAN 1 bridge max aging time unchanged at 20
 VLAN 1 bridge hello time unchanged at 2
 VLAN 1 bridge forward delay unchanged at 15
SW2(config)#

原先自定義設置爲SW2的優先級爲1024的,但是設置SW2爲備根後,優先級變成16384了。

 

下面的內容是作爲補充的。

進入接口配置模式下,可以修改鏈路的Cost(開銷)值和端口的優先級,配置如下:

//修改端口的Cost值
SW1(config-if)#spanning-tree cost ?
  <1-65535>  Change an interface's spanning tree path cost 
//修改端口的優先級
SW1(config-if)#spanning-tree port-priority ?
  <0-255>  Change an interface's spanning tree priority

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章