生成樹

前言:

交換網絡爲了避免單點故障,通常接入交換機與交換機之間通常要兩條或者兩條鏈路連接,但是這樣會很容易產生環路,進而產生廣播風暴,mac地址表震盪等對網絡有重大危害的機制,思科和華爲的設備默認STP就已經啓動(傻瓜交換機沒有STP,有廣播風暴很可能會down機),通過上面這張拓撲就可以模擬廣播風暴和mac地址震盪。

image.png

廣播風暴:我們僅要在上圖當中的PC配置一個IP,然後把三臺交換機默認啓動的生成樹協議通過stp  disenable關閉。使用192.168.0.1/24 ping 192.168.0.255會產生廣播 ,我們就可以任意位置打開抓包軟件看到廣播風暴,因爲產生了環路,廣播風暴的現象就是大量的,相同的廣播。單純的闡述無法深刻理解廣播風暴的危害,我僅在在PC上ping 192.168.0.255只ping了11次,大約10秒左右,結果就產生了16萬個的廣播,效果圖如下:

image.png

image.png

地址震盪:在廣播風暴期間,我們可以在任意一臺交換機上通過dis  mac-address查看mac地址表,會發現,連接PC的MAC地址會不斷的變換接口,因爲交換機會在不同的接口學到同一個PC的MAC地址,效果如下:

image.png

當有了STP之後,一切變的不同了,廣播風暴沒有了,地址震盪也不會出現了。STP是怎樣做到的呢?STP只是阻塞了某一個交換機的某一個接口,並不是真的阻塞了,只是在邏輯上阻塞了,這樣的話,形成不了環路,沒有環路,就沒有廣播風暴,同時也沒有地址震盪,只會在一端學習到MAC,接口MAC不會一直變化了;不僅環路沒有了而且還有了冗餘,當正在工作那個接口down了,原本處於阻塞的接口會啓用。

總結:交換機通過運行STP算法,阻塞特定的端口實現冗餘無環網絡。



STP

image.png

當無環樹形成之後,根橋不斷的發送BPDU,根接口會不斷的接收DPDU包,而指定端口會一直轉發BPDU,阻塞的接口不動但是會一直偵聽,如果有一段時間收不到BPDU包,就會把自己置於偵聽狀態併發送BPDU包與廣播域內的其它交換機PK,此過程在下文端口狀態小節當中有詳細解釋。

例一:

image.png

第一步首先選舉出根橋,先比較優先級,三臺交換機的優先級都是一樣的,然後比較背板MAC,交換機一的MAC最小,所以交換機一是根橋。

第二步每個非根橋選舉出一個根接口,先比較開銷,交換機二的1接口與2接口相比到達根橋的開銷更小,所以交換機二上的1號接口是根端口。

交換機三上的5接口與6接口相比到達根根橋的開銷更小,所以交換機三的5號接口也是根端口。

第三步在每條鏈路上選出指定端口,交換機一上的3號和4號接口是指定接口,還要從2號和6號接口裏面選擇一個,首先看開銷,它樣的開銷是一樣的,然後sw2和sw3比較橋ID,交換機二的橋ID小一些,所以2號接口是指定端口

阻塞6號接口。

image.png

第一步首先選舉出根橋,先比較優先級,三臺交換機的優先級都是一樣的,然後比較背板MAC,交換機一最小,交換機一是根橋。

第二步每個非根橋選舉出一個根接口,先比較開銷,交換機二3號接口到根橋的開銷比4號接口要小,所以3號接口是根接口。交換機三的5號接口到根橋的開銷是19+19,6號接口到根橋的開銷是100,所以5號接口是根接口。

第三步每條鏈路選舉出一個指定端口,1和2都是指定接口,在4號和6號接口裏面選出一個指定端口,先比較開銷,明顯4號接口的開銷比較小,4號接口是指定接口。

6號接口是阻塞接口。

image.png

第一步選舉出根橋,先比較優先級一樣,然後比較背板MAC,交換機一最小,交換機一是根橋。

第二步非根橋選舉出根端口

交換機二的3號接口到根橋的開銷比4號要小,所以3號接口是根端口。

交換機三的8號接口到根橋的開銷比7號要小,所以8號接口是根端口

交換機四的兩個接口到根橋的開銷都是一樣的,然後比較發送者的優先級,5號接口從交換機二上收到BPDU包,6號接口從交換機三上收到BPDU包,就是比較交換機二和交換機三的優先級,優先級一樣 ,再然後是比較MAC,交換機二的MAC小一些,所以5號接口是根接口。

第三步每條鏈路選舉出一個指定端口,1,2接口是指定接口,4號接口比5號接口到根橋的開銷要小,7接口比6號接口到根橋的開銷要小,所以1,2,4,7,是指定端口。

6是阻塞接口。

image.png

第一步選舉出根橋,先比較優先級一樣,然後比較背板MAC,交換機一最小,交換機一是根橋。

第二步每個非根橋選舉出一個根端口,3號和4號接口先比較到達根橋的開銷,開銷一樣,然後比較發送者的橋ID,還是一樣,再然後比較發送者的接口ID=優先級+接口號,發送者就是1和2號接口,那就比較1號接口和2號接口的接口優先級,這個優先級可以通過抓STP報文中port  ID看到,這裏我們且當1號和2號接口的優先級是一樣的,接下來比較接口號的大小,1號接口比2號接口要小,所以1號接口對應的3號的接口是根接口。

第三步每一條鏈路選舉出一個指定端口就是1,2。

剩下的4號接口會被阻塞。


端口狀態

image.png

1.    臥薪嚐膽,把握時機。所有的接口在剛剛啓動時都是處於阻塞狀態,在阻塞狀態只能被動的接收BPDU包,這個時長會維持20秒的時間,如果20秒之內沒有收到BPDU包,說明網絡拓撲發生了變化,自己有機會成爲偵聽狀態,它就會自己的狀態自動調整成爲偵聽狀態。

2.    欲與天公試比高,背水一戰。在偵聽狀態就嘗試向外發送BPDU報文,拿自己的橋ID與廣播域內所有的交換機進行PK,成王敗寇,如果自己的橋ID最小,將把自己置爲根橋。如果自己的不大不小,很可能自己就是根端口或者是指定端口,如果自己的根橋最大的話,意味着自己會成爲阻塞接口。如果自己有幸成爲根橋,或者是接口被選舉出根端口或者是指定端口的話,就會由偵聽狀態進行下一個狀態學習狀態,如果自己的被選舉成爲阻塞接口,就退出阻塞狀態繼續臥薪嚐膽,等待時機,這個PK的過程是15秒左右。

3.    機會總是留給有準備的交換機。進入到學習狀態還是會接入BPDU包,接入BPDU包的目的是構建自己的MAC地址表,爲什麼這時候要構建MAC地址表,直接上來轉發不行嗎?上來轉發倒是也可以,只是有一個問題,上來就轉發的話MAC地址表什麼都沒有,肯定會不斷泛洪會影響帶寬,所以在進入轉發狀態之前交換機給自己留下了15秒的時間去構建MAC地址表,機會總是留給有準備的接口的!這個學習的過程也會持續15秒左右。

4.    能力越大,責任越大。之後會進入轉發狀態,在轉發狀態什麼都幹,不僅發送BPDU也接收,不僅學習數據幀還轉發數據幀,在此狀態也可以向MAC地址表填入MAC地址。

5.    打入冷宮。禁用狀態,當接口被管理down或者物理down,什麼都不能做,肯定也不會轉發。

image.png


基本操作

爲什麼要修改優先級呢?就像下圖:

image.png


選舉的阻塞接口是6號接口,這樣的話,sw3的PC流量到核心交換機話就得繞路從2—5—4---1接口走,不能直接從sw3直接到達核心交換機,根據STP算法自動算出的阻塞端口雖然沒有環路,但是並不是最好的,最好是從2,5號接口當中選出一個,爲什麼?因爲sw3和sw2下面要接PC,而PC的流量想要到達核心的話,阻塞2和5號端口任何一個都不會繞路的,是最優的。但是交換機也不會按照我們的意願,但是我們還是可以通過修改交換機的優先級來按照我們的意願選舉阻塞接口的。 

那麼我們現在就想讓2號或者5號端口成爲阻塞接口,我們應該怎樣做呢?。我們只要讓SW1成爲根橋不就行了嘛(在選舉阻塞接口通常都是在根橋對面的兩個點上選擇一個),當sw1成爲了根橋之後,它正對面不就是2號和5號端口嘛,必定有一個阻塞接口,至於哪一個就無所謂了,無論是哪一個都不會讓PC的流量繞路。

讓SW1成爲根橋也非常的簡單,只要把SW1的優先級調整的高一些就好了,如下,把sw1的優先級調整爲0,它就會以絕對的優勢成爲根橋了,有一點注意注意,優先級必須是4096的倍數。

[Huawei]stp  priority  0  #0是優先級的最小了。

根據這個規律,其實我們在生產環境當中,通常都是把核心交換的優先級調整到0的。

根據優先級指定根橋是非常穩妥的行爲,其實讓一個交換機成爲根橋不僅僅是這一個方法,還要一種方法,如下:

[Huawei]stp  root  primary  #成爲根橋

這條命令是直接把根指定成爲當前的交換機,其實它背後的工作原理也是通過降低優先級完成的,只不過,這個優先級是自動向下調整的,直到成爲域內最小,很少使用這個方法,不穩妥,還有一條命令可以成爲備份根橋。

[Huawei]stp  root  secondary  #成爲備份根橋

成爲備份根橋,優先級僅次於根橋,根橋掛了,自動頂上。


邊緣端口


帶有STP交換機一個端口從阻塞到轉發狀態要經過大概要40秒到50秒左右的時間,這一段時間是用來探測有沒有環路,確認沒有環路後纔會啓動,但是接PC的的接口用不着探測,接PC的端口肯定不可能發生環路,當我們把一個交換機的端口配置成爲邊緣端口之後,這個接口從阻塞狀態到轉發狀態就不再經過偵聽狀態,開啓了直接就轉發。

int g0/0/3                      #進入連接PC的那個交換機端口
stp edaged-port  enabled               #把此接口配置成邊緣端口

我們想要驗證的話也非常的簡單,在不開邊緣端口的時候接一個PC然後一直ping網關,看看多個包後能能夠ping通,然後開啓邊緣端口再ping,再看看多少個包之後能夠ping通。

下圖是不開邊緣端口時,PC插上交換機的接口後就開始ping,第一波一個包都不通,第二波才通,中間大約用了30秒左右。

image.png

下面是在交換機上開了邊緣端口時,PC插入交換機上就開始ping,速度明顯比不開邊緣端口時快很多,第一波就通了。

image.png


根保護

假如有人搗亂,有人在接入層交換機上接口下也接了個華爲交換機,把自己的優先級改成0,接入之後發送BPDU要PK決定根橋,很有可能會破壞網絡,根橋易主,這時候就要用來根保護的技術。

我們可以在根橋上使用一個指令,實現如果發現接入用戶的接口發現有BPDU之後分析,如果優先級比真正的根橋還要小,如果放任此BPDU通過會威脅到真正的根橋,會把此BPDU丟棄,然後把接入發BPDU的那個接口給阻塞了,然後每隔一段時間再檢測一下這個接口,如果沒有BPDU並且優先級低於真正的根橋就將此接口給打開,不在阻塞,給用戶一個機會,讓其翻然悔悟,注意此指定只能在指定端口配置纔會生效,也就是配置在根橋的兩個端口,防止有人能夠威脅到根橋的地位。

image.png

如果上圖爲例,假如sw1是根橋的話,根保護就應該配置在sw1的1號和3號端口。

 

protection保護,根橋上的端口都是指定端口,兩個接口都要運行一個此命令

當核心發現有人想搶的它的位置,不允許,生氣,馬上把接口給置於dis狀態,不玩了,除非能夠改正

int g0/0/2
stp root-protection

用實驗驗證一下,找一個交換機四把優先級調整成最低然後接入廣播域裏面,讓這個交換機去搶根橋,結果經面易舉的就是根橋給搶過來了,然後在把此交換機斷開,在真正的根橋的兩個接口上開啓了根保護之後,又把交換機四接入到廣播域當中,結果去真正的根橋的查看,交換機四雖然比真正的根橋優先級要小很多,但是並沒有把根橋搶過來,真正的根橋發現有交換機想要搶自己的根橋,就會通過根保護把接口給關掉,不給別人威脅它地位的機會。等到交換機四斷開或者優先級威脅不到真正的根橋時,真正的根橋纔會把已經關閉的接口給打開。


BPDU防護

假如我們在接入交換機連接PC的端口上做了邊緣端口,做了邊緣端口之後啓動時就不會有STP了,端口開啓的速度變快,但是有一個缺點,有的員工不知道這個端口是邊緣端口,結果把一個根的兩端都接入到了同一個交換機上,一旦收到廣播,環路又產生了。爲了防止這個情況的產生,我們可以在做了邊緣端×××換機上,通常是接入層的交換機上使用DPDU防護。

當在做了邊緣接口的交換機上使用了DPDU保護之後,如果從邊緣端口收到了stp報文,交換機會自動將該接口shutdown,從而確保不會發生環路。

[sw]stp bpdu-protection   #全局下配置

想要恢復有兩種,管理員給接口下,手動un do

還有一種方法就是30秒後自動恢復機制

[Huawei]error-down auto-recovery cause bpdu-protection interval 30

#如果是因爲bpdu保護導致的接口doww30秒後自動恢復


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