MPLS原理与配置
MPLS原理与配置
传统IP路由转发:
传统的IP转发采用的是逐跳转发。数据报文经过每一台路由器,都要被解封装查看报文网络层信息,然后根据路由最长匹配原则查找路由表指导报文转发。各路由器重复进行解封装查找路由表和再封装的过程,所以转发性能低。
传统IP路由转发的特点:
所有路由器需要知道全网的路由。
IP头部不定长,处理效率低。
传统IP转发是面向无连接的,无法提供较好的端到端QoS保证。
MPLS基本概念:
MPLS位于TCP/IP协议栈中的数据链路层和网络层之间,可以向所有网络层提供服务。
通过在数据链路层和网络层之间增加额外的MPLS头部,基于MPLS头部实现数据快速转发。
MPLS起源于IPv4(Internet Protocol version 4),其核心技术可扩展到多种网络协议,包括IPv6(Internet Protocol version 6)、IPX(Internet Packet Exchange)、Appletalk、DECnet、CLNP(Connectionless Network Protocol)等。MPLS中的“Multiprotocol”指的就是支持多种网络协议。
MPLS以标签交换替代IP转发。标签是一个短而定长的、只具有本地意义的标识符。
MPLS术语介绍 - LSR与MPLS域
MPLS域(MPLS Domain):一系列连续的运行MPLS的网络设备构成了一个MPLS域。
LSR(Label Switching Router,标签交换路由器):支持MPLS的路由器(实际上也指支持MPLS的交换机或其他网络设备)。位于MPLS域边缘、连接其它网络的LSR称为边沿路由器LER(Label Edge Router),区域内部的LSR称为核心LSR(Core LSR)。
MPLS术语介绍 - LSR分类
除了根据LSR在MPLS域中的位置进行分类之外,还可以根据对数据处理方式的不同进行分类:
入站LSR(Ingress LSR):通常是向IP报文中压入MPLS头部并生成MPLS报文的LSR。
中转LSR(Transit LSR):通常是将MPLS报文进行例如标签置换操作,并将报文继续在MPLS域中转发的LSR。
出站LSR(Egress LSR):通常是将MPLS报文中MPLS头部移除,还原为IP报文的LSR。
MPLS术语介绍 - FEC
FEC(Forwarding Equivalence Class,转发等价类)是一组具有某些共性的数据流的集合,这些数据流在转发过程中被网络节点以相同方式处理。
在MPLS网络中,FEC可以通过多种方式划分,例如基于目的IP地址及网络掩码、DSCP等特征来划分。
数据属于哪一个LSP,由数据进入MPLS域时的Ingress LSR决定。
MPLS标签通常是与FEC相对应的,必须有某种机制使得网络中的LSR获得关于某FEC的标签信息。
在传统的采用最长匹配算法的IP转发中,匹配到同一条路由的所有报文就是一个转发等价类。
在MPLS中,关于FEC最常见的例子是:目的IP地址匹配同一条IP路由的报文被认为属于同一个FEC。
MPLS术语介绍 - LSP
LSP(Label Switched Path,标签交换路径)是标签报文穿越MPLS网络到达目的地所走的路径。
同一个FEC的报文通常采用相同的LSP穿越MPLS域,所以对同一个FEC,LSR总是用相同的标签转发。
一条LSP包含一台入站LSR、一台出站LSR以及数量可变的中转LSR,因此LSP也可以看做是这些LSR的有序集合。
LSP需要在数据转发开始前建立完成,只有这样报文才能顺利穿越MPLS域。
LSP可通过静态和动态两种方式建立。
需要注意的是,LSP是一个从“起点”到“终点”的单向路径,若需要双向数据互通,则需要在双方之间建立双向的LSP。
MPLS标签
IP报文进入MPLS域之前,会被入站LSR压入MPLS头部(又叫MPLS标签),形成一个MPLS标签报文。一个标签报文可以包含一个或多个MPLS标签。
标签(Label):用于携带标签值,长度20bit。
EXP(Experimental Use):主要用于CoS(Class of Service),长度3bit。
S(Bottom of Stack):栈底位,用于指示该标签头部是否为最后一层标签,长度1bit。如果该字段为1,则表示当前标签头部为栈底;如果该字段为0,则表示当前标签头部之后依然还有其他标签头部。
TTL(Time To Live):用于当网络出现环路时,防止标签报文被无限制转发,与IP报文头部中的TTL具有相同的意义,长度8bit。
EXP字段在早期的MPLS标准中被定义,意为试验性的字段,但实际上该字段主要被用于CoS。为了避免歧义,RFC5462重新定义了该字段,命名为流分类(Traffic Class)。
MPLS标签栈
MPLS支持一层或多层标签头部,这些标签头部的有序集合被称为标签栈(Label Stack)。
当标签栈中存在多个标签时,这些标签的顺序是非常讲究的:
最靠近二层头部的标签是栈顶标签,标签中的S字段为0。
最靠近IP头部的标签是栈底标签,标签中的S字段为1。
当上层为MPLS标签栈时,以太网头部中的Type字段为0x8847,PPP头部中的Protocol字段为0x8281。
标签空间
标签是一个短而定长的、只具有本地意义的标识符。标签空间就是指标签的取值范围。标签值的范围及规划如下:
只具有本地意义说明每一台LSR之间的标签空间是相互独立的,即每台路由器都可以使用完整的标签空间。
MPLS标签的处理
LSR对标签的操作类型包括标签压入(Push)、标签交换(Swap)和标签弹出(Pop)。
MPLS转发概述
MPLS转发的本质就是将数据归到对应的FEC并按照提前建立好的LSP进行转发。
对于整个MPLS域,LSP是某一给定的FEC进入域和离开域的路径,可以看成是LSR的有序集合。
对于单台LSR,需要建立标签转发表,用标签来标识FEC,并绑定相应的标签处理和转发等行为。
同一个FEC,若进入MPLS域的Ingress LSR(入站LSR)不同,转发时的LSP也不相同。
同一个FEC,LSR的处理方式相同,不论这个FEC来自哪里(进入设备的接口)。
LSR的转发动作决定了LSP,而标签转发表确定转发动作,所以建立标签转发表也可以理解为建立LSP。
如图所示,因为有着相同的目的地,所以这三份数据属于同一个转发等价类FEC1。同时由于入站LSR不同,这些数据将分别在LSP1、LSP2和LSP3上被转发。因为标签仅具有本地意义,所以每台LSR上给同一FEC分配的标签,可以相同,也可以不同。
MPLS体系结构:
MPLS的体系结构由控制平面 (Control Plane)和转发平面 (Forwarding Plane)组成。
控制平面:
控制平面是无连接的,主要功能是负责产生和维护路由信息以及标签信息。
控制平面包括:
路由信息表RIB(Routing Information Base):由IP路由协议(IP Routing Protocol)、静态路由和直连路由共同生成,用于选择路由。
标签信息表LIB(Label Information Base):用于管理标签信息,LIB中的表项可由标签交换协议(LDP、RSVP等协议)或静态配置生成。
转发平面:
转发平面也称为数据平面,是面向连接的, 主要功能是负责普通IP报文的转发以及带MPLS标签报文的转发。
转发平面包括:
转发信息表FIB(Forwarding Information Base):从RIB提取必要的路由信息生成,负责普通IP报文的转发。
标签转发信息表LFIB(Label Forwarding Information Base):简称标签转发表,负责带MPLS标签报文的转发。
控制平面与转发平面
LSP建立原则
当网络层协议为IP协议时,FEC所对应的路由必须存在于LSR的IP路由表中,否则该FEC的标签转发表项不生效。
LSR用标签标识指定FEC,所以该FEC的数据被发送至LSR时,必须携带正确的标签,才能被LSR正确的处理。
LSP建立方式
MPLS需要为报文事先分配好标签,建立一条LSP,才能进行报文转发。LSP分为静态LSP和动态LSP两种。
静态LSP
基本概念:
静态LSP是用户通过手工为各个FEC分配标签而建立的。
静态LSP不使用标签发布协议,不需要交互控制报文,因此消耗资源比较小。
通过静态方式建立的LSP不能根据网络拓扑变化动态调整,需要管理员干预。
应用场景:
适用于拓扑结构简单并且稳定的小型网络。
标签分配原则:
前一节点出标签的值等于下一个节点入标签的值。
动态LSP
基本概念:
动态LSP通过标签发布协议动态建立。
标签发布协议是MPLS的控制协议(也可称为信令协议),负责FEC的分类、标签的分发以及LSP的建立和维护等一系列操作。
常用标签发布协议:标签分发协议 (LDP)
全称:Label Distribution Protocol。
定义:LDP是多协议标签交换MPLS的一种控制协议,负责转发等价类FEC的分类、标签的分配以及标签交换路径LSP的建立和维护等操作。LDP规定了标签分发过程中的各种消息以及相关处理过程。
应用场景:LDP广泛地应用在VPN服务上,具有组网、配置简单、支持基于路由动态建立LSP、支持大容量LSP等优点。
静态LSP:
由于静态LSP各节点上不能相互感知到整个LSP的情况,因此静态LSP是一个本地的概念。
动态LSP:
其他标签分布协议:
RSVP-TE:Resource Reservation Protocol Traffic Engineering,它是对RSVP的扩展,用于建立基于约束的LSP。它拥有普通LDP LSP没有的功能,如发布带宽预留请求、带宽约束、链路颜色和显式路径等。
MP-BGP:Multiprotocol Border Gateway Protocol,MP-BGP是在BGP协议基础上扩展的协议。MP-BGP支持为MPLS VPN业务中私网路由和跨域VPN的标签路由分配标签。
MPLS标签转发
LSR处理报文时主要根据FTN、 NHLFE和ILM。
Tunnel ID:为了给使用隧道的上层应用(如VPN、路由管理)提供统一的接口,系统自动为隧道分配了一个ID,也称为Tunnel ID。该Tunnel ID的长度为32比特,只是本地有效。在MPLS转发过程中,FIB、ILM和NHLFE表项是通过Tunnel ID关联的。
Ingress LSR的处理
在Ingress LSR,通过查询FIB表(得到FTN信息)和NHLFE表指导报文的转发。
当IP报文进入MPLS域时,首先查看FIB表,检查目的IP地址对应的Tunnel ID值是否为0x0。
如果Tunnel ID值为0x0,则进入正常的IP转发流程。
如果Tunnel ID值不为0x0,则进入MPLS转发流程。
Transit LSR的处理
在Transit LSR,通过查询ILM表和NHLFE表指导MPLS报文的转发。
Egress LSR的处理
在Egress LSR,通过查询ILM表指导MPLS报文的转发。
MPLS详细转发过程
MPLS基本配置命令:
1、配置LSR ID
[Huawei] mpls lsr-id lsr-id
mpls lsr-id命令用来配置LSR的ID。LSR ID用来在网络中唯一标识一个LSR。LSR没有缺省的LSR ID,必须手工配置。为了提高网络的可靠性,推荐使用LSR某个Loopback接口的地址作为LSR ID并在配置前对网络中所有LSR的LSR ID进行统一规划。
2、使能MPLS
[Huawei] mpls
mpls命令用来使能本节点的全局MPLS能力,并进入MPLS视图。
[Huawei-GigabitEthernet0/0/0] mpls
在接口视图下,使能当前接口的MPLS功能。需先使能全局MPLS能力后才能执行接口下的MPLS使能命令。
静态LSP配置命令 (1):
1、Ingress LSR配置
[Huawei] static-lsp ingress lsp-name destination ip-address { mask-length | mask } { nexthop next-hop-address | outgoing-interface interface-type interface-number } * out-label out-label
static-lsp ingress命令用来为入口节点配置静态LSP。
推荐采用指定next-hop的方式配置静态LSP,确保本地路由表中存在与指定目的IP地址精确匹配的路由项,包括目的IP地址和下一跳IP地址。如果LSP出接口为以太网类型,必须配置nexthop next-hop-address参数以保证LSP的正常转发。
out-label的取值范围为16~1048575。
2、Transit LSR配置
[Huawei] static-lsp transit lsp-name [ incoming-interface interface-type interface-number ] in-label in-label { nexthop next-hop-address | outgoing-interface interface-type interface-number }* out-label out-label
static-lsp transit命令用来为中间转发节点配置静态LSP。
下一跳和出接口的配置规则和Ingress LSR保持一致。
in-label的取值范围为16~1023。
out-label的取值范围为16~1048575。
out-label占用的是下游LSR的标签空间,而下游空间采用的标签分发方式不确定,所以out-label的标签空间为16~1048575。
in-label占用的是当前LSR的标签空间,采用静态LSP时,标签空间为16~1023。
静态LSP配置命令 (2):
3、Egress LSR配置
[Huawei] static-lsp egress lsp-name [ incoming-interface interface-type interface-number ] in-label in-label
static-lsp egress命令用来在出口节点配置静态LSP。
in-label的取值范围为16~1023。
4、查看静态LSP配置
[Huawei] display mpls static-lsp [ lsp-name ] [ { include | exclude } ip-address mask-length ] [ verbose ]
display mpls static-lsp命令用来查看静态LSP信息。
MPLS最初是为了解决传统IP路由器查表转发速度慢而被提出的,是一种通过标签头部实现快速转发的技术。
MPLS标签是一个短而定长的、只具有本地意义的标识符,用于唯一标识一个分组所属的FEC。LSR对标签的操作类型包括标签压入、标签交换和标签弹出。
MPLS包含控制平面和数据平面,控制平面主要负责路由信息的传递和标签的分发,数据平面主要负责数据的转发。
随着技术的发展,MPLS在数据转发速度上的优势逐渐弱化,但其特性使其在VPN领域得到广泛应用。