MPLS标签
1、转发等价类
MPLS将具有相同特征的报文归为一类,称为转发等价类FEC(Forwarding Equivalence Class)属于相同FEC的报文在转发过程中被LSR以相同的方式处理;
FEC可以根据地址、掩码等要素进行划分,例如,在传统的采用最长匹配算法的IP转发中,到同一条路由的所有报文就是一个转发等价类;
2、标签
标签(Label)是一个短而定长的、只具有本地意义的标识符,用于唯一标识一个分组所属的FEC,在某些情况下,例如要进行负载分担,对应一个FEC可能会有多个入标签,但是一台设备上,一个标签只能代表一个FEC;
标签的长度为4字节,封装如下图所示:
(1)Label:20bit,标签值域;
(2)Expt:3bit,用于扩展,现在通常用做CoS(Class of Service),其作用与Ethernet 802.1p的作用类似;
(3)S:1bit,栈底标识,MPLS支持多层标签,即标签嵌套,S为1表明为最底层标签;
(4)TTL:8bit,和IP报文中的生存时间意义相同;
标签封装在链路层和网络层直接,这样标签能够被任意的链路层所支持,标签在分组中的封装位置如下图所示:
3、标签空间
标签空间就是指标签的取值范围;
- 0~15:特殊标签
0 IPv4 Explicit NULL Label:表示该标签必须被弹出,且报文的转发必须基于IPv4,如果出节点分配给倒数第二跳节点的标签值为0,则倒数第二跳LSR需要将值为0的标签正常压入报文标签值顶部,转发给最后一跳,最后一跳发现报文携带的标签值为0,则将标签弹出,0标签只有出现在栈底时才有效;
1 Router Alert Label:只有出现在非栈底时才有效,类似于IP报文中的Router Alert Option字段,节点收到Router Alert Label时,需要将其送往本地软件模块进一步处理,实际报文转发由下一层标签来决定,如果报文需要继续转发,则节点需要将Route1r Alert Label压回标签栈顶;
2 IPv6 Explicit NULL Label:表示该标签必须被弹出,且报文的转发必须基于IPv6,同标签0类似;
3 Implicit NULL Label:倒数第二跳LSR进行标签交换时,如果发现交换后的标签值为3,则标签弹出,并将报文发给最后一跳,最后一跳收到该报文直接进行IP转发或者下一层标签转发;
4~13 保留
14 OAM Router Alert Label:MPLS OAM(Operation Administraaion & Maintenance)通过发送OAM报文检测和通告LSP故障,OAM报文使用MPLS承载,OAM报文对于Transit LSR和倒数第二跳LSR是透明的;
15 保留
-
16~1023:静态LSP和静态CR-LSP共享的标签空间;
-
1024以上:LDP、RSVP-TE、MP-BGP等动态信令协议的标签空间;
4、标签栈
标签栈(Label Stack)是指标签的排序集合,MPLS报文支持同时携带多个标签,靠近二层首部的标签称为栈顶标签或者外层标签,靠近IP首部的标签称为栈底标签或者内层标签,理论上MPLS标签可以无限嵌套;
标签栈按照后进先出方式组织标签,从栈顶开始处理标签;
5、标签操作类型
标签的操作类型包括标签压入(Push)、标签交换(Swap)、标签弹出(Pop),它们是标签转发的基本动作,是标签转发信息表的组成部分;
- Push:指当IP报文进入MPLS域时,MPLS边界设备在报文二层首部和IP首部之间插入一个新标签,或者MPLS中间设备根据需要,在标签栈顶增加一个新的标签,即标签嵌套封装;
- Swap:当报文在MPLS域内转发时,根据标签转发表,用下一跳分配的标签,替换MPLS报文的栈顶标签;
- Pop:当报文离开MPLS域时,将MPLS报文中的标签去掉;
在最后一跳节点,标签已经没有价值,可以利用倒数第二跳弹出特性PHP(Penultimate Hop Popping),在倒数第二跳节点处将标签弹出,减少最后一跳的负担,最后一跳节点直接进行IP转发或者下一层标签转发;
PHP在Egress节点上配置,支持PHP的Egress节点分配给倒数第二跳阶段的标签值为3;