
VPLS (Virtual Private LAN Service) 是一种L2VPN技术,旨在通过MPLS网络将分散的站点连接成一个统一的局域网,使运营商核心网对客户而言如同一个大型交换机。本文详细介绍了VPLS的核心组件,包括用于L2桥接和MAC学习的VFI、标识VPLS实例的VC以及连接客户网络的AC。文章还探讨了LDP的扩展、VPLS的地址学习、PE发现、泛洪和水平分割防环机制。为解决传统VPLS的扩展性挑战,H-VPLS引入了u-PE和n-PE分层架构。此外,文中还深入分析了VPLS的高可用性方案,如单向/双向PW备份(结合MC-LAG)和H-VPLS的PW备份机制,并对比了冷备、温备、热备等PW状态,以及PE上的本地交换功能,旨在提升网络韧性和收敛速度。
1. VPLS介绍
Virtual Private LAN Service(VPLS)是一种L2VPN技术,用来将多个分布在不同地区的站点连接成以一个大的局域网。运营商的MPLS的网络在对于客户网络来说就是一台大的交换机。
它定义了一个提供以太网多点连接的框架,提供多点到多点的伪线全互联的拓扑,使用LDP或是BGP来转递信令。跟标准交换机一样,PE动态学习MAC地址,并据此转发以太帧到正确的目的地。
2. VPLS组件

2.1 VFI
Virtual Forwarding Instance也叫VSI(Virtual Switching Instance)提供L2多点桥接功能。
- 它包括所有参与到这个VPLS实例里的AC和VC。
- 可以理解为像VLAN一样划分一个广播域。
- 就像一台交换机上可以划分多个VLAN一样,PE也可以存在多个VFI来区分不同的客户流量。
- 它为这个VPLS实例里的所有设备维护了一张MAC地址表。
- MAC的学习,过滤和泛洪基于VFI来操作的,确保了不同客户的隔离。
2.2 VC
Virtual Circuit,用于标识一个VFI。
- VC ID也叫VPN ID,标识一个VPLS实例。
- 在LDP里,VC标签用来找到正确的VPLS实例上。
- 在运营商网络内,VC ID是唯一的,但是一个VPLS实例里所有伪线都使用同一个VC ID。
2.3 AC
Attachment Circuit,连接到客户网络的接口。
- 可以是物理接口也可以是逻辑接口。
- 多个AC接口可以属于同一个VFI。
3. LDP扩展
VPLS会在所有的PE上建立全互联的伪线连接,每对PE之间有一个远程的LDP会话,在它们之间的所有的伪线都会通过这个LDP会话进行信令的传递。
3.1 Generalized PWid FEC Element
在标签映射消息里有FEC TLV,里面有FEC Element。VPWS使用PWid FEC Element(FEC类型128),早期VPLS也使用这个FEC Element。现在使用的是Generalized PWid FEC Element(FEC类型129)。它主要用于在PE上区分服务。

FEC类型,C比特,PW类型和PW信息长度等参数,请参照 L2VPN技术详解1:VPWS在MPLS网络中的实现与应用。
- Attachment Group Identifier (AGI): 可以认为是VPLS实力ID。
- Source Attachment Individual Identifier (SAII):标识源PE的AC。
- Target Attachment Individual Identifier (TAII):标识目的PE的AC。大部分情况下TAII设置了掩码,譬如全是1,意味着每一比特位都无所谓。因为不需要像VPWS那样找到对端PE的出口AC。具体的出口是根据目的MAC地址查表后找到的。
- 接口参数:在PWid FEC Element的报文格式里是有显示Interface Parameter Sub-TLV的,在这里没有显示,但是RFC 4447里是有提及的。包括MTU,可选项的描述,如果PW是以太标签模式,则还需要VLAN ID。
3.2 MAC List TLV
有时为了加快网络的收敛,需要移除动态学习到的MAC地址。PE发送LDP Address Withdraw Message给全互联的其他PE,并带上MAC地址列表。
带MAC地址列表的LDP Address Withdraw Message是在拓扑改变时加快MAC地址的移除。如果MAC地址列表过长,为了减少LDP的收敛时间,路由器倾向于发送地址撤回消息的带一个空的地址列表。

前面的字段其他报文格式类似,MAC地址列表也就是6比特的MAC地址。当PE收到地址撤回消息时:
- 如果MAC地址列表是空的,PE会移除这个VPLS实例里所有的MAC地址,除了通过接收到消息的伪线学到的客户MAC地址。
- 如果MAC地址列表不是空的,对于列表里的每一个MAC地址,移除它和AC或是PW的关联条目。
4. VPLS操作
4.1 地址学习
BGP是通过控制平面通告和传递可达性信息,而VPLS是通过数据层面来学习可达性信息。如果收到一个数据帧,它的源MAC不在VPLS的MAC地址表里,则它会记录下来通过哪个AC或是PW学到这个的MAC。
4.2 PE发现
因为在VPLS里是所有参加这个VPLS实例的PE的全互联,而PE不具备自动发现这个实例下其他PE能力,需要通过配置来指定远端的PE。如果使用BGP来作为VPLS的控制平面,可以进行VPLS的实例内PE的自动发现,因为BGP更新的网络层可达信息(NLRI)包括RD,RT,VPLS端点ID等2层信息。
4.3 泛洪
对于BUM流量(未知单播,组播和广播),从一个AC或PW收到的流量会泛洪到所有其他的AC和PW。组播是特殊情况,但是为了操作的简化,默认使用广播传递组播帧。
4.4 防环机制
如果不是伪线全互联的拓扑则需要,两个PE间的通讯会需要其他PE的传递,在这种情况下就需要生成树这样的协议来进行防环。
正是因为有全互联的拓扑结构,VPLS只需要使用更简单的防环机制:水平分割。在同一VPLS实例里,从一根伪线发来的流量不能转发到其他伪线上去。
5. H-VPLS
传统VPLS的痛点是扩展性比较差,因为全互联的拓扑需要在n个PE间建立起n*(n-1)/2条伪线。对于需要泛洪的BUM流量,PE需要复制流量到每条伪线上。因此无论是控制平面还是数据平面的压力都很大。H-VPLS被设计于减轻这种压力。

5.1 架构变化

传统VPLS的架构是扁平的全互联,而在H-VPLS是分段的。
- 只有nPE是全互联的,和传统VPLS的功能一致。-
- uPE只需要点到点的接入伪线连接到nPE。
- 如果启用了接入伪线备份功能,则会有一主一备两条伪线连接不同的nPE。
- 在nPE看来,接入伪线被当作AC看待,接入到nPE的VFI。
原来的PE变成了两个角色:
- User-facing Provider Edge (u-PE):通常是运营商接入网PE,直接面向CE的设备,进行正常的交换动作。
- Network Provider Edge (n-PE):通常是运营商核心网PE,它从uPE接收汇总的流量,在核心网根据VFI来处理VPLS实例内的数据转发。
5.2 水平分割

Split-Horizon Group(SHG)水平分割组:
- 同一个SHG的成员无法互相转发以太帧。
- 默认所有VFI的PW被分配到SHG1里,因此一个VPLS实例里,从一个PW发来的流量无法转发到别的PW上。
- 接入PW和AC默认没有启用水平分割组的功能,因此也不属于任何一个SHG里,所以从一个接入PW发来的流量,可以发给VFI的PW和其他的接入PW。
- 可以手工设置SHG,对于AC,可以将整个物理接口或是EFP放到一个SHG里。不是所有的平台都支持给接入PW分配SHG。
6. 高可用
6.1 VPWS PW备份介绍
如果PW的LSP路径上有链路或是节点的故障,IGP和LDP会重新收敛。如果有流量工程TE和快速重路由FRR功能,PW会迅速切换到备份的隧道上,但是PW的状态不变,因为LDP的远程Hello依然可达,LDP的远程会话并没有断掉。
但如果是远端节点或是它的AC故障了,则PW就会down掉,TE/FRR也无济于事。如果远端CE是双上联到不同的PE,则可以使用备份PW的功能。

6.2 单向PW备份

- 允许一侧的PE连接到两个远端PE或一个远端PE的两个AC上。
- 两条PE,主和备为一个节点或AC提供备份。
- 如果主PW故障,则切换到备PW上。
6.3 双向PW备份

- 允许两个PE连接到两个远端PE。
- 双向PE备份需要在PE对AC的那一侧使用MC-LAG(跨设备链路聚合)。类似于Nexus交换机的vPC。
- 一共是四条伪线,只有连接本地Active PE和远端Active PE的伪线是主的伪线,其余3条为备份。
- MC-LAG是负载均衡的,当流量发到Standby PE的时候,流量会经过ICL(两个MC—LAG设备之前的互联链路)到Active PE,再通过Active PW发出流量。
- 如果接入侧使用其他的高可用方式,例如使用MST来负载不同VLAN的流量,则双向PW备份会失败。原因是2条PE到CE的link并不是Active Active的,因为无法和PW进行联动。
6.4 H-VPLS PW备份
- 正常状态下,nPE伪线全互联,uPE主备PW连接到两个nPE。
- MPLS域内节点或是链路的故障会导致TE/FRR介入,nPE的PW会使用其他的路径。不会影响到uPE的PW,因为nPE的LDP会话没有中断。

- 如果nPE节点故障或是其所有的MPLS接口Down了,uPE的PW会进行主备的切换。
- 如果有远端来的流量由于远端nPE的MAC地址表没有及时更新,所以依然会发给故障的nPE,因此会丢包。
- 直到远端nPE收到其他nPE发来的CE的数据帧,才会更新远端nPE的MAC地址表,才会按照正确的表项进行转发。
- 或者是等待远端nPE的MAC地址表的表项老化,条目被移除。再有流量,则会进行泛洪,找到争取的nPE去转发流量。

- 当PE切换成功之后,uPE会产生一条MAC Withdrawal消息给它的远端nPE。
- 远端nPE会清理它的MAC地址表,并将这条消息传给VFI下所有的其它nPE。其它nPE也会清理自己的MAC地址表。
- 当再有到CE的流量远端nPE,由于MAC地址表里已经没有CE的MAC了,因此对于未知单播流量会在VFI内所有的nPE间进行泛洪。
- 当找到目的MAC的正确nPE出口,就会停止丢包了。

6.5 PW备份切换速度
PW切换的速度取决于两点:
- 检查到主PW故障的时间。
- 切换到备用PW到它进入到转发状态的时间。
主PW故障检测:
- AC故障,PE检测到故障后发送LDP Notification信息,包括PW Status TLV。
- 节点故障:
- 远端PE的环回地址从路由表中移除。
- T-LDP会话超时,时间通常会比较长。
- 多跳BFD会话断开,BFD的检测间隔在毫秒级。
备份PW的状态:
- 冷备:默认行为,在被激活之前,PE不会传输备份PW的信令。
- 温备:在控制层面,PW的信令已经被交换,T-LDP的参数也协商完毕,在标签映射消息里携带的PW Status TLV会显示PW的备份状态。数据层面没有被激活,即没有被安装到转发表中,备份PW不会被用于转发数据。
- 热备:在控制层面,PW已经被激活了,转发表也有条目了,可以说是处于可以转发的状态。PW的备份状态,是由于MC-LAG会控制流量的方向,不在这条PW转发流量。
6.6 本地交换

Local Switching是PE在两个AC之间直接转发2层流量。这些2层流量不会被转发到MPLS网络中,因此不会有额外的封装和解封装操作。
对于local xconnect,因为是点到点的连接,直接将一个AC的流量转发到另一个AC。如果是local bridge domain,则查表后转发到正确的AC。Local bridge domain只是网关BDI,如果需要路由到其他网段的话。