MPLS基础、MPLS静态LSP配置、LDP协议

237 阅读10分钟

MPLS基础

术语备注
LSR(Label Switch Router,标签交换路由器)支持MPLS的路由器(实际上也指支持MPLS的交换机或其他网络设备),该设备能够根据报文的MPLS标签头部对其进行转发
MPLS域一系列连续的LSR构成了一个MPLS域
LER(Label Edge Router)位于MPLS域边缘、连接其他网络的LSR
LSP(Label Switched Path,标签交换路径)是标签报文穿越MPLS网络到达目的地所在的路径
Ingress LSR入站LSR,是LER
Egress LSR出站LSR
Transit LSR中转LSR,是LER
FEC(Forwarding Equivalence Class,转发等价类)到同一条路由的所有报文就是一个转发等价类
NHLFE(Next Hop Label Forwarding Entry,下一跳标签转发表项,用于指导MPLS报文的转发)NHLFE包括:Tunnel ID、出接口、下一跳、出标签、标签操作类型等信息
FTN(FEC-to-NHLFE,FEC到一组NHLFE的映射)通过查看FIB表中Tunnel ID值不为0x0的表项,能够获得FTN的详细信息。FTN只在Ingress存在
ILM(Incoming Label Map,入标签到一组下一跳标签转发表项的映射)ILM包括:Tunnel ID、入标签、入接口、标签操作类型等信息;ILM在Transit LSR的作用是将标签和NHLFE绑定,通过标签索引ILM表,就相当于目的IP地址查询FIB,能够得到所有的标签转发信息
Tunnel ID为了给使用隧道的上层应用(如VPN、路由管理)提供统一的接口,系统自动为隧道分配了一个ID,也称为Tunnel ID。该Tunnel ID的长度为32bit,只有本地有效。这是设备为各种隧道所分配的一个ID。在MPLS中,Tunnel ID还用于将FIB、ILM及NHLFE进行关键

MPLS转发过程

image.png

MPLS架构

  • 控制平面(Control Plane)
    • 是无连接的,主要功能是负责产生和维护信息以及标签信息;控制平面中IP路由协议(IP Routing Protocol)模块用来传递路由信息,生成路由信息表,标签分发协议(Label Distribution Protocol)模块用来完成标签信息的交换,建立标签转发路径
    • 路由信息表RIB(Routing Information Base):由IP路由协议(IP Routing Protocol)生成,用于选择路由
    • 标签分发协议LDP(Label Distribution Base):负责标签的分配、标签转发信息表的建立、标签交换路径的建立、拆除等工作
    • 标签信息表LIB(Label Information Base):由标签分发协议生成,用于管理标签信息
  • 数据平面(Data Plane)
    • 数据平面也称为转发平面,是面向连接的,主要功能是负责普通IP报文的转发以及带MPLS标签报文转发;数据平面包络IP转发信息表(Forwarding Information Base)和标签转发信息表(Label Forwarding Information Base),当收到普通IP报文时,如果是普通IP转发,则查找IP路由表转发,如果需要标签转发,则按照标签转发表转发,当收到带有标签的报文时,如果需要按照标签转发,根据标签转发表转发,如果需要转发到IP网络,则去掉标签后根据IP转发表转发
    • 转发信息表FIB(Forwarding Information Base):从RIB提取必要的路由信息生成,负责普通IP报文的转发
    • 标签转发信息表LFIB(Label Forwarding Information Base):简称标签转发表,由标签分发协议在LSR上建立LFIB,负责带MPLS标签报文的转发

image.png

MPLS标签结构

image.png

标题长度备注
Label20bit标签字段,用于存储标签值
EXP3bit实验位,通常用做CoS(Class of Service),当设备阻塞时,优先发送优先级高的报文
BoS1bit栈底位,用于指示该标签头部是否为最后一层标签,如果该比特为1,则表示当前标签头部为栈底;如果该比特为0,则表示当前标签头部之后依然还有其他标签头部
TTL8bit与IP报文头部中的TTL具有相同的意义,用于防止标签报文被无限制转发

标签值

  • 0-15:特殊标签
  • 16-2023:静态LSP和静态CR-LSP共享的标签值
  • 1024以上:LDP、RSVP-TE、MP-BGP等动态信令协议的标签值
标签值含义备注
0IPV4 Explicit NULL Label表示该变迁必须被弹出,且报文的转发必须基于IPV4。如果出节点分配给倒数第二跳节点的标签值为0,则倒数第二跳LSR需要将值为0的标签正常压入报文标签值顶部,转发给最后一跳;最后一跳发现报文携带的标签值为0,则将标签弹出,0标签只有出现在栈底时才有效
1只有出现在非栈底时才有效,类似于IP报文的“Router Alert Option”字段,节点收到Router Alert Label时,需要将其送往本地软件模块进一步处理;实际报文转发由下一层标签决定;如果报文需要继续转发,则节点需要将Router Alert Label压回标签栈顶
2IPV6 Explicit NULL Label与IPV4 Explicit NULL Label功能类似
3Implicit NULL Label倒数第二跳LSR进行标签交换时,如果发现交换后的标签值为3,则将标签弹出,并将报文发给最后一跳;最后一跳收到该报文直接进行IP转发或下一层标签转发
4-13保留
14OAM Router Alert Label通过发送OAM报文检测和通告LSP故障。OAM报文使用MPLS承载
15保留

MPLS标签的处理

标题备注
Push指当IP报文进入MPLS域时,MPLS边界设备在报文二层头部和IP头部之间插入一个新标签;或者MPLS中间设备根据需要,在标签栈顶增加一个新的标签
Swap当报文在MPLS域内转发时,根据标签转发表,用下一跳分配的标签,替换MPLS报文的栈顶标签
Pop当报文离开MPLS域时,将MPLS报文的标签去掉;在最后一跳LSR,标签已经没有使用价值,这种情况下,可以利用倒数第二跳弹出特性PHP(Penultimate Hop Popping) ,在倒数第二跳LSR处将标签弹出,减少最后一跳的负担,最后一跳LSR直接进行IP转发或者下一层标签转发;PHP在Egress LSR上配置,支持PHP的Egress LSR分配给倒数第二跳的标签值为3

image.png

静态LSP配置

命令备注
mpls lsr-id 1.1.1.1配置LSR ID;VRP没有缺省的LSR ID,必须手工配置,保证唯一;推荐使用Loopback接口IP;如果要修改LSR ID,必须执行undo mpls(会导致MPLS业务中断)
mpls开启MPLS,全局和接口都需要配置
static-lsp ingress LSP1 destination 3.3.3.3 32 nexthop 12.1.1.1 out-label 100配置入节点静态LSP
static-lsp transit LSP1 incoming-interface g0/0/0 in-label 100 nexthop 12.1.1.1 out-label 200配置中间节点静态LSP
static-lsp egress LSP1 incoming-interface g0/0/0 in-label 200配置出节点静态LSP
display mpls static-lsp验证静态LSP
ping lsp ip 3.3.3.3 32测试静态LSP

案例一

image.png

//AR1
#
dhcp enable
#
mpls lsr-id 1.1.1.1
mpls
#
interface GigabitEthernet0/0/0
 ip address 192.168.0.1 255.255.255.0 
 ospf enable 1 area 0.0.0.0
 dhcp select interface
#
interface GigabitEthernet0/0/1
 ip address 12.1.1.1 255.255.255.0 
 ospf enable 1 area 0.0.0.0
 mpls
#
ospf 1 
 area 0.0.0.0 
#
static-lsp ingress r12r3 destination 192.168.1.0 24 nexthop 12.1.1.2 out-label 1
00
static-lsp egress r32r1 incoming-interface GigabitEthernet0/0/1 in-label 100
#

//AR2
#
mpls lsr-id 2.2.2.2
mpls
#
interface GigabitEthernet0/0/0
 ip address 12.1.1.2 255.255.255.0 
 ospf enable 1 area 0.0.0.0
 mpls
#
interface GigabitEthernet0/0/1
 ip address 23.1.1.2 255.255.255.0 
 ospf enable 1 area 0.0.0.0
 mpls
#
ospf 1 
 area 0.0.0.0 
#
static-lsp transit r12r3 incoming-interface GigabitEthernet0/0/0 in-label 100 ne
xthop 23.1.1.3 out-label 200
static-lsp transit r32r1 incoming-interface GigabitEthernet0/0/1 in-label 200 ne
xthop 12.1.1.1 out-label 100
#

//AR3
#
dhcp enable
#
mpls lsr-id 3.3.3.3
mpls
#
interface GigabitEthernet0/0/0
 ip address 23.1.1.3 255.255.255.0 
 ospf enable 1 area 0.0.0.0
 mpls
#
interface GigabitEthernet0/0/1
 ip address 192.168.1.1 255.255.255.0 
 ospf enable 1 area 0.0.0.0
 dhcp select interface
#
ospf 1 
 area 0.0.0.0 
#
static-lsp egress r12r3 incoming-interface GigabitEthernet0/0/0 in-label 200
static-lsp ingress r32r1 destination 192.168.0.0 24 nexthop 23.1.1.2 out-label 2
00
#

此时PC1 ping PC2就有带有MPLS标签,如图:

image.png

LDP协议(一个动态生成标签的协议)

Label Distribution Protocol,标签分发协议,RFC5036

  • 在LSR之间建立LDP Session
  • 建立了LDP Session的两台设备称为LDP Peers(LDP邻居/对等体)
  • 在LDP Peers间交换Label/FEC映射

image.png

报文(封装在UDP或TCP上,端口号646)作用分类协议
HelloLDP发现机制中宣告LSR并发现邻居discoveryUDP
Initialization在LDP Session建立过程中协商参数SessionTCP
KeepAlive监控LDP Session的TCP连接的完整性SessionTCP
Address宣告接口地址AdvertisementTCP
Address Withdraw撤销接口地址AdvertisementTCP
Label Mapping宣告FEC/Label映射信息AdvertisementTCP
Label Request请求FEC的标签映射AdvertisementTCP
Label Abort Request终止未完成的Label Request MessageAdvertisementTCP
Label Withdraw撤销FEC/Label映射AdvertisementTCP
Label Release释放标签AdvertisementTCP
Notification通知LDP Peer错误信息NotificationTCP

LSR ID

  • 每台运行MPLS的LSR必须拥有一个域内唯一的LSR ID
  • 在华为设备上激活MPLS能力之前,必须为设备配置MPLS ID(使用全局配置命令mpls lsr-id)
  • LSR ID长度为32bit,与IPV4地址的格式相同
  • 通常情况下,我们会选择设备的某个Loopback接口地址作为LSR ID

LDP ID

  • 每一台运行了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发现机制

image.png

机制备注发送周期
LDP基本发现机制发现直连的邻居,使用组播;周期性的发送LDP Link Hello,建立本地LDP会话5s
LDP扩展发现机制发现非直连的邻居,使用单播;周期性的发送LDP Targeted Hello,建立远端LDP会话5s

LDP 邻居发现过程

  • Hello消息使用UDP封装,发送周期为5s,使用组播地址224.0.0.2
  • Hello消息中,携带有Transport Address(传输地址)字段,该字段默认与设备配置的LSR ID一致,表明与对端建立邻居关系时所使用的IP地址(保证路由可达)
  • 参数包括LDP协议版本、标签分发方式、Keepalive保持定时器的值、最大PDU长度和标签空间等
  • 如果不能接收相关参数,则发送Notification消息终止LDP会话的建立
  • LDP会话建立成功后,进行FEC的创建与标签的分发

image.png

image.png

详细图解

image.png

image.png

image.png

PHP特性

image.png

  • R3如果激活了PHP特性,那么当它为本地直连路由1.0.0.0/8分配标签时,会分配一个特殊的标签,该标签被称为隐式空标签(Implicit NULL Label),其值为3,R3将该标签值通告给R2
  • 当LSR转发一个标签报文时,如果发现相应的入站标签对应的出站标签值为3,那么该LSR将把报文的标签头部弹出,然后将里面所封装的数据转发给下游LSR,也就是执行PHP(Penultimate hop popping,次末跳弹出)操作
  • R2作为到达1.0.0.0/8的次末跳(倒数第二跳),收到发往1.1.1.3的标签报文后,发现出站标签值为3,于是将标签头部弹出,将IP报文转发给R3,而R3则仅需执行一次查询操作(查询FIB表)即可获得相应的转发信息,转发效率得到了提升