STP詳解
01
冗余鏈路中存在的問題
如圖所示LSW1和LSW2之間有兩條線路相連,它們之間任何一條鏈路出現故障另外一條線路可以馬上頂替出現故障的那條鏈路,這樣可以很好的解決單鏈路故障引起的網絡中斷,但在此之前有下面三個問題需要考慮。
-
廣播風暴
以太網交換機傳送的第二層數據幀不像路由器傳送的第三層數據包有TTL(Time To Live),如果有環路存在第二層幀不能被適當的終止,他們將在交換機之間永無止境的傳遞下去。結合交換機的工作原理,來看一下上面這張拓撲中廣播風暴是如何形成的:
1. PC1發出一個廣播幀(可能是一個ARP查詢),LSW1收到這個廣播幀,LSW1將這個廣播幀從除接收端口的其他端口轉發出去(即發往G0/0/2、G0/0/3、G0/0/4)。
2. LSW2從自己的G0/0/1和G0/0/2都會收到SW1發過來的相同的廣播幀,LSW2再將這個廣播幀從除接收端口外的所有其他接口發送出去(LSW2將從G0/0/2接收的廣播幀發往其他三個端口G0/0/1、G0/0/3、G0/0/4,從fa0/24接收到的也會發往其他三個端口G0/0/1、G0/0/3、G0/0/4)。
3. 這樣這個廣播幀又從G0/0/1以及G0/0/2傳回了LSW1,LSW1再用相同的方法傳回LSW2,除非物理線路被破壞,否則PC1-4將不停的接收到廣播幀,最終造成網絡的擁塞甚至癱瘓。
MAC地址表不穩定
廣播風暴除了會產生大量的流量外,還會造成MAC地址表的不穩定,在廣播風暴形成過程中:
1. PC1發出的廣播幀到達LSW1,LSW1將根據源MAC進行學習,LSW1將PC1的MAC和對應端口G0/0/1寫入MAC緩存表中。
2. LSW1將這個廣播幀從除接收端口之外的其他端口轉發出去,LSW2接收到兩個來自LSW1的廣播(從G0/0/1和G0/0/2),假設G0/0/2首先收到這個廣播幀,LSW2根據源MAC進行學習,將PC1的MAC和接收端口G0/0/2存入自己的MAC緩存表,但是這時候又從G0/0/1收到了這個廣播幀,LSW1將PC1的MAC和對應的G0/0/1接口存入自己的MAC緩存表。
3. LSW2分別從自己的這兩個接口再將這個廣播幀發回給LSW1,這樣PC1的MAC地址會不停的在兩台交換機的G0/0/1和G0/0/2(G0/0/3、G0/0/4)之間波動,MAC地址緩存表也不斷的被刷新,影響交換機的性能。
重復幀拷貝
冗余拓撲除了會帶來廣播風暴以及MAC地址的不穩定,還會造成重復的幀拷貝:
1. 假設PC1發送一個單播幀給PC3,這個單播幀到達LSW1,假設LSW1上還沒有PC3的MAC地址,根據交換機的原理,對未知單播幀進行泛洪轉發,即發往除接收端口外的所有其他端口(fa0/2、fa0/23、fa0/24)。
2. LSW2分從自己的G0/0/1和G0/0/2接收到這個單播幀,LSW2知道PC3連接在自己的G0/0/4接口上,所以LSW1將這兩個單播幀都轉發給PC3。
3. PC1只發送了一個單播幀,PC3卻收到了兩個單播幀,這會給某些網絡環境比如流量統計帶來不精確計算等問題。
STP介紹
基於冗余鏈路中存在的這些問題STP被設計出來用來解決這些問題,下面介紹STP的工作原理。
交換機上有默認的stp版本為mstp(多實例生成樹)、stp(生成樹)、rstp (快速生成樹)。
01
工作原理
STP通過擁塞冗余路徑上的一些端口,確保到達任何目標地址只有一條邏輯路徑,STP借用交換BPDU(Bridge Protocol Data Unit,橋接數據單元)來阻止環路,BPDU中包含BID(Bridge ID,橋ID)用來識別是哪台計算機發出的BPDU。
在STP運行的情況下,雖然邏輯上沒有了環路,但是物理線上還是存在環路的,只是物理線路的一些端口被禁用以阻止環路的發生,如果正在使用的鏈路出現故障,STP重新計算,部分被禁用的端口重新啟用來提供冗余
STP使用STA(Spanning Tree Algorithm,生成樹算法)來決定交換機上的哪些端口被堵塞用來阻止環路的發生,STA選擇一台交換機作為根交換機,稱作根橋(Root Bridge),以該交換機作為參考點計算所有路徑。
02
選舉:根網橋、根端口、指定端口、非指定端口
① 根網橋(根交換機)—在一棵生成樹實例中,有且僅有一台交換機為root
-
選舉:
比較每台交換機的網橋id (優先級+MAC地址) 越小越優先
-
默認優先級:32768
修改優先級的時候要改成4096的倍數
[系統]stp mode stp 修改stp的模式
Stp priority 4096 修改優先級
② 根端口—在每台非根網橋上,有且僅有一個接口;本地離根網橋最近的接口(最短、星型),接收來自根網橋的BPDU,轉發用戶的流量(該接口不阻塞)
選舉:
-
1 路徑開銷值:比較從根網橋發出后,通過該接口進入時最小的cost值;
-
2 對端網橋id:入向cost值相同,比較該接口對端設備的BID,小優
-
3 對端端口id:對端BID也相同,比較該接口對端設備的接口的PID
-
4 本端端口id(hub):小優
-
端口ID 接口優先級(0-240,步長16,默認128)接口編號
③ 指定端口—在每一段存在STP的物理鏈路上,有且僅有一個;轉發來自根網橋的BPDU,同時可以轉發用戶流量(不阻塞);默認根網橋上所有接口為指定端口;
選舉:
-
1 路徑開銷:比較從根網橋發出后,通過該接口進入這段鏈路時的cost值最小(出向)
-
2 本端網橋id
-
3 本端端口id (端口優先級和端口編號)端口優先級默認是128 接口編號
-
4 本地端口id,相同,直接阻塞該端口;
④ 非指定端口----剩下的端口就叫做阻塞端口。該接口邏輯阻塞,實際可以接收到信息,但不轉發。
03
STP中的報文交互
BPDU 橋協議數據單元
兩種BPDU:
① 配置BPDU
作用:用於角色(端口)選舉
維護網絡拓撲,2秒1次,最多20秒,20秒沒有根的回應,則認為根down掉。
只有根網橋可以發送,在交換網絡初始狀態時,所有交換機均定義本地為根網橋,進行BPDU的發送;使得網絡所有交換機均收到其他設備的BPDU,之后基於數據中的參數進行比對,選舉出根網橋;再所有非根網橋不再發送BPDU,而是僅接收和轉發根網橋的BPDU;周期2s發送,hold time 20s。
② TCN BPDU—拓撲變化bpdu
作用:當拓撲發生變化時,會發tcn bpdu
本地交換機鏈路故障后,STP重新收斂,為了快速刷新全網所有交換機的MAC表,將向本地所有STP接口發送TCN(標記位中的TCN位置1),鄰居交換機收到TCN后,先標記為ACK位為回復,用於可靠傳輸消息;之后將TCN逐級轉發到根網橋處,由根網橋回復TC消息來逐級回復到所有交換機;使所有交換機臨時將MAC表的老換時間修改為15s(默認的,轉發延時)。
04
BPDU字段
-
1 BPDU Flags 標識字段
Tca位 拓撲變化確認位
Tc位 拓撲變化位
發生變化時置1
-
2 root identifier 根網橋id (Root ID)
-
3 cost of path 到達根的開銷值
-
4 Bridge ID 本交換機的網橋ID
-
5 Port ID 端口ID
0x8001 前面的80 代表優先級128 , 01代表端口號
-
6 message age 消息壽命 每經過一台交換機 message age+1
-
7 max age 最大壽命 20秒
-
8 hello time 2秒
-
9 forward delay 轉發延遲15秒
BPDU的時間有三種:Hello Time、Max Age、Forward Delay:
- Hello時間控制了發送配置BPDU的時間間隔,默認2秒。這是根交換機生成BPDU並向非根交換機發送的間隔。
- 非根交換機接收到根交換機發送來的BPDU,再從除接收端口以外的其他端口轉發出去,如果在2-20秒里面由於網絡故障沒有新的BPDU從根交換機發送過來,非根交換機將停止向外發送從根交換機接收到的BPDU。如果這種情況持續20秒,也就是最大存活期,非根交換機就使原儲存的BPDU無效,並開始尋找新的根端口。所謂最大存活期就是非根交換機丟棄BPDU前用來備份儲存它的時間。
- 轉發延時是交換機在偵聽狀態到學習狀態所花的時間,默認是15秒。
05
端口的狀態變化
-
disable 開啟stp時 特點:不進行stp計算。
-
blocking 阻塞端口直接進入blocking 狀態。
-
listening 非阻塞端口才進入偵聽狀態 特點:加速mac地址表老化。
所有交換機進行BPDU收發,選舉所有角色;接口角色為非指定端口直接進入阻塞狀態;若為指定端口和根端口進入下一狀態。
中間有15秒的間隔時間,目的是為了加速mac地址表老化,mac地址表老化時間300秒
-
learning 學習狀態
指定端口和根端口學習所有接口連接設備的MAC地址,生成MAC表;之后進入下一狀態。
中間有相隔15秒的時間,加速mac地址表的學習。
-
forwarding 轉發狀態
注:只有到接口進入到轉發狀態后,才能為用戶轉發數據報文,之前的30s不能轉發任何數據。
收斂時間:
初次收斂—30s = 15偵聽+15s學習
結構變化:
1. 存在直連檢測:
本地存在阻塞端口,若其他端口斷開,該阻塞端口馬上進入15是偵聽(選舉);結果若為啟用,那么將再進入15s學習—總30s。
當阻塞端口感覺到拓撲發生變化,發送tcn BPDU,對端會回復一條tca=1拓撲變化確認;當交換機收到根交換機范洪的網絡變化tc=1的配置BPDU才能老化原來的路徑,學習新的路徑。
2. 沒有直連檢測:
本地不存在阻塞端口,若某個端口斷開,將發送次優BPDU(以本地為根)給其他鄰居交換機,其他交換機無視該數據,進行20s hold time計時,到時時阻塞接口進入15s偵聽,15s學習=總50s。
由於線路故障,Sw2 20s后老化了源路徑,認為自己是根,向sw3發送bpdu,sw3收到兩條bpdu,因此會檢測到鏈路變化,由於鏈接s1的路徑最優,所以向s1發送tcnBPDU,s1回復一條tc=1的配置bpdu,交換機將原來的路徑老化,並學習新的路徑。
06
STP的缺點
1. 收斂慢
learning到forwarding需要15s學習mac地址,
Listening到learning需要15s 加速老化時間,
無論上述用了多少秒,最大等待時間總是15s,
發送tcnBPDU的時間過長。
2. 鏈路利用率低
RSTP 快速生成樹
-
備份端口只在華為中提出。
-
備份端口備份成為指定端口。
-
預備端口將來預備成為根端口。
-
預備端口和備份端口的相同點,正常情況下都不進行數據轉發。
RSTP中端口狀態變成了三種,將stp狀態前三種合成一種,因為不學習mac也不轉發數據。
三種狀態:
-
discarding 不學習mac也不轉發數據。
-
learning 不轉發數據但是學習mac。
-
forwarding 即學習mac也轉發數據。
BPDU stp和rstp的區別:
-
stp:配置BPDU TCN BPDU
-
rstp:RST BPDU(快速生成樹bpdu)
標志位
-
Tca位(topology change acknowledgement)拓撲變化確認位。
-
同意位(agreement)。
-
轉發位(Forwarding)。
-
學習狀態(learning )中間有相隔15秒的時間,加速mac地址表的學習
-
端口角色(port role)端口角色是11,證明這個端口是指定端口,如果是10則代表是根端口,01代表預備端口或者備份端口,00代表保留。
-
提議位(proposal)。
-
拓撲變化位(topology change)
RSTP快速生成樹:
收斂速度快:
-
1. 邊緣端口:連接終端設備的端口
優點:不會進行端口角色計算,直接變成forwarding狀態
配置邊緣端口
Interface g0/0/3
Stp edged-port enable
-
2. P/A機制 提議/同意機制
前提條件:點到點鏈路(全雙工鏈路)交換機先發送一個RST BPDU給根,根收到后作比較,將自己的發給交換機,交換機發現網橋id比自己小比自己優先,就會發一個同意位給根交換機,根交換機上的接口變為指定接口,並直接變為forwarding狀態。
Sw3當網絡發生變化,馬上啟動一個TC while計時器:2倍的hellp時間,直接發送tcBPDU給s2,四秒內,老化原來的mac地址,形成新的地址,s2收到后重復上述動作直到發給根交換機。
MSTP多實例生成樹
多個rstp的集合就是mstp
Instance 實例:rstp
單個實例樹的弊端:
-
一部分vlan路徑不同
-
無法使用流量分擔
-
會產生次優的二層路徑
建立兩棵樹,pc1發數據時,lsw4是根,pc2發數據時,lsw5是根從而解決單個實例樹的弊端。
配置步驟
創建vlan基本操作修改stp版本Stp region-configuration 創建域的范圍Region-name Huawei 域的名字Revision-level 1(保證都相同)Instance 1 vlan 10Instance 2 vlan 20Active region-configuration激活mstp的配置每台交換機上都要配置只要修改就要重新激活設置實例的根Stp instance 1 root primary/secondary(主根/備份根)默認交換機上有實例0Mstp和arrp做聯動時,mstp的主根一定是arrp的主
當網絡中有mstp、stp rstp時,最后會以stp運行,他們的模式依舊是mstp和rstp,但是發的bpdu報文是stp。
當mstp的交換機和stp的交換機相連時,發送的是stp的報文,當stp遷移走了,換了一個mstp的交換機時,不會自動回到mstp。
【swb】stp mcheck手動遷移回mstp。
配置mstp最大跳數
默認最大跳數20跳
Stu max-hops 30 修改最大跳數
四個保護
-
邊緣端口保護(BPDU保護)
為什么會有BPDU保護-----從邊緣端口收到bpdu,會直接將邊緣端口阻塞掉。
【系統】Stp bpdu-protection(stp,bpdu保護開啟)
-
指定端口保護(根的保護)
從指定接口收到一個優先級比指定端口還低的端口pbdu,則交換機進入阻塞狀態,保護自己永遠為根。
【指定接口】Stp root-portection 在指定端口下開啟根的保護
-
環路保護
三個交換機之間使用光釺連接,由於光纖是由兩條線路構成,一條收一條發,一旦收的根端口down掉,發的線路沒有問題,此時阻塞端口啟用,會形成環路。
-
解決方法,長時間收不到bpdu ,就把該端口阻塞掉。
-
TC-BPDU保護 TC
如果惡意用戶一直發送tc-bpdu,那么鏈路中的路徑就會一直老化,此時設置一個閾值,超過上限就會丟棄該bpdu。
默認接受tc上限為1
修改命令:stp tc-portection threshold 2
推薦閱讀
>>>【必備干貨】網工入門必會橋接教程,外網+GNS3+Vmware
網工界市場認可度極高的華為認證,你考了嗎?
拿下華為HCIE認證之后,你可以:
-
跨越90%企業的招聘硬門檻
-
增加70%就業機會
-
拿下BAT全國TOP100大廠敲門磚
-
體系化得到網絡技術硬實力
-
技術大佬年薪可達30w+
資源放送
2022新版華為思科雙廠商認證18集小白入門到進階實戰課,掃描下方二維碼,即可觀看: