之所以大費周章,弄出個vPC來,無非是要在邏輯上簡化一下網絡拓撲,特別是能夠跨設備實現PortChannel,簡 化 STP。那么,這些功能是如何實現的呢?
兩臺vPC交換機通過相互協作,欺騙對端設備,讓對端設備誤以為自己通過PortChannel連接的就是同一臺交換機。對端設備可以是普通的二層或三層交換機、服務器等任何可以支持PortChannel的設備。Cisco建議,兩邊的設備盡量啟用LACP協議。
在進行LACP協商時,兩臺vPC交換機使用相同的系統MAC,這個MAC被稱為vPC system MAC,定義如下:
vPCsystemMAC=00:23:04:ee:be:
例 如,當vPC domain ID定 義 為10時,vPC system MAC的 值 為00:23:04:ee:be:0a,這個系統MAC在兩臺vPC交換機中必須相同。除此以外,每個vPC交換機還各自有一個 Local system MAC,這個MAC從本地交換機系統MAC中獲得,因此,各自保持唯一。
當 vPC系統需要對外欺騙,宣示自己為同一臺設備時,就使用vPC system MAC作為身份標識,例如,在vPC對外進行LACP協商時,以及運行STP協議時。否則,使用各自的Local system MAC作為身份標識,例如,在進行普通的PortChannel LACP協商時。
這里假定STP模式為RPVST(Cisco建議,當二層網絡規模比較大時,運行 MST)。 對于non-vPC VLAN,兩臺vPC交換機使用各自的Local system MAC,各自獨立運行STP進程,互不干涉。
對于vPC VLAN,兩臺vPC交換機各自運行一個STP實例,它們各自有自己的Bridge ID。然而,只有primary像一個正常交換機那樣參與STP,scondary就像自己根本不存在一樣,僅僅轉發從其他交換機接收到到的BPDU給primary。這樣,在接入交換機看來,自己通過PortChannel僅僅連接了一個交換機,那就是primary。
另 外,vPC還 規 定,peerl link鏈路參與STP,并且永遠不能被STP阻斷。還里需要明確的一點就是,分布于primary和secondary的同一vPC的所有成員端口,無論何時,它們的STP端口狀態永遠是一致的。
STP穩定后,ROOT 和ROOT secondary交換機和vPC primary、secondary 交換機,無任何關系。即除非你手工干預,否則,STP的ROOT和ROOT secondary交換機可能位于二層網絡的任何位置。
Cisco建議分別配置vPC primary、secondary交換機為STP的ROOT和ROOT secondary交換機。
下面分STP ROOT交換機是否屬于vPC交換機兩種情況進行分析。

圖5 Secondary交換機出現兩個RP端口
ROOT交換機可能是通過vPC接入的交換機,也可能是位于另一個vPC domain內。那么,對于整個STP域的其他交換機來說,等效于vPC primary交換機通過vPC連接到了二層網絡。在vPC domain內部, 如果vPC為根端口,則primary設置vPC的所有成員端口為Root Port,peerlink端口為DP;secondary設置同一vPC的所有成員端口為Root Port,peerlink端口同樣為RP。
如果primary為ROOT交換機,則從外部看來,等效于其他交換機通過vPC和primary交換機連接,primary和secondary的vPC成員端口均被設置為DP,secondary 的 peerlink端口被設置為RP。如果secondary為ROOT交換機,則從外部看來,等效于其他交換機通過vPC和secondary交換機連接,primary和secondary的vPC成員端口均被設置為DP,primary 的 peer-link端口被設置為RP。
primary在產生和處理BPDU時,如果自身為ROOT,則BPDU的bridge ID為自身。如果secondary為ROOT,則BPDU的bridge ID取自secondary。無論secondary是否為ROOT,都不會產生、處理BPDU。
比較容易迷惑的地方是第一種情況中的secondary有兩個RP端口。而在傳統STP中,任何一個交換機都是有且只有一個RP。在正常的STP行為中,secondary的peer-link會被阻斷,但vPC修改了STP規則,peer-link永遠不能被STP阻斷,因此出現了同一交換機中出現兩個RP的怪現象,如圖5所示。
看似奇怪,其實因為peer link鏈路的特殊性,是合乎情理的。這里把peer link當作一條普通的數據鏈路來分析。考慮secondary的peer link口狀態是被阻斷或是RP,對正常的vPC VLAN數據流(不考慮CFS控制數據)會產生怎樣的影響?答案是無任何影響。因為secondary的數據流,遵循本地轉發模式,即只要本地vPC成員端口狀態正常,永遠不會有數據幀轉發到peer link上。也就是說,在網絡正常的情況下,peer link端口狀態無論是阻塞還是RP,都不會有數據流經過。如果本地vPC成員端口狀態為down,則作為一條普通二層鏈路,如果peer link原來是阻斷狀態,也要轉變為轉發狀態(RP則不做任何狀態轉換),此時數據流自然穿越peerlink到達primary。即無論peer-link狀態是RP還是阻斷,并不影響本地的vPC VLAN數據流的轉發路徑。但是,阻斷peerlink卻阻止了CFS交換控制數據。
有讀者或許會問,網絡正常的情況下會有vPC VLAN中的廣播包和多播包穿越RP狀態的peer-link,會不會產生環路呢?也不會,因為根據vPC防環路機制,這些穿越了peer link的幀是不會進入vPC的成員端口的。事實上,也正是由于vPC的防環路機制,才使得secondary即使有了兩個RP端口,也不會產生環路。
如果vPC交換機為STP ROOT(Cisco推薦如此配置),則:
* 除非vPC secondary交換機本身為 STP ROOT,否則,它的peer link口永遠是Root Port。
* 所有vPC 成員端口狀態為DP。
* primary產 生 的BPDU,Bridge ID可能是屬于secondary交換機。
雖然vPC domain采用secondary對 STP“靜 默”方式,對外模擬出只有一個交換機參與STP。但由于ROOT可能是primary或secondary,因此對外模擬的交換機可能是primary,也可能是secondary。
Cisco推薦的配置模式是primary和secondary應分別配置為STP的ROOT和ROOT srcondary。在一個穩定的網絡中,如果ROOT宕機,則ROOT srcondary變 身 為vPC primary和STP ROOT,這個過程中,srcondary開始接管STP BPDU的處理,并發生STP拓撲變化。如果原來的primary恢復,則因其配置的STP優先級原因,又要成為STP ROOT,但vPC primary身份卻不再切換,這一復雜過程會對網絡穩定性產生影響。
通 過peer switch命令,可 以 讓primary和secondary同時參與處理STP BPDU,但他們使用的是相同的Bridge ID,即vPC system MAC。這樣,通過vPC連接的交換機,會收到兩份相同的BPDU,但它們的內容是一致的。
使用peer switch的好處就是,當ROOT宕機的時候,能夠有效減少網絡中斷的時間。因為對外部交換機來 說,ROOT宕 機,ROOT srcondary接管,并沒有發生網絡拓撲結果的變化。