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上的两个端口成为孤端口。