MPLS位于TCP/IP协议栈中的数据链路层和网络层之间,可以向所有网络层提供服务。
通过在数据链路层和网络层之间增加额外的MPLS头部,基于MPLS头部实现数据快速转发。
本课程仅介绍MPLS在IP网络中的应用。
1)LSR与MPLS域
MPLS域(MPLS Domain):一系列连续的运行MPLS的网络设备构成了一个MPLS域。
LSR(Label Switching Router,标签交换路由器):支持MPLS的路由器(实际上也指支持MPLS的交换机或其他网络设备)。位于MPLS域边缘、连接其它网络的LSR称为边沿路由器LER(Label Edge Router),区域内部的LSR称为核心LSR(Core LSR)。
LSR分类
除了根据LSR在MPLS域中的位置进行分类之外,还可以根据对数据处理方式的不同进行分类:
入站LSR(Ingress LSR):通常是向IP报文中压入MPLS头部并生成MPLS报文的LSR。
中转LSR(Transit LSR):通常是将MPLS报文进行例如标签置换操作,并将报文继续在MPLS域中转发的LSR。
出站LSR(Egress LSR):通常是将MPLS报文中MPLS头部移除,还原为IP报文的LSR。
2)FEC
FEC(Forwarding Equivalence Class,转发等价类)是一组具有某些共性的数据流的集合,这些数据流在转发过程中被网络节点以相同方式处理。
在MPLS网络中,FEC可以通过多种方式划分,例如基于目的IP地址及网络掩码、DSCP等特征来划分。
数据属于哪一个LSP,由数据进入MPLS域时的Ingress LSR决定。
MPLS标签通常是与FEC相对应的,必须有某种机制使得网络中的LSR获得关于某FEC的标签信息。
3)LSP
LSP(Label Switched Path,标签交换路径)是标签报文穿越MPLS网络到达目的地所走的路径。
同一个FEC的报文通常采用相同的LSP穿越MPLS域,所以对同一个FEC,LSR总是用相同的标签转发。
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。
MPLS支持一层或多层标签头部,这些标签头部的有序集合被称为标签栈(Label Stack)。
当标签栈中存在多个标签时,这些标签的顺序是非常讲究的:
最靠近二层头部的标签是栈顶标签,标签中的S字段为0。
最靠近IP头部的标签是栈底标签,标签中的S字段为1。
标签是一个短而定长的、只具有本地意义的标识符。标签空间就是指标签的取值范围。标签值的范围及规划如下:
LSR对标签的操作类型包括标签压入(Push)、标签交换(Swap)和标签弹出(Pop)。
①Push:IP报文进入MPLS域时,MPLS边界设备在报文二层头部和IP头部之间插入一个新标签;MPLS中间设备也可根据需要,在标签栈顶增加一个新的标签。
②Swap:当报文在MPLS域内转发时,根据标签转发表,用下一跳分配的标签,替换MPLS报文的栈顶标签。
③Pop:当报文离开MPLS域时,将MPLS报文的标签去掉。
MPLS转发的本质就是将数据归到对应的FEC并按照提前建立好的LSP进行转发。
对于整个MPLS域,LSP是某一给定的FEC进入域和离开域的路径,可以看成是LSR的有序集合。
对于单台LSR,需要建立标签转发表,用标签来标识FEC,并绑定相应的标签处理和转发等行为。
MPLS的体系结构由控制平面 (Control Plane)和转发平面 (Forwarding Plane)组成。
控制平面:
负责产生和维护路由信息以及标签信息。
控制平面包括IP路由协议和路由信息表,标签分发协议和标签信息表。
转发平面:
也称数据平面(Data Plane),负责普通IP报文的转发以及带MPLS标签报文的转发。
转发平面包括IP转发信息表和标签转发信息表。
当网络层协议为IP协议时,FEC所对应的路由必须存在于LSR的IP路由表中,否则该FEC的标签转发表项不生效。
LSR用标签标识指定FEC,所以该FEC的数据被发送至LSR时,必须携带正确的标签,才能被LSR正确的处理。
MPLS需要为报文事先分配好标签,建立一条LSP,才能进行报文转发。LSP分为静态LSP和动态LSP两种。
1)静态LSP
基本概念:
静态LSP是用户通过手工为各个FEC分配标签而建立的。
静态LSP不使用标签发布协议,不需要交互控制报文,因此消耗资源比较小。
通过静态方式建立的LSP不能根据网络拓扑变化动态调整,需要管理员干预。
应用场景:
适用于拓扑结构简单并且稳定的小型网络。
标签分配原则:
前一节点出标签的值等于下一个节点入标签的值。
2)动态路由
基本概念:
动态LSP通过标签发布协议动态建立。
标签发布协议是MPLS的控制协议(也可称为信令协议),负责FEC的分类、标签的分发以及LSP的建立和维护等一系列操作。
常用标签发布协议:标签分发协议 (LDP)
全称:Label Distribution Protocol。
定义:LDP是多协议标签交换MPLS的一种控制协议,负责转发等价类FEC的分类、标签的分配以及标签交换路径LSP的建立和维护等操作。LDP规定了标签分发过程中的各种消息以及相关处理过程。
应用场景:LDP广泛地应用在VPN服务上,具有组网、配置简单、支持基于路由动态建立LSP、支持大容量LSP等优点。
LSR处理报文时主要根据FTN、NHLFE和ILM。
1)FTN
FTN(FEC-to-NHLFE):当LSR收到IP报文并需要进行MPLS转发时使用,FTN只在Ingress存在。
FTN包括:Tunnel ID、FEC到NHLFE的映射信息。
2)NHLFE
下一跳标签转发表项(Next Hop Label Forwarding Entry):LSR对报文(MPLS或IP报文)进行MPLS转发时使用,NHLFE在Ingress和Transit存在
NHLFE包括:Tunnel ID、出接口、下一跳、出标签、标签操作类型等信息。
3)ILM
入标签映射(ILM,Incoming Label Map):用于指导MPLS报文的转发(MPLS或IP转发),ILM只在Transit和Egress存在。
ILM包括:Tunnel ID、入标签、入接口、标签操作类型等信息。
当IP报文进入MPLS域时:
①Ingress LSR查看FIB表,检查目的IP地址对应的Tunnel ID值是否为0x0(如果Tunnel ID值为0x0,则进入正常的IP转发流程)。
②如果Tunnel ID值不为0x0,根据FIB表的Tunnel ID找到对应的NHLFE表项,将FIB表项和NHLFE表项关联起来。
③查看NHLFE表项,可以得到出接口、下一跳、出标签和标签操作类型。
④在IP报文中压入出标签,同时处理TTL,然后将封装好的MPLS报文发送给下一跳。
当MPLS报文在MPLS域转发时:
⑤Transit LSR根据MPLS的标签值查看对应的ILM表,得到Tunnel ID。
⑥根据ILM表的Tunnel ID找到对应的NHLFE表项。
⑦查看NHLFE表项,得到出接口、下一跳、出标签和标签操作类型,标签操作类型为Swap,则交换标签。
当MPLS报文需要离开MPLS域时:
⑧Egress根据ILM查询到该标签对应的操作为Pop,说明需要剥离该标签
⑨根据当前标签头部的下一层报文头部进行下一步处理
LDP是MPLS的一种控制协议,相当于传统网络中的信令协议,负责FEC的分类、标签的分配以及LSP的建立和维护等操作。LDP规定了标签分发过程中的各种消息以及相关处理过程。
LDP的工作过程主要分为两部分:
①LSR之间建立LDP会话。
②LSR之间基于LDP会话动态交换标签与FEC的映射信息,并根据标签信息建立LSP。
LSR之间交互标签绑定消息之前必须建立LDP会话。LDP会话可以分为:
①本地LDP会话(Local LDP Session):建立会话的两个LSR之间是直连的;
②远程LDP会话(Remote LDP Session):建立会话的两个LSR之间可以是直连的,也可以是非直连的。
两台LSR之间交互Hello消息之后,即建立起邻接体(Adjacency)关系;
在建立邻接体关系的基础上,两台LSR之间交互LDP会话消息,建立起LDP会话,两台设备之间形成LDP对等体关系;
每一台运行了LDP的LSR除了必须配置LSR ID,还必须拥有LDP ID。
①LDP ID的长度为48bit,由32bit的LSR ID与16bit的标签空间标识符(Label Space ID)构成。
②LDP ID以“LSR ID : 标签空间标识”的形式呈现。例如2.2.2.2:0。
标签空间标识一般存在两种形态:
①值为0:表示基于设备(或基于平台)的标签空间;
②值非0:表示基于接口的标签空间。
运行LDP协议的LSR之间通过交换LDP消息来实现邻居发现、会话建立与维护以及标签管理等功能。
LDP协议报文包括了LDP头部和LDP消息两部分。
LDP头部中携带了LDP版本、报文长度等信息;
LDP消息中携带了消息类型、消息长度等信息。
LDP使用5种状态描述LDP会话状态机
1)发现阶段与TCP建立阶段
①发现阶段
设备通过周期性地发送LDP链路Hello报文(LDP Link Hello),实现LDP基本发现机制。
LDP链路Hello报文使用UDP报文,目的地址是组播地址224.0.0.2。如果LSR在特定接口接收到LDP链路Hello报文,表明该接口存在LDP邻接体。
②TCP建立阶段
Hello报文中携带传输地址,双方后续将使用传输地址建立LDP会话。
传输地址较大的一方作为主动方,主动发起建立TCP连接。
经过TCP三次握手之后,两者建立起TCP连接。
2)会话建立与保持
TCP连接建立成功后,主动方R2(传输地址大的一方)发送LDP初始化报文,协商建立LDP会话的相关参数。
LDP会话的相关参数包括LDP协议版本、标签分发方式、KeepAlive保持定时器的值、最大PDU长度和标签空间等。
被动方R1收到初始化报文后,若接受R2的相关参数,则回应KeepAlive报文作为确认,为了提高发送效率同时发送自己的初始化报文。
R2收到R1的初始化报文后,若接受相关参数,则回复KeepAlive报文给R1。
双方都收到对端的KeepAlive报文后,会话建立成功。后续通过周期性发送的KeepAlive报文
PeerID:LDP邻居的LDP ID;
2.2.2.2代表的是邻居节点的LSR ID;
0代表的是标签空间是基于平台的;
TransportAddress:LDP邻居的传输地址;
2.2.2.2代表邻居用来建立TCP连接的IP地址。
LDP会话状态
Status:LDP会话的状态;
Operational表示LDP会话建立成功;
LAM:标签发布模式:
标签发布模式有DU和DoD两种模式(后文介绍);
此例中采用的是DU(下游自主)模式;
SsnRole:LSR在LDP会话中的角色;
Active表示建立LDP会话的主动方;Passive表示建立LDP会话的被动方;
在MPLS网络中,下游LSR决定标签和FEC的绑定关系,并将这种绑定关系发布给上游LSR。
LDP通过发送标签请求和标签映射消息,在LDP对等体之间通告FEC和标签的绑定关系来建立LSP
标签的发布和管理由标签发布方式、标签分配控制方式和标签保持方式来决定。
MPLS根据数据的转发方向确定上、下游关系。标签报文从上游LSR发出,被下游LSR接收并处理。
1)DU模式
对于一个特定的FEC,LSR无需从上游获得标签请求消息即进行标签分配与分发。
LSR会主动将自己为FEC捆绑的标签通告给上游邻居,无需邻居先发起请求再通告。
2)DoD模式
对于一个特定的FEC,LSR获得标签请求消息之后才进行标签分配与分发。
一般情况下,对特定FEC的访问需求会触发标签请求消息。
1)有序(Ordered)模式
对于LSR上某个FEC的标签映射,只有当该LSR已经具有此FEC下一跳的标签映射消息、或者该LSR就是此FEC的出节点时,该LSR才可以向上游发送此FEC的标签映射。
2)独立模式
本地LSR可以自主地分配一个标签绑定到某个FEC,并通告给上游LSR,而无需等待下游的标签。
1)自由(Liberal)模式
LSR收到的标签映射可能来自下一跳,也可能来自非下一跳。
对于从邻居LSR收到的标签映射,无论邻居LSR是不是自己的下一跳都保留。
2)保守(Conservative)模式
对于从邻居LSR收到的标签映射,只有当邻居LSR是自己的下一跳时才保留。
PHP(Penultimate Hop Popping,次末跳弹出),如果激活了PHP特性,那么egress节点在为本地路由分配标签的时候,会分配一个特殊标签—3,该标签被称为隐式空标签(Implicit NULL Label)。当LSR转发一个标签报文时,如果发现对应的出标签值为3,则LSR会将栈顶标签弹出,并将里面所封装的数据转发给下游LSR。
(1)隐式空标签
缺省情况下,Egress节点向倒数第二跳分配隐式空标签(implicit-null),即特殊标签3。
但在部署QoS的场景下,标签被弹出后,其中的优先级也会一并丢失。
(2)显式空标签
显式空标签机制,Egress节点向倒数第二跳分配特殊标签0。
R3在转发标签报文时,若出标签封装为0,则不会将标签头部弹出,标签头部中的QoS信息得以保存。R4在收到带0标签的报文的时候,直接弹出标签,不用去查找ILM表项。
缺省情况下,Egress分配的是隐式空标签,通过label advertise explicit-null使能Egress节点向倒数第二跳分配显式空标签。
网络中已经部署OSPF路由协议且各设备之间能够正常学习到对方的路由信息。
已在各设备及相应接口上激活MPLS及LDP,且在相邻的设备之间已正常建立本地LDP会话。
所有LSR均采用DU + Independent +Liberal方式。
1)Egress LSR
R4直连网段192.168.4.0/24,R4将主动为到达该网段的路由分配标签,如1041,并主动通过LDP协议报文将标签映射通告给LDP对等体R2和R3。
2)Transit LSR
以R2为例,在其路由表中,192.168.4.0/24路由的下一跳为R4,当它从R4收到关于192.168.4.0/24的标签映射通告时,由于该通告来自下游LDP邻居,因此这将触发它自己为该路由分配标签1021,并将标签映射通告给LDP邻居(如R1)。R3同理。
3)Ingress LSR
R1收到LDP邻居R2及R3通告过来的关于192.168.4.0/24路由的标签映射后,将这两个标签都存储起来,但是由于在自己的路由表中,到达192.168.4.0/24的下一跳是R2,因此当前它只会使用R2所通告的标签1021。
标签转发
1)Ingress LSR
R1作为Ingress LSR,需要对接收的IP报文执行Push操作压入标签,并进行标签转发。
2)Transit LSR
R2作为Transit LSR,需要对接收的IP报文执行Swap操作交换标签,并进行标签转发。
3)Egress LSR
R4作为Egress LSR,需要对接收的IP报文执行Pop操作交换标签,并进行IP转发。
BGP/MPLS IP VPN网络一般由运营商搭建,VPN用户购买VPN服务来实现用户网络之间的路由传递、数据互通等。
MPLS VPN使用BGP在运营商骨干网(IP网络)上发布VPN路由,使用MPLS在运营商骨干网上转发VPN报文。BGP/MPLS IP VPN又被简称为MPLS VPN,是一种常见的L3VPN(Layer 3 VPN)技术。
MPLS VPN网络架构由三部分组成:CE(Customer Edge)、PE(Provider Edge)和P(Provider),其中PE和P是运营商设备,CE是MPLS VPN用户设备。
站点(site)就是MPLS VPN的用户,由CE和其他用户设备构成。
MPLS VPN不是单一的一种VPN技术,是多种技术结合的综合解决方案,主要包含下列技术:
MP-BGP:负责在PE与PE之间传递站点内的路由信息。
LDP:负责PE与PE之间的隧道建立
VRF:负责PE的VPN用户管理。
静态路由、IGP、BGP:负责PE与CE之间的路由信息交换
对VPN客户而言:
①“感知”不到VPN的存在,不需要部署和维护VPN,降低企业运维难度和成本。
②一般部署在运营商的MPLS VPN专网上,有一定的安全性保障。
对于运营商而言:
①MPLS在无连接的IP网络中增加了面向连接的控制平面,为IP网络增添了管理和运营的手段。
②支持地址空间重叠、支持重叠VPN、组网方式灵活、可扩展性好。
③能够方便地支持MPLS TE合理调控现有网络资源,最大限度的节省运营商成本。
根据VPN用户的需求不同,可采用以下几种常见的组网方案:
Intranet:一个VPN中的所有用户形成闭合用户群,同一VPN站点之间可以互访,不同VPN站点间不能互访。
Extranet:适用于一个VPN用户希望提供部分本VPN的站点资源给其他VPN的用户访问的场景。
Hub&Spoke:如果希望在VPN中设置中心访问控制设备,其它用户的互访都通过中心访问控制设备进行,可采用Hub&Spoke组网方案。
若想实现同一个VPN的不同站点之间的通信,首先需要完成不同站点之间的路由交互。在基本MPLS VPN组网中,VPN路由信息的发布涉及CE和PE,P路由器只维护骨干网的路由,不需要了解任何VPN路由信息。VPN路由信息的发布过程包括三部分:本地CE到入口PE、入口PE到出口PE、出口PE到远端CE
如图,客户X和客户Y属于不同的VPN,分别拥有两个站点,现需要实现站点间的路由信息交互。
CE与PE之间可以使用静态路由、OSPF、IS-IS或BGP交换路由信息。无论使用哪种路由协议,CE和PE之间交换的都是标准的IPv4路由。
本地CE到入口PE和出口PE到远端CE的路由信息交换原理完全相同。
PE在接收到CE传递来的路由之后,需要独立保存不同VPN的路由,且需要解决不同的客户使用重叠IP地址空间的问题。
VRF(Virtual Routing and Forwarding,虚拟路由转发),又称VPN实例,是MPLS VPN架构中的关键技术,每个VPN实例使用独立的路由转发表项,实现VPN之间的逻辑隔离。
PE收到不同VPN的CE发来的IPv4地址前缀,本地根据VPN实例配置去区分这些地址前缀。但是VPN实例只是一个本地的概念,PE无法将VPN实例信息传递到对端PE,故有了RD(Route Distinguisher,路由标识符)。
①RD长8字节,用于区分使用相同地址空间的IPv4前缀。
②PE从CE接收到IPv4路由后,在IPv4前缀前加上RD,转换为全局唯一的VPN-IPv4路由。
VPN-IPv4地址又被称为VPNv4地址:VPNv4地址共有12个字节,包括8字节的路由标识符RD(Route Distinguisher)和4字节的IPv4地址前缀。
PE之间建立BGP邻居关系,并通过BGP进行路由传递。为什么采用BGP呢?
①BGP使用TCP作为其传输层协议,提高了协议的可靠性。可以跨路由器的两个PE设备之间直接交换路由。
②BGP拓展性强,为PE间传播VPN路由提供了便利。
③PE之间需要传送的路由条目可能较大,BGP只发送更新的路由,提高传递路由数量的同时不占用过多链路带宽。
传统的BGP-4不支持处理VPNv4路由。
为了正确处理VPN路由,MPLS VPN使用RFC2858(Multiprotocol Extensions for BGP-4)中规定的MP-BGP,即BGP-4的多协议扩展。
MP-BGP采用地址族(Address Family)来区分不同的网络层协议,既可以支持传统的IPv4地址族,又可以支持其它地址族(比如VPN-IPv4地址族、IPv6地址族等)。
MP-BGP新增了两种路径属性:
①MP_REACH_NLRI:Multiprotocol Reachable NLRI,多协议可达NLRI。用于发布可达路由及下一跳信息。
②MP_UNREACH_NLRI:Multiprotocol Unreachable NLRI,多协议不可达NLRI。用于撤销不可达路由。
MP-BGP将VPNv4传递到远端PE之后,远端PE需要将VPNv4路由导入正确的VPN实例。
MPLS VPN使用32位的BGP扩展团体属性-VPN Target(也称为Route Target)来控制VPN路由信息的发布与接收。
本地PE在发布VPNv4路由前附上RT属性,对端RT在接到到VPNv4路由后根据RT将路由导入对应的VPN实例。
RT
在PE上,每一个VPN实例都会与一个或多个VPN Target属性绑定,有两类VPN Target属性:
①Export Target(ERT):本地PE从直接相连站点学到IPv4路由后,转换为VPN IPv4路由,并为这些路由添加Export Target属性。Export Target属性作为BGP的扩展团体属性随路由发布。
②Import Target(IRT):PE收到其它PE发布的VPN-IPv4路由时,检查其Export Target属性。当此属性与PE上某个VPN实例的Import Target匹配时,PE就把路由加入到该VPN实例的路由表。
PE根据VPNv4路由所携带的RT将路由导入正确的VPN实例之后,VPNv4路由的RD值剥除,将IPv4路由通告给相应的客户的CE设备。
站点B和站点D的CE设备就能学习到去往各自远端站点的路由。同理,通过一系列的操作,可以实现同一用户(同一VPN)不同站点之间的路由互通。
P设备上没有VPN路由,无法根据IP地址进行转发。
IP头部中不携带VPN相关的信息,PE无法区分数据所属的VPN。
解决方法:
通过标签解决问题
外层标签(公网标签)由LDP为VPN路由的NextHop(一般是PE的某个接口地址)分发,P根据外层标签转发数据到PE。
内层标签(私网标签)由PE的MP-BGP为VPN路由分发。PE根据内层标签确定数据所属的VPN。
PE和P设备之间运行LDP,交换公网标签,建立PE之间的LSP隧道(公网隧道)。
入口PE在通过MP-BGP传递VPNv4路由时,会携带私网标签,用于区分不同VPN的数据。
出口PE在接收到VPNv4路由后,需要执行私网路由交叉和隧道迭代来选择路由。
①IGP或者EBGP交换私网IPv4路由
②客户私网路由被学习到VPN路由表中(VPN实例路由表)
③IPv4路由引入到MP-BGP(如果PE-CE之间运行的就是BGP,则无需手工执行路由引入操作)RD被添加到IPv4路由上,构成VPNv4路由;
④VPNv4路由被PE1通过MP-IBGP的Update消息通告给PE2。Update消息携带着MP_REACH_NLRI属性(包含VPNv4路由前缀,下一跳和标签等重要信息)和RT属性。
⑤PE2根据RT将路由导入特定的VRF,同时将VPNv4路由的RD剥除,将IPv4路由通告给相应的客户的CE设备。
⑥客户IPv4路由被通告给CE设备
1)第一阶段
①CE3上存在到192.168.1.0/24网段路由,发送一个普通IP报文。
2)第二阶段
② PE2根据绑定的VPN实例的RD查找对应VPN的转发表。
③匹配目的IPv4前缀,查找对应的Tunnel-ID,
④ 根据Tunnel-ID找到隧道,并打上对应的内层标签(I-L)。
⑤将报文从隧道发送出去,即打上公网(外层)MPLS标签头(O-L1)。
3)第三阶段
⑥骨干网的所有P设备都对该报文进行外层标签交换,直到到达PE1。
4)第四阶段
⑦ PE1收到该携带两层标签的报文,交给MPLS处理,MPLS协议将去掉外层标签。
⑧PE1继续处理内层标签:根据内层标签确定对应的下一跳,并将内层标签剥离后,以纯IPv4报文的形式发送给CE1。
5)第五阶段
⑨CE1收到该IPv4报文后,进行常规的IPv4处理流程。