PortChannel對于生成樹協議來說,是單條線路,因此,所有的PortChannel的成員端口,STP狀態是一致的。觀察典型的vPC接入網絡結構,接入交換機和兩臺vPC對等交換機之間,通過vPC和vPC peer link形成了一個三角環狀回路,并且所有的鏈路都是轉發狀態。那么,在不阻斷任何一條鏈路的情況下,是如何避免出現環路的呢?
首先,vPC對等交換機的轉發原則是盡可能在本地轉發,即盡量不讓數據幀穿越vPC peer link。
其次,支持vPC的交換機在硬件層面上實現了一條特殊的轉發原則:對于一臺vPC對等交換機來說,從vPC peer link接收的數據幀,禁止轉發到任一個vPC member port端口,只可以轉發到孤端口或者三層接口,如圖3所示。
需要注意的是,這個轉發原則只適用于vPC VLAN數 據 幀,nonvPC VLAN數據幀仍然沿用傳統的二層轉發模式。
如何理解這個轉發原則呢?請牢記典型的vPC網絡結構,每一個通過vPC上聯的接入層交換機,在正常情況下(即所有vPC member port端口都正常工作),到兩臺vPC交換機,一定存在至少一條二層直連的數據鏈路。那么對交換機B來說,所有通過vPC peer link從A轉發過來的數據幀(大部分是無轉發MAC的單播、廣播或組播幀),也必定通過vPC member port的直連鏈路轉發到了交換機SW1和SW2,因此如果交換機A再次向本地vPC member port轉發這些數據幀,邏輯上相當于對vPC PortChannel發送了兩次同樣的數據幀,這樣,必將在交換機SW1和SW2上產生重復幀。

圖3 vPC的防環路機制

圖4 特殊的孤端口
vPC loop avoidance rule states that traffic coming from vPC member port, then crossing vPC peer-link is NOT allowed to egress any vPC member port;however it can egress any other type of port (L3 port, orphan port, …).
即:從vPC member port端口接收的數據幀,跨越了vPC peer link后,禁止轉發到任何vPC member port端口,但是,可以轉發到孤端口或者三層接口……
由此可見,這里限定了從vPC member port端口接收的數據幀才適用該原則,不過很明顯,從孤端口接收的廣播幀,如果不適用該轉發原則,同樣會有重復幀問題。
注:Cisco的官方文檔《Best Practices for Virtual Port Channels(vPC) on Cisco Nexus 7000 Series Switches 》中,描述防環機制的的原文如下:
vPC防環路機制對所有的二層、三層流量都適用,惟一例外的是non-vPC VLAN流量。因此,在設計網絡時要十分小心,當存在流量不管是什么原因需要跨越vPC peer link,并且流量是屬于vPC VLAN的時候,我們一定要意識到,這些流量不能被轉發到正常工作狀態下的vPC成員端口,但可以轉發到其他三層或孤端口。
這里存在兩種特殊情況下的孤端口:
一是正常的vPC,假如有兩個成員端口,那么當其中一個端口狀態不可用時,另一個可用端口就由vPC成員端口轉變為孤端口。
二是當一臺下聯交換機通過正常的兩條鏈路分接兩臺vPC交換機,且接入端口屬于vPC VLAN,同時通過STP協議其中一條鏈路被阻斷,那么處于轉發狀態的端口也屬于孤端口。如圖4所示,vPC交換機A上的兩個端口成為孤端口。