生成樹【01】生成樹簡(jiǎn)介及STP原理詳解
為什么要使用生成樹協(xié)議
生成樹協(xié)議是二層鏈路上的協(xié)議。
如上圖所示,在二層網(wǎng)絡(luò)中,交換機(jī)起到了很重要的作用,如果有一臺(tái)交換機(jī)出現(xiàn)故障會(huì)影響網(wǎng)絡(luò)的使用,為了避免存在單點(diǎn)故障,在實(shí)際的二層鏈路中會(huì)采用鏈路冗余,也就是采用交換設(shè)備之間多條聯(lián)絡(luò)連接,即多臺(tái)交換機(jī)之間都有連接,這樣即使一臺(tái)交換機(jī)故障了,也可以使用其他交換機(jī)。這就是鏈路冗余。
這種做法雖然很好,但是會(huì)產(chǎn)生一個(gè)致命的問題,各個(gè)交換機(jī)設(shè)備之間都有鏈路連接,數(shù)據(jù)報(bào)到達(dá)目的主機(jī)的路線會(huì)增多,從而使數(shù)據(jù)報(bào)在交換機(jī)之間不斷的被轉(zhuǎn)發(fā),形成一個(gè)環(huán)路。
多鏈路形成環(huán)路的致命問題
1. 形成廣播風(fēng)暴: 數(shù)據(jù)報(bào)在環(huán)路在不斷的被廣播轉(zhuǎn)發(fā)形成廣播風(fēng)暴。
2. 多重復(fù)幀復(fù)制: 交換機(jī)在接受到不確定單播幀時(shí),將執(zhí)行泛洪操作,這意味著,在環(huán)路中一個(gè)單播幀在傳輸中被復(fù)制為多個(gè)復(fù)本。
3. MAC地址表不穩(wěn)定: 如果交換機(jī)在不同的端口收到同一個(gè)幀,它的MAC數(shù)據(jù)庫將會(huì)變得不穩(wěn)定。
以上三種情況不論是哪一種,都將會(huì)使二層網(wǎng)絡(luò)鏈路發(fā)生崩潰。
解決問題分析
我們知道之所有發(fā)生這種情況的原因是二層鏈路形成了環(huán)路,為什么形成環(huán)路呢?是因?yàn)閿?shù)據(jù)幀為到達(dá)目的主機(jī)會(huì)在各個(gè)相連的交換機(jī)之間互相復(fù)制轉(zhuǎn)發(fā)和傳輸形成環(huán)路。
如果我們能給各個(gè)數(shù)據(jù)幀指定一條到達(dá)目的主機(jī)的最短路徑,那么就不會(huì)形成環(huán)路了,因?yàn)閿?shù)據(jù)幀是沿著我們給定的路線傳輸。這樣就解決了因數(shù)據(jù)幀胡亂傳輸而形成的環(huán)路問題,進(jìn)而解決了以上的種種問題,而且還能是實(shí)現(xiàn)鏈路冗余的目的。那么這條指定的最短路徑要怎么指定呢?可以在鏈路中加上一個(gè)協(xié)議,這個(gè)協(xié)議就是生成樹協(xié)議。
生成樹協(xié)議有哪些
IEEE協(xié)會(huì)通過了IEEE802.1d協(xié)議,即開天辟地的第一代生成樹協(xié)議STP,這個(gè)協(xié)議和其他協(xié)議一樣,都是隨著網(wǎng)絡(luò)的不斷發(fā)展而不斷更新?lián)Q代的。到現(xiàn)在為止,該協(xié)議一共有三代;
第一代 STP/RSTP
第二代PVST/PVST (思科特有)
第三代 MTSTP/MSTP
我們只對(duì)STP、RSTP和MSTP進(jìn)行講解
救世主STP(802.1d)又叫 生成樹協(xié)議
在這種環(huán)路肆虐的時(shí)候,如同救世主般的STP來到了我們身邊。呵呵
STP的主要功能是通過一系列的運(yùn)算來解決由于備份連接所產(chǎn)生的環(huán)路問題。
注意:?jiǎn)渭儤?biāo)準(zhǔn)的802.1d STP協(xié)議并不能實(shí)現(xiàn)真正的冗余和負(fù)載分擔(dān)。
STP運(yùn)行原理簡(jiǎn)介:
通過阻斷冗余鏈路將一個(gè)有環(huán)路的橋接網(wǎng)絡(luò)修剪成一個(gè)無環(huán)路的樹形拓?fù)浣Y(jié)構(gòu),即:能夠確保數(shù)據(jù)幀在某一時(shí)刻從一個(gè)源出發(fā),到達(dá)網(wǎng)絡(luò)中任何一個(gè)目標(biāo)的路徑只有一條,而其他的路徑都處于非激活狀態(tài)(不能進(jìn)行轉(zhuǎn)發(fā)),如果在網(wǎng)絡(luò)中發(fā)現(xiàn)某條正在使用的鏈路出現(xiàn)故障時(shí),網(wǎng)絡(luò)中開啟了STP技術(shù)的交換機(jī)會(huì)將非激活狀態(tài)的阻塞端口打開,恢復(fù)曾經(jīng)斷開的鏈路,確保網(wǎng)絡(luò)的連通性。
如上圖所示:從PC0到達(dá)PC1的數(shù)據(jù)幀會(huì)經(jīng)過中間由三臺(tái)交換機(jī)組成的環(huán)路,STP協(xié)議會(huì)選擇一條最短的路徑讓數(shù)據(jù)幀從PC0到達(dá)PC1。假如,STP協(xié)議通過計(jì)算,認(rèn)為走2路——3路到達(dá)PC1是最短路徑,那么1路就會(huì)處于非激活狀態(tài),即1路上有關(guān)的端口會(huì)處于堵塞狀態(tài)。如果交換機(jī)S1出現(xiàn)了故障導(dǎo)致2路和3路不能走了,那么STP就會(huì)激活1路,確保數(shù)據(jù)幀能夠到達(dá)PC1.
STP原理----順序四步走:
1.選擇根橋(根交換機(jī))RB
在網(wǎng)路中需要選擇一臺(tái)根交換機(jī)RB,選擇RB就需要交換機(jī)們自己選擇,需要交換機(jī)們通信,這些信息被稱為BPDU(橋協(xié)議數(shù)據(jù)單元),每2秒發(fā)送一次,BPDU中包含的信息較多,但是RB的選擇只比較BID(橋ID),BID最小的就是根交換機(jī)。
BID=橋優(yōu)先級(jí) 橋MAC地址。先比較橋優(yōu)先級(jí),然后再比較橋MAC地址的優(yōu)先級(jí),一般來說,橋優(yōu)先級(jí)都是一樣的,都是32768,所以一般只比較橋MAC地址,MAC地址最?。ㄒ簿褪荁ID最?。┑淖鳛镽B。
例如:SW1:Default優(yōu)先級(jí) 32768 MAC 0c0011111111
SW2:Default優(yōu)先級(jí) 32768 MAC 0c0022222222
很明顯,在優(yōu)先級(jí)相等的情況下,MAC地址SW2的小,所以SW2為根交換機(jī)。
2.選擇根端口RP(要從離根橋最近的端口選)
對(duì)于每臺(tái)非根橋,要選擇一個(gè)端口用來連接到根橋,這就是根端口
注意:根端口只能在非根交換機(jī)上選取的。
當(dāng)非根橋有多個(gè)端口可以連接到根橋時(shí),應(yīng)該選擇性能比較好的端口作為根端口,選擇的依據(jù)是: 首先比較開銷Q,其次比較PID(端口ID)
比如:如下圖所示;
根據(jù)根橋的選取,可以判斷SwitchZ為根橋,也就是根交換機(jī)。那么SwitchX和SwitchY為非根橋,非根橋SwitchX需要選擇一個(gè)端口(只能選擇一個(gè)端口)用來連接SwitchZ(根橋),首先比較的是開銷Q:
帶寬
IEEE802.1d(STP)
IEEE802.1w(RSTP)
10Mb/s
100
100Mb/s
19
200000
1000Mb/s
4
20000
通過Port0連接到根橋,Q=19. 通過Port1連接到根橋,Q=100 19=119.
很明顯通過Port0連接到根橋的開銷Q小,所以選擇SwitchX和SwitchY的Port0為根端口。
但是假設(shè)Q相同的話,就需要比較PID了,PID=端口優(yōu)先級(jí) 端口號(hào),一般來說端口優(yōu)先級(jí)是默認(rèn)的,所以,端口號(hào)越小的端口,將成為根端口。
注意: 先比較開銷,再比較PID。
?。常x擇指定端口DP
在每一個(gè)交換機(jī)之間的鏈路上選擇一個(gè)端口,作為指定端口。
例如:如下圖所示:
上圖中共有3個(gè)網(wǎng)段,X-Y,Y-Z,X-Y,其中前兩個(gè)網(wǎng)段的指定端口都是SwitchZ(根橋)上的端口,因?yàn)楦鶚驔]有根端口,有的只是指定端口,而X-Y(紅線網(wǎng)段)的指定端口需要選擇,依據(jù)如下:
X到達(dá)根橋的開銷Q=19
Y到達(dá)根橋的開銷Q=19
由于Q相同,需要比較BID(指定端口ID),SwitchX的BID小,所以位于SwitchX上的port1將成為該網(wǎng)段的指定端口。
?。矗遥?、DP設(shè)置轉(zhuǎn)發(fā)狀態(tài),其他端口設(shè)為阻塞狀態(tài)
選出來的RP和DP將設(shè)為轉(zhuǎn)發(fā)狀態(tài),既不是根端口也不是指定端口的其他端口將被Block!
通過上述四部走,就可以形成無環(huán)路的網(wǎng)絡(luò)。
STP計(jì)時(shí)器
一共有3個(gè):
1. Hello Time: 根橋發(fā)送BPDU之間的時(shí)間間隔,也是網(wǎng)絡(luò)初始化的時(shí)候,每個(gè)網(wǎng)橋發(fā)送各自的BPDU的時(shí)間間隔。
2.Forwarding Time : 指一個(gè)端口Listening和Learning的各自時(shí)間,默認(rèn)為15s,為了保證BPDU在全網(wǎng)中的轉(zhuǎn)發(fā),所以做如此設(shè)定,這個(gè)值是可以配置的,由于Forwarding Time 的限制,一般建議網(wǎng)絡(luò)的直徑應(yīng)小于7
3. Max Age : 存儲(chǔ)BPDU最長(zhǎng)的時(shí)間,超過這個(gè)時(shí)間端口接受不到BPDU,就會(huì)采取相應(yīng)的措施。這個(gè)時(shí)間默認(rèn)為20s.
注意: 這三個(gè)時(shí)間在拓?fù)浞€(wěn)定后都是由根橋發(fā)出的,由根橋在全網(wǎng)統(tǒng)一計(jì)時(shí)器,在根橋修改才有效。
STP端口狀態(tài)概述
當(dāng)協(xié)議信息BPDU通過一個(gè)交換網(wǎng)絡(luò)時(shí)。可能發(fā)生傳播延時(shí),那么交換網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)就可能會(huì)發(fā)生改變。
每一個(gè)使用STP的二層LAN端口存在以下5種狀態(tài):
1. 阻塞(Blocking):10s 端口不能參與幀的轉(zhuǎn)發(fā)發(fā)
2. 偵聽(Listening):15s 這是端口自阻塞狀態(tài)后的第一個(gè)過渡狀態(tài)。STP認(rèn)為這種狀態(tài)的二層LAN端口應(yīng)當(dāng)參與幀的轉(zhuǎn)發(fā)
3. 學(xué)習(xí)(Learning):15s 處于準(zhǔn)備參與幀轉(zhuǎn)發(fā)狀態(tài)
4.轉(zhuǎn)發(fā)(Forwarding):端口可以正式轉(zhuǎn)發(fā)幀了
5. 禁止(Disabled):端口不參與STP,不轉(zhuǎn)發(fā)幀。
STP端口拓?fù)渥兓?/div>
當(dāng)啟用STP后,設(shè)備開啟電源后,每個(gè)端口和網(wǎng)絡(luò)都要經(jīng)歷阻塞、偵聽、學(xué)習(xí)這類的過渡狀態(tài)。如上圖所示。
1.阻塞狀態(tài)端口變化: 網(wǎng)絡(luò)設(shè)備在交換BPDU之前,都是假設(shè)自己為根的,并且端口在初始化時(shí),總是先置于阻塞狀態(tài)。交換BPDU后就可以確定哪個(gè)設(shè)備作為根橋。
處于阻塞狀態(tài)的端口執(zhí)行以下任務(wù):
丟棄從所在網(wǎng)段中接收的幀;
丟棄與其他轉(zhuǎn)發(fā)端口交換的幀
不把終點(diǎn)位置添加到地址數(shù)據(jù)庫中。
接收BPDU,并且把它們直接傳到系統(tǒng)模塊中。
不傳輸從系統(tǒng)模塊中接收到的BPDU
2. 偵聽狀態(tài)端口變化: 當(dāng)STP確定這個(gè)二層LAN端口應(yīng)當(dāng)參與幀轉(zhuǎn)發(fā)時(shí),進(jìn)就進(jìn)入到了偵聽狀態(tài)
處于偵聽狀態(tài)的端口執(zhí)行以下任務(wù):
丟棄從所在網(wǎng)段中接收的幀;
丟棄與其他轉(zhuǎn)發(fā)端口交換的幀
不把終點(diǎn)位置添加到地址數(shù)據(jù)庫中。
接收BPDU,并且把它們直接傳到系統(tǒng)模塊中。
接收、處理和傳輸從系統(tǒng)模塊中接收到的BPDU
3.學(xué)習(xí)狀態(tài):從偵聽狀態(tài)進(jìn)入到學(xué)習(xí)狀態(tài):
處于學(xué)習(xí)狀態(tài)將執(zhí)行以下任務(wù):
丟棄從所在網(wǎng)段中接收的幀;
丟棄與其他轉(zhuǎn)發(fā)端口交換的幀
把終點(diǎn)位置添加到地址數(shù)據(jù)庫中。
接收BPDU,并且把它們直接傳到系統(tǒng)模塊中。
接收、處理和傳輸從系統(tǒng)模塊中接收到的BPDU
4.轉(zhuǎn)發(fā)狀態(tài)端口變化; 處于轉(zhuǎn)發(fā)狀態(tài)的端口可以正式轉(zhuǎn)發(fā)幀了。
處于偵聽狀態(tài)的端口執(zhí)行以下任務(wù):
轉(zhuǎn)發(fā)從所在網(wǎng)段中接收的幀;
轉(zhuǎn)發(fā)與其他轉(zhuǎn)發(fā)端口交換的幀
把終點(diǎn)位置添加到地址數(shù)據(jù)庫中。
接收BPDU,并且把它們直接傳到系統(tǒng)模塊中。
處理和傳輸從系統(tǒng)模塊中接收到的BPDU
5.禁用狀態(tài)的端口變化:處于禁用狀態(tài)的端口不參與幀轉(zhuǎn)發(fā)或者STP。
注意: 這種把二層端口置于禁用狀態(tài)的行為是不建議的,因?yàn)檫@相當(dāng)于一宗浪費(fèi)
處于偵聽狀態(tài)的端口執(zhí)行以下任務(wù):
丟棄從所在網(wǎng)段中接收的幀;
丟棄與其他轉(zhuǎn)發(fā)端口交換的幀
不把終點(diǎn)位置添加到地址數(shù)據(jù)庫中。
不接收BPDU,并且把它們直接傳到系統(tǒng)模塊中。
這就是整個(gè)網(wǎng)絡(luò)中交換機(jī)拓?fù)涠丝诘淖兓?,直到最后網(wǎng)絡(luò)穩(wěn)定。
總結(jié)---STP運(yùn)行過程梳理
假設(shè)S1為根交換機(jī)
當(dāng)網(wǎng)絡(luò)穩(wěn)定后,這種穩(wěn)定狀態(tài)下,根交換機(jī)S1 向網(wǎng)絡(luò)中以2s一次的頻率發(fā)送BPDU報(bào)文,非根交換機(jī)S2通過根端口接受BPDU,然后通過指定端口向S3發(fā)送BPDU報(bào)文。通過這種方式,BPDU報(bào)文可以順利的擴(kuò)散到網(wǎng)絡(luò)的每臺(tái)交換機(jī)。
但是當(dāng)網(wǎng)絡(luò)拓?fù)浒l(fā)生變化時(shí),交換機(jī)會(huì)向根交換機(jī)方向發(fā)送TCN BPDU報(bào)文,這兒的變化有以下幾種情況:(當(dāng)出現(xiàn)以下幾種情況后,當(dāng)事交換機(jī)就會(huì)發(fā)送TCN BPDU)
1. 處于轉(zhuǎn)發(fā)狀態(tài)或者監(jiān)聽狀態(tài)的端口過渡到阻塞狀態(tài),這個(gè)狀態(tài)通常是鏈路故障
2. 處于未啟用狀態(tài)的端口進(jìn)入轉(zhuǎn)發(fā)狀態(tài),這個(gè)狀態(tài)通常是增加了新的鏈路
3. 交換機(jī)從指定端口收到TCNBPDU報(bào)文。
假設(shè)S3出現(xiàn)了以上情況中的一種,那么交換機(jī)就認(rèn)為網(wǎng)絡(luò)拓?fù)浒l(fā)生了變化,將執(zhí)行步驟1,S3從根端口向根交換機(jī)的方向發(fā)送TCN BPDU報(bào)文(這兒的方向是向S2),S2通過指定端口接受TCN BPDU ,執(zhí)行步驟2,然后發(fā)送給S3 一個(gè)TCA,同時(shí)執(zhí)行步驟3,向根交換機(jī)的方向發(fā)送TCN BPDU報(bào)文,S1(根交換機(jī))收到TCN BPDU報(bào)文后執(zhí)行步驟4,向S2發(fā)送TC BPDU,S2接受到TC BPDU后再轉(zhuǎn)發(fā)給S3。接受到TC BPDU報(bào)文后的交換機(jī)S2和S3將自己的MAC地址表老化時(shí)間(生存時(shí)間)設(shè)置為15s,開始學(xué)習(xí)新的轉(zhuǎn)發(fā)路徑,達(dá)到網(wǎng)絡(luò)的穩(wěn)定。
在端口的變化中,從阻塞到偵聽狀態(tài),需要10s的時(shí)間,從偵聽到學(xué)習(xí)需要15s,從學(xué)習(xí)到轉(zhuǎn)發(fā)需要15s。
這個(gè)時(shí)間在現(xiàn)在高速發(fā)展的網(wǎng)絡(luò)中是不能接受,因?yàn)樘耍袥]有一種可以收斂這些時(shí)間的生成樹協(xié)議呢?
答案是有的,那就是RSTP---快速生成樹協(xié)議。我們的下一篇文章再來探討,看看RSTP到底快在什么地方。
|
|