文章目錄
CCNP2交換:生成樹:STP(802.1D)、PVST、PVST+、RSTP/RPVST、802.1W、MSTP
一、線路冗餘導致的問題:
在沒有一些協議的發明前,交換機是不敢連成圈的。因爲連成圈就會導致交換機出環,導致交換機的累死,重啓。如果將它們連成環,必然會導致以下3個問題。
1、廣播風暴
在介紹有關協議前,先講一下廣播風暴:
我們知道交換機不向路由器可以自己算路由,它的工作機制是:流量到達交換機後,交換機會先看流量來的MAC,再看流量進的接口。交換機查看自己的MAC、接口表,如果認識就轉發;但如果目標MAC不認識,該交換機就會洪泛。
在一些協議沒有發明前,如果有3臺交換機連成下面這樣,當一臺交換機將數據包進行洪泛後,收到該包的交換機由於也不認識MAC,它也會洪泛,3臺交換機連接在一起。就導致自己洪泛出去的包,自己又收到了,又因爲不認識該包,就又會洪泛。
由於二層交換機沒有TTL,因此不停地洪泛下去,直到交換機的CPU達到最大值超負荷之後,設備就會癱瘓重啓。
2、MAC地址表翻滾:
還是拿上圖說吧。
當產生廣播風暴時:一個逆時針的廣播,還有一個順時針的廣播,這兩個廣播的原MAC都是相同的,這樣就會導致交換機再上一時間點認爲流量是從1號口進來,然後又馬上接到另一個方向的2號口的流量,使MAC地址表不停的進行刪除前一MAC所對應的接口,不斷的翻滾。
3、同一數據幀的重複拷貝:
我們知道,正常交換機在所有接口上只洪泛一次,當出現廣播風暴之後,就會將一個數據幀不停的洪泛,導致同一數據幀的重複拷貝。
爲了解決上述問題出現了一個非常偉大的協議:STP(IEEE802.1D)生成樹協議。
二、STP生成樹:
一般的協議都是由私有轉爲公有,而生成樹最早的協議是公有的 802.1D,接着Cisco提出了PVST、PVST+,在後來有了 802.1W 、 802.1S
1、STP概述:
如果3臺交換機連在了一起,導致了出環,若要人爲的破環。我們有什麼辦法?
其實就是拔根線,這樣就破環了。生成樹STP(spanning tree protocol)就是這個邏輯,它用於實現二層的線路冗餘,在網絡中邏輯的阻塞部分接口,來實現從根(交換機)到目標僅擁有唯一路徑;當最佳路徑故障時,阻塞端口自動工作來實現備份的作用。
上面的那張我用Packet Tracer畫的圖,我們可以看到其中有兩臺交換機之間有一個接口是黃顏色的,那就是邏輯堵塞。
所謂生成樹,其實就是在二層的網絡中構建一個樹形結構,它的特點就是:唯一、最短、星型拓撲
2、STP的數據幀:BPDU
PDU我們都知道,它是協議數據單元。而 BPDU橋協議數據單元,跨層封裝至二層,我們可以理解爲交換機之間用來通訊的幀。
跨層封裝至二層,就不能用以太網第二代幀作爲二層,就需要用以太網第一代幀了,以太網第一代幀分爲 LLC邏輯鏈路控制層(提供對數據進行分片,進程區分的功能),MAC介質訪問控制層(對物理層控制,包括提供MAC地址)
BPDU所含的字段如下:
BPDU類型 | 註解 |
---|---|
配置BPDU | 只有根網橋可以發出,在最初無根網橋時,所有交換機均發出; |
次優BPDU | TCN:拓撲變更消息 |
注意:BPDU的保活時間:Hello time 2s hold time 20s,超過20s後,生成樹將重新收斂。
3、IEEE802.1D算法:
我們拿四個交換機連成環說事吧:
(1)IEEE802.1D工作過程:
STP工作過程: |
---|
每臺交換機剛開始都發送BPDU,當每臺交換機都收到其它交換機的信息後,它們會從所有的BPDU中選取一個最好的BPDU我們把這個最好的BPDU叫它配置BPDU。 |
發送該BPDU的交換機成爲根網橋(根交換機),我們可以理解爲老大。接着其它交換機不再發送BPDU,然後由根網橋判斷哪個接口好,哪個接口不好,該堵塞哪個接口。 |
之後根網橋發送BPDU進行生成樹。生成樹收斂好之後,根網橋每2秒發送一次BPDU進行保活,其它交換機收到之後只進行轉發,對於12s沒有回覆的交換機,生成樹將重新收斂。 |
阻塞端口只接收不發送,用於接收次優BPDU。開啓的阻塞端口,只轉髮根網橋的配置BPDU。 |
但是當它們的連接出現問題之後,生成樹將重新收斂,比如說下面這樣:
(2)IEEE802.1D角色選舉算法:
角色選舉是生成樹的核心,通過該算法將成網狀等結構的交換機拓撲轉化爲具有星型結構的樹狀結構。要想生成這棵樹,就要從樹根開始,選舉的步驟是這樣的:
Ⅰ、根網橋的選舉:
關於生成樹協議的干涉,至少必須關注根網橋的位置,最合適的位置爲匯聚層設備
通過上面我們知道,根網橋的選舉靠的的是BPDU的優劣,那什麼纔是最好的BPDU呢?
選取最好的BPDU就是選出根網橋。根網橋:在一顆生成樹實例中有且僅有一臺,對整個樹進行計算、指揮、管理和部署,通過發送BPDU來進行指揮和維護,週期發送BPDU。
Ⅱ、根端口的選舉:
有了根網橋,那麼每臺交換機上就得有一個端口專門連接上一級,用於組建樹形結構。
根端口(一個接口):在每臺非根網橋上有且僅有有一個必須是根端口,它是非根網橋上離根網橋最近的接口(星型拓撲最佳路徑),該接口可以用於 接收 來自根網橋的BPDU,轉發用戶的流量。
選舉規則如下:
i、比較根網橋到該設備各入接口的最小cost(開銷)值,最小的成爲根端口。
從上面我們就可以看出來交換機是如何通過開銷值選取根端口了,它會比較兩邊開銷值,開銷值小的將成爲根端口。
但是我們從上圖中還可以看到,根網橋到Switch3的兩個端口的cost值相同。這就有了第二條選舉規則:
ii、若入口的cost值相同,便比較該接口對端的交換機BID,最小的成爲根端口。
也就是比較上一個圖中的Switch1、Switch2它們之間的BID。
iii、若對端的BID相同,便比較該接口對端接口的PID,先比較PID中的優先級,最小的成爲根端口。若優先級相同比較編號
對端BID相同,說明它們是同一臺交換機,那麼這個圖長得就是這樣:
Switch5的兩個接口連着根網橋,它們的BID相同,接口優先級是默認的,由於 F0/2 的接口編號小,那麼Switch5的F0/1口便成爲了根端口,F0/3作爲阻塞端口。
ⅳ、若接口對端的PID相同,比較本地的PID,最小的成爲根端口。
這種情況是什麼呢?連唯一的接口編號都一樣了,我們想到的只有這種設備了:集線器,一個接口下通過集線器又通過兩根線連接了1臺交換機。
我們也確實可以看到本地Switch5編號較小的接口 F0/1 成爲了根端口,F0/2口邏輯阻塞。
Ⅲ、指定端口的選舉:
指定端口(一個接口):在每段物理鏈路有且僅有一個;指定端口 轉發 來自網橋的BPDU。以及 轉發 用戶的流量。
首先:默認根網橋所有端口均爲指定端口。
然後進行接下來的比較:
i、比較接口的出向cost值,最小的成爲指定端口
ii、若出向cost值相同,比較本地的BID,最小的成爲指定端口
iii、若本地的BID相同,再比較本地的PID,最小的成爲指定端口
當這種情況出現的情況的時候,就出環了:
ⅳ、若本地PID相同,該接口直接阻塞,最小的成爲指定端口
Ⅳ、非指定端口(阻塞狀態)的選舉:
阻塞狀態:邏輯阻塞,能接收流量,但不向任何接口進行轉發。
選舉規則:當一個網絡中將以上三種角色均選舉完成後,剩餘所有未分配任何角色的接口成爲非指定端口。
(3)IEEE802.1D算法小實驗:
已知交換機A、B、C、D、E、F,其MAC分別是全A、全B、全C、全D、全E、全F,所有接口的優先級都是默認的。有下面三種圖,其端口數值模擬其端口編號的大小。
標出所有端口的狀態。
答案如下:
通過上面實驗我們發現,根網橋就是整個網絡的中心,所有的通訊必須經過它。
注意:若最底層的交換機中連接着電腦,該電腦也會參與生成樹的選舉,因爲生成樹只有發出BPDU,才知道其底層連接的是交換機還是電腦。
(4)IEEE802.1D的狀態:
狀態 | 註解 |
---|---|
Down 關閉 |
默認所有交換機接口初始狀態,指示燈 不顯示 ,一旦雙up,向外發出BPDU,然後進入下一狀態。 |
Listening 偵聽 15s |
指示燈爲橙色,此時進行生成樹的選舉,各個接口角色的生成。若接口角色爲根端口或指定端口那麼進入下一狀態,若接口角色定義爲非指定端口,狀態直接切換爲阻塞,指示燈保持橙色。 |
Learning 學習15s |
指示燈爲橙色,學習PC發出的數據包中的源MAC地址,生成MAC地址表,學習完成後,進入下一狀態。 |
Forward 轉發 |
指示燈爲綠色,此時便可以轉發用戶的流量。 |
BLK 阻塞 |
指示燈爲橙色,非指定端口的狀態 |
注意:任何接口在選舉未完成前,均不能轉發用戶的流量
(4)IEEE802.1D的收斂:
Ⅰ、初始收斂:30s
Ⅱ、結構突變:
i、30s直連檢測前提下,本地阻塞端口啓用需要15s偵聽+15s學習
接着Switch5打開阻塞接口,進行15s的偵聽、15s的學習,總計30s。
ii、50s非直連檢測的前提下,阻塞端口需要20s hold time + 30s 的選舉時間
IEEE802.1D算法的缺點 |
---|
1、收斂速度慢:原因是因爲當年網橋開始的時候,處理速度慢。 |
2、鏈路利用率低:指阻塞端口那根線是處於閒置狀態的, |
三、PVST:
Cisco公司發現公有協議走到了它的前面,因此Cisco就針對生成樹發明了一種新協議,專門針對STP存在的缺點,提出了PVST技術。
1、PVST的特點:
PVST(Per Vlan Spanning Tree 生成樹):Cisco私有,基於VLAN的生成樹協議,每個VLAN一顆樹。
優點:徹底解決了鏈路利用率低的問題,將不同VLAN的根網橋放置於不同的匯聚層設備上, 然後實現流量的分擔,提高了了鏈路的利用率。
缺點:收斂速度慢、樹形結構多、僅支持trunk幹道的ISL的封裝技術(Cisco私有)。
特點:同IEEE802.1D完全一致的算法,但每個VLAN獨立使用一顆生成樹,僅能基於ISL的trunk幹道封裝技術進行工作。
2、干涉根網橋的選舉:
SW1#show spanning-tree
基於每個VLAN發出不同的BPDU,各自進行各自的選舉,選舉規則爲IEEE802.1D規則。默認所有VLAN發出的BPDU中網橋優先級爲32768+VLAN的ID。
管理員手工修改網橋優先級,只能修改32768的部分,且該部分的修改必須以4096的倍數來進行。
(1)干涉根網橋的位置,修改網橋優先級:
SW1(config)#spanning-tree vlan 3 priority 28672
(2)直接干涉根網橋的位置:
sw1(config)#spanning-tree vlan 2 root primary 本地成爲vlan2的根網橋
sw1(config)#spanning-tree vlan 3 root secondary 本地成爲vlan3的備份根
原理:修改爲根,本地自動將網橋優先級下調2倍的4096
修改爲備份根的優先級下調1倍的4096
(3)修改接口的優先級默認128(範圍0-240):
SW1(config)#interface fastEthernet 0/24
SW1(config-if)#spanning-tree vlan 2 port-priority 16 修改時必須爲 16 的倍數。
(4)修改接口的cost值:
CORE(config)#interface f0/1
CORE(config-if)#spanning-tree vlan 2 cost ?
<1-200000000> Change an interface's per VLAN spanning tree path cost
我這裏用的是Packet Tracer 模擬器,它默認使用的生成樹就是PVST協議。我們連接一個拓撲,然後使用上述命令查看一下這張表:
怎樣證明你有VLAN的用戶呢?可以使用下面兩種辦法。
(1)得有一個接口,該接口必須劃分到VLAN2、狀態是雙UP
(2)擁有trunk幹道:我本地雖然沒有VLAN2的人,但是我的鄰居有,可以通過trunk幹道訪問該VLAN的用戶
因此:一臺設備希望存在某個VLAN的生成樹,必須存在該VLAN,同時存在該VLAN的用戶或者存在trunk幹道。
四、PVST+:
從上面我們知道,Cisco公司只解決了部分的問題,但是收斂速度慢的問題是始終沒解決。爲了解決整個問題,它們提出了PVST+。
現在Cisco的設備默認支持的就是PVST+、802.1Q的封裝。
1、特點:
PVST+:其工作原理同PVST完全一致,但可以基於ISL、802.1Q工作,可以實現部分的加速,干涉PVST+的生成樹選舉指令。
2、PVST部分的加速:
(1)端口加速:
端口加速用於在連接PC的access端口(配置位置)上實現端口加速,端口加速之後,電腦不需要進行生成樹的選舉(不用再等待30s的生成樹)直接進入轉發狀態。
定義接口爲host接口時:接口默認爲access,同時portfast功能激活。
SW1(config)#interface f0/1
SW1(config-if)#switchport host
激活portfast功能:
SW1(config)#in f0/1
SW1(config-if)#spanning-tree portfast
(2)上行鏈路加速(慎用):
上行鏈路加速:接入層交換機(配置位置)在存在直連檢測的前提下,本地阻塞端口需要15s偵聽,15s學習才能進入轉發狀態,開啓上行鏈路加速後,該接口將直接成爲根端口進入轉發狀態。
SW1(config)#spanning-tree uplinkfast 該指令只用於接入層設備
由於上行鏈路加速讓阻塞端口直接成爲根端口進入轉發狀態,因此該加速萬不可用於匯聚層交換機,它更適合於存在阻塞端口的接入層設備,當uplinkfast開啓後,該設備的網橋優先級和cost值將成倍增加,被強制固定爲非根設備。
(3)骨幹加速:
骨幹加速:交換機在沒有直連檢測的前提下,需要20s的hold+30s的收斂才能轉發流量。開啓骨幹加速後,可以省略20s的hold但剩餘30s,必須正常進行。接收到次優BPDU後,骨幹加速的設備可以省略20s的 hold time。
它的思路就是:我都收到對端的次優BPDU,那說明拓撲發生了變化,那就直接重新收斂吧。
所有的交換機(配置位置)
SW1(config)#spanning-tree backbonefast
優點 | ①可以將不同VLAN的根網橋放置於不同的匯聚層設備上,然後實現流量的分擔,提高了鏈路的利用率 ②可以部分的加速 ③兼容802.1Q |
---|---|
缺點 | ①收斂速度慢:加速不夠徹底 ②樹形結構多 |
對於PVST+總結一下它實現了哪些加速:
狀態 | 是否加速 |
---|---|
首先初次收斂30s | 否 |
連接PC的接口 | 是(減少30s的選舉時間) |
直連檢測 | 是(減少30s的選舉時間) |
非直連檢測 | 是(減少20s的維持時間) |
五、快速生成樹 RSTP/RPVST、802.1W(1-2s收斂完成):
通過分析上面的PVST+協議,我們發現,它的加速並不完全,依然存在很多問題。因此兩類協議都進行了改進:
公有 | 私有 |
---|---|
802.1D ==> 802.1W | PVST+ ==> RSTP/RPVST |
雖然進行了改進,但是其主體特點保持不變:
①RSTP又叫做RPVST爲私有協議基於每個VLAN一顆生成樹,選舉算法同PVST+一致;
②802.1W爲公有協議,整個交換網絡爲一棵樹
修改生成樹的模式(建議所有交換模式一致):
sw1(config)#spanning-tree mode ?
mst Multiple spanning tree mode
pvst Per-Vlan spanning tree mode
rapid-pvst Per-Vlan rapid spanning tree mode
注意:不是所有的物理接口均支持RSTP
當接口爲 100M的時候鏈路類型爲全雙工,爲P2P(點到點)
當接口爲 10M的時候鏈路類型爲半雙工,爲Shr(共享型鏈路)
對於10M帶寬的鏈路類型,默認是不支持快速生成樹的,我們可以修改它的鏈路類型:
SW2(config)#int range e0/0-1
SW2(config-if-range)#spanning-tree link-type point-to-point
上面的收斂速度慢的問題解決了,但是對於公有協議只有一顆樹,對於私有協議樹多。爲了解決這個問題出現了新的生成樹:MSTP
六、MSTP/802.1S(多生成樹、組生成樹):
這個協議是最早由Cisco研發出來,最後捐出來,成爲公有的協議了。
MSTP/802.1S:首先它也是快速生成樹,特點如下:
①基於一個組一顆生成樹,一個組中可以放置多個VLAN
②快速收斂:同802.1W機理一致,故半雙工接口需要修改鏈路類型
修改模式爲MST
SW1(config)#spanning-tree mode mst 所有交換機上修改
SW1#show spanning-tree mst 0 查看mst組0
MSTP分組的方式默認存在0號組,所有VLAN均在該組中
配置
(1)進行組配置:
SW1(config)#spanning-tree mst configuration
SW1(config-mst)#instance 1 vlan 6-10,115 創建組號1,同時定義該組的VLAN
SW1(config-mst)#instance 2 vlan 16-20
(2)修改根網橋的位置
SW1(config)#spanning-tree mst 1 root ?
primary Configure this switch as primary root for this spanning tree
secondary Configure switch as secondary root
(3)修改網橋優先級
SW1(config)#spanning-tree mst 1 priority ?
<0-61440> bridge priority in increments of 4096
(4)修改接口優先級,或cost值
SW1(config-if)#spanning-tree mst 1 ?
cost Change the interface spanning tree path cost for an instance
port-priority Change the spanning tree port priority for an instance
七、生成樹總結:
協議 | 特點 | 優點 | 缺點 |
---|---|---|---|
STP 802.1D |
初次收斂:30s 結構變化:直連檢測:30s 非直連檢測:20s hold time + 30s收斂 |
慢 鏈路利用率低 |
|
PVST Cisco私有 |
基於VLAN的樹,一個VLAN一顆樹 | 分流 | 慢 樹多 僅支持ISL |
PVST+ Cisco私有 |
PVST的基礎上部分加速,支持802.1Q | 分流 部分加速 支持802.1Q |
加速不夠徹底 樹多 |
公有:802.1W Cisco:RSTP/RPVST |
半雙工:Shr,慢速 全雙工:P2p,快速 |
加速徹底 | 樹多 |
MST/802.1S | 半雙工:Shr,慢速 全雙工:P2p,快速 基於組的快速生成樹,默認均在組0 |
加速徹底 組生成樹 |