MPLS

MPLS概述

MPLS(Multiprotocol Label Switching)多协议标签交换协议:MPLS以标签交换替代IP转发,标签是一个短而定长的、只具有本地意义的连接标识符。

MPLS位于TCP/IP协议栈中的链路层和网络层之间,用于向IP层提供连接服务,同时又从链路层得到服务。

MPLS实际是一种隧道技术,这种技术不仅支持高层协议与业务,而且在一定程度上可以保证信息传输的安全性。

MPLS是一种分类转发技术,将具有相同转发处理方式的报文分为一类,称该类报文为一个转发等价类FEC。

MPLS基本原理

MPLS网络模型

LER(label edge router):标签边缘路由器,用于MPLS标签的压入或弹出。

LSR(label switch router):标签交换路由器,用于MPLS标签的交换。

LSP(label switch path):标签交换路径,报文在MPLS网络中经过的路径。

FEC(forwarding equivalent class):转发同价类,具有相同转发处理方式的报文,在MPLS网络中到达同一目的地址的报文就是一个FEC。

MPLS体系结构

控制平面:负责产生和维护路由信息及标签信息。

RIB(routing information base):路由信息表,由IP路由协议生成,用于选择路由。

LDP(label distribution protocol):标签分发协议,负责标签的分配、标签转发信息表的建立、标签交换路径的建立、拆除等工作。

LIB(label information base):标签信息表,由标签分发协议生成,用于管理标签信息。

转发平面:即数据平面,负责普通IP报文的转发以及带MPLS标签报文的转发。

FIB(forwarding information base):转发信息表,从RIB中提取必要的路由信息生成,负责普通IP报文的转发。

LFIB(label forwarding information base):标签转发信息表,由标签分发协议建立LFIB,负责带MPLS标签报文的转发。

MPLS数据报文结构

MPLS标签是在报文的二层头和三层头之间插入一个MPLS头。

MPLS头部长度为32bit。

LABEL:用于报文转发,如标签为3表示隐式空标签用于倒数第二跳弹出则此时将报文标签去掉。

EXP:通常用来承载IP报文中的优先级。

S:标识栈底表明是否是最后一个标签(MPLS支持标签嵌套),值为1表示是栈底是最后一个标签。

TTL:防止报文环路。

MPLS标签嵌套

这里的label1、label2、label3分别表示一个MPLS头部,通过每个MPLS头部的S标识来判断是否是栈底(最后一个标签)。

标签嵌套一般应用于MPLS VPN、MPLS TE。

LSP标签交换路径建立的方式

静态LSP

静态LSP:通过手工的方式为各个转发等价类分配标签建立转发隧道。

静态LSP特点:不需要交互控制报文,资源消耗小。不能根据网络拓扑的变化动态调整,需要认为干预。

配置静态LSP时需要遵循的原则是:前一节点出标签的值等于下一节点入标签的值。

动态LSP

动态LSP:通过标签发布协议动态建立转发隧道。

动态LSP特点:组网配置简单,易于管理和维护。支持基于路由动态建立LSP,网络拓扑变化时能及时反映网络状况。

标签的发布方式

DU(downstream unsolicited):下游自主方式,对于一个到达同一目的地址报文的分组,LSR无需从上游获得标签请求消息即可进行标签的分配和分发。

DOD(downstream on demand):下游按需方式,对于一个到达同一目的地址报文的分组,LSR获得标签请求信息之后才进行标签的分配和分发。

注意:华为设备默认采用DU方式。

标签的分配控制方式

independent(独立标签分配控制方式):本地LSR可以自主的分配一个标签绑定到某个IP分组,并通告给上游LSR,无需等待下游的标签。

ordered(有序标签控制方式):只有当该LSR已经有此IP分组的下一跳的标签,或者该LSR就是该IP分组的出节点时,该LSR才可以向上游发送此IP分组的标签。

 注意:华为设备默认采用ordered方式。

标签的保持方式

liberal(自由标签保持方式):对于从邻居LSR收到的标签映射,无论邻居LSR是不是自己的下一跳都保留。

能迅速重建LSP,但需要更多的内存和标签空间。

conservative(保守标签保持方式):对于从邻居LSR收到的标签映射,只有当邻居LSR是自己的下一跳时才保留。

节省内存和标签空间,但重建LSP比较慢。

注意:华为默认采用自由标签保持方式。

LDP建立LSP过程

 如上图所示,LDP建立LSP的过程如下:

1.RTD上存在100.1.1.1/32的主机路由,因为RTD是egress节点,所以直接向上游邻居RTC发布100.1.1.1/32与标签的绑定关系。

2.RTC收到下游邻居RTD分配的100.1.1.1/32与标签的绑定关系后,将标签记录在自己的LIB表中,并向上游邻居RTB发布100.1.1.1/32与标签的绑定关系,同时RTC查看自己IP路由表中到达100.1.1.1/32的下一跳是否是RTD,如果IP路由表中的下一跳是RTD,则RTC使用RTD分配的标签封装到达100.1.1.1/32的数据;如果IP路由表中的下一跳不是RTD,则RTC保留RTD分配的标签作为备用标签。

3.RTB收到下游邻居RTC分配的100.1.1.1/32与标签的绑定关系后,执行与RTC相同的动作。

4.RTA收到下游邻居RTB分配的100.1.1.1/32与标签的绑定关系后,查看自己IP路由表中到达100.1.1.1/32的下一跳是否是RTB,如果IP路由表中的下一跳是RTB,则RTA使用RTB分配的标签封装到达100.1.1.1/32的数据;如果IP路由表中的下一跳不是RTB,则RTA保留RTB分配的标签作为备用。因为RTA为ingress,最终到达100.1.1.1/32的LSP完成建立。

MPLS数据转发过程

如图所示,MPLS数据转发过程如下:

1.RTA上收到访问100.1.1.1/32的数据包,如果数据包为普通的IP报文,则查找FIB表,因为tunnel ID为非0X0,封装已经分配的标签1027进行MPLS转发;如果数据包为带标签的报文,查找LFIB表,封装已经分配的标签1027进行MPLS转发。

2.RTB收到RTA发送的带标签1027的报文,查找LFIB表,封装已经分配的出标签1026进行MPLS转发给RTC。

3.RTC收到RTB发送的带标签1026的报文,查找LFIB表,封装已经分配的出标签1025进行MPLS转发给RTD。

4.RTD收到RTC发送的带标签1025的报文,查找LFIB表,出标签为null,表明数据包已经到达egress节点,所以路由器将数据包的标签信息去掉,并对数据包进行三层处理,查找IP路由表发现100.1.1.1/32的路由是自己本地的路由,根据IP路由表中的出接口进行IP数据的封装并转发。

PHP倒数第二跳弹出

PHP(penultimate hop popping),使用隐式空标签3,执行弹出标签的动作,并将数据包发给下游路由器。

LDP的基本配置

执行命令mpls lsr-id lsr-id,配置本节点的LSR ID;
执行命令mpls,使能全局MPLS功能,并进入MPLS视图;
执行命令mpls ldp,使能全局的LDP功能,并进入MPLS-LDP视图;
执行命令interface interface-type interface-number,进入需要建立LDP会话的接口视图;
执行命令mpls,使能接口的MPLS能力;
执行命令mpls ldp,使能接口的MPLS LDP能力。
posted @ 2024-11-28 16:56  小蟋帅  阅读(11)  评论(0编辑  收藏  举报