Uplinkfast / Backbonefast / Portfast

上一篇STP主要介紹了802.1d的標準生成樹,它最大的問題就是收斂時間太慢了,通常需要30s-50s才能完成收斂。本篇介紹3種收斂模式,及Uplinkfast / Backbonefast / Portfast解決方案。

STP收斂:(有3種收斂方式)


直連鏈路收斂:收斂時間30s

以上圖爲例。正常情況下SW1是根橋,SW2的f0/2被阻塞。現在如果SW1和SW2間直連的鏈路down掉,那端口也down掉。端口up/down會導致SW1會發出TC報文通知全網將MAC地址表老化,SW2的f0/5口根端口消失後,需要選新的根端口,經過15s的Listening時間後,原本被阻塞的f0/2口被選爲新的根端口,再經過15s的Learning時間學習MAC地址後進入Forwarding狀態。總時間是30s。因此例如原本SW1上連PC1,SW2上連PC2,兩臺PC通過SW1和SW2間直連鏈路通起來。直連鏈路down後,兩臺PC會有30s無法通信,30s後經SW3恢復通信。

非直連鏈路收斂:收斂時間50s

如拓撲圖中SW1和SW2間連了HUB。那HUB掛了後,SW1和SW2的f0/5口仍舊是OK的,仍舊能每隔2s發送BPDU。即鏈路down了,但端口沒有down。此時原本SW2的f0/5口每隔2s會收到SW1的BPDU,現在鏈路down了,SW1雖然仍舊在發送,SW2卻收不到。STP裏介紹BPDU報文字段時介紹過,Message age會計時,Max age爲20s。20s後SW2的f0/5口仍舊沒有收到新的BPDU,就知道該鏈路出問題了。就用f0/2口的BPDU,經過15s的Listening,選舉f0/2口爲根端口,再經過15s的Learning時間學習MAC地址後進入Forwarding狀態。總時間是50s。因此例如原本SW1上連PC1,SW2上連PC2,兩臺PC通過SW1和SW2間經HUB通起來。HUB掛了後,兩臺PC會有50s無法通信,50s後經SW3恢復通信。

不重要的鏈路收斂:收斂時間30s

即上圖中鏈路都正常,任意交換機上連PC。將PC接入或拔掉,就是不重要的鏈路發生變化。好比你要上網就電腦網線接一下,不用了就將網線拔掉。這種鏈路的變化肯定不會導致網線拓撲里根端口發生變化,但就如STP裏TCN報文的例子所說,端口只要檢測到up/down,就會向根橋發送TCN報文。根橋會向全網發送TC報文通知全網將MAC地址表老化,經Listening,Learning各30s後重新進入Forwarding。所以每次PC接上網線要等30s才能上網。


解決方案:UplinkFast

UplinkFast是思科私有協議,提供了非根橋的交換機上快速切換根端口的能力(根橋上不能配置UplinkFast端口)。拓撲圖中SW2上配置成UplinkFast後,f0/2口可以跳過Listening和Learning直接Forwarding,將收斂時間減少到1s以內。通常只在接入層交換機上配置UplinkFast,且該交換機至少有一個端口處於被阻塞狀態,鏈路失效必須發生在根端口時纔有意義。例如常在有雙上行去往根橋的交換機上配置成UplinkFast。

一旦被配置成UplinkFast,交換機會自動調整一些STP參數,因此要謹慎。因爲STP參數自動調整後可能會引起STP拓撲的變化:

1.交換機的優先級會增加到比缺省值要高(32768+4096),以保證交換機不會被選爲根橋(根橋沒有任何根端口)

2.交換機上所有端口的cost值會增加3000(19+3000),以保證交換機端口不會被選爲指定端口

配置命令很簡單:

SW2(config)#spanning-tree uplinkfast  //交換機上全局配置成UplinkFast	
SW2#show spanning-tree uplinkfast     //可以查看交換機上根端口和備份根端口	
如果是直連鏈路收斂,主鏈路發生故障後,SW2的f0/2口直接Forwarding,將30s收斂時間減少到了1s。如果是非直連鏈路收斂(SW1和SW2間連着HUB),HUB故障後,SW2的f0/2口徑20s的Max age時間後直接Forwarding,將50s的收斂時間減少到了20s。

最後,UplinkFast通常只在老式交換機上用,新式交換機常用802.1w和802.1s。

解決方案:BackboneFast

UplinkFast解決的是自身根端口直連收斂。BackboneFast解決自身非直連收斂。如拓撲圖中SW1和SW3間鏈路down掉,該條鏈路對於SW2來說就是非直連鏈路。SW3檢測到故障,根端口down了,且SW2不會發送BPDU給SW3(端口f0/2被阻塞),因此SW3認爲自己是根橋,發送BPDU給SW2宣告自己是新根橋。SW2之前收到過該BPDU,因爲等級低,所以f0/2口才被阻塞,因此該BPDU會被忽略。計時器max_age超時(20s)後,最先的f0/2口的BPDU老化失效,該端口進入Listening狀態,會收到SW1和SW3發送的BPDU,顯然SW1的BPDU優先級高,SW2會發送BPDU給SW3。SW3一收到SW2的BPDU就停止發送它的BPDU。端口f0/2通過Listening和Learning狀態後進入Forwarding,花費30s。總共50s。

Backbone fast解決這個問題:剛開始和上面一樣,SW2收到SW3的次優BPDU就開始重新確認它的非指定端口(而非被動等待20s的max_age時間)。它在根端口上發送RLQ請求給根橋SW1(因爲SW3聲稱它是根橋,但SW2認爲根橋應該是SW1)。根橋SW1收到請求,馬上回復RLQ指出這個方向上仍舊有根橋SW1存在。SW2已經檢測了所有非指定端口,它仍然有到達根橋的路徑。可以立即老化掉存儲在端口f0/2上的信息。端口f0/2進入Listening併發送BPDU,節省了max_age時間。配置了BackboneFast的交換機檢測到間接鏈路失效後,阻塞端口立即Listening->Learning->Forwarding,節省了20s的max_age時間,將原本50s的收斂時間減少到了30s。

配置命令很簡單:

SW1(config)#spanning-tree backbonefast	//可以只在SW2上配,但萬一其他鏈路也掛了呢?所以通常全都配
SW2(config)#spanning-tree backbonefast	
SW3(config)#spanning-tree backbonefast

SW1#show spanning-tree backbonefast     //查看BackboneFast的配置
最後,BackboneFast通常只在老式交換機上用,新式交換機常用802.1w和802.1s。

解決方案:PortFast

上面介紹過不重要鏈路收斂時間要30s,因此插拔一個終端後30s後才能接入網絡,實在太慢了。PortFast接口不需要經歷Listening和Learning,可以直接Forwarding,收斂時間減少到了1s以內。而且PortFast口的Up/Down都不會產生TCN報文導致全網Mac地址表老化重新收斂了。

例如上圖三臺交換機組成一個網絡,由於有STP因此不會形成環路。此時在SW1上接入一個路由器R1,也可以是一臺PC,正常情況下,交換機端口只要檢測到up/down,就會向根橋發送TCN報文。根橋會向全網發送TC報文通知全網將MAC地址表老化,經Listening,Learning各30s後重新進入Forwarding。所以R1接入後要等30s才能上網。可以將交換機上接終端的端口(SW1的f0/9)配置成portfast:


交換機上PortFast端口的Up/Down不會產生TCN報文導致全網Mac地址表老化重新收斂,收斂時間從30s減少到了1s內,R1瞬間就接入了網絡。原理是PortFast口表明該端口是接入層交換機的端口,且端口不參與STP計算,肯定不會形成環路。

可以看到上面有一端自動生成的warning警告信息:PortFast口不要接交換機,只能接非交換設備,如路由器或PC等。如果PortFast口接了交換機,因爲不進行重新選舉,可能會形成環路。因此一旦交換機上某端口被配成PortFast口後,該端口如果收到BPDU立刻變回普通端口。因爲收到BPDU就意味着該端口連接到了交換機上,那它PortFast的能力就需要被取消。

最後PortFast口可以如上在端口下配,也可以全局配。全局配的話,交換機會自動爲Access口啓用PortFast功能,而Trunk口不會啓用PortFast功能。如果你想對Trunk口也生效(當然該Trunk口肯定不是接交換機的,而是接其他設備,比如單臂路由的接口接路由器)那隻能到端口下配,命令後加上trunk即可:SW1(config-if)#spanning-tree portfast trunk

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章