html5 公眾號(hào) 網(wǎng)站開發(fā)百度seo優(yōu)化價(jià)格
- 企業(yè)內(nèi)部網(wǎng)絡(luò)怎么防止網(wǎng)絡(luò)出現(xiàn)環(huán)路?學(xué)會(huì)STP生成樹技術(shù)就可以解決啦。
STP簡介
在二層交換網(wǎng)絡(luò)中,一旦存在環(huán)路就會(huì)造成報(bào)文在環(huán)路內(nèi)不斷循環(huán)和增生,產(chǎn)生廣播風(fēng)暴,從而占用所有的有效帶寬,使網(wǎng)絡(luò)變得無法正常通信。
在這種環(huán)境下生成樹協(xié)議應(yīng)運(yùn)而生,生成樹協(xié)議是一種二層管理協(xié)議,它通過有選擇性地阻塞網(wǎng)絡(luò)冗余鏈路來達(dá)到消除網(wǎng)絡(luò)二層環(huán)路的目的,同時(shí)具備鏈路備份功能。
生成樹協(xié)議和其他協(xié)議一樣,是隨著網(wǎng)絡(luò)的不斷發(fā)展而不斷更新?lián)Q代的。最初被廣泛應(yīng)用的是IEEE802.1D-1998 STP(Spanning Tree Protocol,生成樹協(xié)議),隨后以它為基礎(chǔ)產(chǎn)生了IEEE 802.1w RSTP(Rapid Spanning Tree Protocol,快速生成樹協(xié)議)和IEEE 802.1s MSTP(Multiple Spanning Tree Protocol,多生成樹協(xié)議)。
三種生成樹協(xié)議特點(diǎn)比較:
生成樹協(xié)議 | 特點(diǎn) | 應(yīng)用場景 |
STP |
| 無需區(qū)分用戶或業(yè)務(wù)流量,所有VLAN共享一棵生成樹。 |
RSTP |
| |
MSTP |
| 需要區(qū)分用戶或業(yè)務(wù)流量,并實(shí)現(xiàn)負(fù)載分擔(dān)。不同的VLAN通過不同的生成樹轉(zhuǎn)發(fā)流量,每棵生成樹之間相互獨(dú)立。 |
STP實(shí)現(xiàn)說明
華為實(shí)現(xiàn)說明
- STP在交換機(jī)所有版本,所有形態(tài)都支持。
- 華為交換機(jī)默認(rèn)STP模式是MSTP。需要運(yùn)行STP或RSTP模式時(shí),必須要手動(dòng)配置。
- 華為交換機(jī)在STP模式下,使用的端口角色和RSTP是一樣的,也就是說支持下面5種端口角色:指定端口、根端口、Alternate端口、Backup端口和邊緣端口。
- 華為交換機(jī)在STP模式下,支持下面4種保護(hù)功能:BPDU保護(hù)、Root保護(hù)、環(huán)路保護(hù)和防TC-BPDU攻擊保護(hù)。
- 版本差異說明:
- 從V100R006版本開始,華為X7交換機(jī)全局默認(rèn)使能STP功能。
- V200R001版本及之后版本,開始支持邊緣端口屬性自動(dòng)探測功能。即如果端口從未收到過BPDU報(bào)文,則邊緣端口屬性自動(dòng)生效(端口下不會(huì)自動(dòng)生成stp edged-port enable配置)。
- V200R001版本及之后版本,如果端口已經(jīng)配置stp edged-port enable,可以再配置根保護(hù)和環(huán)路保護(hù),而其他版本會(huì)提示Error。
其他廠商實(shí)現(xiàn)
- H3C交換機(jī)STP相關(guān)命令配置與S系列交換機(jī)基本沒有差異。
- H3C交換機(jī)默認(rèn)采用legacy標(biāo)準(zhǔn)來計(jì)算路徑開銷,而S系列交換機(jī)默認(rèn)為dot1t。在與S系列交換機(jī)對(duì)接時(shí),建議配置相同的計(jì)算標(biāo)準(zhǔn)。
- 某些H3C老形態(tài)設(shè)備,全局不使能STP或全局使能端口不使能STP時(shí),端口收到BPDU報(bào)文后,可以當(dāng)做普通組播數(shù)據(jù)報(bào)文在VLAN內(nèi)轉(zhuǎn)發(fā)。S系列交換機(jī)端口默認(rèn)會(huì)丟棄。
Cisco交換機(jī)所支持的生成樹協(xié)議類型分別有:PVST(Per VLAN Spanning Tree)、PVST+(Per VLAN Spanning Tree Plus)、Rapid-PVST+(Rapid Per VLAN Spanning Tree Plus)和MST(Multiple Spanning Tree)。這幾種生成樹協(xié)議的某些BPDU報(bào)文采用其私有的報(bào)文格式,與IEEE標(biāo)準(zhǔn)的BPDU報(bào)文格式不一樣。
- 當(dāng)Cisco交換機(jī)運(yùn)行私有的PVST+或Rapid-PVST+生成樹協(xié)議時(shí),與S系列交換機(jī)能否互通,取決于Cisco側(cè)的端口鏈路類型:
- 如果端口鏈路類型為trunk且退出VLAN 1,與S系列交換機(jī)無法實(shí)現(xiàn)互通。Cisco側(cè)端口在非VLAN 1中發(fā)送其私有的BPDU報(bào)文,S系列交換機(jī)默認(rèn)不會(huì)處理該報(bào)文,當(dāng)做普通組播數(shù)據(jù)報(bào)文進(jìn)行轉(zhuǎn)發(fā),可以通過配置l2protocol-tunnel進(jìn)行透傳。S系列盒式交換機(jī)通過l2protocol-tunnel透傳PVST+報(bào)文時(shí),全局需要配置bpdu mac-address 0100-0ccc-cccd。
- 如果端口鏈路類型為trunk而且加入VLAN 1,只可以在VLAN 1中與S系列交換機(jī)互通。
- 如果端口鏈路類型為access,可以與S系列交換機(jī)互通。
- 當(dāng)Cisco交換機(jī)運(yùn)行MST協(xié)議時(shí),可以理解為標(biāo)準(zhǔn)的MSTP模式,可以與S系列交換機(jī)互通。但是需要注意:在使用MSTP協(xié)議的S系列交換機(jī)與使用MST的Cisco交換機(jī)采用相同的域配置(域名、修訂級(jí)別、VLAN與實(shí)例的映射關(guān)系)的情況下,要想實(shí)現(xiàn)域內(nèi)互通,需要在S系列交換機(jī)端口配置摘要偵聽功能stp config-digest-snoop。這是兩者由于采用不同的密鑰來生成MSTP的摘要信息,因此端口發(fā)送的BPDU報(bào)文中的摘要信息不同。由于摘要信息不同,則屬于不同的MST域,會(huì)進(jìn)行域間互通。
注意以下介紹的STP是狹義的STP,即IEEE 802.1D-1998 中定義的STP 協(xié)議。
STP原理
協(xié)商原則
STP協(xié)議是根據(jù)4個(gè)維度進(jìn)行選舉協(xié)商的,設(shè)備之間通過發(fā)送BPDU報(bào)文,經(jīng)過4個(gè)維度的比較,最終會(huì)阻塞綜合能力最差的端口。
選舉維度(橋ID,累計(jì)根路徑開銷,發(fā)送設(shè)備BID,發(fā)送端口PID)
維度 | 定義 | 作用 |
橋ID | BID(Bridge ID),是由16位的橋優(yōu)先級(jí)(Bridge Priority)與橋MAC地址構(gòu)成。BID橋優(yōu)先級(jí)占據(jù)高16位,其余的低48位是MAC地址。 | 確定根橋。橋ID最小的設(shè)備會(huì)被選舉為根橋。 |
累計(jì)根路徑開銷 | 某端口到根橋累計(jì)的路徑開銷就是所經(jīng)過的各個(gè)橋上的各端口的路徑開銷累加而成。 | 選舉根端口、指定端口和阻塞端口時(shí)使用。 |
發(fā)送設(shè)備BID | 發(fā)送BPDU報(bào)文的橋ID。 | 選舉根端口、指定端口和阻塞端口時(shí)使用。 |
發(fā)送端口PID | 發(fā)送BPDU報(bào)文的端口ID。 PID由兩部分構(gòu)成的,高4位是端口優(yōu)先級(jí),低12位是端口號(hào)。 | 只在存在Backup端口時(shí)使用。 |
角色和狀態(tài)
經(jīng)過4個(gè)維度的比較,最終會(huì)協(xié)商出端口的角色和狀態(tài),確定報(bào)文流量的轉(zhuǎn)發(fā)路徑。STP角色的定義,如圖所示。
- 根橋:就是橋ID最小的設(shè)備。橋ID是由16位的橋優(yōu)先級(jí)與橋MAC地址構(gòu)成。BID橋優(yōu)先級(jí)占據(jù)高16位,其余的低48位是MAC地址。華為交換機(jī)默認(rèn)橋優(yōu)先級(jí)都是32768。所以在不修改橋優(yōu)先級(jí)時(shí),MAC地址最小的設(shè)備就是根橋。
- 指定端口:就是負(fù)責(zé)轉(zhuǎn)發(fā)BPDU報(bào)文的端口。根橋上的端口都是指定端口。該端口可以正常轉(zhuǎn)發(fā)流量。
- 根端口:就是去往根橋路徑開銷最小的端口。該端口可以正常轉(zhuǎn)發(fā)流量。
- 阻塞端口:就是禁止轉(zhuǎn)發(fā)流量的端口。
從上面的官方定義,可以看出:STP協(xié)商完成后,端口要么被阻塞,要么正常轉(zhuǎn)發(fā)報(bào)文。其實(shí)在STP進(jìn)行協(xié)商的過程中,是有一些中間狀態(tài)的。
端口狀態(tài) | 目的 | 說明 |
Forwarding | 端口既轉(zhuǎn)發(fā)用戶流量也處理BPDU報(bào)文。 | 只有根端口或指定端口才能進(jìn)入Forwarding狀態(tài)。 |
Learning | 設(shè)備會(huì)根據(jù)收到的用戶流量構(gòu)建MAC地址表,但不轉(zhuǎn)發(fā)用戶流量。 | 過渡狀態(tài),增加Learning狀態(tài)防止臨時(shí)環(huán)路。 |
Listening | 確定端口角色,將選舉出根橋、根端口和指定端口。 | 過渡狀態(tài)。 |
Blocking | 端口僅僅接收并處理BPDU,不轉(zhuǎn)發(fā)用戶流量。 | 阻塞端口的最終狀態(tài)。 |
報(bào)文格式
STP協(xié)議報(bào)文是通過BPDU報(bào)文封裝的,目的MAC是組播MAC:01-80-C2-00-00-00,封裝格式是IEEE 802.3。
BPDU報(bào)文處理流程
BPDU報(bào)文的分類
-
- 配置BPDU報(bào)文:根據(jù)Flags標(biāo)記位,分為3類
??? 第一類配置BPDU報(bào)文: Flags的TCA和TC位都置為0的配置BPDU報(bào)文
??? 第二類配置BPDU報(bào)文: Flags的TCA和TC位都置為1的配置BPDU報(bào)文
??? 第三類配置BPDU報(bào)文:Flags的TCA位置為0,TC位置為1的配置BPDU報(bào)文
-
- TCN BPDU報(bào)文: BPDU Type為0x80的BPDU報(bào)文,叫做TCN BPDU報(bào)文
BPDU報(bào)文的處理流程
BPDU報(bào)文格式
- 配置BPDU報(bào)文:BPDU Type為0x00的BPDU報(bào)文,都叫做配置BPDU報(bào)文
- 第一類配置BPDU報(bào)文: Flags的TCA和TC位都置為0的配置BPDU報(bào)文
該報(bào)文用于STP狀態(tài)的協(xié)商和維持。具體報(bào)文格式如下:
- 第二類配置BPDU報(bào)文: Flags的TCA和TC位都置為1的配置BPDU報(bào)文
該報(bào)文用于通知下游設(shè)備停止發(fā)送TCN BPDU報(bào)文。具體報(bào)文格式如下:
- 第二類配置BPDU報(bào)文: Flags的TCA位置為0,TC位置為1的配置BPDU報(bào)文
該報(bào)文用于通知下游設(shè)備刪除MAC地址表項(xiàng)。具體報(bào)文格式如下:
- TCN BPDU報(bào)文:BPDU Type為0x80的BPDU報(bào)文,叫做TCN BPDU報(bào)文,用于通知上游設(shè)備網(wǎng)絡(luò)拓?fù)渥兏?。具體報(bào)文格式如下:
使用注意事項(xiàng)
- 盒式交換機(jī)需要通過“bpdu enable”使能BPDU報(bào)文上送CPU處理的功能,才能使STP報(bào)文上送CPU處理,否則STP狀態(tài)無法收斂。
V100R005及之前版本,在S2700系列設(shè)備,檢查全局是否配置bpdu enable;其他系列盒式交換機(jī),檢查物理端口、Eth-trunk接口下是否配置bpdu enable。
V100R006及后續(xù)版本,對(duì)應(yīng)形態(tài)設(shè)備全局或端口默認(rèn)使能bpdu enable。
- Eth-Trunk接口使能STP時(shí),建議修改Eth-Trunk接口的cost值使其小于物理端口的cost值,使其不易協(xié)商為備份端口。一是因?yàn)镋th-Trunk接口的開銷為單個(gè)成員接口的開銷除以成員接口數(shù)量,當(dāng)成員口狀態(tài)變化時(shí)Eth-trunk接口的cost值會(huì)變化;二是cost值越小說明鏈路質(zhì)量越高。
- 通過命令“display stp brief”查看端口狀態(tài)時(shí),只會(huì)顯示使能STP且UP的端口。
- 可以通過修改路徑開銷和發(fā)送者的BID,選擇阻塞指定的端口。
配置舉例
組網(wǎng)需求
如圖所示,當(dāng)前網(wǎng)絡(luò)中SwitchA、SwitchB、SwitchC和SwitchD通過環(huán)形組網(wǎng)備份鏈路。希望通過運(yùn)行生成樹協(xié)議阻塞端口,將環(huán)形網(wǎng)絡(luò)結(jié)構(gòu)修剪成無環(huán)路的樹形網(wǎng)絡(luò)結(jié)構(gòu)。
- 在主鏈路故障時(shí),對(duì)切換到備份鏈路的時(shí)間要求不高,要求配置簡單,所以這里使用STP模式。
- SwitchA設(shè)備的性能較高,希望作為根橋,SwithB為備份根橋。
- SwtichC和SwitchD設(shè)備連接用戶,希望阻塞SiwtchC和SwitchD之間的鏈路。
- SwitchC和SwitchD連接用戶的接口GE0/0/3不要參與STP計(jì)算。
配置思路
采用如下的思路配置STP:
- 配置模式是STP模式。
- 配置SwitchA為根橋,SwitchB為備份根橋。
- 統(tǒng)一使用默認(rèn)路徑開銷。華為交換機(jī)默認(rèn)的路徑開銷計(jì)算標(biāo)準(zhǔn)使用的是標(biāo)準(zhǔn)的dot1t。GE接口默認(rèn)路徑開銷是20000,而Ethernet接口默認(rèn)路徑開銷是200000。注意:eNSP模擬器中,STP的路徑開銷默認(rèn)是1。
- SwitchC和SwitchD的GE0/0/3端口去使能STP協(xié)議。
- SwitchA、SwitchB、SwitchC和SwitchD使能STP協(xié)議。
操作步驟
步驟1:配置模式為STP模式。
<HUAWEI> system-view [HUAWEI] sysname SwitchA [SwitchA] stp mode stp |
<HUAWEI> system-view [HUAWEI] sysname SwitchB [SwitchB] stp mode stp |
<HUAWEI> system-view [HUAWEI] sysname SwitchC [SwitchC] stp mode stp |
<HUAWEI> system-view [HUAWEI] sysname SwitchD [SwitchD] stp mode stp |
步驟2:配置SwitchA為根橋,SwitchB為備份根橋。
[SwitchA] stp root primary ??//也可以使用命令stp priority 0 配置優(yōu)先級(jí)為0,和stp root primary的作用是一樣的。 |
[SwitchB] stp root secondary ?//也可以使用命令stp priority 4096 配置優(yōu)先級(jí)為4096,和stp root secondary的作用是一樣的。 |
步驟3:去使能SwitchB和SwitchC設(shè)備GE0/0/3端口的STP功能。
[SwitchC] interface gigabitethernet0/0/3 [SwitchC-GigabitEthernet0/0/3] stp disable [SwitchC-GigabitEthernet0/0/3] quit |
[SwitchD] interface gigabitethernet 0/0/3 [SwitchD-GigabitEthernet0/0/3] stp disable [SwitchD-GigabitEthernet0/0/3] quit |
步驟4:全局使能STP功能。
華為X7系列交換機(jī)默認(rèn)是使能,該步驟可以省略。
[SwitchA] stp enable |
[SwitchB] stp enable |
[SwitchC] stp enable |
[SwitchD] stp enable |
步驟5:驗(yàn)證配置結(jié)果。
?查看STP簡要信息,通過STP簡要信息可以快速的看出端口的角色和狀態(tài)。
配置文件
SwitchA的配置文件
# sysname SwitchA # stp mode stp stp instance 0 root primary # return |
SwitchB的配置文件
# sysname SwitchB # stp mode stp stp instance 0 root secondary #? return? |
SwitchC的配置文件
# sysname SwitchC? #? stp mode stp #? interface GigabitEthernet0/0/3 ?stp disable #? return? |
SwitchD的配置文件
# sysname SwitchD #? stp mode stp #? interface GigabitEthernet0/0/3 ?stp disable #? return |