第十章 STP
10.1 STP?
·對(duì)于商用網(wǎng)絡(luò),冗余性是必須考慮的,但是在二層鏈路的冗余鏈路和冗余設(shè)備又會(huì)產(chǎn)生環(huán)路。STP(Spanning Tree Protocol)生成樹協(xié)議主要用來防止網(wǎng)橋網(wǎng)絡(luò)中因?yàn)槿哂噫溌返拇嬖诙a(chǎn)生的環(huán)路。當(dāng)網(wǎng)絡(luò)部署生成樹之后,交換機(jī)之間便會(huì)開始相互交互相關(guān)協(xié)議報(bào)文,并在網(wǎng)絡(luò)中進(jìn)行一系列的計(jì)算,經(jīng)計(jì)算產(chǎn)生一個(gè)無環(huán)的網(wǎng)絡(luò)拓?fù)洹.?dāng)環(huán)路產(chǎn)生時(shí),生成樹會(huì)將網(wǎng)絡(luò)中的一個(gè)或多個(gè)接口進(jìn)行阻塞(Block),從而打破二層環(huán)路。?
10.1.1 STP基本概念?
1、橋ID(Bridge Identification)?
橋ID由? 橋優(yōu)先級(jí)? 和? 橋MAC地址? 共同構(gòu)成,是根橋選舉的依據(jù)。橋ID一共8byte,其中橋優(yōu)先級(jí)16bit,橋MAC地址48bit。
例如-橋ID:??56342,0025-9ef8-fedd?
2、根橋(Root?Bridge)?
STP的主要作用之一就是在整個(gè)交換網(wǎng)絡(luò)中計(jì)算出一個(gè)一顆無環(huán)的STP樹,整個(gè)STP樹都是在根橋的基礎(chǔ)上形成的。當(dāng)STP開始工作后,第一件事就是選舉根橋,選舉根橋的規(guī)則如下:?
-
優(yōu)先級(jí)最小者為根,MAC地址最小者為根?
-
首先比較優(yōu)先級(jí),如果優(yōu)先級(jí)相等則比較MAC地址。?
-
優(yōu)先級(jí)默認(rèn)為32768,可通過命令?stp?priority?進(jìn)行修改,取值范圍(0-61440),并且必須為4096的倍數(shù)(0,4096,8192)
3、開銷(cost)與根路徑開銷(Root Path Cost, RPC)?
每一個(gè)激活了STP的接口都會(huì)維護(hù)一個(gè)cost值,用于計(jì)算RPC,也就是交換機(jī)到達(dá)根橋的“成本”。?
4、接口ID(Port Identification)?
接口ID用于在STP協(xié)議中標(biāo)識(shí)每個(gè)交換機(jī)的接口,主要用于特定情況下選舉指定接口。接口ID長度16bit,由兩部分組成,其中高4bit為接口優(yōu)先級(jí),低12bit為接口編號(hào)。接口優(yōu)先級(jí)缺省為128,可在接口視圖下通過stp?port priority?命令修改。?
10.1.2 STP的基本操作過程?
STP通過4個(gè)步驟來保證網(wǎng)絡(luò)中不存在漏洞。?
1、在交換網(wǎng)絡(luò)中選舉一個(gè)根橋?
根網(wǎng)橋具有可搶占性,如果網(wǎng)絡(luò)中新增了一個(gè)交換機(jī)且優(yōu)先級(jí)高于根網(wǎng)橋。STP將會(huì)重新收斂、重新計(jì)算網(wǎng)絡(luò)拓?fù)?#xff0c;這可能會(huì)引發(fā)網(wǎng)絡(luò)震蕩。?
STP協(xié)議所使用的協(xié)議報(bào)文是BPDU(Bridge Protocol Data Unit,網(wǎng)橋協(xié)議數(shù)據(jù)單元),依靠BPDU,STP可以進(jìn)行無環(huán)拓?fù)涞挠?jì)算。?
2、在每個(gè)非根網(wǎng)橋上選一個(gè)根接口(Root?Port,RP)?
收到最優(yōu)BPDU的那個(gè)接口會(huì)成為最優(yōu)接口,最優(yōu)接口就是非根網(wǎng)橋的所有接口中收到最優(yōu)BPDU的接口,也可以理解為朝向根網(wǎng)橋的接口。非根網(wǎng)橋的根接口用來接收根網(wǎng)橋發(fā)出的BPDU,并沿著STP樹向下游轉(zhuǎn)發(fā)。?
3、選舉指定接口(Designated Port,DP)?
STP會(huì)在每個(gè)網(wǎng)段中選舉一個(gè)指定接口,這個(gè)指定接口是這個(gè)網(wǎng)段中到達(dá)根橋的最優(yōu)接口。?
交換機(jī)接口中收到最優(yōu)BPDU的將會(huì)成為根接口,交換機(jī)會(huì)根據(jù)最優(yōu)BPDU給每個(gè)非根接口計(jì)算一個(gè)BPDU,隨后接口會(huì)使用計(jì)算好的BPDU與接口上維護(hù)的BPDU(接口收到的來自其他接口的BPDU)進(jìn)行比較,如果前者更優(yōu),那么該接口會(huì)成為指定接口。?
4、阻塞非指定接口,打破二層環(huán)路?
非指定接口指的是既不是根接口也不是指定接口的接口。?
非指定接口最終都會(huì)被阻塞,但是會(huì)持續(xù)偵聽BPDU,以便感知網(wǎng)絡(luò)拓?fù)涞淖兓?
10.1.3 STP報(bào)文?
10.1.4 STP的時(shí)間參數(shù)?
STP定義了三個(gè)重要的時(shí)間參數(shù)。?
1、Hello Time(Hello時(shí)間)?
Hello時(shí)間是根網(wǎng)橋向非根網(wǎng)橋發(fā)送配置信息的間隔時(shí)間,缺省為2s。Hello時(shí)間的必須在根網(wǎng)橋上面修改,修改完成后非根網(wǎng)橋會(huì)與根網(wǎng)橋?qū)R該時(shí)間值。?
2、Forward?Delay(轉(zhuǎn)發(fā)延時(shí))?
STP的5種接口狀態(tài):?
1)阻塞(blocking):該端口是非指定端口,不參與幀轉(zhuǎn)發(fā)。此類端口接收 BPDU?幀來確定根橋交換機(jī)的位置和根 ID,以及最終的活動(dòng) STP 拓?fù)渲忻總€(gè)交換機(jī)端口扮演的端口角色。?
2)偵聽(listening) :STP 根據(jù)交換機(jī)迄今收到的 BPDU 幀,確定該端口可參與幀轉(zhuǎn)發(fā)。此時(shí),該交換機(jī)端口不僅會(huì)接收 BPDU 幀,它還會(huì)發(fā)送自己的 BPDU 幀,通知鄰接交換機(jī)此交換機(jī)端口正準(zhǔn)備參與活動(dòng)拓?fù)洹?
3)學(xué)習(xí)(learning):端口準(zhǔn)備參與幀轉(zhuǎn)發(fā),并開始填充 MAC 地址表。?
4)轉(zhuǎn)發(fā)(forwarding) :該端口是活動(dòng)拓?fù)涞囊徊糠?#xff0c;它會(huì)轉(zhuǎn)發(fā)幀,也會(huì)發(fā)送和接收 BPDU 幀。?
5)禁用(disabled) :不參與生成樹,不轉(zhuǎn)發(fā)數(shù)據(jù)幀。當(dāng)管理性關(guān)閉交換機(jī)端口時(shí),端口也會(huì)進(jìn)入禁用狀態(tài)。?
為了避免生成樹收斂過程中產(chǎn)生臨時(shí)的環(huán)路或短暫的數(shù)據(jù)幀洪泛現(xiàn)象,在接口從阻塞狀態(tài)轉(zhuǎn)為轉(zhuǎn)發(fā)狀態(tài)時(shí),必須經(jīng)歷偵聽和學(xué)習(xí)狀態(tài),這兩個(gè)狀態(tài)各持續(xù)15s。也就是說接口從阻塞狀態(tài)到轉(zhuǎn)發(fā)狀態(tài)至少要經(jīng)歷30s的時(shí)間?
3、Max?Age(最大生存時(shí)間)?
也被稱為BPDU的老化時(shí)間,缺省為20s。以非根網(wǎng)橋的根接口為例,該接口上保存著來自上游的最優(yōu)BPDU,這個(gè)BPDU關(guān)聯(lián)著一個(gè)最大生存時(shí)間,如果在最大生存時(shí)間之內(nèi)沒有收到BPDU,那么該BPDU將會(huì)被老化,該設(shè)備也會(huì)重新選舉根接口。?
受限于幾個(gè)時(shí)間參數(shù)的設(shè)計(jì),一個(gè)STP接口從阻塞狀態(tài)進(jìn)入轉(zhuǎn)發(fā)狀態(tài)可能需要花費(fèi)30s-50s左右的時(shí)間,這時(shí)網(wǎng)絡(luò)中的業(yè)務(wù)可能就會(huì)收到影響。?
10.1.5 BPDU的比較原則?
STP按照如下順序選擇最優(yōu)BPDU?
-
最小的根網(wǎng)橋ID?
-
最小的RPC?
-
最小的網(wǎng)橋ID?
-
最小的接口ID?
10.1.6 BPDU的交互與拓?fù)溆?jì)算?
初始情況下,所有的交換機(jī)都認(rèn)為自己是根橋,并開始在激活了STP協(xié)議的接口發(fā)送BPDU。此時(shí)的BPDU中根橋ID是自己的ID,RPC(到達(dá)根橋的開銷)為0,網(wǎng)橋ID為自己的ID,接口ID為本地接口的ID。?
當(dāng)接口收到其他交換機(jī)的BPDU時(shí),會(huì)進(jìn)行BPDU優(yōu)先級(jí)比較,如果本地的BPDU更優(yōu)則繼續(xù)認(rèn)為自己是根橋并繼續(xù)周期性地向外發(fā)送BPDU,反之則認(rèn)為最優(yōu)BPDU的發(fā)送方為根橋,不再周期性的發(fā)送BPDU。?
根網(wǎng)橋的所有接口都是指定接口,所以當(dāng)認(rèn)定自己不是根網(wǎng)橋后,非根網(wǎng)橋就要開始選舉自己的根接口了。根接口是通過比較收到的BPDU而產(chǎn)生的,交換機(jī)會(huì)依次比較每個(gè)接口收到的BPDU中攜帶的根橋ID、RPC、網(wǎng)橋ID、接口ID。最優(yōu)者成為根接口。?
根接口選舉完成后開始選舉指定接口。這時(shí)交換機(jī)會(huì)根據(jù)根接口上面保存的BPDU為每個(gè)接口計(jì)算BPDU,用為每個(gè)接口計(jì)算的BPDU與接口上面保存的BPDU相比較。如果計(jì)算的BPDU勝出,則這個(gè)接口為指定接口,否則為非指定接口。?
10.2 RSTP?
IEEE 802.1D中定義的STP是比較老舊的協(xié)議,現(xiàn)在因?yàn)槭諗柯⒍丝跔顟B(tài)定義繁冗、對(duì)拓?fù)涞母兄蕾囉诙〞r(shí)器等諸多短板已經(jīng)很少被使用。?
IEEE 802.1w中定義的RSTP(快速生成樹協(xié)議)可以視為STP的改進(jìn)版本,它的收斂速度更快,而且能兼容STP。?
10.2.1 RSTP接口角色?
RSTP在STP的基礎(chǔ)上增加了兩種接口角色,所以RSTP共有四種接口角色:替代接口(Alternate)、備份接口(Backup)、根接口、指定接口。?
1、替代接口?
替代接口是根接口的備份,可以沒有,也可以有一個(gè)或多個(gè)。在根接口正常工作時(shí),替代接口被阻塞,當(dāng)根接口發(fā)生故障時(shí),最優(yōu)的替代接口將成為新的根接口,這樣就加快了網(wǎng)絡(luò)的收斂過程。?
2、備份接口?
備份接口就是交換機(jī)上由于收到了自己發(fā)送的BPDU而被阻塞的接口。如果一臺(tái)交換機(jī)有多個(gè)接口接入了同一個(gè)網(wǎng)段,那么這幾個(gè)接口中會(huì)有一個(gè)接口被選舉為指定接口,其他的接口都會(huì)成為備份接口,進(jìn)入丟棄狀態(tài)。?
10.2.2 RSTP接口狀態(tài)?
| STP的接口狀態(tài)? | RSTP的接口狀態(tài)? |
| 禁用(Disabled)? | 丟棄(Discarding)? |
| 阻塞(Blocking)? | |
| 偵聽(Listening)? | |
| 學(xué)習(xí)(Learning)? | 學(xué)習(xí)(Learning)? |
| 轉(zhuǎn)發(fā)(Forwarding)? | 轉(zhuǎn)發(fā)(Forwarding)? |
10.2.3 BPDU?
10.2.4?邊緣接口?
?
邊緣接口常用于交換機(jī)連接終端的接口,在接口被配置為邊緣接口后,不參與生成樹計(jì)算,會(huì)立即切換到轉(zhuǎn)發(fā)狀態(tài)并開始收發(fā)業(yè)務(wù)流量。?
-
將接口配置為邊緣接口不會(huì)觸發(fā)RSTP拓?fù)渥兏?
-
如果邊緣接口收到了BPDU,此接口會(huì)立即變?yōu)橐粋€(gè)生成樹接口,觸發(fā)RSTP拓?fù)渥兏?
-
邊緣接口依然會(huì)周期性的發(fā)送BPDU,可通過stp?bpdu-filter enable命令過濾,配置完成后此接口也不會(huì)對(duì)收到的BPDU做出反應(yīng)。?
10.2.5?P/A機(jī)制?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
假設(shè)此時(shí)在SW2與PC1之間新增一個(gè)SW1,且SW1的優(yōu)先級(jí)最高,連接成功后SW1的G0/0/1接口被選舉為指定接口,SW2的G0/0/1接口被選舉為指定接口,但此時(shí)接口狀態(tài)從丟棄變?yōu)檗D(zhuǎn)發(fā)要經(jīng)過學(xué)習(xí)和偵聽,在這個(gè)時(shí)間段內(nèi)PC1和PC2之間是無法通信的。而RSTP通過P/A機(jī)制就可以在數(shù)秒之內(nèi)完成接口狀態(tài)從丟棄到轉(zhuǎn)發(fā)狀態(tài)的轉(zhuǎn)化。?
P/A機(jī)制的實(shí)現(xiàn)過程:?
1、SW1接入后,SW1和SW2都認(rèn)為自己是根橋,并在各自的接口上面發(fā)送BPDU,隨后SW1被選舉為根橋,SW2也開是接口選舉,最終G0/0/1被選舉為根接口。?
2、此時(shí)P/A機(jī)制開始運(yùn)轉(zhuǎn),由于SW1的G0/0/1為指定接口,所以向SW2發(fā)送Proposal置位的BPDU。?
3、SW2收到后,立即啟動(dòng)一個(gè)同步過程,為保證本地不存在環(huán)路,SW2將自己的非邊緣接口全部阻塞,并將G0/0/1接口切換到轉(zhuǎn)發(fā)狀態(tài),隨后向SW1發(fā)送Agreement置位的BPDU。?
4、SW1收到后,立即將自己的G0/0/1接口切換到轉(zhuǎn)發(fā)狀態(tài),此時(shí)PC1和PC2之間就可以通信了。?
5、此時(shí)SW2的G0/0/2接口處于丟棄狀態(tài),此時(shí)SW2會(huì)向下游交換機(jī)SW3發(fā)起P/A過程,以此類推。?
10.2.6?保護(hù)功能?
1、BPDU保護(hù)(BPDU Protection)?
邊緣接口在收到BPDU后,會(huì)立即變成一個(gè)RSTP接口。一般情況下,邊緣接口連接的都是終端,不會(huì)收到BPDU,但是如果誤將邊緣接口接入其他交換機(jī),會(huì)增加產(chǎn)生二層環(huán)路的風(fēng)險(xiǎn),另外如果攻擊者向邊緣接口發(fā)送BPDU,就會(huì)給網(wǎng)絡(luò)帶來不良影響。?
激活BPDU保護(hù)后,當(dāng)邊緣接口收到BPDU后,會(huì)立即關(guān)閉這個(gè)接口(置為?Error-Down),并發(fā)出告警。?
配置命令,在系統(tǒng)視圖下,“stp?bpdu-protection”,命令生效后所有的邊緣接口均會(huì)激活BPDU保護(hù)功能。邊緣接口因?yàn)槭盏搅薆PDU而被關(guān)閉后,可通過“shutdown”和“undo?shutdown”或“restart”命令重置接口,或通過命令設(shè)置自動(dòng)恢復(fù)時(shí)間,倒計(jì)時(shí)結(jié)束后,接口會(huì)自動(dòng)恢復(fù),命令:“error-down auto-recovery cause?bpdu-protection interval 30”,時(shí)間范圍30-86400s。?
2、根保護(hù)(Root protection)?
在RSTP中,根橋一般是位置最優(yōu)、性能最優(yōu)的,根橋的優(yōu)先級(jí)往往也會(huì)被手動(dòng)設(shè)置為0。但是根橋的角色是可搶占的,如果此時(shí)網(wǎng)絡(luò)中接入了一個(gè)交換機(jī),其優(yōu)先級(jí)也為0,且MAC地址比當(dāng)前的根橋更小,這時(shí)根橋角色就會(huì)被搶占,RSTP會(huì)重新收斂。這時(shí)的數(shù)據(jù)業(yè)務(wù)就會(huì)受到影響。?
在相關(guān)接口上激活根保護(hù)功能后,當(dāng)接口收到更優(yōu)BPDU時(shí),會(huì)忽略這些BPDU,并將接口切換到丟棄狀態(tài),如果接口不再收到這些BPDU,一般在兩倍的轉(zhuǎn)發(fā)延遲時(shí)間后,接口會(huì)自動(dòng)恢復(fù)到轉(zhuǎn)發(fā)狀態(tài)。?
配置命令,在接口視圖下,“stp?root-protection”?
3、環(huán)路保護(hù)(Loop Protection)?
處于丟棄狀態(tài)的替代接口仍然會(huì)持續(xù)偵聽BPDU,如果這個(gè)接口所連接的鏈路出現(xiàn)故障,這個(gè)替代接口長時(shí)間沒有接收到BPDU,就會(huì)導(dǎo)致交換機(jī)進(jìn)行RSTP的重新計(jì)算,此時(shí)這個(gè)接口的角色和狀態(tài)會(huì)發(fā)生變化,有可能產(chǎn)生環(huán)路。?
激活環(huán)路保護(hù)功能后:?
(1)在根接口激活環(huán)路保護(hù)后,如果長時(shí)間沒有收到BPDU,交換機(jī)會(huì)重新選舉根接口,并將這個(gè)接口變?yōu)橹付ǘ丝诓⑶袚Q到丟棄狀態(tài)。?
(2)在替代接口激活環(huán)路保護(hù)后,如果長時(shí)間沒有收到BPDU,交換機(jī)會(huì)將這個(gè)接口角色切換為指定接口,并將接口狀態(tài)保持為丟棄狀態(tài)。?
環(huán)路保護(hù)配置,在接口視圖下輸入命令:“stp?loop-protection”。?
4、拓?fù)渥兏Wo(hù)?
在網(wǎng)絡(luò)拓?fù)浒l(fā)生改變時(shí),下游的交換機(jī)會(huì)通過TC?BPDU告知其他交換機(jī)。TC BPDU會(huì)觸發(fā)網(wǎng)絡(luò)中交換機(jī)執(zhí)行MAC地址表刪除操作。若攻擊者向網(wǎng)絡(luò)中發(fā)送大量的TC BPDU也會(huì)使交換機(jī)的性能收到很大的損耗。?
激活拓?fù)渥兏?#xff0c;交換機(jī)只會(huì)在規(guī)定時(shí)間內(nèi)處理規(guī)定次數(shù)的TC BPDU,如果收到的TC BPDU超出上限,則會(huì)按照最大次數(shù)處理,超出的將會(huì)等待一段時(shí)間后再處理。?
配置命令,在系統(tǒng)視圖下:“stp?tc-protection”,單位時(shí)間缺省為2秒(Hello Time),?可通過“stp?tc-protection interval”命令修改。單位時(shí)間內(nèi)處理次數(shù)缺省為1次,可通過“stp?tc-protection?threshold”命令修改。?
總結(jié)
- 上一篇: STP详细笔记
- 下一篇: 将精益思想应用于项目集管理的相关思考