本次博客主要介绍MPLS协议原理与配置
MPLS(英语:Multi-Protocol Label Switching,缩写为MPLS) 多协议标签交换
90年代初,互联网流量快速增长,而由于当时硬件技术的限制,采用的不是硬件,而是采用软件去转,路由器采用最长匹配算法逐跳转发数据包,成为网络数据转发的瓶颈。快速路由技术成为当时研究的一个热点。
在各种方案中,IETF确定MPLS协议作为标准的协议,用来提高数据转发的速率,所以,对于MPLS这个协议,一开始提出的目的就是在没有硬件的条件上,通过软件的方式,去提升数据转发的能力,但是随着网络的发展,硬件条件上来了,所以在某段时间里,MPLS就没有用武之地了,但是现在又把MPLS提出来,是因为发展到后期,有网络需要用到VPN,发现VPN和MPLS结合在一起非常好,就把MPLS又拿出来用了,所以现在MPLS用在现网里,并不是提升硬件的转发能力,而是有了更高层次的使用。
MPLS采用短而定长的标签进行数据转发,大大提高了硬件限制下的转发能力;而且MPLS可以扩展到多种网络协议(如IPv6,IPX等)。
MPLS概述
MPLS 多协议标签交换
正常的路由器在处理数据包的时候,首先收到一个数据包,会从二层进行解封装,看看二层的mac地址是不是给我的,然后看三层,发现不是给我的,就会查询路由表,有路由就进行封装(没有路由就丢掉),往下一跳转发,封装的时候也是从二层封装,这样的话,也会限制转发的速率,我们平时说交换快,路由慢,为什么说交换快,就是因为交换的话,解封装的层次不一样,看见二层的mac地址就直接走了,不会看三层,所以这个MPLS叫做多协议的标签交换。如下图所示,
这个多协议表示的是,不管上层的三层协议是ipv4还是ipv6,还是非ip,都无所谓,这是叫做多协议。
那么标签交换指的是,当我路由器采用MPLS进行交换的时候,不需要再看3层的ip头部了,那不看三层的ip头部,看什么来完成转发呢,看的是MPLS的头,这个头部在封装的过程中是处于二层和三层之间,处于2.5层,在这个位置里面会放一个标签值,那么有了这个标签值之后,路由器会事先形成一个标签转发表,标签转发表是A过来一个数据包,标签值是A,转出去变成B,从某个接口出去,这样的话,来了一个数据包,2.5层已经有了标签A ,同时这个路由器有这个映射表,就会把A替换成B从某个接口扔出去,就不需要去看3层ip,查路由表了,这样的话数据的转发速率就会提升。
MPLS基本网络结构
如下图所示,RTA,和RTE处于完全纯的IP网络里面,中间RTB,RTC,RTD这三台设备上,处于同一个OSPF区域,同时还都配置了MPLS协议,那么这三台设备就组成了一个MPLS的网络。
数据包在IP网络里面传输的时候,还是一个纯的ip报文,当这个纯的ip报文进入MPLS网络去传输的时候,就会采用标签去交换了,会把原始的数据包打上MPLS头,如下图所示,打上MPLS头,RTB把报文给RTC,RTC只需要看MPLS头部里面的标签就可以完成交换,到RTD,RTD再给RTE,在这个过程中,就不需要再看ip报文头部里的内容了,在这种情况下,如果没有路由表,有标签映射表也是不影响数据包的转发的。
LSP(Label Switched Path):标签交换路径
,即到达同一目的地址的报文在
MPLS
网络中经过的路径。
这个LSP在数据转发之前先生成的,当数据来了之后,再去生成肯定来不及了。先生成,等到数据来了之后,再去走就可以了。
这个LSP的生成方式分两大类:一个是管理员手工去生成,还有一个是协议动态去创建。
FEC(Forwarding Equivalent Class):转发等价类
,一般指具有相同转发处理方式的报文。在
MPLS
网络中,到达同一目的地址的所有报文就是一个
FEC
。相同的前缀,是相同的FEC,不同的前缀是不通的FEC,不通的前缀,目的不一样。
如上图所示,在BCD上面运行MPLS,如果用动态的方式,BCD之间就会相互交换标签, 这个标签是给FEC分的,在华为的设备里面,不通的前缀就是不同的FEC,当你运行动态的标签分配协议之后,它会为路由表里面的前缀去分标签,也就是说,某台路由器都有了去往不同前缀的标签值了,去访问的时候,就可以打上相应的标签了。
在MPLS网络中,路由器的角色分为两种:
LER(Label Edge Router): 在MPLS网络中,用于标签的压入或弹出,如上图中的RTB,RTD。
LSR(Label Switched Router):在MPLS网络中,用于标签的交换,如图中的RTC。
根据数据流的方向,LSP的入口LER被称为入节点(Ingress);位于LSP中间的LSR被称为中间节点(Transit);LSP的出口LER被称为出节点(Egress)。
MPLS报文由Ingress发往Transit,则Ingress是Transit的上游节点,Transit是Ingress的下游节点;同理,Transit是Egress的上游节点,Egress是Transit的下游节点。
MPLS作为一种分类转发技术,将具有相同转发处理方式的报文分为一类,称该类报文为一个FEC(Forwarding Equivalent Class)。
FEC的划分方式非常灵活,可以是以源地址、目的地址、源端口、目的端口、协议类型或VPN等为划分依据的任意组合。
MPLS体系结构
如下图所示,MPLS的体系结构有控制平面和转发平面,可以把下面的这个图理解为一个路由器,在这个路由器上边,控制平面,需要有动态路由协议,(OSPF,ISIS,RIP),为什么要有这个,得形成路由表,有路由表才有前缀,通过动态路由协议形成一个RIB(Routing Information Base路由信息数据库 )的表,可以把他理解成路由表,用来转发数据的,同时还会在转发平面上形成一个表,叫做FIB表,(Forwarding Information Base 转发信息库),这个FIB表实际上是从IP路由表里提取出来的信息,转发就会更快;同时还需要在这台路由器上运行标签的发布协议,就是分发协议,需要给不同的前缀分发标签,路由协议产生路由,标签分发协议为前缀分发标签,这个协议叫做LDP(Label Distribution Protocol),LDP这个协议为路由前缀分配标签,同时会形成一个标签转发表或者叫做(Label Forwarding Information Base LFIB)标签转发信息数据库,这里面是不同的前缀对应不同的标签。
FIB表和LFIB表相互同步,FIB表里很有可能就会出现标签了,之前的的话,没有标签的参与,就没有标签,就是路由表,出接口出去了,现在由于有标签了,这里面就可能有些表项存在标签,有些表项,不存在标签。
同时,LFIB表里面也会有路由前缀信息,所以对于MPLS网络来讲,控制平面,就是各种各样的协议,通过各种各样的协议,形成各种各样的表,通过各种各样的表,去用来转发数据的,在转发数据的时候,当一个ip报文过来了,被这个路由器收到了,那么这个路由器会去查找FIB表,当收到带标签的报文时,查找LFIB表;如果对应的出标签是普通标签,则进行MPLS转发;查找LFIB表,如果对应的出标签是特殊标签,如标签3,则将报文的标签去掉,进行IP转发。
还有一个表叫做LIB(标签信息数据库,)比较完整,把最优的放入LFIB表中。这个LIB里面包含了所有标签数据,但是用来转发数据标签的时候用的是LFIB表。
MPLS数据报文结构
如下图所示,RTB在从RTA那里收到了一个ip报文之后,查找了FIB表之后,会给这个报文打上标签,这个标签的格式是什么样子的?首先MPLS的头部是在2层头和3层头之间的,在这个MPLS头部里面,占比最大的是Label(标签值),后面紧跟着的是Exp位,Exp位是3个bit,这个Exp位用来去做MPLS的QOS 的;S,是当打了多层标签嵌套的时候,你这个栈底位是不是紧挨着IP头,一个数据包可以打多层标签的,
MPLS
标签封装在链路层和网络层之间,可以支持任意的链路层协议,
MPLS
标签的封装结构如图所示。
MPLS
标签的长度为
4
个字节,共分
4
个字段:
Label
:
20bit
,标签值域;
Exp
:
3bit
,用于扩展。现在通常用做
CoS
(
Class of Service
),当设备发生阻塞时,优先发送优先级高的报文;
S
:
1bit
,栈底标识。
MPLS
支持多层标签,即标签嵌套。
S
值为
1
时表明为最底层标签;
TTL
:
8bit
,和
IP
报文中的
TTL
(
Time To Live
)意义相同。
标签空间是指标签的取值范围。标签空间划分如下:
0
~
15
:特殊标签。如标签
3
,称为隐式空标签,用于倒数第二跳弹出;
16
~
1023
:静态
LSP
和静态
CR-LSP
(
Constraint-based Routed Label Switched Path
)共享的标签空间;
1024
及以上:
LDP
、
RSVP-TE
(
Resource Reservation Protocol-Traffic Engineering
)、
MP-BGP
(
MultiProtocol
Border Gateway Protocol
)等动态信令协议的标签空间。
LSP建立方式
只要LSP建立了,数据包就可以依据标签转发了,所以建立LSP是非常重要的。
建立LSP的方式有两种:
静态LSP:用户通过手工方式为各个转发等价类分配标签建立转发隧道;
动态LSP:通过标签发布协议动态建立转发隧道。
静态LSP
静态LSP的特点:
不使用标签发布协议,不需要交互控制报文,资源消耗比较小;
通过静态方式建立的LSP不能根据网络拓扑变化动态调整,需要管理员干预。
静态LSP适用于拓扑结构简单并且稳定的网络。
对于一个LSP来讲,这个LSP是单向的,分为上游和下游,上下游是数据流的方向,如果数据流是从A------->B,那么A 就是上游,B就是下游,那么对于这样单项的LSP,他的上游叫做入节点,下游叫做出节点,比如说,RTA左边的PC 想要去访问100.1.1.1,如果采用标签的话,数据包到了RTA上,打个标签,传给RTB,RTC,RTD,那么去访问的时候,这个路径就是A--B--B--D,那么A就是上游,D就是下游,形成的LSP也是这个方向的,这种情况下,分发标签的时候,是相反的方向,
首先是由D为100.1.1.1去分配一个标签,指定了入标签是300,就意味着C的出标签是300,然后C再分配一个入标签是200,就意味着B的出标签是200,然后B再分配一个入标签是100,那么就意味着A的出标签是100,当然这个过程也可以反过来。从下游朝着上游去分。
配置静态
LSP
时,管理员需要为各路由器手工分配标签,需要遵循的原则是:前一节点出标签的值等于下一个节点入标签的值。
如图所示拓扑,
MPLS
网络中有一个
100.1.1.1/32
的用户,静态为该路由建立一条
LSP
,配置过程如下:
配置
LSR ID
用来在网络中唯一标识一个
MPLS
路由器。缺省没有配置
LSR ID
,必须手工配置。为了提高网络的可靠性,推荐使用
LSR
某个
Loopback
接口的地址作为
LSR ID
。
配置命令:
mpls
lsr
-id
lsr
-id
在
MPLS
域的所有节点与相应的接口上开启
MPLS
协议。
配置命令:
system-view
mpls
interface interface-type interface-number
mpls
在
Ingress
进行以下配置:
static-
lsp
ingress
lsp
-name destination
ip
-address { mask-length | mask } {
nexthop
next-hop-address | outgoing-interface interface-type interface-number } * out-label
out-label
。
如下图所示:
[AR5]dis cu
[V200R003C00]
#
sysname AR5
#
mpls lsr-id 5.5.5.5
mpls
#
interface GigabitEthernet0/0/0
ip address 10.0.45.5 255.255.255.0
mpls
#
interface GigabitEthernet0/0/1
ip address 10.0.57.5 255.255.255.0
#
interface LoopBack0
ip address 5.5.5.5 255.255.255.255
#
ospf 1 router-id 5.5.5.5
area 0.0.0.0
network 5.5.5.5 0.0.0.0
network 10.0.45.0 0.0.0.255
network 10.0.57.0 0.0.0.255
#
static-lsp egress AR2_AR5 incoming-interface GigabitEthernet0/0/0 in-label 500
[AR4]DIS CU
mpls lsr-id 4.4.4.4
mpls
#
interface GigabitEthernet0/0/0
ip address 10.0.34.4 255.255.255.0
mpls
#
interface GigabitEthernet0/0/1
ip address 10.0.45.4 255.255.255.0
mpls
#
interface LoopBack0
ip address 4.4.4.4 255.255.255.255
#
ospf 1 router-id 4.4.4.4
area 0.0.0.0
network 4.4.4.4 0.0.0.0
network 10.0.34.0 0.0.0.255
network 10.0.45.0 0.0.0.255
#
static-lsp transit AR2_AR5 incoming-interface GigabitEthernet0/0/0 in-label 400
nexthop 10.0.45.5 out-label 500
#
[AR3]DIS CU
sysname AR3
#
mpls lsr-id 3.3.3.3
mpls
#
interface GigabitEthernet0/0/0
ip address 10.0.23.3 255.255.255.0
mpls
#
interface GigabitEthernet0/0/1
ip address 10.0.34.3 255.255.255.0
mpls
#
interface LoopBack0
ip address 3.3.3.3 255.255.255.255
#
ospf 1 router-id 3.3.3.3
area 0.0.0.0
network 3.3.3.3 0.0.0.0
network 10.0.23.0 0.0.0.255
network 10.0.34.0 0.0.0.255
#
static-lsp transit AR2_AR5 incoming-interface GigabitEthernet0/0/0 in-label 300
nexthop 10.0.34.4 out-label 400
[AR2]dis cu
[V200R003C00]
#
sysname AR2
#
mpls lsr-id 2.2.2.2
mpls
#
interface GigabitEthernet0/0/0
ip address 10.0.12.2 255.255.255.0
#
interface GigabitEthernet0/0/1
ip address 10.0.23.2 255.255.255.0
mpls
#
interface LoopBack0
ip address 2.2.2.2 255.255.255.255
#
ospf 1 router-id 2.2.2.2
area 0.0.0.0
network 2.2.2.2 0.0.0.0
network 10.0.12.0 0.0.0.255
network 10.0.23.0 0.0.0.255
#
static-lsp ingress AR2_AR5 destination 5.5.5.5 32 nexthop 10.0.23.3 out-label 30
0
#
配置验证:
动态LSP
动态
LSP
通过
LDP
协议实现对
FEC
的分类、标签的分配及
LSP
的建立和维护等操作。
动态
LSP
的特点:
组网配置简单,易于管理和维护;
支持基于路由动态建立
LSP
,网络拓扑发生变化时,能及时反映网络状况。
如上图所示拓扑:
Egress
路由器
RTD
为本地存在的路由分配标签,并将路由和标签的绑定关系主动发送给上游邻居路由器
RTC
;
路由器
RTC
收到下游邻居路由器
RTD
的路由和标签的绑定关系后,将其记录到
LIB
中,并将自己分配的标签和路由的绑定关系发送给上游邻居路由器
RTB
;
RTB
执行相同的动作将标签和路由的绑定关系发送给上游邻居路由器
RTA
,
RTA
为
Ingress
路由器,没有上游邻居,因此动态的
LSP
完成建立。
路由器分的时候一定是入标签,
LDP邻居发现
MPLS路由器通过周期性地发送LDP链路Hello消息(LDP Link Hello),实现LDP邻居的发现,并建立本地LDP会话。
为了能使开启
LDP
协议的设备快速发现邻居,
LDP
的
Hello
消息使用
UDP
封装。
UDP
是无连接的协议,为了保证邻居的有效性和可靠性,
Hello
消息周期发送,发送周期为
5s
,使用组播
224.0.0.2
作为目的
IP
地址,意思是“发送给网络中的所有路由器”。
LDP的Hello消息中,携带有Transport Address(传输地址)字段,该字段与设备配置的LSR(标签交换路由器) ID (唯一标识一台标签交换路由器)一致,表明与对端建立邻居关系时所使用的IP地址。如果该字段IP地址是直连接口IP地址,则直接建立邻居关系;如果该字段地址是LoopBack接口IP地址,保证该接口IP地址路由可达,才能建立邻居关系。
LDP邻居建立
LDP
协议主要使用四类消息:
发现(
Discovery
)消息:用于通告和维护网络中邻居的存在,如
Hello
消息。
会话(
Session
)消息:用于建立、维护和终止
LDP
对等体之间的会话,如
Initialization
消息、
Keepalive
消息。
通告(
Advertisement
)消息:用于创建、改变和删除
FEC
的标签映射,如
Address
消息、
Label Mapping
消息。
通知(Notification)消息:用于提供建议性的消息和差错通知。
LDP
邻居建立过程如上图所示:
两个
LSR
之间互相发送
Hello
消息。
Hello
消息中携带传输地址,双方使用传输地址建立
LDP
会话。
传输地址较大的一方作为主动方,发起
TCP
连接。
如上图所示,
RTB
作为主动方发起
TCP
连接,
RTA
作为被动方等待对方发起连接。
TCP
连接建立成功后,由主动方
RTB
发送初始化消息,协商建立
LDP
会话的相关参数。
LDP
会话的相关参数包括
LDP
协议版本、标签分发方式、
Keepalive
保持定时器的值、最大
PDU
长度和标签空间等。
在session 的基础上, label mapping (标签映射信息)这个路由前缀,我给他分配的标签是多少,你收了。
被动方
RTA
收到初始化消息后,如果
RTA
接受相关参数,则发送初始化消息,同时发送
Keepalive
消息给主动方
RTB
。
如果被动方
RTA
不能接受相关参数,则发送
Notification
消息终止
LDP
会话的建立。
主动方
RTB
收到初始化消息后,接受相关参数,则发送
Keepalive
消息给被动方
RTA
。
如果主动方
RTB
不能接受相关参数,则发送
Notification
消息给被动方
RTA
终止
LDP
会话的建立。
当双方都收到对端的
Keepalive
消息后,
LDP
会话建立成功。
LDP
会话建立成功后,进行
FEC
的创建与标签的分发。
标签的发布方式
标签的发布方式:
DU
(
Downstream Unsolicited
,下游自主方式):对于一个到达同一目地址报文的分组,
LSR
无需从上游获得标签请求消息即可进行标签分配与分发。
DoD
(
Downstream on Demand
,下游按需方式):对于一个到达同一目的地址报文的分组,
LSR
获得标签请求消息之后才进行标签分配与分发。
如图所示拓扑:
采用
DU
方式分发标签,对于目的地址为
100.1.1.1/32
的分组,下游
RTD
(
Egress
)通过标签映射消息主动向上游
RTC
(
Transit
)通告自己主机路由
100.1.1.1/32
的标签。
采用
DoD
方式分发标签,对于目的地址为
100.1.1.1/32
的分组,上游
RTC
(
Transit
)向下游发送标签请求消息,下游
RTD
(
Egress
)收到标签请求消息后,才会向上游发送标签映射消息。
华为设备默认采用DU的方式发布标签。
DU无需等待上游的请求消息,可以直接向邻居分配标签。在网络拓扑发生变化时,采用DU方式可以快速反应为新的拓扑分发标签,收敛时间相对于DoD方式较短。
标签的分配控制方式
标签的分配控制方式:
Independent
(独立标签分配控制方式):本地
LSR
可以自主地分配一个标签绑定到某个
IP
分组,并通告给上游
LSR
,而无需等待下游的标签。
会为路由表里面的所有路由前缀进行分配,华为的设备缺省只为/32的路由前缀去分。/24是不分的,但是可以设置让他分配。
Ordered
(有序标签分配控制方式):只有当该
LSR
已经具有此
IP
分组的下一跳的标签,或者该
LSR
就是该
IP
分组的出节点时,该
LSR
才可以向上游发送此
IP
分组的标签。有序的是,必须从路由表里的下一跳拿到标签,我才给他分配,
如图所示拓扑:
采用
Independent
方式:
如果标签发布方式为
DU
,且标签分配控制方式为
Independent
,则
RTC
(
Transit
)无需等待下游
RTD
(
Egress
)的标签,就会直接向上游
RTB
分发标签。
如果标签发布方式为
DoD
,且标签分配控制方式为
Independent
,则发送标签请求的
RTB
(
Transit
)的直连下游
RTC
(
Transit
)会直接回应标签,而不必等待来自下游
RTD
(
Egress
)的标签。
采用
Ordered
方式:(华为设备缺省)
如果标签发布方式为
DU
,且标签分配控制方式为
Ordered
,则
RTC
(
Transit
)只有收到下游
RTD
(
Egress
)的标签,才会向上游
RTB
分发标签。
如果标签发布方式为
DoD
,且标签分配控制方式为
Ordered
,则发送标签请求的
RTB
(
Transit
)的直连下游
RTC
(
Transit
)只有收到下游
RTD
(
Egress
)的标签,才会向上游
RTB
分发标签。
华为设备默认采用Ordered的方式分配标签。
采用Ordered方式,只有当该LSR已经具有此IP分组的下一跳的标签时,才能向上游分发标签,这样是为了避免下游IP分组的标签未分配或收敛时间较长,上游的标签已分配,数据开始转发造成的数据丢失。
标签的保持方式
路由表中,
RTB
通过
RTD
到达
100.1.1.1/32
的路径最优,
RTB
从
RTC
收到分配给
100.1.1.1/32
的标签处理方式有以下两种:
一是
RTB
保留从
RTC
收到的标签信息,二是
RTB
不保留从
RTC
收到的标签信息,前者称为
Liberal
方式,后者称为
Conservative
方式。
标签的保持方式:
Liberal
(自由标签保持方式):对于从邻居
LSR
收到的标签映射,无论邻居
LSR
是不是自己的下一跳都保留。
Conservative
(保守标签保持方式):对于从邻居
LSR
收到的标签映射,只有当邻居
LSR
是自己的下一跳时才保留。
当网络拓扑变化引起下一跳邻居改变时:
使用自由标签保持方式,
LSR
可以直接利用原来非下一跳邻居发来的标签,迅速重建
LSP
,但需要更多的内存和标签空间。
使用保守标签保持方式,
LSR
只保留来自下一跳邻居的标签,节省了内存和标签空间,但
LSP
的重建会比较慢。
华为设备默认采用自由标签保持方式保存标签。
LDP建立LSP过程
IGP
协议负责实现
MPLS
网络内路由可达,为
FEC
的分组提供路由;
LDP
协议负责实现对
FEC
的分类、标签的分配以及
LSP
的建立和维护等操作。
如图所示拓扑,
LDP
动态建立
LSP
的过程如下:
RTD
上存在
100.1.1.1/32
的主机路由,因为
RTD
是
Egress
节点,所以直接向自己上游邻居
RTC
发布
100.1.1.1/32
与标签的绑定关系;
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
分配的标签作为备用标签;
RTB
收到下游邻居
RTC
分配的
100.1.1.1/32
与标签的绑定关系后,执行与
RTC
相同的动作;
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
完成建立。
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
能力。
MPLS数据转发过程
在
MPLS
网络中,数据包在每台路由器上根据已分配的标签进行标签的封装和转发;
分析数据包到达
Egress
节点
RTD
上怎么处理?如果
MPLS
网络中业务量很大,
Egress
节点的处理方式有何不妥?
如图所示拓扑,
MPLS
数据转发过程如下:
RTA
上收到访问
100.1.1.1/32
的数据包,如果数据包为
普通
的
IP
报文,
则查找
FIB
表,因为
Tunnel ID
为非
0x0
,封装已分配的标签
1027
进行
MPLS
转发;如果数据包为带标签的报文
,
查找
LFIB
表,封装已分配的标签
1027
进行
MPLS
转发;
RTB
收到
RTA
发送的带标签
1027
的报文
,
查找
LFIB
表,封装已分配的出标签
1026
进行
MPLS
转发给
RTC
;
RTC
收到
RTB
发送的带标签
1026
的报文
,
查找
LFIB
表,封装已分配的出标签
1025
进行
MPLS
转发给
RTD
;
RTD
收到
RTC
发送的带标签
1025
的报文
,
查找
LFIB
表,出标签为
Null
,表明数据包已经到达
Egress
节点,所以路由器将数据包的标签信息去掉,并对数据包进行三层处理,查找
IP
路由表发现
100.1.1.1/32
的路由为自己本地的路由,根据
IP
路由表中的出接口进行
IP
数据的封装并转发。
如果
MPLS
网络中的业务量很大,则每次数据包在
Egress
节点都要进行两次处理才能进行正确的路由转发,这样会导致
Egress
节点的处理压力增加,路由器的处理性能降低。我们希望在
Egress
节点上只处理一次就能将数据包正确转发,以提高
Egress
的转发性能,所以提出了
PHP
技术。
如果说在次末跳在发送数据包的时候,把标签剥掉,到了RTD上,就直接查看FIB了,就不用两次处理了,
Penultimate Hop Popping
PHP(Penultimate Hop Popping,倒数第二跳弹出),具体过程如下:
RTC收到RTB发送的带标签1026的报文,查找LFIB表,发现分配的出标签为隐式空标签3,于是执行弹出标签的动作,并将IP数据包转发给下游路由器RTD;
RTD收到RTC发送的IP报文,直接查找自己的FIB表,根据FIB表中的出接口进行IP数据的封装并转发。