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路由、静态路由只能迭代到出接口和下一跳,不会迭代到隧道。可以通过配置此命令使上述路由优先迭代到隧道,如果没有隧道,上述路由也可以迭代到出接口和下一跳。

相关文章
|
存储 并行计算 Java
Python读取.nc文件的方法与技术详解
本文介绍了Python中读取.nc(NetCDF)文件的两种方法:使用netCDF4和xarray库。netCDF4库通过`Dataset`函数打开文件,`variables`属性获取变量,再通过字典键读取数据。xarray库利用`open_dataset`打开文件,直接通过变量名访问数据。文中还涉及性能优化,如分块读取、使用Dask进行并行计算以及仅加载所需变量。注意文件路径、变量命名和数据类型,读取后记得关闭文件(netCDF4需显式关闭)。随着科学数据的增长,掌握高效处理.nc文件的技能至关重要。
3231 0
|
IDE Shell 开发工具
【沁恒WCH CH32V307V-R1在RT-Thread Studio上环境配置教程】
【沁恒WCH CH32V307V-R1在RT-Thread Studio上环境配置教程】
1487 0
|
监控 网络协议 Java
Jmeter系列(35)- 使用 ServerAgent 监控服务器
Jmeter系列(35)- 使用 ServerAgent 监控服务器
1294 0
Jmeter系列(35)- 使用 ServerAgent 监控服务器
|
安全 Shell Linux
内网渗透测试基础——Windows PowerShell篇
内网渗透测试基础——Windows PowerShell篇
747 0
|
网络协议
OSPF直连邻居状态Full,且有路由,不通!怎么回事?
OSPF直连邻居状态Full,且有路由,不通!怎么回事?
539 0
|
弹性计算 安全 网络安全
阿里云服务器租用流程,四种阿里云服务器租用方式图文教程参考
阿里云服务器可以通过自定义租用、一键租用、云市场租用和活动租用四种方式去租用,不同的租用方式适合不同的用户群体,例如我们只是想租用一款配置较低且可以快速部署应用的云服务器,通常可以选择一键租用或者云市场租用,本文为大家展示不同租用方式的适合对象以及租用流程,以供初次租用阿里云服务器的用户参考和选择。下面是阿里云服务器租用的图文操作步骤。
13018 2
WK
|
机器学习/深度学习
实际应用场景下Tanh和Sigmoid哪个更常用
在实际应用中,Tanh和Sigmoid函数的选择受多种因素影响。Sigmoid函数常用于二分类问题的输出层,因其输出范围在(0, 1)内,适合表示概率;但在隐藏层中较少使用,因为它会导致梯度消失和非零中心化问题。Tanh函数输出范围在(-1, 1),以0为中心,适用于隐藏层,有助于加快收敛速度,但也存在梯度消失问题。随着深度学习技术的发展,ReLU及其变体因计算效率高和梯度消失问题较轻而逐渐成为主流选择。因此,选择激活函数需综合考虑任务需求和网络结构特点。
WK
664 3
|
容器
【Qt 学习笔记】Qt常用控件 | 容器类控件 | Tab Widget的使用及说明
【Qt 学习笔记】Qt常用控件 | 容器类控件 | Tab Widget的使用及说明
2578 2
Win11、Win10 怎么让软件运行后台全部显示在任务栏上 win11任务栏展开显示所有软件图标
Win11、Win10 怎么让软件运行后台全部显示在任务栏上 win11任务栏展开显示所有软件图标
677 2