假裝網絡工程師5——STP二層防環機制詳解

[toc]

一、背景介紹

在網絡架構設計中,防環是一個很重要的因素,環路的潛在隱患不再贅述,所以無論是三層還是二層都非常注意防環的機制,在三層中無論是ttl值還是ospf這種倒狀樹結構其目的都是爲了避免環路,在二層中防環的機制則爲生成樹協議(spanning tree protocol),以及優化後的rstp和mstp,本章重點介紹stp生成樹協議。

二、STP協議的端口狀態

stp協議是通過計算後在實際產生環路的物理鏈路上邏輯的阻塞一個端口,只有當鏈路發生變化時被阻塞的端口才有可能從新參與計算並抓發數據,端口的5種狀態爲:
假裝網絡工程師5——STP二層防環機制詳解
上述是思科定義的5種狀態,從blocking到forwarding每種狀態都需要經過15s的時間共計45s,華爲的stp在此基礎上進行了優化,省去了listening的狀態,所以華爲的stp協議是4種端口狀態,從blocking到forwarding需要經過30s的時間。

三、生成樹的計算方法

既然需要選取出一個阻塞端口,自然會通過計算得出,每個廣播域中都會選舉出一個根橋,stp計算的方法大體分爲以下步驟:

  1. 選取根橋。初始階段每一個交換機都默認自己爲根橋,對外發送bpdu信息,通過bpdu選取出一個根橋,根橋選舉出來後,同一廣播域內的route id都爲根橋的route id。
  2. 廣播域內其他非根交換機上根據每個端口到達根橋的開銷選取根端口。
  3. 每條鏈路根據端口到根橋的開銷選取指定端口,最後非根端口根指定端口的,就是阻塞端口。

補充說明:bpdu信息是從指定端口發出,從根端口接收,所以根橋上所有的端口都是指定端口,而非根橋上接收bpdu消息的端口爲根端口,所以每一個鏈路中根端口對應的一定是指定端口。

四、BPDU優先級選取原則

無論是根橋還是根端口、指定端口都是根據bpdu信息來計算出優先級,而優先級按照先後順序以下面4個爲判斷依據:

  1. Rourer ID
  2. Path cost
  3. sender BID(bridge ID),由8字節組成,分爲2字節的優先級和6字節的mac地址,先比較優先級
  4. 發送方物理接口,由接口優先級與接口號組成,先比較接口優先級

上述的判斷依據,數值越小優先級越高。以下通過幾個示例,進行說明。
示例1
假裝網絡工程師5——STP二層防環機制詳解
(1)選取根橋: 首先根據優先級,判斷SW1爲根橋,其上的所有端口都爲指定端口
(2)選取根端口: 根據path cost判斷出sw2的1端口,sw3的2端口sw4的2端口爲根端口。其中sw4的根端口判定步驟爲:
<1>router id。此時都爲sw1的id,繼續比較下一項
<2>path cost。sw4的2端口到達根橋需要經過sw2的2端口與sw1的1端口,此時cost值爲100+19=119;另一方向,sw4的1端口到達根橋需要經過sw3的1端口與sw1的2端口,此時cost值也爲19+100=119,繼續比較下一項
<3>Sender BID。sw2與sw3優先級都是8192,但是sw2的mac地址比sw3的小,所以sw4的2端口爲根端口
(3)選取指定端口:
此時選取結果如下圖,還需要sw3與sw4之間的鏈路上確定出一個指定端口
假裝網絡工程師5——STP二層防環機制詳解
選取指定端口也是根據bpdu信息爲依據,步驟爲:
<1>route id。同一廣播域內route id都爲sw1,繼續比較下一項
<2>path cost。sw3的1端口到根橋開銷需要經過sw1的2端口,此時cost值爲100;sw4的1端口到根橋開銷需要經過sw2的2端口與sw1的1端口,此時cost值爲100+19=119,所以sw3的1端口爲指定端口
(4)確定阻塞端口: 最後,sw4 的1端口既非根端口也非指定端口,只能成爲阻塞端口

五、RSTP介紹

RSTP與STP大致相同,傳統的生成樹協議端口分爲3個角色:rp、dp、ap,和4個狀態:丟棄、阻塞、學習、轉發。當網絡發生變化時,身爲ap的端口角色會從新參與計算,計算後以rp或dp的角色再經過學習後轉發數據,這個過程就需要花費30s的時間,爲了加快生成樹的收斂時間,從而誕生了快速生成樹協議rstp。
rstp是將原有的3個角色變成了4個角色,引入了bp的角色,而端口的4個狀態進一步精簡爲3個:
假裝網絡工程師5——STP二層防環機制詳解
此時的ap是爲rp做備份,bp是爲dp做備份,所以當ap發現無法在接收到rp的bpdu消息時直接將角色變爲rp,不再需要計算,同理bp也是如此,加速了網絡的收斂。

六、MSTP介紹

RSTP儘管加快了收斂速度,但在負載均衡上仍存在着缺陷,生產環境中也很少使用,因爲傳統的生成樹在設置根橋後會成爲所有vlan的根,這樣在一個有100個vlan的大型網絡架構下,所有的流量都只會走一條鏈路,另一條鏈路由於端口被阻塞一直處於待機狀態,如下圖所示:
假裝網絡工程師5——STP二層防環機制詳解
上圖中C交換機上的A端口在所有vlan下都被阻塞,所以所有流量都只會從左邊經過,而右邊則一直處於空閒狀態,這樣右邊的鏈路其實是一種浪費,所以衍生出了MSTP,他是可以創建多個生成樹實例,同一交換機在不同實例中可以有不同的優先級,每個實例包含一個或多個vlan,這樣上圖中的數據流向就可以變成下圖的樣子
假裝網絡工程師5——STP二層防環機制詳解
vlan2和vlan3屬於不同的實例,這樣他們擁有不同的阻塞端口,流量也負載均衡。思科的pstp是爲每一個vlan創建一個根橋,而華爲的MSTP是創建多個實例,每個實例可以包含一個或多個vlan,相同的實例擁有相同的根橋,華爲交換機默認的STP就是MSTP。

七、實驗

設置2個不同vlan,將每個vlan加入不同的實例,進行負載均衡,拓撲如下圖所示:
假裝網絡工程師5——STP二層防環機制詳解

1.基礎配置

SW3上配置如下:

[SW3]vlan batch 1 12  
[SW3]port-group group-member Ethernet 0/0/11 Ethernet 0/0/12  
[SW3-port-group]port link-type access   
[SW3-port-group]stp edged-port enable   
[SW3-port-group]q  
[SW3]interface e0/0/11  
[SW3-Ethernet0/0/11]port default vlan 11  
[SW3-Ethernet0/0/11]int e0/0/12  
[SW3-Ethernet0/0/12]port default vlan 12  
[SW3]port-group group-member Ethernet 0/0/2 Ethernet 0/0/3  
[SW3-port-group]port link-type trunk   
[SW3-port-group]port trunk allow-pass vlan 11 12  
[SW3-port-group]undo port trunk allow-pass vlan 1  

SW1上配置如下:

[SW1]vlan batch 11 12  
[SW1]port-group group-member e0/0/1 e0/0/2  
[SW1-port-group]port link-type trunk  
[SW1-port-group]port trunk allow-pass vlan 11 12  
[SW1-port-group]undo port trunk allow-pass vlan 1  
[SW1-port-group]q  
[SW1]interface Vlanif 11  
[SW1-Vlanif11]ip add 192.168.11.254 24  

SW2上配置如下:

[SW1]vlan batch 11 12   
[SW2]port-group group-member e0/0/1 e0/0/3  
[SW2-port-group]port link-type trunk   
[SW2-port-group]port trunk allow-pass vlan 11 12     
[SW2-port-group]undo port trunk allow-pass vlan 1    
[SW2-port-group]q  
[SW2]interface Vlanif 12  
[SW2-Vlanif12]ip add 192.168.12.254 24  

此時PC1和PC2都可以ping通自己的網關,由於交換機的自動防環機制,所以在SW2上能看到,此時e0/0/3端口是阻塞狀態
假裝網絡工程師5——STP二層防環機制詳解
此時PC2發往SW2的數據是先經過SW3再經過SW1最終到達SW2,通過在SW3的e0/0/2口抓包,可以看到該現象
假裝網絡工程師5——STP二層防環機制詳解

2.創建多實例生成樹

將當前配置改爲使用MSTP,使用MSTP需要同一廣播域內所有交換機同時滿足以下條件:

  1. MSTP需要在廣播域內所有交換機上進行配置,且所有交換機擁有相同的區域名稱
    [SW1]stp region-configuration   
    [SW1-mst-region]region-name hw  
  2. 所有使用MSTP交換機的修訂版本號需一致
    [SW1-mst-region]revision-level 1  
  3. 所有交換機上相同實例中關聯的vlan信息要一致
    [SW1-mst-region]instance 1 vlan 11  
    [SW1-mst-region]instance 2 vlan 12  
  4. 激活MSTP
    [SW1-mst-region]active region-configuration  
    [SW1-mst-region]q  
  5. 此時再爲每一個實例設置根橋
    [SW1]stp instance 1 root primary   
    [SW2]stp instance 2 priority 0   #與SW1上配置命令作用相同

    這時,能看到vlan11和vlan12已經屬於不同的instance
    假裝網絡工程師5——STP二層防環機制詳解
    而對於instance1來說SW2上的e0/0/3端口是組測端口,而instance2的組測端口爲SW3上的e0/0/2
    假裝網絡工程師5——STP二層防環機制詳解
    此時的流量則變爲如下圖所示:
    假裝網絡工程師5——STP二層防環機制詳解
    紅色表示instance1,流量從左邊走,橙色代表instance2,流量從右邊走,此時再到SW3的e0/0/2口抓包則看不到ICMP報文,驗證了instance2的阻塞端口爲SW3上的e0/0/2。

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