生成樹協議——STP
引入:
為了消除鏈路層的環路,即二層環路,並實現鏈路的冗余備份(就是當主鏈路出現故障,能有一條備用鏈路保證網絡不受影響),STP生成樹協議誕生了!!
一.基礎
STP,Spanning Tree Protocol,生成樹協議。
作用:→通過阻斷冗余鏈路來消除橋接網絡中可能存在的路徑回環,即網絡環路。
→當前鏈路發生故障時激活冗余備份鏈路,恢復網絡連通性。
通過在橋(這里的橋是指連接兩個物理段的設備,在生成樹協議中一般為交換機)之間交換BPDU,來保證設備完成生成樹的計算過程。
BPDU,Bridge Protocol Data Unit,橋協議數據單元,就是生成樹設備之間交換報文的報文類型。BID,橋ID,即生成樹網絡中交換機的ID,由優先級和MAC地址構成,例:0.0000-0000-0001,開頭的0表示橋優先級,默認為32768,可通過命令修改,范圍在0-65535之間,且取值只能是0或4096的倍數。
(1)配置BPDU包含的信息
→根橋ID(RootID)(在生成樹協議網絡的眾多交換機中會選舉出一個老大作為根橋,這個老大叫Root,用來交換拓撲信息)
→根路徑開銷(Root Path Cost)(其他設備到根橋的的開銷,路徑開銷:網橋間距離的度量值)
→指定橋ID(DBID,Designated Bridge ID)(每個物理段都會選舉出一個指定橋,如上圖①與②物理段因為SW1被選舉為整個網絡的根橋,所以不用選指定橋,③物理段則會選擇一個指定橋,通過BID可知指定橋為SW2,因為其BID較小)
→指定端口ID(什么是指定端口后面會說)
(2)根橋的選舉:
①.通過比較BID,先比較優先級,優先級值越小越優先,優先級大的被選為根橋。
②.如果優先級相同,則比較MAC地址,MAC地址小的優先。
(3)端口角色:
→DP——指定端口,根橋上所有端口為指定端口,連接指定橋的端口為指定端口。每個物理段,有只有一個DP,DP的對端必定是RP或者AP,RP和AP的對端必定是DP。
→RP——根端口,在非根橋上選舉根路徑開銷最小的端口為根端口。每個非根橋必須選擇一個端口作為根端口。
→AP——阻塞端口,既不是根端口也不是指定端口的其他端口被STP置為阻塞狀態。也可以說是RP的備用端口,當RP所在鏈路故障時,AP轉變為RP.
(4)路徑開銷COST
STP以IEEE802.1D為標准計算開銷:
帶寬 | STP開銷 |
4Mbit/s | 250 |
10Mbit/s | 100 |
100Mbit/s | 19 |
1 Gbit/s | 4 |
10 Gbit/s | 2 |
(5)通過橋ID決定端口角色
→在根路徑開銷相同時,所連網段指定橋ID最小的端口為根端口RP。
→在根路徑開銷相同時,橋ID最小的橋被選為物理段上的指定橋,連接指定橋的端口為指定端口DP
(6)通過端口ID決定端口角色
→當兩條鏈路開銷相同時,端口ID小的一方為根端口。
(7)端口狀態
端口角色 | 端口狀態 | 端口行為 |
未啟用STP功能的端口 | Disabled | 不收發BPDU,不收發數據,不學習MAC地址 |
非指定端口或根端口 | Blocking | 收但不發BPDU,不收發數據,不學習MAC地址 |
—— | Listening | 收發BPDU,不收發數據,不學習MAC地址 |
—— | Learning | 收發BPDU,不收發數據,學習MAC地址 |
指定端口或根端口 | Forwarding | 收發BPDU,收發數據 |
(8)端口遷移
→端口被選為指定端口或根端口后,狀態變化
Blocking →Listening →(Forward Delay time=15s)→Learning →(Forward Delay time=15s)→Forwarding
Forward Delay time:狀態轉換需要的時間
二.深入
(1)STP中BPDU報文格式
→PID:協議ID
→PIV:版本
→BPDU Type:BPDU類型,有配置BPDU和TCN(用於清除MAC表)
→Flags:標志位,共8個bit,對應8個位,即Flags字段有8位,標准STP中只使用了第七位TCA與第0位TC,而RSTP,MSTP中8位都用到了。
→Root ID,RPC,Bridge ID,Port ID分別對應根橋ID,路徑開銷,本橋ID,端口ID。
→Message Age,當前消息年齡,每經過一台設備,這個值+1,這個值大於Max Age時,則該報文被老化。
→Max Age,最大老化時間,默認為20s
→Hello Time,默認為2s
→FWD Delay,傳輸時延。
(2)STP中的TCN BPDU
STP的TCN BPDU,主要用於清除設備的MAC地址表。
當網絡拓撲發生變化,例如:
當SWA與SWC之間出現故障,因為MAC地址表項的老化時間默認為300s,所以00-05-06-07-08-BB G0/1這條錯誤的MAC表項會存在300s后才會轉換成備用鏈路的G0/2接口,在這段時間之內,SWB是無法將數據從G0/2接口轉發給SWC的。
300s恢復正常轉發肯定是無法接受的,所以有了TCN BPDU,用來清除MAC以重新獲取正確的MAC地址。
(靈魂畫師)
→TCN,用於通知
→TCA,用於確認TCN,位於BPDU報文中Flags位的第7位
→TC, 清除MAC,位於BPDU報文中Flags位的第0位
(3)STP保護
→STP根保護
話不多說 看圖
當網絡中新加入一個交換機且優先級大於當前根橋,如果沒有開啟根保護,那么新來的SW會被選為根橋,這會導致PC間的互訪不能用最優路徑。即沒有新加入SW時PC間的互訪線路為:②→③,而新來的SW被選為根橋后的線路為:②→④→④→③。
當開啟的根保護時,即在根橋上配置root-protection,當收到更高優先級的BPDU,即對於G0/3接口的BPDU不進行計算,並配置為狀態Listening狀態。
→STP BPDU保護
STP的BPDU保護是針對於邊緣端口的,即如果確認邊緣端口所連接的是一台PC,如果這台PC發送STP報文,會導致STP網絡發生變化,如果PC是攻擊者會導致STP網絡癱瘓,所以要開啟STP的BPDU保護,即一旦接收到PC發來的BPDU,則立刻將這個邊緣端口shutdown,如果想要恢復,可以網管手工恢復或配置成一定時間內未收到BPDU自動恢復。
→STP環路保護
圖來~
當AP接口(Blockig狀態)一直收不到來自上游的BPDU使他繼續阻塞,那么它會在20S(BPDU老化時間)后從AD轉變為DP從而形成環路,所以可通過在AP接口上配置stp loop-protection開啟環路保護。
(4)常用命令
[SW]stp global enable !全局開啟STP特性
[SW]stp mode stp/rstp/mstp !設置STP模式(默認為MSTP)
[SW]stp pathcost-standard dot1d-1998/dot1t/legacy !配置路徑開銷標准,dot1d-1998已被淘汰,常用dot1t。
[SW]stp priority 0/4096的倍數 !設置當前設備的STP優先級(默認32768)
[SW]stp timer hello [100-1000ms] !配置STP Hello時間,單位為毫秒,默認為200ms,即2s
[SW]stp timer max-age [600-4000ms] !配置STP最大老化時間,默認為20s
[SW]stp root-protection !開啟STP根保護
[SW]stp bpdu-protection !開啟BPDU保護
[SW]stp loop-protection !開啟環路保護
[SW-GigabitEthernet1/0/1]stp edged-port !配置端口為邊緣端口
[SW-GigabitEthernet1/0/1]stp cost [1-200000] !STP接口開銷
[SW]display stp !查看STP信息
[SW]display stp root !顯示所有生成樹根橋信息
[SW]display stp bpdu-statistics !顯示端口BPDU統計信息
!!!!!
STP先講到這,后面更新RSTP(快速生成樹協議)與MSTP(多生成樹協議)