STP生成樹(shù)協(xié)議工作原理
在一個(gè)復(fù)雜的網(wǎng)絡(luò)中,難免會(huì)出現(xiàn)環(huán)路。并且,由于冗余備份需要,網(wǎng)絡(luò)設(shè)計(jì)者都傾向于在設(shè)備之間部署多條物理鏈路,其中一條作主鏈路,其他鏈路作為備份。這樣,偶然或必然中都會(huì)導(dǎo)致環(huán)路的產(chǎn)生。環(huán)路會(huì)產(chǎn)生廣播風(fēng)暴,最終導(dǎo)致整個(gè)網(wǎng)絡(luò)資源被耗盡,網(wǎng)絡(luò)癱瘓不可用。環(huán)路還會(huì)引起MAC地址表震蕩導(dǎo)致MAC地址表項(xiàng)被破壞。為了破除環(huán)路,采用數(shù)據(jù)鏈路層協(xié)議STP。下面一起來(lái)看看STP是如何破壞的。
STP的工作原理
STP實(shí)質(zhì)就是從邏輯上把其中一個(gè)端阻塞掉,從而把環(huán)路破除。那么它是通過(guò)什么機(jī)制選取那個(gè)端口是阻塞狀態(tài)呢?生成樹(shù)算法可以歸納以下三個(gè)步驟:
1. 選擇根網(wǎng)橋
每個(gè)交換機(jī)都有唯一的網(wǎng)橋ID(BID),最小BID值的交換機(jī)為根交換機(jī)。因?yàn)锽ID(8字節(jié))= 橋優(yōu)先級(jí)(2字節(jié))+ 橋MAC(6字節(jié)),所以,通過(guò)調(diào)整優(yōu)先級(jí)讓某臺(tái)交換機(jī)為根交換機(jī)。
2. 選擇根端口
選擇根網(wǎng)橋后,其他的非根網(wǎng)橋選擇一個(gè)距離根網(wǎng)橋最近的端口為根端口。
選擇根端口依據(jù)如下:
- 交換機(jī)中到根網(wǎng)橋總路徑成本最低的端口
- 如果到達(dá)根網(wǎng)橋的開(kāi)銷相同,在比較上級(jí)發(fā)送者的橋ID,選擇發(fā)送者網(wǎng)橋ID最小對(duì)應(yīng)的端口。
- 如果發(fā)送者網(wǎng)橋ID也相同,再比較發(fā)送者端口ID。端口ID由端口優(yōu)先級(jí)(8位)和端口編號(hào)(8位)組成。若端口優(yōu)先級(jí)相同,選擇端口號(hào)最小的。
鏈路速度與路徑成本
3. 選擇指定端口
每個(gè)網(wǎng)段選擇一個(gè)指定端口,根網(wǎng)橋的所有端口均為指定端口。
選擇非根網(wǎng)橋指定端口的依據(jù)如下:
- 到根網(wǎng)橋的路徑成本最低
- 端口所在的網(wǎng)橋的ID最小
- 端口值較小
經(jīng)過(guò)以上三個(gè)步驟的選擇,把根橋、根端口和指定端口都選擇出來(lái)了,剩下的就是非指定端口,也是將被STP協(xié)議在邏輯上阻塞的端口。
以下通過(guò)一個(gè)簡(jiǎn)單的案例來(lái)深入了解一下STP的工作過(guò)程。
從上圖拓?fù)涫怯扇_(tái)華為的S5700組成,優(yōu)先級(jí)保持默認(rèn)的32768,帶寬也是一樣的1000Mbps。由于華為的交換機(jī)默認(rèn)開(kāi)啟STP。
根據(jù)上文的知識(shí)點(diǎn),很快確定SW1是根交換機(jī),由于優(yōu)先級(jí)一樣,比較MAC地址,SW1是最小的,所以稱為根端口。在交換機(jī)上通過(guò)執(zhí)行如下命令驗(yàn)證一下
- [SW3]display stp
根端口是哪些呢?
交換機(jī)SW2到交換機(jī)SW1的最近端口被選為根端口。從上圖拓?fù)淇煽闯?,在帶寬相同情況下,SW2的GE0/0/1端口到SW1最近,所以,為根端口,同樣的SW3的GE0/0/2端口為根端口??梢酝ㄟ^(guò)以下命令,在交換機(jī)上驗(yàn)證
- display stp brief
指定端口是哪些呢?
SW2和SW3的GE0/0/3兩個(gè)端口到根端口的開(kāi)銷一樣,選擇BID較小的SW3交換機(jī)端口為指定端口,所以SW3的GE0/0/3為指定端口,而SW2的GE0/0/3為阻塞端口。
有了以上的知識(shí)點(diǎn),可以通過(guò)控制一些可變的值,來(lái)達(dá)到我們先要的效果,例如,先讓SW3成為根交換機(jī),可以通過(guò)降低SW3的優(yōu)先級(jí)(一定是4096的倍數(shù))。執(zhí)行如下命令
- [SW3]stp priority 4096
還可以通過(guò)修改端口的優(yōu)先級(jí)、或者鏈路開(kāi)銷值等參數(shù),達(dá)到我們想要的效果。具體命令如下:
- #修改端口的開(kāi)銷值
- [SW2-GigabitEthernet0/0/1]stp cost 1000
- #通過(guò)修改端口優(yōu)先級(jí)
- [SW2-GigabitEthernet0/0/1]stp port priority 32