二层虚拟交换机行为模式
2017-11-22武孟军
之所以大费周章,弄出个vPC来,无非是要在逻辑上简化一下网络拓扑,特别是能够跨设备实现PortChannel,简 化 STP。那么,这些功能是如何实现的呢?
vPC
两台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
这里假定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端口
1.vPC交换机不是ROOT交换机
ROOT交换机可能是通过vPC接入的交换机,也可能是位于另一个vPC domain内。那么,对于整个STP域的其他交换机来说,等效于vPC primary交换机通过vPC连接到了二层网络。在vPC domain内部, 如果vPC为根端口,则primary设置vPC的所有成员端口为Root Port,peerlink端口为DP;secondary设置同一vPC的所有成员端口为Root Port,peerlink端口同样为RP。
2.vPC交换机是ROOT交换机
如果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交换机。
peer switch
虽然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接管,并没有发生网络拓扑结果的变化。