MPLS基础
1.1 MPLS简介
MPLS(Multiprotocol Label Switching,多协议标签交换)是一种新兴的IP骨干网技术。MPLS在无连接的IP网络上引入面向连接的标签交换概念,将第三层路由技术和第二层交换技术相结合,充分发挥了IP路由的灵活性和二层交换的简捷性。
MPLS广泛应用于大规模网络中,它具有以下优点:
- 在MPLS网络中,设备根据短而定长的标签转发报文,省去了通过软件查找IP路由的繁琐过程,为数据在骨干网络中的传输提供了一种高速高效的方式。
- MPLS位于链路层和网络层之间,它可以建立在各种链路层协议(如PPP、ATM、帧中继、以太网等)之上,为各种网络层(IPv4、IPv6、IPX等)提供面向连接的服务,兼容现有各种主流网络技术。
- 支持多层标签和面向连接的特点,使得MPLS在VPN、流量工程、QoS等方面得到广泛应用。
- 具有良好的扩展性,在MPLS网络基础上可以为客户提供各种服务。
1.1.1 MPLS基本概念
1. 转发等价类
FEC(Forwarding Equivalence Class,转发等价类)是MPLS中的一个重要概念。MPLS是一种分类转发技术,它将具有相同特征(目的地相同或具有相同服务等级等)的报文归为一类,称为FEC。属于相同FEC的报文在MPLS网络中将获得完全相同的处理。目前设备只支持根据报文的网络层目的地址划分FEC。
2. 标签
标签是一个长度固定、只具有本地意义的标识符,用于唯一标识一个报文所属的FEC。一个标签只能代表一个FEC。
图1-1 标签的封装结构
如图1-1所示,标签封装在链路层报头和网络层报头之间的一个垫层中。标签长度为4个字节,由以下四个字段组成:
- Label:标签值,长度为20bits,用来标识一个FEC。
- Exp:3bits,保留,协议中没有明确规定,通常用作服务等级。
- S:1bit,MPLS支持多重标签。值为1时表示为最底层标签。
- TTL:8bits,和IP报文中的TTL意义相同,可以用来防止环路。
Exp称为MPLS报文服务等级,可影响报文的优先调度。有关报文调度的详细信息,请参见“ACL和QoS配置指导”中的“QoS”。
3. 标签交换路由器
LSR(Label Switching Router,标签交换路由器)是具有标签分发能力和标签交换能力的设备,是MPLS网络中的基本元素。
4. 标签边缘路由器
位于MPLS网络边缘、连接其他网络的LSR称为LER(Label Edge Router,标签边缘路由器)。
5. 标签交换路径
属于同一个FEC的报文在MPLS网络中经过的路径称为LSP(Label Switched Path,标签交换路径)。
LSP是从MPLS网络的入口到出口的一条单向路径。在一条LSP上,沿数据传送的方向,相邻的LSR分别称为上游LSR和下游LSR。如图1-2所示,LSR B为LSR A的下游LSR,相应的,LSR A为LSR B的上游LSR。
图1-2 标签交换路径
6. 标签转发表
与IP网络中的FIB(Forwarding Information Base,转发信息库)类似,在MPLS网络中,报文通过查找标签转发表确定转发路径。
7. 控制平面和转发平面
MPLS节点由两部分组成:
- 控制平面(Control Plane):负责标签的分配、路由的选择、标签转发表的建立、标签交换路径的建立、拆除等工作。
- 转发平面(Forwarding Plane):依据标签转发表对收到的分组进行转发。
1.1.2 MPLS网络结构
图1-3 MPLS网络结构
如图1-3所示,MPLS网络的基本构成单元是LSR,由LSR构成的网络称为MPLS域。MPLS网络包括以下几个组成部分:
- 入节点Ingress:报文的入口LER,负责为进入MPLS域的报文添加标签。
- 中间节点Transit:MPLS域内部的LSR,根据标签沿着由一系列LSR构成的LSP将报文传送给出口LER。
- 出节点Egress:报文的出口LER,负责剥离报文中的标签,并转发给目的网络。
Transit根据报文上附加的标签进行MPLS转发,Ingress和Egress负责MPLS与IP技术的转换。
1.1.3 LSP建立与标签的发布和管理
1. LSP建立
LSP的建立过程实际就是将FEC和标签进行绑定,并将这种绑定通告相邻LSR,以便在LSR上建立标签转发表的过程。LSP既可以通过手工配置的方式静态建立,也可以利用标签分发协议动态建立。
(1) 手工配置的方式静态建立LSP
建立静态LSP需要用户在报文转发路径中的各个LSR上手工配置为FEC分配的标签。建立静态LSP消耗的资源比较少,但静态建立的LSP不能根据网络拓扑变化动态调整。因此,静态LSP适用于拓扑结构简单并且稳定的小型网络。
(2) 利用标签发布协议动态建立LSP
标签发布协议是MPLS的信令协议,负责划分FEC、发布标签、建立维护LSP等。标签发布协议的种类较多,有专为标签发布而制定的协议,如LDP(Label Distribution Protocol,标签分发协议),也有扩展后支持标签发布的协议,如BGP、RSVP-TE。本文只介绍LDP协议。
:
利用标签发布协议动态建立LSP的过程如图1-4所示。下游LSR根据目的地址划分FEC,为特定FEC分配标签,并将标签和FEC的绑定关系通告给上游LSR;上游LSR根据该绑定关系建立标签转发表项。报文传输路径上的所有LSR都为该FEC建立对应的标签转发表项后,就成功地建立了用于转发属于该FEC报文的LSP。
图1-4 动态LSP建立过程
如果在LSR上存在等价路由,则MPLS会根据等价路由建立等价LSP,MPLS报文在这些等价LSP之间进行负载分担。
2. 标签的发布和管理
标签发布就是将为FEC分配的标签通告给其他LSR。根据标签发布条件、标签发布顺序的不同,LSR通告标签的方式分为DU(Downstream Unsolicited,下游自主方式)和DoD(Downstream On Demand,下游按需方式)、独立标签控制方式(Independent)和有序标签控制方式(Ordered)几种。
标签管理,即标签保持方式,是指LSR对收到的、但目前暂时用不到的FEC和标签绑定的处理方式,分为自由标签保持方式(Liberal)和保守标签保持方式(Conservative)两种。
(1) 标签发布方式(Label Advertisement Mode)
图1-5 标签发布方式
如图1-5所示,标签发布方式分为:
- DU:对于一个特定的FEC,下游LSR自动为该FEC分配标签,并主动将标签分发给上游LSR。
- DoD:对于一个特定的FEC,上游LSR请求下游LSR为该FEC分配标签,下游LSR收到请求后,为该FEC分配标签并向上游LSR通告该标签。
- 目前,设备只支持DU标签发布方式。
- 具有标签分发邻接关系的上游LSR和下游LSR之间必须使用相同的标签发布方式,否则LSP无法正常建立。
(2) 标签分配控制方式(Label Distribution Control Mode)
标签分配控制方式分为:
- 独立标签控制方式:LSR可以在任意时间向与它连接的LSR通告标签映射。使用这种方式时,LSR可能会在收到下游LSR的标签之前就向上游通告了标签。如图1-6所示,如果标签发布方式是DU,则即使没有获得下游的标签,也会直接为上游分配标签;如果标签发布方式是DoD,则接收到标签请求的LSR直接为它的上游LSR分配标签,不必等待来自它的下游的标签。
图1-6 独立标签控制方式
- 有序标签控制方式:LSR只有收到它的下游LSR为某个FEC分配的标签,或该LSR是此FEC的出口节点时,才会向它的上游LSR通告此FEC的标签映射。图1-5中的标签发布过程采用了有序标签控制方式:如果标签发布模式为DU,则LSR只有收到下游LSR分配的标签后,才会向自己的上游LSR分配标签;如果标签发布模式为DoD,则下游LSR(Transit)收到上游LSR(Ingress)的标签请求后,继续向它的下游LSR(Egress)发送标签请求,Transit收到Egress分配的标签后,才会为Ingress分配标签。
(3) 标签保持方式(Label Retention Mode)
LSR接收到标签映射后,保留标签的方式分为:
- 自由标签保持方式:对于从邻居LSR收到的标签映射,无论邻居LSR是不是指定FEC的下一跳都保留。这种方式的优点是LSR能够迅速适应网络拓扑变化,但是浪费标签,所有不能生成LSP的标签都需要保留。
- 保守标签保持方式:对于从邻居LSR收到的标签映射,只有当邻居LSR是指定FEC的下一跳时才保留。这种方式的优点是节省标签,但是对拓扑变化的响应较慢。
目前只支持自由标签保持方式。
1.1.4 MPLS数据转发过程
1. 标签转发表构成
标签转发表由以下三部分构成:
- NHLFE(Next Hop Label Forwarding Entry,下一跳标签转发项):描述对标签执行的操作,用于指导MPLS报文的转发。
- FTN(FEC to NHLFE map,FEC到NHLFE表项的映射):用于在Ingress节点将FEC映射到NHLFE表项。LSR接收到不带标签的报文后,查找对应的FIB表项。如果FIB表项的Token值不是Invalid,则该报文需要进行MPLS转发。LSR根据Token值找到对应的NHLFE表项,以便确定需要执行的标签操作。
- ILM(Incoming Label Map,入标签映射):用于将入标签映射到NHLFE表项。LSR接收到带有标签的报文后,查找对应的ILM表项。如果ILM表项的Token值非空,则找到Token值对应的NHLFE表项,以便确定需要执行的标签操作。
FTN、ILM通过Token与NHLFE关联。
2. MPLS数据转发
图1-7 MPLS转发过程示意图
如图1-7所示,MPLS网络中报文的转发过程为:
(1) Ingress(Router B)接收到不带标签的报文,根据目的地址判断该报文所属的FEC,查找FIB表,获取Token值。Token值不是Invalid,则找到Token值对应的NHLFE表项。根据NHLFE表项为报文添加标签(40),并从相应的出接口(Ethernet1/2)将带有标签的报文转发给下一跳LSR(Router C)。
(2) Router C接收到带有标签的报文,根据报文上的标签(40)查找ILM表项,获取Token值。Token值非空,则找到Token值对应的NHLFE表项。根据NHLFE表项,用新的标签(50)替换原有标签,并从相应的出接口(Ethernet1/2)将带有标签的报文转发给下一跳LSR(Router D)。
(3) Egress(Router D)接收到带有标签的报文,根据报文上的标签(50)查找ILM表项,获取Token值。Token值为空,则删除报文中的标签。如果ILM表项中记录了出接口,则通过该出接口转发报文;否则,根据IP报头转发报文。
3. 倒数第二跳弹出
MPLS网络中,Egress节点接收到带有标签的报文后,查找标签转发表,弹出报文中的标签后,再进行下一层的标签转发或IP转发。Egress节点转发报文之前要查找两次转发表:两次标签转发表,或一次标签转发表一次路由转发表。
为了减轻Egress节点的负担,提高MPLS网络对报文的处理能力,可以利用PHP(Penultimate Hop Popping,倒数第二跳弹出)功能,在倒数第二跳节点处将标签弹出,Egress节点只需查找一次转发表。
PHP在Egress节点上配置。支持PHP的Egress节点分配给倒数第二跳节点的标签有以下两种:
- 标签值为0表示IPv4显式空标签(Explicit-null)。Egress为FEC分配IPv4显式空标签,并通告给上游LSR后,上游LSR用这个值替代栈顶原来的标签,并将报文转发给Egress。Egress收到标签值为0的报文时,不会查找标签转发表,直接弹出标签栈,进行IPv4转发。
- 标签值3表示隐式空标签(Implicit-null),这个值不会出现在标签栈中。当一个LSR发现下游LSR通告的标签为隐式空标签时,它并不用这个值替代栈顶原来的标签,而是直接弹出标签,并将报文转发给下游LSR(即Egress)。Egress接收到报文后,直接进行下一层的转发处理。
1.1.5 LDP
LDP是标签发布协议的一种,用来动态建立LSP。通过LDP,LSR可以把网络层的路由信息映射到数据链路层的交换路径上。
1. LDP基本概念
- LDP会话
LDP会话建立在TCP连接之上,用于在LSR之间交换标签映射、标签释放、差错通知等消息。
- LDP对等体
LDP对等体是指相互之间存在LDP会话,并通过LDP会话交换标签-FEC映射关系的两个LSR。
2. LDP消息类型
LDP协议主要使用四类消息:
- 发现(Discovery)消息:用于通告和维护网络中LSR的存在;
- 会话(Session)消息:用于建立、维护和终止LDP对等体之间的会话;
- 通告(Advertisement)消息:用于创建、改变和删除“标签—FEC”映射关系;
- 通知(Notification)消息:用于提供建议性的消息和差错通知。
为保证LDP消息的可靠发送,除了发现消息使用UDP传输外,LDP的会话消息、通告消息和通知消息都使用TCP传输。
3. LDP工作过程
LDP主要包括以下四个阶段:
(1) 发现阶段
所有希望建立LDP会话的LSR都周期性地发送Hello消息,通告自己的存在。通过Hello消息,LSR可以自动发现它的LDP对等体。
LDP对等体发现机制分为两种:
- 基本发现机制:用于发现本地的LDP对等体,即通过链路层直接相连的LSR,并与其建立Link hello邻接关系。这种方式下,LSR周期性地向“子网内所有路由器”的组播地址224.0.0.2发送LDP链路Hello消息,以便链路层直接相连的LSR发现此LDP对等体。
- 扩展发现机制:用于发现远端的LDP对等体,即不通过链路层直接相连的LSR,并与其建立Targeted hello邻接关系。这种方式下,LSR周期性地向指定的IP地址发送LDP目标Hello消息,以便指定IP地址对应的LSR发现此LDP对等体。
两个LSR为基本发现机制和扩展发现机制配置的传输地址(用来建立TCP连接的源IP地址)相同时,这两个LSR之间可以同时建立Link hello邻接关系和Targeted hello邻接关系,并且Link hello邻接关系和Targeted hello邻接关系关联到同一个会话。在LDP对等体之间存在直连(只有一跳)和非直连(多于一跳)多条路径的组网环境中,同时建立Link hello邻接关系和Targeted hello邻接关系可以实现利用扩展发现机制来保护与对等体的会话。当直连链路出现故障时,Link hello邻接关系将被删除。如果此时非直连链路正常工作,则Targeted hello邻接关系依然存在,因此,LDP会话不会被删除,基于该会话的FEC—标签绑定等信息也不会删除。直连链路恢复后,不需要重新建立LDP会话、重新学习FEC—标签绑定等信息,从而加快了LDP收敛速度。
两个LSR为基本发现机制和扩展发现机制配置的传输地址不同时,如果在这两个LSR之间已经建立了一种邻接关系,则无法再建立另一种邻接关系。
(2) 会话建立与维护
发现LDP对等体后,LSR开始建立会话。这一过程又可分为两步:
- 建立传输层连接,即在LSR之间建立TCP连接;
- 对LSR之间的会话进行初始化,协商会话中涉及的各种参数,如LDP版本、标签发布方式、Keepalive定时器值等。
会话建立后,LDP对等体之间通过不断地发送Hello消息和Keepalive消息来维护这个会话。
(3) LSP建立与维护
LDP通过发送标签请求和标签映射消息,在LDP对等体之间通告FEC和标签的绑定关系,从而建立LSP。
LSP的建立过程,请参见“1.1.3 LSP建立与标签的发布和管理”。
(4) 会话撤销
在以下情况下,LSR将撤销LDP会话:
- LSR通过周期性发送Hello消息表明自己希望与邻居LSR继续维持这种邻接关系。如果Hello保持定时器超时仍没有收到新的Hello消息,则删除Hello邻接关系。一个LDP会话上可能存在多个Hello邻接关系。当LDP会话上的最后一个Hello邻接关系被删除后,LSR将发送通知消息,结束该LDP会话。
- LSR通过LDP会话上传送的LDP PDU(LDP PDU中携带一个或多个LDP消息)来判断LDP会话的连通性。如果在会话保持定时器(Keepalive定时器)超时前,LDP对等体之间没有需要交互的信息,LSR将发送Keepalive消息给LDP对等体,以便维持LDP会话。如果会话保持定时器超时,没有收到任何LDP PDU,LSR将关闭TCP连接,结束LDP会话。
- LSR还可以发送Shutdown消息,通知它的LDP对等体结束LDP会话。因此,LSR收到LDP对等体发送的Shutdown消息后,将结束与该LDP对等体的会话。
1.1.6 协议规范
与MPLS相关的协议规范有:
- RFC 3031:Multiprotocol Label Switching Architecture
- RFC 3032:MPLS Label Stack Encoding
· RFC 5036:LDP Specification
如果这篇文章帮助到了你,你可以请作者喝一杯咖啡