
一、MPLS基本概念
1. MPLS诞生背景
早期三层设备在数据转发过程中,使用基于CPU驱动的TCAM表项(路由表)进行模糊查询(逐位将目的IP地址与路由表中的各个路由前缀进行匹配),这种数据转发有两个缺点:
占用设备的CPU资源
查询过程比较慢
为了提高三层设备的数据转发效率,Cisco最早提出了MPLS技术,MPLS在数据转发过程中,有以下特点:
基于标签转发表转发数据,标签转发表与二层设备的CAM(MAC地址表)类似
基于硬件ASIC芯片驱动,进行精确匹配
一个骨干网络连接着多个用户网络,这些用户使用的都是私网网段,为了让这些用户可以相互访问,需要在骨干路由器上学习用户网段信息,但是因为用户使用的网段可能重复从而导致的地址冲突、路由条目过多以及用户隐私泄露等问题。可见传统路由转发无法帮助用户直接访问彼此私网地址,需要一个新技术代替路由转发。MPLS并不是一种业务或应用,实际上是一种隧道技术,这种技术不仅支持多种高层协议和业务,而且在一定程度上可以保证信息传输的安全性。
传统的路由转发:Routing&L3 Switching的转发原理
利用路由协议生成路由表
根据目的IP地址进行转发
2. 转发设备LSR
在MPLS网络中,采用标签交换转发报文的路由器称为LSR(Label Switch Router),LSR会为路由表中的每条IGP路由产生一个标签,并通告给其它相邻路由器。
LSR分为内部LSR和边界LSR
内部LSR:所有接口可进行标签转发,是MPLS域的内部设备
边界LSR:分为入站LSR【Ingress】和出站LSR【Egress】,部分接口进行标签转发,同时连接IP网络和MPLS网络,是MPLS域和IP域的边界设备

3. 转发路径LSP
属于同一个FEC的报文在MPLS网络中经过的转发路径称为LSP(Label Switch Path,标签交换路径)。LSP是从MPLS网络的入口到出口的一条单向路径。LSP是报文在穿越MPLS网络或部分MPLS网络时的路径,为了满足通信节点之间的双向通信,往往需要建立双向的LSP。
在一条LSP上,沿着数据包转发方向,相邻的LSR分别称为上游LSR和下游LSR。LSP的建立过程就是将FEC和标签进行绑定,并将这种绑定通告给相邻LSR,以便在LSR上建立标签转发表的过程。LSP可以通过手工配置的方式静态建立,也可以利用标签发布协议动态建立。
LSP的入口LSR被称为Ingress LSR(入站LSR),位于LSP中间的LSR被称为中间LSR(Transit LSR)。LSP的出口LSR被称为Egress LSR(出站LSR)。Ingress LSR及Egress LSR都是LER。手工配置的方式建立静态LSP,建立静态LSP需要用户在报文转发路径中的各个LSR上手工配置为FEC分配的标签。
[Tricks] 手工分配标签需要遵循的原则。
上游LSR出标签值=下游LSR入标签值
静态LSP沿途的各个LSR不能相互感知到整个LSP的情况,静态LSP是一个本地的概念
静态LSP不使用标签发布协议,不需要交互控制报文,因此消耗资源比较小,适用拓扑结构简单且稳定的小型网络
利用标签发布协议(LDP)建立动态LSP,标签发布协议是MPLS的信令协议,负责划分FEC、分配标签、通告标签,建立并维护LSP。

4. MPLS静态LSP
要实现MPLS的基本转发功能,可以通过静态配置LSP而不使用标签分发协议。静态LSP是指在MPLS网络的每一跳设备上通过手工静态配置出入标签、下一跳等信息生成标签转发表的方式建立MPLS LSP。因为静态配置LSP不需要LDP协议,因此也就不需要依赖IPv4路由。即便网络中没有任何IPv4路由,只要物理网络可达,静态配置的LSP也可以生效。
4.1 静态LSP的建立过程
在入口LER对FEC建立静态FTN表项(包含目的网段对应的出标签、LSP的下一跳或者到达下一跳的出接口),把FEC和标签进行绑定。入口LER收到一个IP数据包后,根据报文的目的地址,使用最长匹配查找FTN表下一跳。如果找到,为报文添加FEC对应的出标签,将IP流量导入LSP,并把报文转发给指定的下一跳或通过出接口进行转发。
在中间LSR上配置静态ILM转发表项(包含入标签对应的出标签、LSP的下一跳或者到达下一跳的出接口),把入标签映射到出标签上。中间LSR收到一个带标签的数据包后,会在ILM表中根据报文携带的标签值查找下一跳。如果找到,则将报文中的标签替换为该标签对应的出标签,并将报文转发给指定的下一跳或通过出接口进行转发。如果在倒数第二跳LSR做PHP(即LSR的ILM出标签为隐式空标签3),则会在倒数第二跳LSR处将标签弹出再进行转发。
对于倒数第二跳LSR出标签未配置为0或3的情况,出口LER还需要配置静态ILM表项。此时出口LER接收到的报文仍带有标签值,需要根据ILM表项弹出标签,再对报文进行下一层转发处理。如果在倒数第二跳LSR配置出标签值为0或3,则出口LER接收到的是普通IP报文,可以直接进行转发。
二、MPLS静态LSP配置案例
案例拓扑

案例需求
LER1、LSR、LER2上配置OSPF路由协议,进程号为1,归属Area 0,通告直连接口及Loopback0接口
LER1和LER2上分别配置静态FTN,LSR上配置静态ILM,建立双向静态LSP
倒数第二跳LSR作PHP,设置ILM表项出标签为隐式空标签3
[Step1] LER1上配置OSPF路由协议。
LER1(config)#router ospf 1
LER1(config-router)#router-id 1.1.1.1
Change router-id and update OSPF process! [yes/no]:yes
LER1(config-router)#network 12.1.1.0 0.0.0.255 area 0
LER1(config-router)#network 192.168.10.0 0.0.0.255 area 0
LER1(config-router)#exit[Step2] LSR上配置OSPF路由协议。
LSR(config)#router ospf 1
LSR(config-router)#router-id 2.2.2.2
Change router-id and update OSPF process! [yes/no]:yes
LSR(config-router)#network 12.1.1.0 0.0.0.255 area 0
LSR(config-router)#network 23.1.1.0 0.0.0.255 area 0
LSR(config-router)#exit[Step3] LER2上配置OSPF路由协议。
LER2(config)#router ospf 1
LER2(config-router)#router-id 3.3.3.3
Change router-id and update OSPF process! [yes/no]:yes
LER2(config-router)#network 23.1.1.0 0.0.0.255 area 0
LER2(config-router)#network 192.168.20.0 0.0.0.255 area 0
LER2(config-router)#exit[Step4] LER1上全局开启MPLS转发功能,开启互联接口的标签交换能力。
LER1(config)#mpls ip
LER1(config)#interface g0/0
LER1(config-if-GigabitEthernet 0/0)#label-switching
LER1(config-if-GigabitEthernet 0/0)#exit[Step5] LSR上全局开启MPLS转发功能,开启互联接口的标签交换能力。
LSR(config)#mpls ip
LSR(config)#interface range g0/0-1
LSR(config-if-range)#label-switching
LSR(config-if-range)#exit[Step6] LER2上全局开启MPLS转发功能,开启互联接口的标签交换能力。
LER2(config)#mpls ip
LER2(config)#interface g0/0
LER2(config-if-GigabitEthernet 0/0)#label-switching
LER2(config-if-GigabitEthernet 0/0)#exit[Step7] 正向入口LER1上配置FTN,匹配目的网段为192.168.20.0/24,出标签设置为100,出接口为GigabitEthernet 0/1,下一跳地址为12.1.1.2。
LER1(config)#mpls static ftn 192.168.20.0/24 out-label 100 nexthop GigabitEthernet 0/1 12.1.1.2[Step8] 中间节点LSR配置静态ILM,因为LSP是单向的,因此需要配置两条。
LSR(config)#mpls static ilm in-label 100 forward-action swap-label 3 nexthop gigabitEthernet 0/1 23.1.1.3 fec 192.168.20.0/24
LSR(config)#mpls static ilm in-label 200 forward-action swap-label 3 nexthop gigabitEthernet 0/0 12.1.1.1 fec 192.168.10.0/24第一条对应的LSP方向为LER1-->LSR-->LER2,匹配入标签为100的MPLS报文,执行标签交换,交换为标签3,从G0/1接口转发到下一跳23.1.1.3,绑定FEC网段192.168.20.0/24。
第二条对应的LSP方向为LER2-->LSR-->LER1,匹配入标签为200的MPLS报文,执行标签交换,交换为标签3,从G0/0接口转发到下一跳12.1.1.1,绑定FEC网段192.168.10.0/24。
[Step9] 反向入口LER2上配置FTN,匹配目的网段为192.168.10.0/24,出标签设置为200,出接口为GigabitEthernet 0/0,下一跳地址为23.1.1.2。
LER2(config)#mpls static ftn 192.168.10.0/24 out-label 200 nexthop GigabitEthernet 0/0 23.1.1.2[Step10] 验证:查看设备LER1的MPLS表项信息,能够看到存在一条表项,标签处理动作为压入标签(PUSH),目的网段为192.168.20.0/24,且出标签为100。
LER1#show mpls forwarding-table 
[Step11] 验证:查看设备LSR的MPLS表项信息,能够看到存在两条表项,标签处理动作为弹出标签(POP),目的网段分别为192.168.10.0/24和192.168.20.0/24。
LSR#show mpls forwarding-table 
[Step12] 验证:查看设备LER2的MPLS表项信息,能够看到存在一条表项,标签处理动作为压入标签(PUSH),目的网段为192.168.10.0/24,且出标签为200。
LER2#show mpls forwarding-table