首页 > 代码库 > MPLS
MPLS
MPLS
定义
多协议标签交换MPLS(MultiprotocolLabel Switching)是一种IP(InternetProtocol)骨干网技术。MPLS在无连接的IP网络上引入面向连接的标签交换概念,将第三层路由技术和第二层交换技术相结合,充分发挥了IP路由的灵活性和二层交换的简捷性。
MPLS中的“Multiprotocol”指的就是支持多种网络协议。
由此可见,MPLS并不是一种业务或者应用,它实际上是一种隧道技术。这种技术不仅支持多种高层协议与业务,而且在一定程度上可以保证信息传输的安全性。
目的
MPLS最初是为了提高路由器的转发速度而提出的。与传统IP路由方式相比,它在数据转发时,只在网络边缘分析IP报文头,而不用在每一跳都分析IP报文头,节约了处理时间。
MPLS支持多层标签和转发平面面向连接的特性,使其在VPN(Virtual Private Network)、流量工程、QoS(Quality of Service)等方面得到广泛应用。
MPLS基本结构
网络结构
MPLS网络的典型结构如图1所示。MPLS基于标签进行转发,
LSR(Label Switching Router):进行MPLS标签交换和报文转发的网络设备称为标签交换路由器;由LSR构成的网络区域称为MPLS域(MPLSDomain)。区域内部的LSR称为核心LSR(Core LSR)。
LER(Label Edge Router):位于MPLS域边缘、连接其他网络的LSR称为边缘路由器。
标签添加与弹出
IP报文进入MPLS网络时,MPLS入口的LER分析IP报文的内容并且为这些IP报文添加合适的标签,所有MPLS网络中的LSR根据标签来转发数据的。当该IP报文离开MPLS网络时,标签由出口LER弹出。
LSP(Label Switched Path):IP数据报文在MPLS网络中经过的路径称为标签交换路径。LSP是一个单向路径,与数据流的方向一致。
LSP的入口LER称为入节点(Ingress);位于LSP中间的LSR称为中间节点(Transit);LSP的出口LER称为出节点(Egress)。一条LSP可以有0个、1个或多个中间节点,但有且只有一个入节点和一个出节点。
根据LSP的方向,MPLS报文由Ingress发往Egress,则Ingress是Transit的上游节点,Transit是Ingress的下游节点。同理,Transit是Egress上游节点,Egress是Transit的下游节点。
体系结构
MPLS体系它由控制平面(Control Plane)和转发平面(Forwarding Plane)组成。
· 控制平面:负责产生和维护路由信息以及标签信息。
§ 路由信息表RIB(Routing Information Base):由IP路由协议(IP Routing Protocol)生成,用于选择路由。
§ 标签分发协议LDP(Label Distribution Protocol):负责标签的分配、标签转发信息表的建立、标签交换路径的建立、拆除等工作。
§ 标签信息表LIB(Label Information Base):由标签分发协议生成,用于管理标签信息。
· 转发平面:即数据平面(Data Plane),负责普通IP报文的转发以及带MPLS标签报文的转发。
§ 转发信息表FIB(Forwarding Information Base):从RIB提取必要的路由信息生成,负责普通IP报文的转发。
§ 标签转发信息表LFIB(Label Forwarding Information Base):简称标签转发表,由标签分发协议在LSR上建立LFIB,负责带MPLS标签报文的转发。
MPLS标签
转发等价类
MPLS将具有相同特征的报文归为一类,称为转发等价类FEC(Forwarding Equivalence Class)。属于相同FEC的报文在转发过程中被LSR以相同方式处理。
FEC可以根据源地址、目的地址、源端口、目的端口、VPN等要素进行划分。例如,在传统的采用最长匹配算法的IP转发中,到同一条路由的所有报文就是一个转发等价类。
标签
标签(Label)是一个短而定长的、只具有本地意义的标识符,用于唯一标识一个分组所属的FEC。在某些情况下,例如要进行负载分担,对应一个FEC可能会有多个入标签,但是一台设备上,一个标签只能代表一个FEC。
MPLS报文与普通的IP报文相比增加了MPLS标签信息,MPLS标签的长度为4个字节。MPLS标签封装在链路层和网络层之间,可以支持任意的链路层协议。
MPLS标签封装结构
标签共有4个字段:
· Label:20bit,标签值域。
· Exp:3bit,用于扩展。现在通常用做CoS(Class of Service),当设备阻塞时,优先发送优先级高的报文。
· S:1bit,栈底标识。MPLS支持多层标签,即标签嵌套。S值为1时表明为最底层标签。
· TTL:8bit,和IP报文中的TTL(Time ToLive)意义相同。
标签栈(Label Stack)是指标签的排序集合。如图2所示,靠近二层首部的标签称为栈顶MPLS标签或外层MPLS标签(Outer MPLS label);靠近IP首部的标签称为栈底MPLS标签或内层MPLS标签(Inner MPLS label)。理论上,MPLS标签可以无限嵌套。目前MPLS标签嵌套主要应用在MPLS VPN、TE FRR(Traffic Engineering Fast ReRoute)中。
标签栈
标签栈按后进先出方式组织标签,从栈顶开始处理标签。
标签空间
标签空间就是指标签的取值范围。标签空间划分如下:
· 0~15:特殊标签。特殊标签的详细介绍请参见表1。
· 16~1023:静态LSP和静态CR-LSP(Constraint-based Routed Label Switched Path)共享的标签空间。
· 1024及以上:LDP、RSVP-TE(ResourceReservation Protocol-Traffic Engineering)、MP-BGP(MultiProtocol Border Gateway Protocol)等动态信令协议的标签空间。
LSP的建立
MPLS需要为报文事先分配好标签,建立一条LSP,才能进行报文转发。LSP分为静态LSP和动态LSP两种。
静态LSP的建立
静态LSP是用户通过手工为各个转发等价类分配标签而建立的。由于静态LSP各节点上不能相互感知到整个LSP的情况,因此静态LSP是一个本地的概念。
静态LSP不使用标签发布协议,不需要交互控制报文,因此消耗资源比较小,适用于拓扑结构简单并且稳定的小型网络。
动态LSP的建立
动态LSP的标签发布协议
动态LSP通过标签发布协议动态建立。标签发布协议是MPLS的控制协议(也可称为信令协议),负责FEC的分类、标签的分发以及LSP的建立和维护等一系列操作。
MPLS转发
MPLS基本转发过程
标签操作类型包括标签压入(Push)、标签交换(Swap)和标签弹出(Pop),它们是标签转发的基本动作。
· Push:当IP报文进入MPLS域时,MPLS边界设备在报文二层首部和IP首部之间插入一个新标签;或者MPLS中间设备根据需要,在标签栈顶增加一个新的标签(即标签嵌套封装)。
· Swap:当报文在MPLS域内转发时,根据标签转发表,用下一跳分配的标签,替换MPLS报文的栈顶标签。
· Pop:当报文离开MPLS域时,将MPLS报文的标签剥掉。
在最后一跳节点,标签已经没有使用价值。这种情况下,可以利用倒数第二跳弹出特性PHP(Penultimate Hop Popping),在倒数第二跳节点处将标签弹出,减少最后一跳的负担。最后一跳节点直接进行IP转发或者下一层标签转发。
默认情况下,设备支持PHP特性,支持PHP的Egress节点分配给倒数第二跳节点的标签值为3。
基本转发过程
以支持PHP的LSP为例,说明MPLS基本转发过程。
MPLS标签已分发完成,建立了一条LSP,其目的地址为4.4.4.2/32。则MPLS基本转发过程如下:
1. Ingress节点收到目的地址为4.4.4.2的IP报文,压入标签Z并转发。
2. Transit节点收到该标签报文,进行标签交换,将标签Z换成标签Y。
3. 倒数第二跳Transit节点收到带标签Y的报文。因为Egress分给它的标签值为3,所以进行PHP操作,弹出标签Y并转发报文。从倒数第二跳转发给Egress的报文以IP报文形式传输。
4. Egress节点收到该IP报文,将其转发给目的地4.4.4.2/32。
MPLS详细转发过程
基本概念
在MPLS详细转发过程中涉及的相关概念如下:
· Tunnel ID
为了给使用隧道的上层应用(如VPN、路由管理)提供统一的接口,系统自动为隧道分配了一个ID,也称为Tunnel ID。该TunnelID的长度为32比特,只是本地有效。
· NHLFE
下一跳标签转发表项NHLFE(Next Hop Label Forwarding Entry)用于指导MPLS报文的转发。
NHLFE包括:Tunnel ID、出接口、下一跳、出标签、标签操作类型等信息。
FEC到一组NHLFE的映射称为FTN(FEC-to-NHLFE)。通过查看FIB表中Tunnel ID值不为0x0的表项,能够获得FTN的详细信息。FTN只在Ingress存在。
· ILM
入标签到一组下一跳标签转发表项的映射称为入标签映射ILM(Incoming Label Map)。
ILM包括:Tunnel ID、入标签、入接口、标签操作类型等信息。
ILM在Transit节点的作用是将标签和NHLFE绑定。通过标签索引ILM表,就相当于使用目的IP地址查询FIB,能够得到所有的标签转发信息。
当IP报文进入MPLS域时,首先查看FIB表,检查目的IP地址对应的Tunnel ID值是否为0x0。
· 如果Tunnel ID值为0x0,则进入正常的IP转发流程。
· 如果Tunnel ID值不为0x0,则进入MPLS转发流程。
在MPLS转发过程中,FIB、ILM和NHLFE表项是通过Tunnel ID关联的。
· Ingress的处理:通过查询FIB表和NHLFE表指导报文的转发。
1. 查看FIB表,根据目的IP地址找到对应的Tunnel ID。
2. 根据FIB表的Tunnel ID找到对应的NHLFE表项,将FIB表项和NHLFE表项关联起来。
3. 查看NHLFE表项,可以得到出接口、下一跳、出标签和标签操作类型。
4. 在IP报文中压入出标签,并根据QoS策略处理EXP,同时处理TTL,然后将封装好的MPLS报文发送给下一跳。
· Transit的处理:通过查询ILM表和NHLFE表指导MPLS报文的转发。
1. 根据MPLS的标签值查看对应的ILM表,可以得到Tunnel ID。
2. 根据ILM表的Tunnel ID找到对应的NHLFE表项。
3. 查看NHLFE表项,可以得到出接口、下一跳、出标签和标签操作类型。
4. MPLS报文的处理方式根据不同的标签值而不同。
· 如果标签值>=16,则用新标签替换MPLS报文中的旧标签,同时处理EXP和TTL,然后将替换完标签的MPLS报文发送给下一跳。
· 如果标签值为3,则直接弹出标签,同时处理EXP和TTL,然后进行IP转发或下一层标签转发。
· Egress的处理:通过查询ILM表指导MPLS报文的转发或查询路由表指导IP报文转发。
§ 如果Egress收到IP报文,则查看路由表,进行IP转发。
§ 如果Egress收到MPLS报文,则查看ILM表获得标签操作类型,同时处理EXP和TTL。
§ 如果标签中的栈底标识S=1,表明该标签是栈底标签,直接进行IP转发。
§ 如果标签中的栈底标识S=0,表明还有下一层标签,继续进行下一层标签转发。
静态LSP简介
静态LSP不能使用标签发布协议动态建立,需要由管理员手工配置,适用于拓扑结构简单并且稳定的网络。
IP报文在MPLS网络中经过的路径称为标签交换路径LSP(LabelSwitched Path),LSP既可以通过手工配置的方式静态建立,也可以利用标签分发协议动态建立。
一般情况下,在MPLS网络中都使用LDP(Label Distribution Protocol)建立LSP。但LDP是通过路由信息来建立LSP,如果LDP协议出现问题,可能导致MPLS流量的丢失。因此,对于某些关键数据或重要业务,通过配置静态LSP来确定传输路径。
静态LSP不使用标签发布协议,不需要交互控制报文,资源消耗比较小,但通过静态方式建立的LSP不能根据网络拓扑变化动态调整,需要管理员干预,所以适用于拓扑结构简单并且稳定的网络。
MPLSLDP简介
介绍MPLS LDP的定义、由来和作用。
定义
标签分发协议LDP(Label Distribution Protocol)是多协议标签交换MPLS的一种控制协议,相当于传统网络中的信令协议,负责转发等价类FEC(Forwarding Equivalence Class)的分类、标签的分配以及标签交换路径LSP(Label Switched Path)的建立和维护等操作。LDP规定了标签分发过程中的各种消息以及相关处理过程。
目的
MPLS支持多层标签,并且转发平面面向连接,故具有良好的扩展性,使在统一的MPLS/IP基础网络架构上为客户提供各类服务成为可能。通过LDP协议,标签交换路由器LSR(Label Switched Router)可以把网络层的路由信息直接映射到数据链路层的交换路径上,动态建立起网络层的LSP。
目前,LDP广泛地应用在VPN服务上,具有组网、配置简单、支持基于路由动态建立LSP、支持大容量LSP等优点。
LDP基本概念
LDP对等体
LDP对等体是指相互之间存在LDP会话、使用LDP来交换标签消息的两个LSR。LDP对等体通过它们之间的LDP会话获得对方的标签。
LDP邻接体
当一台LSR接收到对端发送过来的Hello消息后LDP邻接体建立。LDP邻接体存在两种类型:
· 本地邻接体(Local Adjacency):以组播形式发送Hello消息(即链路Hello消息)发现的邻接体叫做本地邻接体。
· 远端邻接体(Remote Adjacency):以单播形式发送Hello消息(即目标Hello消息)发现的邻接体叫做远端邻接体。
LDP通过邻接体来维护对等体的存在,对等体的类型取决于维护它的邻接体的类型。一个对等体可以由多个邻接体来维护,如果由本地邻接体和远端邻接体两者来维护,则对等体类型为本远共存对等体。
LDP会话
LDP会话用于LSR之间交换标签映射、释放等消息。只有存在对等体才能建立LDP会话,LDP会话分为两种类型:
· 本地LDP会话(Local LDP Session):建立会话的两个LSR之间是直连的。
· 远端LDP会话(Remote LDP Session):建立会话的两个LSR之间可以是直连的,也可以是非直连的。
本地LDP会话和远端LDP会话可以共存。
LDP协议规定了标签分发过程中的各种消息以及相关的处理过程。通过LDP,LSR可以把网络层的路由信息映射到数据链路层的交换路径上,进而建立起LSP。
关于LDP的详细介绍可以参考RFC5036(LDP Specification)。
LDP消息类型
LDP协议主要使用四类消息:
· 发现(Discovery)消息:用于通告和维护网络中LSR的存在,如Hello消息。
· 会话(Session)消息:用于建立、维护和终止LDP对等体之间的会话,如Initialization消息、Keepalive消息。
· 通告(Advertisement)消息:用于创建、改变和删除FEC的标签映射。
· 通知(Notification)消息:用于提供建议性的消息和差错通知。
为保证LDP消息的可靠发送,除了Discovery消息使用UDP(UserDatagram Protocol)传输外,LDP的Session消息、Advertisement消息和Notification消息都使用TCP(Transmission Control Protocol)传输。
LDP工作过程
LDP工作过程主要分为两个阶段:
1. LDP会话的建立
通过Hello消息发现邻居后,LSR之间开始建立LDP会话。会话建立后,LDP对等体之间通过不断地发送Hello消息和Keepalive消息来维护这个会话。
· LDP对等体之间,通过周期性发送Hello消息表明自己希望继续维持这种邻接关系。如果Hello保持定时器超时仍没有收到新的Hello消息,则删除Hello邻接关系。邻接关系被删除后,本端LSR将发送Notification消息,结束该LDP会话。
· LDP对等体之间通过LDP会话连接上传送的Keepalive消息来维持LDP会话。如果会话保持定时器(Keepalive保持定时器)超时仍没有收到任何Keepalive消息,则关闭TCP连接,本端LSR将发送Notification消息,结束LDP会话。
2. LDP LSP的建立
会话建立后,LDP通过发送标签请求和标签映射消息,在LDP对等体之间通告FEC和标签的绑定关系,从而建立LSP。
LDP会话的建立
通过LDP发现机制发现LDP对等体用来建立LDP会话。只有建立了LDP会话后,才能建立LDP LSP来承载业务。
LDP发现机制
LDP发现机制用于LSR发现潜在的LDP对等体。LDP有两种发现机制:
· 基本发现机制:用于发现链路上直连的LSR。
LSR通过周期性地发送LDP链路Hello消息(LDP Link Hello),实现LDP基本发现机制,建立本地LDP会话。
LDP链路Hello消息使用UDP报文,目的地址是组播地址224.0.0.2。如果LSR在特定接口接收到LDP链路Hello消息,表明该接口存在LDP对等体。
· 扩展发现机制:用于发现链路上非直连LSR。
LSR周期性地发送LDP目标Hello消息(LDP Targeted Hello)到指定IP地址,实现LDP扩展发现机制,建立远端LDP会话。
LDP目标Hello消息使用UDP报文,目的地址是指定IP地址。如果LSR接收到LDP目标Hello消息,表明该LSR存在LDP对等体。
LDP会话的建立过程
1. 两个LSR之间互相发送Hello消息。
Hello消息中携带传输地址(即设备的IP地址),双方使用传输地址建立LDP会话。
2. 传输地址较大的一方作为主动方,发起建立TCP连接。
如图1所示,LSR_1作为主动方发起建立TCP连接,LSR_2作为被动方等待对方发起连接。
3. TCP连接建立成功后,由主动方LSR_1发送初始化消息,协商建立LDP会话的相关参数。
LDP会话的相关参数包括LDP协议版本、标签分发方式、Keepalive保持定时器的值、最大PDU长度和标签空间等。
4. 被动方LSR_2收到初始化消息后,LSR_2接受相关参数,则发送初始化消息,同时发送Keepalive消息给主动方LSR_1。
如果被动方LSR_2不能接受相关参数,则发送Notification消息终止LDP会话的建立。
初始化消息中包括LDP协议版本、标签分发方式、Keepalive保持定时器的值、最大PDU长度和标签空间等。
5. 主动方LSR_1收到初始化消息后,接受相关参数,则发送Keepalive消息给被动方LSR_2。
如果主动方LSR_1不能接受相关参数,则发送Notification消息给被动方LSR_2终止LDP会话的建立。
当双方都收到对端的Keepalive消息后,LDP会话建立成功。
LDP LSP的建立过程
LSP的建立过程实际就是将FEC和标签进行绑定,并将这种绑定通告LSP上相邻LSR的过程。如图2所示,下面结合下游自主标签发布方式和有序标签控制方式来说明其主要步骤。
LDP LSP的建立过程
1. 缺省情况下,网络的路由改变时,如果有一个边缘节点(Egress)发现自己的路由表中出现了新的主机路由,并且这一路由不属于任何现有的FEC,则该边缘节点需要为这一路由建立一个新的FEC。
2. 如果MPLS网络的Egress有可供分配的标签,则为FEC分配标签,并主动向上游发出标签映射消息,标签映射消息中包含分配的标签和绑定的FEC等信息。
3. Transit收到标签映射消息后,判断标签映射的发送者(Egress)是否为该FEC的下一跳。若是,则在其标签转发表中增加相应的条目,然后主动向上游LSR发送对于指定FEC的标签映射消息。
4. Ingress收到标签映射消息后,判断标签映射的发送者(Transit)是否为该FEC的下一跳。若是,则在标签转发表中增加相应的条目。这时,就完成了LSP的建立,接下来就可以对该FEC对应的数据报文进行标签转发。
本文出自 “蓄势” 博客,谢绝转载!
MPLS