一、環路的產生
- 網絡中通過多交換機、多條鏈路來提高鏈路的冗余性,避免單點故障導致業務中斷,雖然能夠提升網絡可靠性,但同時也會帶來環路問題。
二、環路引發得問題
- 廣播風暴:
當交換機收到一個從主機發過來的單播幀(或者廣播幀)時,假如交換機沒有該目的主機的MAC地址表項,此時交換機會在除了接收端口以外的端口泛洪出去,而其他交換機在接受到也會做同樣的操作。這樣會導致同樣的幀在不停地被轉發,形成廣播風暴。
- MAC地址表翻轉(震盪)
交換機MAC地址更新是基於報文的接收端口的,像上面所述,交換機之間形環之后,最終報文還是會轉發回到第一個接收的交換機(從主機接收報文的交換機),那么這時交換機會把與主機連接的端口和MAC更新為最近接收到報文的端口和MAC地址,因為環路可能是多向的,所以會導致MAC地址表不停在更新。
三、STP原理
生成樹協議STP(Spanning Tree Protocol),在提供高可靠性的同時又能避免環路帶來的問題。STP通過阻塞端口來消除環路,使用網絡鏈路冗余備份。在形成環路的網絡交換機會根據STP的協議具體規定來阻塞某端口,來消除環路, 當在環路上發生故障,會釋放阻塞端口實現備份鏈路傳輸。
- 根橋選舉:每個交換機上都會有 橋ID(Bridge ID),橋ID由16位的橋優先級(Bridge Priority)和48位的MAC地址構成,在選舉根橋時交換機會互發BPDU報文,通過比較里面的優先級(0-65535,默認32768),數值小的優選,如果優先級相等,則會比較MAC地址,同樣數值小的優選。
STP定義了三種端口角色分別是:根端口、指定端口、備份端口
- 根端口選舉:非根交換機在選舉根端口時分別依據該端口的根路徑開銷、對端BID、對端PID和本端PID。選舉時會比較根路徑開銷,如果相同,則會比較對端BID;如果對端BID相同,則比較對端PID,如果還相同,則比較本端PID,小者優先。一般與根交換連接的端口都是根端口。
- 指定端口選舉:在選舉了根端口之后其他的端口會再次進行比較來選擇指定端。每個網段都應該有一個指定端口,根橋的所有端口都是指定端口(除非根橋在物理上存在環路)。
- 預備端口:選擇完根端口和指定端口,剩下的就是預備端口。其他端口為預備端口,被阻塞,不能轉發數據,只能夠從所連網段的指定交換機接收到BPDU報文,並以此來監視鏈路的狀態。
STP協議的設備上端口狀態有5種:
- Forwarding:轉發狀態。端口既可轉發用戶流量也可轉發BPDU報文,只有根端口或指定端口才能進入Forwarding狀態。
- Learning:學習狀態。端口可根據收到的用戶流量構建MAC地址表,但不轉發用戶流量。增加Learning狀態是為了防止臨時環路。
- Listening:偵聽狀態。端口可以轉發BPDU報文,但不能轉發用戶流量。
- Blocking:阻塞狀態。端口僅僅能接收並處理BPDU,不能轉發BPDU,也不能轉發用戶流量。此狀態是預備端口的最終狀態。
- Disabled:禁用狀態。端口既不處理和轉發BPDU報文,也不轉發用戶流量。
兩類BPDU:
- BPDU:包含橋ID、路徑開銷、端口ID、計時器等參數,交換機通過STP協議來交換BPDU來選舉根橋,並定義端口角色。
在網絡拓撲穩定以后,只有根橋主動發送配置BPDU,其他交換機在收到上游傳來的配置BPDU后,才會發送自己的配置BPDU。
- TCN BPDU:指下游交換機感知到拓撲發生變化時向上游發送的拓撲變化通知
計時器:
- Message Age:配置BPDU在網絡中傳播的生存期。配置BPDU報文每經過一個交換機,Message Age都加1。
- Max Age:配置BPDU在設備中能夠保存的最大生存期。如果Message Age大於Max Age(Max Age的超時默認值為20秒),非根橋會丟棄該配置BPDU。
- Hello Time:配置BPDU發送的周期。
- Forward Delay:端口狀態遷移的延時。
故障分析:
- 根橋故障
STP拓撲中交換機通過周期性的BPDU來監視鏈路狀態,如果下游交換機收不到根橋對的BPDU,那么會在計時器Max age(20秒)超時后,重新選舉根橋,也就是SWB和SWC會重新進行選舉。
到 forwording狀態大概需要50秒(Max Age 20 s+兩倍Forward Delay 15s×2 = 50s )
- 直連鏈路故障
SWB檢測到直連鏈路物理故障后,會將預備端口轉換為根端口。SWB新的根端口會在30 秒(Alternate端口會遷移到Listening、Learning、Forwarding)后恢復到轉發狀態。
- 非直連鏈路故障
非直連鏈路故障(非物理層故障),SWB因此一直收不到來自SWA的BPDU報文,SWC的Alternate端口再也不收到包含原根橋ID的BPDU報文,SWC會切換Alternate端口為指定端口並且轉發來自其根端口的BPDU報文給SWB。所以,Max Age定時器超時后,SWB、SWC幾乎同時會收到對方發來的BPDU。SWC的預備端口恢復到轉發狀態大約需要50秒。
- 拓撲改變導致MAC地址表錯誤
MAC地址表項的默認老化時間是300秒。在這段時間內,SWB無法將數據從G0/0/2端口轉發給主機B。
本例中,SWB中的MAC地址表項定義了通過端口GigabitEthernet 0/0/3可以到達主機A,通過端口GigabitEthernet 0/0/1可以到達主機B。由於SWC的根端口產生故障,導致生成樹拓撲重新收斂,在生成樹拓撲完成收斂之后,從主機A到主機B的幀仍然不能到達目的地。這是因為MAC地址表項老化時間是300秒,主機A發往主機B的幀到達SWB后,SWB會繼續通過端口GigabitEthernet 0/0/1轉發該數據幀。
- 拓撲改變導致MAC地址表變化(加速老化)
拓撲變化過程中,根橋通過TCN BPDU報文獲知生成樹拓撲里發生了故障。根橋生成 TC用來通知其他交換機加速老化現有的MAC地址表項。
拓撲變更以及MAC地址表項更新的具體過程如下: SWC感知到網絡拓撲發生變化后,會不間斷地向SWB發送TCN BPDU報文。
SWB收到SWC發來的TCN BPDU報文后,會把配置BPDU報文中的Flags的TCA位設置1,然后發送給SWC,告知SWC停止發送TCN BPDU報文。
SWB向根橋轉發TCN BPDU報文。 SWA把也配置BPDU報文中的Flags的TC位設置為1后發送,通知下游設備把MAC地址表項的老化時間由默認的300秒修改為Forward Delay的時間(默認為15秒)。
最多等待15秒之后,SWB中的錯誤MAC地址表項會被自動清除。此后,SWB就能重新開始MAC表項的學習及轉發操作。
四、STP常用配置命令
stp mode stp // 生成樹的工作模式 stp root primary | stp priority 0 | stp instance 0 root primary // 手配根橋 stp priority 4096 |…… // 改優先級 ,手配備份根橋(其他primary改為secondary) stp edged-port enable // 配置邊緣端口 dis stp topology-change // 查看stp震盪狀態 display stp brief // 查看接口角色 display stp interface // 命令查看端口的STP狀態