PE上增加一个CE的相关配置时,需要指定标签块的大小LRLBPE自动分配的。这个标签块作为一个NLRI条目通过BGP传递到其它PE。当该CE配置被删除或者PE与该CE的连接失效,这个标签块也要被删除,BGP同样会做撤消通告。
假设,在开始部署的时候,CEm需要与远端其它CE建立两条VC,那么定义标签块的大小不能小于2。当然,为了今后扩容的考虑,我们可以定义Rang=10。无论Rang为多大,随着网络的扩容VC数量的增加,总会出现标签不够用的时候。这时候我们就需要重新定义Rang的大小,给一个更大的标签空间。但问题出现了,前面我们谈到标签块的数据是通过BGPNLRI来传递的,并且这个标签块已经被用于计算VC标签和实际数据的转发。为了不破坏原有的VC连接,采用一个办法,就是给这个CE分配一个新的标签块,并且作为一条新的NLRI通过BGP通告。也就是说一个CE的标签空间可能是由许多个标签块组成的(Rang等于LR的总和),这种机制解决了网络扩展的需求。多个标签之间的联系通过一个偏移量来定义LOLabel-block Offset)。LO标志出了前面所有标签块大小的总和。比如第一个标签块的LR100LO0;第二个标签块的LR50,那么LO100;如果有第三个标签块,它的LO就是150LO会在VC标签计算被使用。现在每一个标签块都可以用三个参数来描述,那就是LB/LR/LO
CE ID是在同一个***内唯一标识CE的参数。在同一个***内,每个CE,其CE ID必须是不同的,CE ID会在每一个NLRI中携带,这样就可以将标签块和对应的CE关联起来。在Kompella draft中,CE ID也被用于VC标签的计算。
假设PEk本地有一个CE-k,其CE IDk,收到远端PE-m发过来的CE-m的一个或多个标签块,根据Kompella draft规定,CE-k连接到CE-m的标签必须满足以下两个条件:
1LOm <= k < LOm + LRm  
然后从标签块LBm/LRm/LOm中选择标签,标签值为:
2LBm+kLOm     
公式(1)的右半部分很好理解,结合公式(2),如果不能满足k < LOm + LRmCE-k选用的标签将超出LBm/LRm/LOm标签块的范围。但为什么要求LOm <= k,其中包含着什么意义?事实上,理解了LOm <= k,也就理解了Kompella标签分配算法中隐含的思想。
根据前面的叙述,LOm代表的是当前这个标签块之前CE-m的标签总和,也就是已经为CE-m分配掉的标签总数。要求 LOm<=k,就是规定,标签与CE ID是一一对应的。所有标签块里的第一个标签是分为CE 1的;所有标签里的第二个标签,是分给CE 2的。如果CE ID大于LOm,那么说明这个CE已经无标签可分了。CE ID如果是不连续的,那么LOm里面的标签有些会空余出来,这些已分配标签留给谁用呢?当然是留给CE IDLOm小的CE使用。这反映了Kompella标准设计者的一个默认假设,即,如果一个CE IDk,那么从0kCE ID都应该会被应用,并因此为这些CE预留了标签。
这就提出了一个问题,如果在配置CE ID时,不按自然数顺序编号,而是跳跃性的配置,一些CE ID配置得特别大,就会导致跳跃区域的CE ID没有被使用,但系统仍然给其预留标签,从而浪费标签,这是标准所不乐见的。因此,用户在配置时,最好能对CE顺序分配CE ID,这样能作到最节省的使用标签。
要求LOm <= k,事实上反映了Kompella标准设计者的一个美好愿望:用户配置时,能顺序配置CE ID,这样标准中的标签分配算法就能作到最节省标签空间。
下面详细描述了计算VC标签的过程。假设PE-k本地有一个CE-kCE IDk,收到远端PEmCE-m分配的一个标签块LBm/LRm/LOm
首先检查从PEk收到CEm的封装类型是否与CEk的相同,如果不一致,停止处理;
检查是否 k=m,如果是,报错“CE ID k has been allocated to two CEs in *** X (check CEm at PEk)”,然后停止处理;
如果CEm有多个标签块,检查这些标签块是否有满足LOm <= k < LOm + LRm,如果任何一个标签块都不满足,报错 “Cannot communicate with CE m (PE A) of *** X:outside range”然后停止处理;
检查和CE k相关的所有的标签块是否有满足LOk <= m < LOk + LRk,如果任何一个标签块都不满足,报错 “Cannot communicate with CE m (PE A) of *** X:outside range”然后停止处理;
检查PEkPEm之间的外层通道是否正常建立,如果没有就停止处理,这里假设为LSP隧道,标签为Z;对于外层隧道的判断决定了是否为一个VC计算VC标签,这一点与L3***不同。如果外层隧道没有建立,就不应该为VC计算标签。
PEkCE-m分配内层出标签为(LBm + k - LOm) PEkCE-k分配内层入标签为(LBk + m - LOk)
PEBPEA的外层隧道的标签为Z
内外层标签都已经计算出来,VC处于UP状态,可以用于二层报文的传输了。
我们分阶段来看一个例子:前提是PE之间都是通过BGP来交换标签块的信息。全部公网LSP隧道是正常UP的状态,我们只关心VC标签的计算。图中CE1CE ID1,以此类推。在下面的例子中CE22是一个单独的***,并且没有建立任何连接,但是PE1同样会为CE22欲留一个标签块。