MPLS

简述

传统的IP路由基于报文的IP头部的目的IP地址进行寻址及转发操作,设备需要维护路由表用于指导数据转发,根据最长匹配原则进行匹配条目,速度慢,效率低。MPLS能够为IP报文添加标签信息,让路由器基于标签信息对报文进行转发,提高了数据转发的效率。后来随着硬件技术的突破,IP路由查询的执行效率已经大大提高,MPLS的速度提升优势已经不再明显。但是MPLS在其他方面有着较多的应用,例如MPLS VPN、流量工程等。


MPLS的典型应用

1.基于MPLS的VPN
2.基于MPLS的流量工程

MPLS术语

LSR(Labe Switch Router,标签转发路由器):指的是激活了MPLS标签交换功能的路由器,这些路由器维护者用于知道标签报文转发的信息,并且依据这些信息对标签报文进行处理。

Ingress LSR(入站LSR):主要用于对刚刚进入MPLS区域的报文进行处理,在报文的IP头部前插入标签头部生成标签报文。

Transit LSR(中转LSR):主要对标签报文进行处理,对标签的置换操作。

Egress LSR(出站LSR):主要用于对流出MPLS的报文进行处理,在标签报文离开前将标签头部移除,使标签报文变成正常的IP报文。

Label(标签):一个正常IP数据包在进入MPLS区域时,会在二层头部和IP头部之间插入标签头部,标签指的是标签头部‘标签’字段的具体值。一个标签报文可能有多个标签头部,按一定的顺序排列,存储在标签栈中。

FEC(Forwarding Equivalence Class,等价转发类):FEC是指具有相同特征的标签报文,这些报文在MPLS转发过程中采用相同的处理方式。FEC可以采用多种方式划分,例如目的地址、网络掩码、DSCP等特征。最为常见的是根据目的地址划分,到达同一目的地址的报文会被归为一类,并采用相同的方式来处理这些报文。

LSP(Label Switched Path,标签转发路径):LSP是指报文在穿越MPLS区域内所经过的路径。一个数据报文在穿越MPLS区域之前,LSP就已经建立好,同一个FEC的报文采用相同的LSP穿越MPLS区域,并且LSP是单向的,所以如果想要双方互相通信,就需要在建立双向的LSP。

标.签分发协议:类似于路由协议。一个报文在穿越MPLS区域之前LSP必须要先建立。LSP的建立又分为两种方式:静态方式,动态方式。静态方式建立LSP需要在每一台LSP上为每一个FEC手工配置标签,然后手动指定LSP。动态方式就是采用标签分发协议来完成,自动为FEC分配标签并建立LSP。

MPLS标签

包格式

image_1d83shco61n9a1la81m1l1pf0121933.png-62.5kB

四个字段

Label:用于存储标签值
EXP:暂未表明用处
BoS:栈底位,为1表示本标签为栈底标签,后面就是IP头部,为0表示本标签并非栈底标签。
TTL:主要用于防环,防止标签被无限转发

MPLS标签的基本操作

Push:二层头部和三层头部之间插入标签
Swap:在标签报文转发时,将标签头部换成下游LSR所分配标签,通常对栈顶的标签进行操作
Pop:当标签报文离开MPLS区域时将标签头部移除,在最后一跳节点,标签已经没有使用价值。这种情况下,可以利用倒数第二跳弹出特性PHP(Penultimate Hop Popping),在倒数第二跳节点处将标签弹出,减少最后一跳的负担。最后一跳节点直接进行IP转发或者下一层标签转发。

MPLS转发过程

三张表

FIB表
image_1d83sipnd1jr81rbkfql1dep1k8o3g.png-22.6kB
NHLFE表
image_1d83sj0fdqdpt801ac33n81ij3t.png-45.6kB
ILM表
image_1d83sjg4njqvvb100lc55a134a.png-47.2kB

具体过程

当IP报文进入MPLS域时,首先查看FIB表,检查目的IP地址对应的Tunnel ID值是否为0x0。
如果Tunnel ID值为0x0,则进入正常的IP转发流程。
如果Tunnel ID值不为0x0,则进入MPLS转发流程。

在MPLS转发过程中,FIB、ILM和NHLFE表项是通过Tunnel ID关联的。

IngressLSR的处理:通过查询FIB表和NHLFE表指导报文的转发。
查看FIB表,根据目的IP地址找到对应的Tunnel ID。
根据FIB表的Tunnel ID找到对应的NHLFE表项,将FIB表项和NHLFE表项关联起来。
查看NHLFE表项,可以得到出接口、下一跳、出标签和标签操作类型。
在IP报文中压入出标签,然后将封装好的MPLS报文发送给下一跳。

Transit LSR的处理:通过查询ILM表和NHLFE表指导MPLS报文的转发。
根据MPLS的标签值查看对应的ILM表,可以得到Tunnel ID。
根据ILM表的Tunnel ID找到对应的NHLFE表项。
查看NHLFE表项,可以得到出接口、下一跳、出标签和标签操作类型。

Egress LSR的处理:通过查询ILM表指导MPLS报文的转发或查询路由表指导IP报文的转发。
如果Egress收到IP报文,则查看路由表,进行IP转发。
如果Egress收到MPLS报文,则查看ILM表获得标签操作类型,一般为Pop。
如果操作为Pop需要结合BoS位指导报文转发,如果标签中的栈底标识BoS=1,表明该标签是栈底标签,直接进行IP转发。如果标签中的栈底标识BoS=0,表明还有下一层标签,继续进行下一层标签转发。

LDP协议

工作过程

开启LDP的路由器会自动为路由表中的FEC分配标签,并将标签映射发送给下游路由器,下游路由器接受收到标签映射后将映射存储起来,然后自己为该FEC分配标签,并传送给下游路由器,以此重复,完成LSP的建立。

LDP ID

每一台运行MPLS的LSR都会有一个域内唯一的LSR ID长度为32 位。需要手工指定,否则MPLS无法激活。
每一台运行了LDP的LSR必须拥有LDP ID长度位48位,有32位的LSR ID以及16位的 Label Space ID(标签空间标识符)构成。LDP ID= LSR ID:Label Space ID 1.1.1.1:0

LDP对等体会话建立过程

1.LDP设备发现
主要通过Hello报文,接口激活LDP后便开始发送Hello报文。报文中包含了LDP ID以及传输地址,采用UDP封装,以组播方式发送,目的IP为224.0.0.2,端口号为646 。当两个通过Hello包发现到彼此就开始建立会话。

2.LDP会话建立
上一步双方发现彼此后都知道了对方的传输地址,接下来开始建立会话。
(1):一般传输地址大的开始主动发起TCP会话建立请求,完成三次握手过程。
(2):传输地址大的一方会主动发送一个Initialization(初始化)包,包含一些协议参数,另一方接收到包后检查参数,发送自己的Initialization包和Keepalive包,主动方收到后便知道另一方接收了自己的参数,开始检查另一方的参数,如果认可就会送一个Keepalive包。
(3):双发将LDP会话置为Operational状态,LDP对等体会话建立成功

3.通过标签映射
LDP对等体之间相互通过标签映射