VPLS技术简介
文\王辉 陈书浩
1 VPLS为何物
VPLS,即Virtual Private LAN Service,实际上是一种基于以太网的L2VPN技术。VPLS集以太网和MPLS的优点于一体,它使分散在不同地理位置上的用户网络可以相互通信,就像它们直接相互连接在一起一样,广域网对于所有用户来说是透明的。
VPLS是一种典型的MPLS L2VPN技术,用户接入方式为以太网,支持的接入接口类型单一。从用户的角度来看,整个MPLS网络就是一个二层的交换网络。
VPLS可选择使用LDP信令和MP-BGP信令来构建PW,基于LDP协议的信令通过在每一对PE之间建立点到点的LDP会话来建立虚电路。基于BGP协议的信令机制则可以充分利用BGP路由反射器的特点,这样PE只需路由反射器建立信令会话即可,这就大大提高了可扩展性。同时,BGP协议还可以支持跨越多个自治系统(AS)网络结构,这对于多个网络运营商并存情况下的VPLS实现非常有利。
VPLS可以支持数量非常多的站点,但无法避免广播、多播报文在核心网络中复制,额外占用了带宽。
2 VPLS的基本原理
2.1 VPLS基本术语
UPE(User facing-Provider Edge):
靠近用户侧的PE设备,主要作为用户接入VPN的汇聚设备。
NPE(Network Provider Edge):
网络核心PE设备,处于VPLS网络的核心域边缘,提供在核心网之间的VPLS透传服务。
VSI(Virtual Switch Instance):
虚拟交换实例。通过VSI,可以将VPLS的实际接入链路映射到各条虚链接上。
PW(Pseudo Wire):
虚链路,在两个VSI之间的一条双向的虚拟连接,它由一对单向的MPLS VC构成。
AC(Attachment Circuit):
接入链路,指CE与PE的连接,它可以是实际的物理接口,也可以是虚拟接口。AC上的所有用户报文一般都要求原封不动的转发到对端SITE去,包括用户的二三层协议报文。
Encapsulation:
封装,PW上传输的报文使用标准的PW封装格式和技术。PW上的报文封装有Tagged和Raw模式。
2.2 VPLS的设计思想
VPLS支持PE设备同侧的本地交换,可在本vsi内进行二层转发。
对于与远端PE下的站点通信,原理与其他L2VPN相同,利用标签栈对用户报文进行封装,以实现其在MPLS网络中的透明传送:外层标签(也称为公网标签)用于将报文从一个PE传递到另一个PE,内层标签(在MPLS L2VPN中,称为VC标签)用于区分不同的VPN中的连接,接收方的PE根据VC标签决定将报文传递给哪个CE。转发过程中,报文的标签栈变化如下图所示:
图1:VPLS转发标签变化
2.3 VPLS的基本模型
①PE全连接的基本模型
图2:PE全接连模型
PE全连接VPLS模型的思想是:
接入VPLS的各站点的PE设备之间逻辑全连接,PE设备能在多点之间进行Mac地址学习以及数据包转发。MPLS网络提供隧道来透传VPN站点间的报文,网络中的P设备作用类似与L3VPN中的P设备,它不参与Mac地址的学习与交换,只对MPLS报文进行转发。PE上各个VPN之间的转发表相互独立,使得各VPN间的Mac地址可以重叠。
②分层VPLS模型(H-VPLS)
图3:分层VPLS模型
分层VPLS模型的思想是:
所有的NPE设备之间逻辑全连接,UPE只与最近的NPE建立虚连接,通过NPE与对端VPN站点进行报文交换,这样层次化了网络拓扑。H-VPLS模型对NPE性能要求高,因为这里VPN业务流量集中,而对UPE性能要求比较低,因为这里用于VPN业务的接入。另外,还可以在UPE与NPE之间增加链路备份,保证网络的健壮性。UPE与NPE之间的虚连接可以是使用QinQ或LDP来建立。
2.4 VPLS转发表中Mac地址的学习和老化
①与PW关联的远程Mac地址学习
当PE设备在入方向的VC LSP上收到本VPLS内的数据包后将进行Mac学习,然后PW将此Mac地址与出方向的VC LSP形成映射关系,这与二层交换机将学习的Mac地址与出端口对应类似。
②与用户相连端口的本地Mac地址学习
对于从CE设备转发上来的二层报文,需要将报文的源Mac学习到VSI的对应端口上。
③MAC地址老化
PE学习到的不再使用的MAC地址需要有老化机制来删除。老化机制使用了MAC地址对应的老化定时器。在接收到报文并处理时,根据报文中的源MAC地址,如果这个源地址启动了相应的老化定时器,则PE重置该老化定时器。
2.5 转发和泛洪
①转发
VPLS中的数据转发是通过查找VSI的MAC地址转发表来完成的,H3C Comware平台的转发表的格式如下所示
[S8500-2]display mac-address vsi
Mac ADDR STATE VPN ID PEER AGING TIME
000d-88f7-cb9b dynamic 1 Vlan-interface4000 AGING
0010-5ce6-764e dynamic 1 1.1.1.1 AGING
表中显示设备学到了一条本地Mac地址和远端Mac地址。对于目的mac地址为“0010-5ce6-764e”的报文,H3C设备进行MPLS转发到对端地址为1.1.1.1的PE设备;对于目的mac地址为“000d-88f7-cb9b”的报文,H3C设备直接对报文在vlan4000内进行二层转发。
②泛洪
设备从VSI中的一个端口上收到未知单播、多播、广播报文时,采用泛洪的方式向VSI本地和所有VSI对端转发;从PW上收到的未知单播、多播、广播报文时,则只向VSI本地泛洪,而不再向其他对端PE泛洪(即,水平分割原则)。
2.6 PE全连接与环路预防
① 为什么要PE间全连接
非全连接拓扑需要多个PE之间的数据转发,容易形成环路。另外如果是非全连拓扑,
可能需要使用STP,而在运营商核心网络里他们是不愿意部署STP的。
② 全连接后环路的预防
全连接网络仍然有可能存在环路,因此在公网和私网仍然需要想一些办法来预防环路
的发生。
在公网: 使用水平分割原则,规则是从公网侧PW收到的数据包不再转发到其他PW上,只能转发到私网侧。即全连接后通过不使数据在PE间二次转发来避免环路(分层VPLS的UPE, SPE之间转发是特例)。
在私网: VPLS网络允许用户在VPN内运行STP协议,BPDU报文只是在ISP的网络上透传。
2.7 AC上的接入方式
①传统的VLAN接入方式
图4:传统的VLAN接入方式
如上图所示,CE-A与CE-B属于同一VPN,CE-A使用vlan10-vlan50做VPLS的接入vlan,则PE-A上也必须配置vlan10-vlan50,且两设备间端口以trunk方式连接。具体的转发流程如下:
l 在PE-A和PE-B上配置vlan10属于同一VSI,网络上PE、P各设备做相应路由、MPLS配置。
l CE-A下行的vlan10内收到用户目的为CE-B下挂主机的报文后,在vlan10内查找MAC地址转发表后,向PE-A转发,且为报文打上Tag值10。
l PE-A接收到CE-A转发来的报文,在本VSI内查找VPLS转发表,发现报文将被转发到PW对端PE-B,地址为2.2.2.2。
l PE-A首先将报文封装一层私网标签,该标签是PE-B与PE-A协商后分配的,然后私网标签外再封装一层用于在公网LSP转发的公网标签,报文在P网络中做MPLS转发到达PE-B设备,报文的格式请参考图1。
l 报文被转发到PE-B上后,只剩下一层私网标签,PE-B根据私网标签判断出该报文属于的VSI后,在该VSI内查找VPLS转发表,然后发给CE-B。
l CE-B将收到与CE-A转发出来且未被PE-A封装前一样的报文,CE-B根据报文的Tag值在vlan10内做二层转发,使得报文到达目的主机。
但我们不难看出,传统的VLAN接入方式有明显的不足之处:
在实际网络中,一台PE设备必定下挂多台CE设备,那么同一PE下挂的不同CE间VLAN-ID一定不能重叠,否则不同CE设备上相同VLAN之间将无法隔离;PE设备和CE设备的VLAN资源是有限的;ISP将干预用户在私网内VLAN-ID的分配,这显然是不妥当的。
如何能够对传统的vlan接入方式优化和改进呢?
②QINQ接入方式
图5 QINQ接入方式
和传统vlan接入方式相比,在PE设备上使用QINQ技术后,同一PE下挂的CE设备vlan-id可以重叠、PE设备vlan-id不必与CE的vlan-id相同,完美的解决了传统vlan接入方式的不足。
在传统vlan接入方式转发流程的基础上,我们看看QINQ接入方式下的报文转发流程:
图6 QINQ接入方式下报文的转发
PE-A:
l 给从CE-A转发来的报文再加上一层vlan-id为100的Tag头
l 给报文加上为VLAN 100所对应的VC私网标签
l 给报文加上能够到达PE-B的公网标签
l 向公网转发报文
PE-B:
l 根据私网标签判断出该报文属于的VSI,再根据报文的目的mac查找到出端口,转发向CE-B
l PE的出接口为Access端口,去掉由PE-A加上的外层Tag头
l 报文转发到CE-B,此时的报文的Tag=10
2.8 PW上的封装方式
①两个概念
U-TAG:用户定界符,对PE设备来讲,ethernet接入方式从CE转发上来报文的tag值是u-tag,原则上u-tag要求原封不动地被转发到对端站点的CE设备上去。
P-TAG:服务定界符, 对PE设备来讲,Vlan接入方式从CE转发上来报文的tag值是
p-tag,使用QINQ为报文封装的tag也是p-tag。而p-tag如何在PW上传输需根据PW上的封装方式来确定。
②PW上的两种封装方式
Raw封装:在PW上转发报文的时候要求去掉p-tag。
Tagged封装: 在PW上转发报文的时候要求保留p-tag。
可以视对端PE与CE连接的下行端口的link-type来灵活选择PW上的封装方式,这两个概念稍后我们将详细的介绍。
3 LDP信令下的VPLS
LDP信令介绍
PW间隧道的建立有两种方式:
LDP(draft-ietf-l2vpn_vpls_ldp_xx),即Martini方式
MP-BGP (draft-ietf-l2vpn_vpls_bgp_xx),即Kompella方式
LDP信令采用VC-TYPE+VC-ID来识别一个VC。VC-TYPE说明这个VC的类型,同一个VC-TYPE的所有VC中,其VC-ID必须在VPN内较少。连接CE的PE通过LDP交换VC标签,并通过VC-ID将对应的CE绑定起来。当连接两个PE的LSP建立成功,双方的标签交换和绑定完成后,一个VC就建立起来了,两个CE就可以通过这个VC传递二层数据。为了在PE之间交换VC标签,Martini草案对LDP进行了扩展,增加了VC FEC类型。此外,由于交换VC标签的两个PE可能不是直接相连的,所以LDP必须使用remote peer来建立session,并在这个session上传递VC FEC和VC标签。
采用LDP相对MP-BGP简单,但LDP不能提供VPN成员自动发现机制。
LDP信令需要在每两个PE之间建立remote session,session连接数存在N平方问题。
4 BGP信令下的VPLS
BGP方式的L2VPN不是直接对CE与CE之间的连接进行操作,而是在整个ISP网络中划分不同的VPN,在VPN内部对CE进行编号。要建立两个CE之间的连接时,只需在PE上设置本地CE和远程CE的CE ID,并指定本地CE为这个连接分配的Circuit ID。
与BGP/MPLS VPN相同,BGP方式的L2VPN也使用Route Target来区分不同的VPN,这使得VPN组网具备了极大的灵活性。
在标签分配方面,扩展的BGP采取标签块的方式,一次为多个连接分配标签。用户可以指定一个本地CE的范围(CE Range),CE Range表明这个CE能与多少个CE建立连接。系统会一次为这个CE分配一个标签块,标签块的大小等于CE Range。这种方式允许用户为VPN分配一些额外的标签,留待以后使用。这样会造成标签资源的浪费,但是同时带来一个很大的好处:减少VPN部署和扩容时的配置工作量。
5 分层VPLS(H-VPLS)
上文提到,为了防止环路,我们在PE间建立 full mesh lsp,这样将导致出现了两个问题:当新增加一台PE时,该台PE都需要与其他PE进行全连接的配置,这样当PE很多的时候,配置工作量相当大;另外广播包复制的复制问题,导致在PE设备间洪泛,影响带宽。
将PE分层的H-VPLS模型可以在一定程度上解决上面的问题。
H-VPLS的核心思想是通过把网络分级,NPE与其他NPE建立全连接,且转发遵循水平分割,但数据可以向NPE下挂的UPE转发。UPE间无须建立全连接,UPE与NPE间数据转发不遵循水平分割。
分层PE间的设备可以通过QinQ或者PW来连接:
①基于LDP的分层H-VPLS模型
图16 基于LDP的分层VPLS模型
上图所示为一个H-VPLS模型,UPE-A作为汇聚设备,它只跟NPE-A建立一条虚连接U-PW,跟其他所有的对端都不建立虚链接。数据转发流程如下:UPE-A负责将CE-A上送的报文发给NPE-A,同时打上U-PW对应的MPLS标签,NPE-A收到报文后,根据数据包携带的MPLS标签来判断报文所属的VSI,再根据用户报文的目的MAC打上对应的VC私网标签和在公网LSP转发的公网标签,然后转发报文。NPE-B收到报文后,根据VC私网标签 判断数据包所属的VSI,再查找VPLS转发表后转发出去。
如果CE-A与CE-B为本地CE之间交换数据,由于UPE-A本身具有桥接功能,UPE-A直接完成两者间的报文转发,而无需将报文上送NPE-A。不过对于未知单播、广播和多播报文,UPE-A在进行桥广播的同时,仍然会通过U-PW转发给NPE-A,由NPE-A来完成报文的复制并转发到各PW对端。
②基于QINQ的分层H-VPLS模型
图17 基于QINQ的分层VPLS模型
与基于LDP的分层模型类似,只不过分层PE间不是使用信令生成的PW连接,而是采用QinQ隧道。如图所示,UPE-A为标准的桥接设备,在与CE-A连接的端口使能QinQ,UPE-A为CE-A转发来的数据包打上VLAN-TAG。通过QinQ隧道将报文透传到NPE-A上,NPE-A根据打VLAN-TAG判断报文所属的VSI,再根据用户报文的目的MAC打上对应的VC私网标签和公网标签进行转发。NPE-B收到报文后,根据VC私网标签判断数据包所属的VSI,再查找VPLS转发表后转发出去。
如果CE-A与CE-B为本地CE之间交换数据,由于UPE-A本身具有桥接功能,UPE-A直接完成两者间的报文转发,而无需将报文上送NPE-A。不过对于未知单播、广播和多播报文,UPE-A在进行桥广播的同时,仍然会通过QinQ隧道转发给NPE-A,由NPE-A来完成报文的复制并转发到各PW对端。
③AC接入链路的备份
UPE与NPE设备之间只有单条链路的方案具有明显的弱点,一旦该接入链路失败,汇聚设备UPE下挂的所有VPN都将丧失连通性。所以,对于H-VPLS的两个接入模型中,我们可以设计有备份链路的存在(参考图3的分层VPLS模型):在正常情况下,设备只使用一条主链路接入,当系统检测到主接入链路失败时,可以启用备用链路来继续提供VPN业务。
对于LSP接入的H-VPLS,由于UPE与NPE之间运行LDP会话,可以根据LDP会话的活动状态来判断主链路是否失效;对于QinQ接入的H-VPLS,可以在UPE与它相连的NPE设备之间运行STP,保证在一条链路失败以后启用另一条链路。