MPLS LDP

简介: MPLS LDP

LDP:标签分发协议  指动态分发

LDP协议

基于TLV架构

LDP负责FEC的分类、标签的分配以及LSP的建立和维护等操作。

LDP的工作过程:

  • LSR之间建立LDP的会话
  • LSR之间基于LDP会话动态交换标签与FEC的映射信息,根据信息建立LSP。

LDP会话分为:

本地LDP会话:LSR之间是直连的

远端LDP会话:LSR之间可以是直连的,也可以是非直连的

两台LSR之间交互了Hello消息之后,代表建立邻接体关系。建立了邻接体关系,并交互了LDP会话消息后,表示建立了LDP会话,两台设备之间形成LDP对等体关系。

LSR ID与LDP ID

LDP ID=LSR ID+空间标识符构成

例:

LSR ID:1.1.1.1     32bit

LDP ID:1.1.1.1:0   32bit+16bit

空间标识符的两种形态:

  • 值为0:表示基于设备的标签空间
  • 值非0:表示基于接口的标签空间

基于设备分配标签就是,一台设备使用了某个标签,就不能再继续使用了

基于接口分配标签就是,一个接口使用了某个标签,其他接口依然可以使用

例:

基于设备:R1的1号接口使用了0-1024标签,那么这些标签已经被使用了,其他接口就不能继续使用;

基于接口:R1的1号接口使用了0-1024标签,但只是这个接口使用过了,其他接口依然可以继续使用。

LDP消息

LDP消息分为四大类,发现消息、会话消息、通告消息、通知消息(错误)。

发现消息使用UDP,其他消息都使用TCP。UDP发现邻居,TCP建立邻居。

LDP会话的建立

1、LDP Hello发现邻居

使用LDP Hello报文发现邻居,使用物理接口地址向组播地址224.0.0.2发送Hello报文(源目端口都是646);

2、建立TCP连接

交互完LDP Hello报文后,进行主从选举,使用传输地址较大的一方作为主动方,发起TCP连接。(此时的源目地址都是传输地址,源端口是随机,目的端口是646)

3、协商参数

建立完TCP连接后,主动方发送LDP 初始化报文(init),协商LDP会话参数,被动方收到之后回应keepalive+init报文,主动方收到后,若接受该参数,则回复keepalive报文,此时会话建立成功。

4、标签映射

LDP对等体建立完成之后,使用标签映射报文相互通告标签映射。

建立成功之后,使用LDP Hello报文保活,每5秒发送一次,15秒没发送就down掉。

LDP标签分发

标签的发布和管理:

标签发布方式(产生标签):DU模式

下游自主方式:只要有这条路由,就可以在本地产生in方向的标签。  默认使用

下游按需方式:必须收到标签请求消息,才会产生标签。

标签分配控制方式(传输标签):

独立方式:本地LSR可以自主分配标签,发给上游,不用等待下游的标签。

有序方式:只有LSR具有下一跳的标签时,才可以向上游发送标签。默认使用

标签保持方式(保存标签):

自由方式:只要收到了标签,就会保留。  默认使用

保守方式:只有当邻居LSR是自己的下一跳发来的标签,才会保留。

PHP特性   ---次末跳弹出

隐式空标签:

在LSP的最后一跳节点,已不需要再进行标签交换。此时,可以配置倒数第二跳弹出特性PHP(Penultimate Hop Popping),在倒数第二跳节点处将标签弹出,最后一跳节点直接进行IP转发或者下一层标签转发,减少最后一跳标签交换的负担。

egress节点为本地路由分配标签的时候,会分配一个特殊标签 -3,称为隐式空标签。当LSR转发标签报文时,发现出标签为3的时候,会把标签头部弹出,只剩下了IP报文,转发给egress节点,egress节点就可以直接查询fib表转发出去了。

显式空标签:     label advertise explicit-null

由于PHP特性默认存在,如果在部署QOS的场景下,MPLS路由器还需要通过标签中的EXP位获取QOS的信息,所以引入了显式空标签(值为0),当最后一跳路由器收到带有标签0的报文后,可直接读取标签中的QOS信息,读完之后直接移除标签,然后再直接通过fib表转发。

Egress分配的标签类型决定了倒数第二跳转发带标签报文的方式:

·     如果分配的是隐式空标签,则倒数第二跳根据标签找到下一跳转发信息后,直接弹出标签。

·     如果分配的是显式空标签,则倒数第二跳将标签值替换为显式空标签。

·     如果分配的是非空标签,则倒数第二跳将标签值替换为Egress分配的标签值

隐式空标签:取值为3。当一个LSR发现下游LSR通告的标签为隐式空标签时,它并不用这个值替代栈顶原来的标签,而是直接弹出标签,并将报文转发给下游LSR(即Egress)。Egress接收到报文后,直接进行下一层的转发处理。

显式空标签:取值为0或2。0用于IPv4网络;2用于IPv6网络。在某些情况下,Egress需要根据标签栈中的TC等信息决定QoS策略,此时利用显式空标签就可以在保留标签栈信息的同时,简化Egress节点的转发处理。Egress为FEC分配显式空标签并通告给上游LSR后,上游LSR用这个值替代栈顶原来的标签,并将报文转发给下游LSR(即Egress)。Egress收到标签值为0或2的报文时,不会查找标签转发表,从标签中获取TC等信息后,直接弹出标签栈,进行下一层的转发处理。

总结:

隐式空标签:次末跳弹出默认存在,最后节点路由器给上游分配3号标签,当上游路由器转发时,发现出标签是3,就会弹出标签头部(通过swap弹出),变成IP报文,发给最后一跳路由。次末跳弹出丢失了EXP位,所以无法部署QOS;

显式空标签,最后节点路由器会向倒数第二跳分配0号标签,所以到最后一跳路由器时,可以通过该标签获取QOS信息,同时又因为是0号标签,所以不用查标签转发表,直接丢弃掉0号标签,再去查ip路由表转发。

隐式空标签在倒数第二跳就已经弹掉了标签,而显式空标签在最后一跳弹出标签。

BGP路由黑洞问题

在这张拓扑图上,R1-R2-R3底层使用OSPF打通,然后建立MPLS LDPR1-R3又互为IBGP邻居。

同时,R1有个loopback10地址:10.1.1.1/32R3有个loopback10地址:10.3.3.3/32。在R1R3上分别使用BGP进行network

由于R2没有建立BGP,在R1去访问R3时间,在R2上会出现路由黑洞,丢弃数据包。
要求如下:10.1.1.1/32去访问10.3.3.3/32时,走MPLS隧道,而不使用IGP进行宣告,同时解决了BGP的路由黑洞问题。

可以在R1和R3上分别使用route recursive-lookup tunnel该命令,可将10.1.1.1-->10.3.3.3的流量引到MPLS中,从而使流量走隧道路径。

实现原理:由于R1和R3互为IBGP邻居,所以在R1的BGP路由表中,会有10.3.3.3的路由,下一跳指向R3,在R1去访问10.3.3.3时,R1查看FIB表,隧道ID为0,从而走IP路径,但由于到达R2时,R2没有这条路由,将数据包丢弃,由此可见走IP路径失败。但是R1与R3之间是有一条隧道的,在他们的BGP路由表的下一跳又互相指向对方,所以可借助R1和R3之间的隧道,将该流量引入到MPLS隧道中,从而实现10.1.1.1-->10.3.3.3走标签路径。
缺省情况下,非标签公网BGP路由、静态路由只能迭代到出接口和下一跳,不会迭代到隧道。可以通过配置此命令使上述路由优先迭代到隧道,如果没有隧道,上述路由也可以迭代到出接口和下一跳。

相关文章
|
6月前
|
网络协议
使用MPLS LDP解决BGP路由黑洞的问题
MPLS LDP默认不为BGP路由分配标签
|
3月前
|
网络协议 数据中心 网络虚拟化
BGP、EVPN、VXLAN 还是 SRv6?
【8月更文挑战第21天】
166 0
|
4月前
|
网络协议 数据安全/隐私保护 安全
|
5月前
|
网络协议 网络虚拟化
BGP EVPN(一)
BGP EVPN(一)
|
6月前
|
缓存 算法 网络架构
【网络层】IP组播(多播)、硬件组播、IGMP、组播路由选择协议、移动IP、路由器详解、路由表和路由转发
【网络层】IP组播(多播)、硬件组播、IGMP、组播路由选择协议、移动IP、路由器详解、路由表和路由转发
148 0
|
PHP
【HCIP】16.MPLS LDP
【HCIP】16.MPLS LDP
36 0
|
网络架构
IP组播路由协议(组播内部网关协议)
IP组播路由协议(组播内部网关协议)
97 0
|
网络协议 算法 网络架构
|
网络虚拟化
|
网络协议 网络虚拟化 网络架构