網(wǎng)管人員在進(jìn)行網(wǎng)路規(guī)劃時,為避免線路故障而引起的IT服務(wù)中斷,一般都會考慮線路冗余的問題,以下面的網(wǎng)絡(luò)簡要圖為例,這種網(wǎng)絡(luò)考慮了備援的問題,但產(chǎn)生了循環(huán),我們來分析一下這樣的網(wǎng)路會存在什么樣的問題。
網(wǎng)絡(luò)拓?fù)鋱D如圖1所示,如果PC1發(fā)出一個廣播封包,我們知道交換機(jī)收到廣播封包后會無條件幫忙轉(zhuǎn)發(fā)出去,所以switch1會將廣播封包分別送給switch2和 switch3, 而 switch2、switch3收到廣播封包后又會再廣播出去,如此,switch2收到switch1的廣播封包后會向switch3轉(zhuǎn)發(fā),而switch3收到switch1的廣播封包后會向switch2轉(zhuǎn)發(fā),switch2收到switch3的廣播封包后又會向switch1和PC1轉(zhuǎn)發(fā),經(jīng)過一輪封包傳播,廣播封包又回到switch1,這樣周而復(fù)始,很快整個網(wǎng)絡(luò)都會充塞著大量的廣播封包,而且數(shù)量會越來越多,形成廣播風(fēng)暴。
圖1 網(wǎng)絡(luò)拓?fù)鋱D
從圖中可見,產(chǎn)生廣播風(fēng)暴的原因主要是因?yàn)橐紤]線路備援,從而產(chǎn)生了循環(huán),有什么方法可以解決這個問題呢?既然廣播風(fēng)暴是由于網(wǎng)路存在循環(huán)而造成的,那我們只要把網(wǎng)絡(luò)中某些端口關(guān)掉以打消循環(huán)。
以圖1的架構(gòu)為例,如果把3個交換機(jī)其中一個端口關(guān)掉不用,就可以打消循環(huán),但網(wǎng)絡(luò)就失去了備援,這種解決方法不是我們希望的,所以要考慮的是,如何才能做到既有冗余但又不造成循環(huán)問題呢?
我們可以突發(fā)奇想,如果交換機(jī)上的一個端口不是物理被關(guān)掉,而只是邏輯上被封鎖掉,一旦交換機(jī)上其他鏈路或者端口發(fā)生問題時就喚醒這個端口幫忙轉(zhuǎn)發(fā)數(shù)據(jù),這樣一來就能解決循環(huán),也能照顧好備援的問題,這就是STP協(xié)議要做的事。
總的來說,STP是當(dāng)網(wǎng)絡(luò)架構(gòu)存在循環(huán)時,交換機(jī)間會使用STP的機(jī)制溝通哪些端口要幫忙傳送數(shù)據(jù),哪些端口則邏輯上被封鎖起來。
交換機(jī)中的STP功能預(yù)設(shè)是開啟的,因此一般而言,網(wǎng)管人員不太需要擔(dān)心接駁交換機(jī)時會產(chǎn)生循環(huán)的問題,因?yàn)榧词褂醒h(huán)線路,交換機(jī)之間預(yù)設(shè)會互相發(fā)送BPDU的STP封包來協(xié)商把某些端口封鎖掉,以解決循環(huán)的問題。本文會對STP技術(shù)進(jìn)行講解。
依然以圖1為例,三臺交換機(jī)之間會互相傳送BPDU封包來交換STP數(shù)據(jù),經(jīng)過協(xié)商后,決定將switch3的fa0/2接口封鎖掉,作為網(wǎng)管人員需要了解和掌握STP封鎖端口的機(jī)制,也就是STP為什么會選擇這個端口來封鎖。
第一,在循環(huán)的網(wǎng)路中,會有一個交換機(jī)作為根橋(root bridge),所 以 首 先要在網(wǎng)絡(luò)中選擇一臺root bridge,root bridge是通過比較交換機(jī)中的BID來選的,每臺交換機(jī)都有一個BID,BID由兩部分組成,一部分是priority,另一部分是macaddress。
擁有最小的BID的交換機(jī)會成為root bridge,我們可以使用以下指令來查找到3個交換機(jī)的BID信息,如表1所示。
圖2 網(wǎng)絡(luò)拓?fù)鋱D
以switch2為 例,輸入show spannin-tree的指令可以查看到這臺交換機(jī)的BID信息,分別是priority32768(預(yù) 設(shè)的priority值)以及交換 機(jī) 的mac-address是0001.97E5.3569。
經(jīng)過查詢每一臺switch,我們可以得到如下信息:交換機(jī)S1的priority32768,macaddress0060.47B3.5509,交 換 機(jī)S2的priority32768,macaddress0001.97E5.3569,交換 機(jī) S3的priority32768,mac-address0060.702E.D516。
表1 查看BID指令
因?yàn)?臺交換機(jī)priority都用了預(yù)設(shè)的32768,所以只能比誰的mac-address最小,最小mac-address的交換機(jī)會成為 root bridge,不 難看出,switch2會成為root bridge,有了這些信息,我們更新了網(wǎng)絡(luò)拓?fù)浼軜?gòu)圖,如圖2所示。
第 二,在root bridge確定后,接下來就到端口的角色問題了,端口的角色有三種,分別是根端口(root port,簡寫為 RP)、指定端口(designated port ,簡 稱DP)以及非指定端口(nondesignated port,簡 稱NDP),所有的端口都必須是這三種角色之一,判斷端口角色使用以下法則:
(1) 根 端 口RP:非root bridge交換機(jī)到root bridge交換機(jī)的最小路徑成本的端口,如果2個端口成本一樣,則對比各自端口的上一個交換機(jī)的BID或者端口ID(port-id)。
這里提到的路徑成本與線路的帶寬有關(guān),每種帶寬對應(yīng)著一個成本,這里只舉出常用的幾個帶寬成本供計(jì)算:帶寬10M,路徑成本100。帶寬100M,路徑成本19。帶寬1GB,路徑成本4。
(2) 指定端口 DP:以路徑成本與BID來決定,每一個網(wǎng)段只會有一個DP,root bridge的端口都是DP。
(3) 非指定端口NDP:無法成為RP或者DP的端口會成為NDP,NDP會被邏輯上封鎖起來,從而避免網(wǎng)絡(luò)產(chǎn)生循環(huán)。
有了這些判斷端口角色的方法,我們就可以來試一下判斷架構(gòu)圖中每個端口的角色了。
第一,首先判斷RP,由于網(wǎng)絡(luò)中使用的都是100M的帶寬線路,所以每條路徑的成本都一樣,都是19,switch1到root bridge的端口有兩個,分別是fa0/1和fa0/2,fa0/1到root bridge的成本 是 19,而 fa0/2到 root bridge的成本是38,根據(jù)原則,fa0/1成為RP,同理,switch 3的fa0/1也會成為RP。
第二,根據(jù)同一個網(wǎng)絡(luò)只會有一個DP以及root bridge的端口一定是DP的原則,root bridge (switch 2)的fa0/1和fa0/2都是DP,剩下的就是switch1的fa0/2和switch3的fa0/2還沒有角色。
圖3 網(wǎng)絡(luò)拓?fù)鋱D
一般我們可以先假設(shè)2個端口都是DP,而根據(jù)一個網(wǎng)絡(luò)只有一個DP的原則,兩個端口只會有1個是DP。
判斷原則是交換機(jī)到root bridge的成本,成本小的成為DP,如果成本一樣,就比較2個交換機(jī)的BID,小的勝出成為DP,由于switch1和switch3去root bridge的最小成本一樣都是19,只能比較各自的BID,從BID可以判斷出switch1比較小。
所 以switch1上 的fa0/2端口會成為DP,由于switch3的fa0/2端口既不是RP,也不是DP,就會成為NDP被邏輯上封鎖起來,所以為了避免循環(huán)問題,交換機(jī)之間STP溝通的結(jié)果就是把switch3的fa0/2封鎖起來,有了這些信息,再更新一下網(wǎng)絡(luò)架構(gòu)圖,如圖3所示。
了解了STP的運(yùn)作機(jī)制之后,就要對STP的部分問題作一些講解以及如何解決這些問題。
(1)S T P的r o o t bridge會承受網(wǎng)絡(luò)當(dāng)中大量的流量,所以一般來說,會選擇性能較佳的交換機(jī)作為root bridge,但在預(yù)設(shè)的情況下,由于priority一樣,所以會選擇mac-address最小的來當(dāng)root bridge。
一般來說,mac-address比較小的交換機(jī)由于生產(chǎn)日期較遠(yuǎn),性能一般會比macaddress大的差,但根據(jù)STP的選擇root bridge機(jī)制,恰恰是把mac-address小的選作root bridge,有點(diǎn)不符合當(dāng)作root bridge的要求,因此,我們需要手動選擇性能較好的交換機(jī)當(dāng)作root bridge。
我們已經(jīng)知道,選root bridge要 從BID入 手,而BID又 分為priority和mac-address,mac-address網(wǎng)管人員無法改變,所以要手動選擇root bridge只能從priority入手,我們只要把希望充當(dāng)root bridge的交換機(jī)的priority設(shè)成最小的就可以了。
假設(shè)我們希望switch1成 為root bridge,那么我們只要在switch1輸入如表2指令就可以了。
由于交換機(jī)的BID數(shù)據(jù)有變動,所以交換機(jī)之間又會通過BPDU封包來重新協(xié)商誰是root bridge以及重新決定端口的角色。協(xié)商好后的網(wǎng)絡(luò)架構(gòu)應(yīng)該改變?nèi)鐖D4所示。
由 于 s w i t c h 1的priority改動了,所以會重新選擇root bridge,端口的角色也會重新協(xié)商,現(xiàn)在被邏輯上封鎖掉的端口是switch3上 面 fa0/1(作 為NDP)。
除了手動調(diào)整priority的數(shù)值可以改變root bridge以外,也可以通過表3的指令指定switch1為root bridge。
圖4 網(wǎng)絡(luò)拓?fù)鋱D
(2) STP的存在是擔(dān)心網(wǎng)絡(luò)存在循環(huán)而造成廣播風(fēng)暴等問題,所以交換機(jī)上的每個端口預(yù)設(shè)都會啟動STP的。
這也意味著,當(dāng)交換機(jī)上任何一個端口由down變up或者由up變down都可能會造成網(wǎng)絡(luò)的變化。
所以任何一個端口有異動即使接上的是計(jì)算機(jī)等不會影響STP架構(gòu)的終端設(shè)備都需要重新計(jì)算rootbridge以及端口角色,計(jì)算時間大概是30秒鐘。
表2 指令列表
表3 指令列表
而這30秒鐘的等待實(shí)在沒有必要,所以我們可以在交換機(jī)的端口上設(shè)定portfast功能,使得該端口即使有變動也不需要計(jì)算STP,直接跳過STP計(jì)算,具體的設(shè)定如下:指令Switch1(config-if)#spanning-tree portfast,說明在界面模式下作設(shè)定。
設(shè)定好之后,這個端口的狀態(tài)即使有變動,也不會計(jì)算STP,省去了大約30秒的等待時間,提高網(wǎng)絡(luò)收斂的速度和效率。
STP在網(wǎng)絡(luò)架構(gòu)和規(guī)劃中有重要意義,了解STP的整體運(yùn)作機(jī)制和原理有助于網(wǎng)管人員優(yōu)化網(wǎng)絡(luò)架構(gòu),建立高效的網(wǎng)絡(luò)辦公環(huán)境。