www.xahztx.com
CE的CE range设置为20,预先为未来的10个CE分配标签。以后VPN添加CE节点时,只需要在与新CE直接相连的PE修改配置,其他PE不需要进行任何修改。
Kompella方式的结构
Kompella方式的MPLS L2VPN既支持远程连接,也支持本地连接。Kompella方式支持的拓扑结构如图1-8所示。
图1-8 Kompella方式支持的拓扑模型
VPN1Site1PCECESite1Site2CEVPN2Kompella Remote ConnectionKompella Local ConnectionPPCEPE1ISP NetworkPPE2VPN1Site2
对于图1-8中,VPN1的Site1和Site2,通过Kompella远程连接(红色虚线)互连。VPN2的Site1和Site2,通过Kompella本地连接(蓝色虚线)互连。
Kompella方式对各种复杂的拓扑支持能力更好,这得益于BGP的节点自动发现能力。
Kompella方式的报文交互过程
Kompella方式的报文交互过程与Martini方式的报文交互过程类似,都使用标准的两层标签。Maitini方式的内层标签是采用扩展的LDP作为信令进行交互,而Kompella方式的内层标签则是采用MP-BGP作为信令进行交互,两者VC表项的形式略有不同。
www.xahztx.com
图1-9 Kompella的连接方式
VPN1Site5CE7VPN1Site1CE1CE2POS1/0/1GE1/0/0VPN1PATM1/0/0.1PE1ISP NetworkPE2CE5VPN1PPE3Eth1/0/0Site4VPN1CE6Site2CE3Site3CE4
如图1-9所示,起初6个客户设备(CE1~CE6)接入不同的VPN。为了使这6个CE设备可以相互通信,需要建立CE之间的全连接拓朴结构,即每个CE与其它5个CE各建立一条VC。为建立这些连接,在这些CE接入的PE1、PE2、PE3上只要进行如下的配置:
1.在每个PE上创建VPN1,并创建PE含有的CE,如在PE1上,创建CE1、CE2、CE3。
2.为每个CE分配含有足够Label的标签块。这里,由于一个CE和其它5个CE相连,需要分配5个label的标签块。
3.在PE上绑定与CE相连的链路名称和对端CE编号。
如在PE1上绑定
可以看到Kompella方式也可以象CCC方式二层连接一样,可以建立本地连接,PE充当交换机。采用Kompella方式,在全连接的情况下配置简单。
此外,如果用户在开始时,为VPN多分配一些额外的标签,那么再新增加二层VPN站点时,则只需要配置新站点所连接的PE,而不必配置其他的PE。
如图1-9所示,如果在初始时在各个PE上为每个CE分配的标签数大于6个,并且事先绑定了到CE7的链路,那么当新加入站点Site5中的CE7时,只需在PE3上增加CE7和在PE3上绑定与CE7到其他CE的链路即可。
VC标签的计算
Kompella的实现相对复杂,主要是VC标签的计算部分,本节将介绍Kompella方式下标签的计算方法。 Kompella方式的内层标签则是采用MP-BGP作为信令进行交互,BGP交互的内容是标签块,也就是Label Block。标签块是一个连续的标签范围。
www.xahztx.com
为了清楚的描述标签块,需要定义几个值:
? ? ?
标签块的起始标签LB(Label Base)。 块的大小LR(Label Range)。 偏移量LO(Label-block Offset)。
图1-10 Kompella方式VC标签块的计算
PE Label Block1000100110021003100410051006CE1 Label Block2LB=1006LR=3LO=310071008CE1 Label Block1LB=1000LR=3LO=0CE2 Label Block1LB=1003LR=3LO=0
这样这个标签块就被清楚的定义了,如图1-10。
当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的标签空间可能是由许多个标签块组成的,这种机制解决了网络扩展的需求。
多个标签之间的关系通过偏移量LO(Label-block Offset)来定义。LO标志前面所有标签块大小的总合。比如第一个标签块的LR为100,LO为0;第二个标签块的LR为50,那么LO为100;如果有第三个标签块,它的LO就是150。LO会在VC标签计算被使用。现在每一个标签块都可以用三个参数来描述,那就是LB/LR/LO。
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的大小。
www.xahztx.com
图1-11 标签块的计算
CE-mPE-AMPLSNetworkPE-BCE-n内容
PE-A为CE-m分配的Lable Block Lm的Block Offset Lm的Label-Base Lm的Label-Range
定义 Lm LOm LBm LRm
内容
PE-B为CE-n分配的Label Block Ln的Block Offset Ln的Label-Base
Ln的Label-Range
定义 Ln LOn LBn LRn
VC标签的计算过程如图1-11所示。
假设PE-A、PE-B为同属于同一个VPN-x的CE-m和CE-n建立一条VC。 PE-A收到远端PE-B发过来一个标签块LBn/LRn/LOn。
1.检查从PE-B收到CE-n的封装类型是否与CE-m的相同。如果封装类型不一致,则停止处理。 2.检查CE ID,是否m=n,如果是m与n的值相同,则报错“CE ID k has been allocated to two CEs in VPN-x(check CE-m at PE-A)”,然后停止处理。
3.如果CE-m有多个标签块,检查这些标签块是否有满足LOm <= n < LOm + LRm。如果任何一个都不满足,则报错“Cannot communicate with CE-m(PE-A)of VPN-x:outside range”然后停止处理。
4.检查和CE-n相关的所有的标签块是否有满足LOn <= m < LOn + LRn,如果任何一个都不满足,则报错“Cannot communicate with CE-m(PE-A)of VPN-x:outside range”然后停止处理。
5.检查PE-m和PE-n之间的外层通道是否正常建立。如果没有正常建立,就停止处理,这里假设为LSP隧道,标签为Z。
说明对于外层隧道是否建立的判断决定了是否为一个VC计算VC标签,这一点与L3VPN不同。如果外层隧道没有建立,就不为VC计算标签。
6.PE-A为CE-n分配内层标签为(LBn + m - LOn),即VC的出标签;PE-A为CE-m分配内层标签为(LBm + n - LOm),即VC的入标签。 7.PEB到PEA的外层隧道的标签为Z。
8.内外层标签都已经计算出来并且VC处于UP状态后,就可以继续进行二层报文的传输。
下面的举例分阶段说明了CE标签块分配的过程。
假设PE之间都是通过BGP来交换标签块的信息。全部公网LSP隧道都处于正常UP的状态,只需要进行VC标签的计算。图中CE1的CE ID为1,CE2的CE ID为2,以此类推。