组网标签路由的处理机制
我们先来看看IP数据包还是标签数据包(指的是携带组网标签栈的数据包)被LSR处理时,可能有几种动作。
Push(或Impose、Insert)压入动作。例如一个IP数据包被压入一层组网标签,还是一个已有标签栈的标签包,又被压入一层标签。
Swap交换动作。LSR收到一个标签包时,经过标签转发表的查找并找到匹配的表项后,将原有标签置换成新的标签。
Remove(或PoP)弹出动作。顶部标签被移除。报文的转发依托标签栈中余下的标签,还是如果弹出该标签后已再无其他标签则将其作为无标签的报文进行转发。
下面我们用一个例子来介绍。R1在收到一个IP数据包以后,经过FIB转发信息表的查询,发现去往30.0网络的数据包是转发给R2,并且需要压入(PUSH)一层标签,标签值为200。因此R1将IP数据包压入一层标签然后转发给R2。
R2收到这个携带了标签栈的标签包,它取出标签值并在自己的LFIB标签转发信息表里进行查找,发现200的入站标签要置换(SWAP)成300并转发给R3。而R3收到这个标签包一样的在LFIB表中查找入站标签300,结果发现入站标签300对应的出站动作是3(标签值3是一个特殊的、被保存的标签值,当出站标签为3时,意味着要弹出标签头),因此将标签头弹出(PoP),这就得到了原始的IP报文,最后R3将这个IP数据包转发出去。
值得一提的是在本例中,R1是IngressLER,也及是入站的边界标签交换路由器,它左边连接着IP网络,而右边连接着组网网络。当R1收到一个IP数据包时,它会怎样处理?它会在FIB转发信息表中查找该IP报文的目的IP地址,如果有匹配的表项并且该表项所唆使的下一跳是一个IP装备而不是LSR标签交换路由器,那末这个报文会被直接路由。
但是如果FIB中的表项唆使下一跳是一台LSR并且需要压入标签,情况就不同了,R1会给IP报文压入一层标签,然后再把这个标签包转发出去,这个时候,IP数据包就通过R1进入了组网网络。一旦以标签包的形态进入组网网络,在转发的进程中所有LSR就只看数据包的标签头,对其进行查找及交换,而不会去理睬标签头里头的IP头部。另外,如果一个标签数据包有多个标签头,那末标签交换路由器LSR均只会处理顶层的标签。