hcnp-mpls
MPLS基础
mpls(多协议标签交换)其实是一种把三层路由信息映射为二层交换路径的交换方式。因为在mpls交换中,首先是基于IP路由表在通信路径上建立用于指导mpls报文转发的LSP(标签转发路径或MPLS隧道)。mpls其在无连接的IP网络上引入面向连接(邻居设备间必须先建立某种连接)的标签交换概念,将三层路由技术和二层交换技术结合。mpls起源于IPv4网络,但目前其核心技术可以通过扩展支持多种网络层协议(IPv6,IPX,CLNP)以及数据链路层协议(以太网,PPP,HDLC),这也就是‘多协议’的含义。
mpls与传统的IP路由方式相比,在数据转发时,MPLS只需要在网络边缘分析IP报头,而不用在每一跳都分析IP报头,节约了处理时间,提高了转发效率。
MPLS网络架构
mpls网络的典型结构如图1-1。
网络中各路由器称为LSR(Label Switching Router,标签交换路由器)。由这些LSR构成的网络区域称为MPLS域,其中位于MPLS域边缘,连接其他网络的LSR称为LER(Label Edge Router,边缘路由器),mpls域内的LSR称为核心LSR(Core LSR)。IP报文在MPLS网络中所经过的路径称为LSP(Label Swiched Path,标签交换路径)。一条LSP可以有0个,1个或者多个中间节点,但有且只有一个入节点和一个出节点。根据LSP的方向,MPLS报文由Ingress发往Egress,则ingress是transit的上游节点,transit是egress的上游节点。
LSP是单向的,要实现隧道两端所连接网络的互通,需要建立反方向的LSP。
mpls的基本工作过程如图1-2。首先mpls/ip骨干网中的设备会为隧道两端LER上链接的每个公网网段(称之为FEC,等价转发类)建立一条LSP,路径上每台设备都会为该LSP分配一个用于指导mpls报文转发的下一条和出接口相映射。使得mpls报文在骨干网中传输时可以直接依据各设备上为该报文所分配的mpls标签进行转发。但mpls标签不是固定不变的,随着报文的传输,每经过一个设备都要进行标签替换。本质上来讲,mpls报文在骨干网中的转发过程实质上就是mpls报文中mpls标签的逐跳交换的过程
当IP报文进入mpls域的LER时,首先根据其目的IP地址找到的是其对应的FIB(转发信息表)表项,如果其中的Tunnel ID值不为0,则表示要进行MPLS标签转发,若为0则表示采用IP路由转发。
MPLS标签
mpls标签是一个短而定长,只具有本地意义(无需全网唯一)的整数形式的数字标识符,用于唯一标识一个分组所属的分类即FEC。一个FEC中的分组数据在同一台设备上都以等价的方式进行处理,且被分配相同的MPLS标签。
MPLS中的FEC
mpls将具有相同特征的报文归为同一FEC,这个相同特征可以根据报文中的源/目的IP地址,源/目的端口,VPN实例,QoS策略等要素中的一个或多个进行划分,通常是根据目的IP地址基于IP路由表项进行划分。
在每台MPLS设备上,每个FEC与MPLS标签之间有一个映射关系,但针对同一FEC,不同设备上分配的标签可以相同,也可以不相同。
MPLS标签封装
在不同应用中MPLS标签嵌入的位置不完全相同,在大多数mpls应用中(BGP/MPLS IP VPN,各种VLL和PWE3),mpls设备从用户端设备接收数据帧后,会在原来数据帧中的二层协议头和三层协议头之间插入一个或多个mpls标签。
MPLS标签字段
无论使用哪种封装方式,一个MPLS标签占4个字节。
字段 | 长度 | 含义 |
---|---|---|
Label | 20比特 | 标签值字段,用来标识一个FEC。该字段的取值范围称为‘标签空间’ |
EXP | 3比特 | 标识mpls报文的优先级,范围0-7,值越小优先级越低 |
S | 1比特 | MPLS支持多重标签。值为1时表示为最底层标签。 |
TTL | 8比特 | 和IP分组中的TTL意义相同,可以用来防止环路。 |
MPLS标签栈
如果MPLS报文中封装了多个MPLS标签(如既有LDP LSP标签,又有BGP LSP标签,MPLS CR-LSP标签或VC标签),就形成了标签栈(label stack)。如下图所示是一个包含有两个MPLS标签的示意图,靠近二层帧头的标签称为栈顶MPLS标签或者外层MPLS标签,此时S位置0。
MPLS标签中‘Lable字段’的取值范围不同,标签的用途也不同
0-15:这是16个特殊标签,如下表
16-1023:这是专门分配给静态LSP和应用与MPLS TE中的静态CR-LSP共享的标签空间
1024及以上:这是分配给LDP,RSVP-TE及MP-BGP等动态信令协议所分配的标签空间。即动态分配的MPLS标签只能大于1024
MPLS体系结构
MPLS体系结构是由控制平面和转发平面(或者数据平面)两部分组成。
控制平面
用于控制协议报文的转发,其依靠IP路由和MPLS标签两方面来实现。MPLS骨干网中的LSR都是三层设备,需要依靠IP路由实现互通,而外部进入到MPLS骨干网的报文又要直接依靠MPLS进行转发,所以要控制IP报文和MPLS报文的转发就需要有产生,维护路由和标签信息的能力。这就是控制平面得分基本功能。控制平面包括3个子项
RIB(routing information base,路由信息表):RIB由各种IP路由协议生成,用于进行路由选择。骨干网中MPLS标签的分发,LSP的建立仍要依据IP路由表,即先按照FIB(转发信息表)进行MPLS标签分发,建立对应的LSP,然后MPLS域中的设备才可以按照标签进行数据转发
LDP(标签分发协议):是一种动态标签分发协议,负责MPLS标签的动态分发,LFIB(标签转发信息表)的建立,标签交换路径的建立,拆除等工作。
LIB(Label Information Base,标签信息表):MPLS标签与IP路由中的RIB对应的就是LIB,由LDP生成,保存了每个标签与FEC的映射关系。LIB中包含:FEC网段,入标签,出标签,分发出标签的下游节点。
转发平面
转发平面用于指导报文的转发,即数据平面。包括IP报文和MPLS报文的转发。转发平面包括两个子项:
FIB(Forwarding Information Base,转发信息表):用于指导IP报文的转发,是从RIB中提取得到的,仅提取当前有效的路由表项信息。当报文离开MPLS域时要按FIB进行转发。FIB中包含:,目的网段,出接口,下一跳IP地址,路由标记,路由优先级。
LFIB(Label Forwarding Information Base,标签转发信息表):用于指导MPLS报文转发,从LIB中提取得到。LFIB包含:目的网段,出接口,下一跳,入标签,出标签。
LSP简介
静态LSP
静态LSP是通过手工方式为各个转发等价类分配标签而建立的,不需要标签分发协议的参与,也不需要IP路由参与(但此时仍需要在MPLS域内部署路由,以实现骨干网内各LSR的三层互通)。
在静态LSP配置中,对于MPLS域中不同节点所需配置的标签不一样:
入节点:只需配置出标签
中间节点:同时配置出标签和入标签
出节点:只需配置入标签
静态LSP不使用标签发布协议,不需要交互控制报文,资源消耗较少,适用于网络拓扑简单且稳定的小型网络。
动态LSP
动态LSP是通过标签发布协议(如:LDP,MP-BGP,RSVP-TE)动态建立的,但同时也需要IP路由参与。
LDP:最常用的标签分发协议,它依据IGP和BGP对应的IP路由信息以逐跳的方式建立LSP
MPLS基本工作原理
mpls技术基本工作原理主要涉及MPLS标签动作,MPLS报文转发流程,以及对MPLS报文中的TTL处理三个方面
MPLS标签动作
标签动作:压入(push),交换(swap),弹出(pop)。
push:可能会在Ingress或Transit节点上发生。
swap:会发生在Transit节点上。
pop:会发生在倒数第二跳Transit节点(比如PHP会在倒数第二跳弹出标签)或者Egress节点上。
MPLS报文转发涉及的基本概念
Tunnel ID:为了给使用隧道的上层应用(VPN,路由管理)提供统一接口,系统会自动为隧道分配一个ID(也可手动配置),称为Tunnel ID。该ID长度为32比特,只具有本地意义。
NHLFE(Next Hop Label Forwarding Entry,下一跳标签转发表项):用于指导MPLS报文的转发,它包括:Tunnel ID,出接口,下一跳,出标签,标签操作类型。
FTN(FEC to NHLFE):FEC与NHLFE的映射关系。它只存在于Ingress节点上。因为只有Ingres节点才需要用到FEC中的分类信息查找所需压入的出标签。
ILM(Incoming Label Map):入标签与NHLFE的映射关系。ILM包含:Tunnel ID,入标签,入接口,标签操作类型。
当IP报文从Ingress节点进入MPLS域时,首先查看FIB表,检查目的IP地址对应的Tunnel ID值是否为0x0。如果是0x0,则进入正常的IP转发流程;否则进入MPLS转发流程
在MPLS转发过程中,FIB,ILM,NHLFE表项都是通过Tunnel ID关联的。
注意:在路由器当中可以通过dis mpls lsp verbose命令来查看ILM,NHLFE表项中的相关内容;实际上路由器中并无这两个表。
MPLS对TTL的处理
MPLS对TTL的处理包括对TTL的处理模式和ICMP响应报文这两个方面。
mpls对TTL的处理模式
MPLS标签中包含一个8比特的TTL字段,其含义与IP报头中的TTL字段相同,都是用于限制报文在传输过程中所经过得分二层设备数。
MPLS对TTL的处理模式:Uniform(统一)和Pipe(管道)。缺省情况下为Uniform。
Uniform模式:该模式下,针对IP报头中的TTL字段,最终在离开MPLS域时其值仍是减少了MPLS中所经过的跳数,只是在MPLS域内传输时,IP报头TTL字段的改变移植到了MPLS标签中的TTL字段,然后在离开MPLS域时再反向移植到IP报头的TTL字段。
Pipe模式:在该模式下,IP报头中的TTL字段会把所经过的MPLS网络的中间节点忽略,将其看作两端边缘节点通过一个管道的直连。也就是无论在MPLS网络中经过多少三层设备,从MPLS入节点到出节点之间,IP报头的TTL字段只减1。但此时MPLS标签的TTL为某一个值,且还会逐跳减1。
ICMP响应报文
在MPLS网络中,当LSR收到TTL为1(表示不能再向下传了)的含有标签的mpls报文时,会生成一个ICMP的TTL超时消息。LSR将TTL超时消息回应给报文发送者的方式有两种:
(1)如果LSR上存在到达报发送者的路由,则可以通过IP路由,直接向发送者回应TTL超时消息
(2)如果LSR上不存在到达报文发送者的路由,则ICMP响应报文将按照LSP继续传送,到达LSP出节点后,由Egress节点将该消息返回给发送者。
通常情况下,当收到的MPLS报文只带一层标签时,LSR可以采用第一种方式回应TTL超时消息,因为此时表明LSR是MPLS域的边缘节点LER,可直接通过IP路由传输响应报文。当收到的MPLS报文包含多层标签时,LSR会采用第二种方式回应TTL超时消息。
LSP连通性测试
传统IP网络中的Ping/Tracert无法在MPLS域内只是用,因为他们所使用的ICMP报文是基于IP路由转发的。此时就要利用MPLS Ping/Tracert。MPLS ping主要用于检查LSP的连通性。MPLS Tracert在检查LSP的连通性的同时,也会分析网络在什么地方发生故障。