VLL的分类
CCC方式VLL
概述
电路交叉连接CCC(Circuit Cross Connect),是通过手工配置来实现VLL的一种方式。
CCC方式VLL因为不进行信令协商,不需要交互控制报文,因此消耗资源比较少,易于配置。适用于小型、拓扑简单的MPLS网络。
拓扑结构
CCC的连接方式可以分为本地连接和远程连接两种方式。CCC方式的两种拓扑结构如图4-3所示。
本地连接:VPN2的Site1和Site2通过CCC本地连接进行互连,它们接入的PE3相当于一个二层交换机,CE之间不需要LSP隧道。
远程连接:VPN1的Site1和Site2通过CCC远程连接进行互连。Site1与Site2间需要两条静态LSP,一条从PE1到PE2,表示从Site1到Site2的LSP,另一条从PE2到PE1,表示从Site2到Site1的LSP。两条橙色虚线组成一条双向的PW,即CCC远程连接,为客户提供类似传统二层VPN的二层连接。
CCC远程连接方式是一种静态配置VC连接的方式,将VC一端收到的二层协议报文映射到一个静态的LSP隧道上去,这样二层报文在途经的每一跳设备就根据该静态LSP进行MPLS转发,最后将报文转发到VC的另一端。与其它方式的VLL不同,CCC方式VLL采用一层标签传送数据,这一层标签在每个LSR上进行标签交换。因此CCC对LSP的使用是独占性的,而且在两个方向都需要配置静态的LSP。CCC的LSP只用于传递这个CCC连接的数据,不能用于其他MPLS L2VPN连接,也不能用于BGP/MPLS IP VPN或承载普通的IP报文。
Martini方式VLL
概述
Martini方式VLL使用LDP作为传递VC信息的信令,此种方式遵循RFC,对标准的LDP进行了扩展,增加了FEC类型(VC FEC)用于VC标签的交换。PE为CE之间的每条连接分配一个VC标签,二层VPN信息将携带着VC标签,通过LDP建立的公网LSP,转发到对端的PE。由于用不同的VC标签来区分不同的VLL连接,这样实际上在公网的LSP上建立了一条VC LSP,使得公网的LSP可以被多条VC LSP共用,只有PE设备需要保存VC Label和LSP的映射等少量信息。P设备不包含任何二层VPN信息,所以扩展性较好,解决了CCC方式VLL公网隧道不能被共用的问题。
Martini方式中,用VC Type和VC ID来唯一识别一个VC。
VC Type:表明VC的封装类型,例如VLAN或Ethernet。
VC ID:标识VC。相同VC Type的所有VC,其VC ID必须在整个PE唯一。
实现过程
Martini方式VLL的实现过程包括VLL的建立和VLL的报文转发两个部分。VLL的建立关键部分是PW的建立,PW建立好后即可进行报文的转发。
Martini方式使用扩展的LDP信令交互VC信息,VC信息的交互信令中介绍了该信令的详细信息。
PW的建立
建立PW时的标签分配顺序采用下游自主方式,标签保持方式采用自由标签保持方式。标签分配方式及标签保持方式的详细介绍请参见《S12700 V200R010C00 配置指南-MPLS》 MPLS LDP配置 中的“LDP LSP的建立”。
PE间LDP会话建立后,PW建立过程如图4-5所示:
PE1发送Request报文到PE2,同时采用DU方式主动向PE2发送标签映射消息(Label Mapping Message),该消息中包含VC标签,VC Type,VC ID,接口的参数等VC信息。
PE2收到Request报文后,发送Mapping报文给PE1。PE2收到Mapping消息后,比对本地VC信息,若VC信息一致,则说明PE1和PE2在同一个VLL内。此时PE2将接受标签映射消息,单向VC1建立成功,同时PE2也知道了到对端PE1需要打的内层VC标签。
PE1收到PE2的标签映射消息后作同样的检查和处理,最终也成功建立VC2。此时,两条反向的VC,也就是PW建立成功了。
PW的拆除
当检测到AC、Tunnel变为Down或者VC被删除时,将删除PW。PW拆除过程如图4-6所示:
如果检测到AC、Tunnel变为Down或者VC被删除,则PE1将发送Withdraw消息(用于通知对端撤销标签)给PE2。为了更快的删除PW,PE1采用Withdraw和Release消息(对Withdraw的回应报文,通知发送Withdraw消息的设备本端已撤销标签)连续发送的方式。
PE2收到PE1发送来的Withdraw与Release消息后,根据PE1的Withdraw消息撤销VC1的标签,拆除VC1。拆除VC1后向PE1发送Release消息,通知PE1撤销VC2的标签。
PE1收到PE2的Release消息后,撤销VC2的标签,拆除VC2。PE1与PE2完成对PW的删除。
经过VC信息的交互,PW成功建立后,VLL就建立起来了。下面讲述Martini方式VLL报文的转发过程(图中VPN1和VPN2为两个VLL网络)。
如图4-7所示,Martini的报文交互过程分为从Site1到Site2和从Site2到Site1。
从Site1到Site2
VPN1的Site1中发送到PE1的VLAN10的报文,在到达PE1后,PE1先打上VC标签3000,然后再打上LSP1的出标签1000,即进入LSP1隧道(橙色虚线);对于VPN2的Site1发送到PE1的VLAN100报文,PE1在其上打上VC标签4000,然后再打上LSP1的出标签1000,同样进入LSP1隧道(橙色虚线)。
这些报文在到达PE2后,PE2去掉LSP1的入标签1002,根据内层VC标签3000,选择到VPN1的Site2的出接口;根据VC标签4000,选择到VPN2的Site2的出接口。因为VC Label(3000、4000)是PE2在建立各自VC时,通过LDP信令传给PE1的。
从Site2到Site1
VPN1的Site2中发送到PE2的VLAN10的报文,在到达PE2后,PE2先打上VC标签3500,然后再打上LSP2的出标签2000,即进入LSP2隧道(蓝色虚线);对于VPN2的Site2发送到PE2的VLAN100的报文,PE2在其上打上VC标签4500,然后再打上LSP2的出标签2000,同样进入LSP2隧道(蓝虚线)。
这些报文在到达PE1后,PE1去掉LSP2的入标签2002,根据内层VC标签3500,选择到VPN1的Site1的出接口;根据VC标签4500,选择到VPN2的Site1的出接口。因为VC Label(3500、4500)是PE1在建立各自VC时,通过LDP信令传给PE2的。
从上面的交互过程中可以看到,在Martini方式下,外层标签用于将各个VC的数据在ISP网络中进行传递,外层的LSP隧道是被共享的,通过内层的VC标签可以对数据进行区分。
部署Martini方式需要ISP网络能够自动建立LSP隧道,所以需要ISP网络支持MPLS转发及MPLS LDP。
在Martini方式VLL的PW建立过程中,标签映射消息通过增加128类型的VC FEC对标准LDP进行扩展,来携带VC的信息。
图4-8是一个标签映射消息的结构。可以看到,标签映射消息中包含有VC FEC。
VC FEC描述了内层VC Label以及接口参数等信息。
字段名 |
含义 |
位数(bit) |
说明 |
---|---|---|---|
VC TLV |
VC的TLV值 |
8 |
取值为0x80,即十进制的128。 |
C |
控制字 |
1 |
1表示支持控制字;0为不支持控制字。 |
VC Type |
VC类型 |
15 |
类型包括Ethernet、VLAN等。 |
VC Info Length |
VC信息长度 |
8 |
VC ID和interface parameters的长度。 |
Group ID |
组ID值 |
32 |
一些VC组成一个组,主要用来批量撤消相应的VC信息。 |
VC ID |
VC的ID值 |
32 |
- |
Interface Parameters |
接口参数 |
不确定,其长度信息包含在VC Info Length中 |
一些接口参数值,常用的是接口的MTU值、接口描述等。 |
SVC方式VLL
概述
在Martini中用LDP进行VC标签的交互,如果不使用LDP,而是在PE上直接手工指定内层标签,这就是静态虚拟电路SVC(Static Virtual Circuit)模式,可以认为SVC是Martini的简化。
SVC方式VLL的VC标签是静态配置的,不需要VC标签映射,所以不需要LDP信令传输VC label。
拓扑结构
SVC的外层公网隧道标签建立的方法与Martini相同。内层标签在配置VC的时候进行手工指定,PE之间不需要信令来传递标签信息。SVC不支持本地连接,其网络拓扑模型和报文交互过程与Martini完全相同。
如图4-9所示,VPN1为SVC方式VLL。在PE1上指定报文发送的标签值为4000,报文接收的标签值为3500。在PE2上指定报文发送的标签值为3500,报文接收的标签值为4000。当VPN1中Site1要发送报文到Site2时,PE1为报文打上内层标签为4000,PE2接收到这个内层标签为4000的报文后,根据其配置,找到接收标签为4000对应的AC,直接发送到对应CE。
Kompella方式VLL
概述
Kompella方式VLL是使用BGP作为信令协议在PE间传递二层信息和VC标签的一种MPLS L2VPN技术。
Kompella方式VLL与BGP/MPLS IP VPN类似,也使用VPN-Target来进行VPN信息的收发控制,给组网带来了很大的灵活性。在内层标签的分配上,Kompella方式与Martini方式完全不同。Kompella采取标签块的方式,事先为每个CE分配一个标签块,这个标签块的大小决定了这个CE可以与其它CE建立多少个连接。这样做的好处是允许为VPN分配一些额外的标签,留待以后扩容使用。PE根据这些标签块进行计算,得到的实际的内层标签,用于报文的传输。要建立两个CE之间的连接时,需要在PE上设置本地CE和远程CE的CE ID。
假设一个企业的VPN包括10个CE,考虑到企业扩展业务,将来可能会有20个CE。这时,可以把每个CE的CE range设置为20,预先为未来的10个CE分配标签。以后VPN添加CE节点时,只需要在与新CE直接相连的PE修改配置,其他PE不需要进行任何修改。
拓扑结构
Kompella方式的VLL既支持远程连接,也支持本地连接。Kompella方式支持的拓扑结构如图4-10所示。
对于图4-10中,VPN1的Site1和Site2,通过Kompella远程连接(蓝色虚线)互连。VPN2的Site1和Site2,通过Kompella本地连接(黑色虚线)互连。
由于BGP协议具有节点的自动发现能力,Kompella方式对各种复杂的拓扑支持能力更好。
Kompella方式的报文交互过程与Martini方式的报文交互过程类似,都使用标准的两层标签。Martini方式的内层标签是采用扩展的LDP作为信令进行交互,而Kompella方式的内层标签则是采用MP-BGP作为信令进行交互,两者VC表项的形式略有不同。
MP-BGP信令中,MP-REACH和MP-UNREACH属性传递VLL的标签信息,接口参数信息在扩展团体属性中传递,VPN成员关系靠RD(Route Distinguish)和VPN-Target来确定,RD和VPN-Target都在扩展团体属性中传递。
利用BGP信令协议建立PW的过程如图4-11所示。
- 当PE1和PE2之间的BGP Session已经建立,PE1则向PE2发送携带MP-REACH属性的Update消息,包括Site ID和标签块信息。
- PE2收到该Update消息后,根据自己的Site ID和报文中的标签块,计算出唯一的一个标签值(标签的计算原理请参见VC标签的计算),作为VC标签,此时单向VC1建立成功。同时,PE2根据报文中Site ID和本地标签块,也可以得到PE1的VC标签值,并向PE1发送Update消息,PE1收到PE2的Update消息后作同样的检查和处理,最终也成功建立VC2。
利用BGP信令协议拆除PW的过程如图4-12所示。
- 当PE1取消指定PE2为其对端后,PE1向PE2发送携带MP-UNREACH属性的Update消息,PE2收到该消息后释放标签并拆除VC1,同时向PE1回应携带MP-UNREACH属性的Update消息。
- PE1收到标签释放消息后,释放标签并拆除VC2。
Kompella的VC标签的计算部分相对复杂,本节将介绍Kompella方式下标签的计算方法。
Kompella方式的内层标签则是采用MP-BGP作为信令进行交互,BGP交互的内容是标签块,也就是Label Block。标签块是一个连续的标签范围。
为了清楚的描述标签块,需要定义几个值:
标签块的起始标签LB(Label Base)
块的大小LR(Label Range)
偏移量LO(Label-block Offset)
多个标签之间的关系通过偏移量LO(Label-block Offset)来定义。LO标志本CE标签块前面所有本标签块大小的总数。如图4-13,第一个标签块为CE1的标签块Block1,LR为3,LO为0;第二个标签块为CE2的标签块Block1,LR为3,由于它前面没有CE2的其他标签块,所以它的LO为0;第三个标签块也是CE1的标签块,由于前面已经有一个CE1的标签块Block1了(大小为3),所以它的LO就是3。LO会在VC标签计算被使用。现在每一个标签块都可以用三个参数来描述,那就是LB/LR/LO。这样这个标签块就被清楚的定义了。
当PE上增加一个CE的相关配置时,需要指定标签块的大小LR,LB是PE自动分配的。这个标签块作为一个NLRI(Network Layer Reachable Information)条目通过BGP传递到其它PE。当该CE的配置被删除或者PE与该CE的连接失效,这个标签块也会被删除,BGP同样会做撤销通告。
假设在开始部署Kompella方式的VPN时,CE1需要与远端其它CE建立两条VC,那么这时定义标签块的大小不能小于2。为了今后扩容的考虑,也可以定义Rang=10。
无论Rang为多大,随着网络的扩容VC数量的增加,总会出现标签不够用的时候。这时候我们就需要重新定义Rang的大小,给一个更大的标签空间。但问题出现了,前面已经介绍了标签块的数据是通过BGP的NLRI来传递的,并且这个标签块已经被用于计算VC标签和实际数据的转发。为了不破坏原有的VC连接,采用一个办法,就是给这个CE分配一个新的标签块,并且作为一条新的NLRI通过BGP通告。也就是说一个CE的标签空间可能是由许多个标签块组成的,这种机制解决了网络扩展的需求。
CE ID是在同一个VPN内唯一标识CE的参数。在同一个VPN内CE ID必须是互不相同的,CE ID会在每一个NLRI中携带,这样就可以将不同的标签块与它对应的CE关联起来。
CE ID的另一个作用是用于VC标签的计算,所以CE ID不能随便选择。简单的判断方法是本端CE配置的Range值为x,要与对端CE(CE ID为y)连接,那么必须满足条件x > y。否则就需要增加x的大小。
对于存在多块标签的情况下,配置的Range值为多块标签的总和。
内容 | 定义 | 内容 | 定义 |
PE-A为CE-m分配的Label Block | Lm | PE-B为CE-n分配的Label Block | Ln |
Lm的Block Offset | LOm | Ln的Block Offset | LOn |
Lm的Label-Base | LBm | Ln的Label-Base | LBn |
Lm的Label-Range | LRm | Ln的Label-Range | LRn |
VC标签的计算过程如图4-14所示。
假设PE-A、PE-B为同属于同一个VPN-x的CE-m和CE-n建立一条VC(m为CE-m的CE ID,n为CE-n的CE ID)。
PE-A收到远端PE-B发过来一个标签块LBn/LRn/LOn。
检查从PE-B收到CE-n的封装类型是否与CE-m的相同。如果封装类型不一致,则停止处理。
检查CE ID,是否m=n,如果是m与n的值相同,则报错,然后停止处理。
如果CE-m有多个标签块,本地为对端分配的标签一定在本地标签中间中,即LBm <= X < LBm + LRm 检查这些标签块是否有满足LOm <= n < LOm + LRm。如果任何一个都不满足,则报错,然后停止处理。
检查和CE-n相关的所有的标签块是否有满足LOn <= m < LOn + LRn,如果任何一个都不满足,则报错,然后停止处理。
检查PE-A和PE-B之间的外层通道是否正常建立。如果没有正常建立,就停止处理,这里假设为LSP隧道,标签为Z。
PE-A为CE-n分配内层标签为(LBn + m - LOn),即VC的出标签;PE-A为CE-m分配内层标签为(LBm + n - LOm),即VC的入标签。
PE-B到PE-A的外层隧道的标签为Z。
内外层标签都已经计算出来并且VC处于UP状态后,就可以继续进行二层报文的传输。
为了交互VC信息,Kompella对MP-BGP的NLRI部分做了扩展。用于携带L2VPN的信息。与L3VPN类似,Kompella方式的L2VPN也使用了Route-Distinguisher和VPN-Target的信息。需要重点说明的是VPWS技术毕竟是点到点的VC,如果一个CE需要与多个CE建立VC,那么就需要有多个接口或者子接口。即使在同一个VPN内,两个CE之间必须有VC连接才能够直接通讯。
图4-15是NLRI中描述标签块的信息,在可变长的TLV部分有一个CSV(Circuit Status Vector)部分用于描述标签块的LR、Tunnel Status等。
为了携带更多的L2VPN信息,定义了一个新的二层信息扩展团体属性,如图4-16所示。