MPLS LDP原理与配置

1.LDP基本概念
(1)LDP协议概述

(2)LDP会话、LDP邻接体、LDP对等体

(3)LSR ID 与LDP ID

(4)LDP消息

⦁    按照消息的功能,LDP消息一共可以分为四大类型:发现消息(Discovery Message),会话消息(Session Message),通告消息(Advertisement Message)和通知消息(Notification Message)。
⦁    发现消息:用来宣告和维护网络中一个LSR的存在;用于通告和维护网络中LSR的存在,如Hello报文。
⦁    会话消息:用于建立、维护和终止LDP对等体之间的会话,如Initialization报文、KeepAlive报文。
⦁    通告消息:用来生成、改变和删除FEC的标签映射;
⦁    通知消息:用来宣告告警和错误信息。
⦁    LDP消息承载在UDP或TCP之上,端口号均为646 。其中发现消息用来发现邻居,承载在UDP报文上。其他消息的传递要求可靠而有序,所以LDP使用TCP建立会话,会话、通告和通知消息都基于TCP传递。

(5)LDP报文封装

⦁    LDP头部长度为10Byte,包括Version,PDU Length和LDP Identifier三部分。
⦁    Version占用2Byte,表示LDP版本号,当前版本号为1。
⦁    PDU Length占用2Byte,以字节为单位表示除了Version和PDU Length以外的其他部分的总长度。
⦁    LDP Identifier,即LDP ID,长度6Byte,其中前4Byte用来唯一标识一个LSR,后2Byte用来表示LSR的标签空间。
⦁    LDP消息包含五个部分。
⦁    U占用1个bit,为Unknown Message bit。当LSR收到一个无法识别的消息时,该消息的U=0时,LSR会返回给该消息的生成者一个通告,当U=1时,忽略该无法识别的消息,不发送通告给生成者。
⦁    Message Length占用2个bytes,以字节为单位表示Message ID、Mandatory Parameters和Optional Parameters的总长度。
⦁    Message ID占用32个bit,用来标识一个消息。
⦁    Mandatory Parameters和Optional Parameters分别为可变长的该消息的必须的参数和可选的参数。
⦁    Message Type表示具体的消息类型,目前LDP定义的常用的消息有Notification,Hello,Initialization,KeepAlive,Address,Address Withdraw,Label Mapping,Label Request,Label Abort Request,Label Withdraw,Label Release。

2.LDP工作原理
(1)LDP会话状态机

LDP Session协商过程可以通过状态机来描述。如图所示,有5种状态。分别是Non-Existent,Initialized,OpenRec,OpenSent,Operational。
Non-Existent状态:该状态为LDP Session最初的状态,在此状态双方发送HELLO消息,选举主动方,在收到TCP连接建立成功事件的触发后变为Initialized状态。
Initialized状态:该状态下分为主动方和被动方两种情况,主动方将主动发送Initialization消息,转向OpenSent 状态,等待回应的Initialization消息;被动方在此状态等待主动方发给自己的Initialization消息,如果收到的Initialization消息的参数可以接受,则发送Initialization和KeepAlive转向OpenRec状态。主动方和被动方在此状态下收到任何非Initialization消息或等待超时时,都会转向Non-Existent状态。
OpenSent 状态:此状态为主动方发送Initialization消息后的状态,在此状态等待被动方回答Initialization消息和KeepAlive消息,如果收到的Initialization消息中的参数可以接受则转向OpenRec状态,如果参数不能接受或Initialization消息超时则断开TCP连接转向Non-Existent状态。
OpenRec状态:在此状态不管主动方还是被动方都是发出KeepAlive后的状态,在等待对方回应KeepAlive,只要收到KeepAlive消息就转向Operational状态;如果收到其它消息或KeepAlive超时则转向Non-Existent状态。
Operational状态:该状态是LDP Session成功建立的标志。在此状态下可以发送和接收所有其它的LDP消息。在此状态如果KeepAlive超时或收到致命错误的Notification消息(Shutdown消息)或者自己主动发送Shutdown消息主动结束会话,都会转向Non-Existent状态。
LDP状态切换信息可以通过指令debug mpls ldp session看到。

(2)LDP会话建立 - 发现阶段与TCP连接建立

除了基本发现机制外,可以通过拓展发现机制发现非直连的远端邻接体,该内容不属于课程的重点,详细内容可以查阅RFC5036相关内容。
LDP的传输地址用于与邻居建立TCP连接。
两台LSR之间在建立LDP会话之前,需要先建立TCP连接,以便进行LDP协议报文的交换。
设备的传输地址被包含在LDP Hello报文中,LSR通过Hello报文知晓邻居的传输地址。
在使用Hello报文发现邻居并且知道了对方的传输地址后,邻居之间就会开始尝试TCP三次握手(基于传输地址),并且交互LDP的初始化报文、标签映射报文等,这些报文都使用双方的传输地址作为源、目的IP地址。
LSR必须拥有到达邻居的传输地址的路由。
缺省情况下,公网的LDP传输地址等于设备的LSR ID,私网的传输地址等于接口的主IP地址。
在接口视图下,使用mpls ldp transport-address命令,可以修改传输地址。

(3)LDP会话建立-会话建立与保持

(4)LDP邻居状态

(5)LDP会话状态

LDP会话的状态:
NonExistent:表示LDP会话的最初状态。在此状态双方互相发送Hello消息,在收到TCP连接建立成功事件的触发后变为Initialized状态。
Initialized:表示LDP会话处于初始化状态。
Open Sent:表示LDP会话进入初始化状态后,主动方给被动方发送了Initialized消息,并等待对方的回应。
Open Recv:表示LDP会话进入初始化状态后,当双方都收到了对方发送的KeepAlive消息后,LDP会话进入Operational状态。
Operational:表示LDP会话建立成功。

3.LDP标签分发
(1)标签的发布和管理

(2)上游与下游

(3)标签发布模式-DU模式

标签分配:LSR从本地标签空间中取出一个标签与FEC绑定。
标签分发:LSR将标签与FEC的绑定关系通知给上游LSR。
标签发布方式为DU时,系统默认支持LDP为所有对等体分标签,即每个节点都可以向所有的对等体发布标签映射关系,不再区分上下游关系。因为在只给上游对等体分标签情况下,发送标签映射消息的时候,要根据路由信息对会话的上下游关系进行确认。

(4)标签发布方式-DOD模式

只有上游邻居向自己请求标签映射时,LSR才会通告标签映射给该邻居

(5)标签分配控制方式-独立模式

标签分配控制方式需要与标签发布方式结合使用:
在使用DU作为标签分发方式的情况下,如图所示,R2和R3对192.168.4.0/24这条FEC,可以在上游LSR无请求,且自身没有收到下游LSR的标签绑定信息的情况下,主动向上游LSR通告标签绑定信息。
采用DoD作为标签发布方式时,如图所示,R2和R3对192.168.4.0/24这条FEC,只要收到上游LSR的标签请求消息,可以在自身没有收到下游LSR的标签绑定信息的情况下,向上游LSR通告标签绑定信息。

(6)标签分配控制方式-有序模式

当标签控制方式为Ordered,只有当LSR收到特定FEC下一跳发送的特定FEC标签映射消息或者LSR是LSP的出口节点时,LSR才可以向上游发送标签映射消息。
当标签分发方式为DU时,如图所示,对于192.168.4.0/24这条FEC,不论上游LSR是否有请求,必须收到下游LSR对此FEC的标签绑定信息才向上游LSR发布标签绑定信息,所以必须由Egress LSR,也就是R4作为LSP建立的“起点”。
当标签发布方式采用DoD时,如图所示,对于192.168.4.0/24这条FEC,只有收到上游LSR请求的请求,且自身已经收到下游LSR的标签绑定信息的情况下,才向上游LSR通告标签绑定信息。因此,必须由Ingress LSR(R1)发起请求,逐跳请求到Egress LSR(R4),最终由R4开始,向上游建立LSP。

(7)标签保留-自由模式

当基于IP网络部署MPLS时,LSR根据IP路由表判断接收到的标签映射是否来自下一跳。
Liberal方式的最大优点在于路由发生变化时能够快速建立新的LSP进行数据转发,因为Liberal方式保留了所有的标签。缺点是需要分发和维护不必要的标签映射。
DU标签分发方式下,如果采用Liberal保持方式,则R3保留所有LDP邻居 R2和R5发来的关于192.168.1.0/24这个FEC的标签,无论该R2和R5是否是IP路由表中到达192.168.1.0/24的下一跳。
DoD标签分发方式下,如果采用Liberal保持方式, LSR会向所有LDP邻居请求标签。但通常来说,DoD分发方式都会和Conservative保持方式搭配使用。

(8)标签保留-保守模式

Conservative方式的优点在于只需保留和维护用于转发数据的标签,以达到节约标签的目的。
当使用DU标签分发方式时,LSR可能从多个LDP邻居收到到同一网段的标签映射消息,如图中R3会分别从R2和R5收到网段192.168.1.0/24的标签映射消息。如果采用Conservative保持方式,则R3只保留下一跳R2发来的标签,丢弃非下一跳R5发来的标签。
当使用DoD标签分发方式时, LSR根据路由信息只向它的下一跳请求标签。
当网络拓扑变化引起下一跳邻居改变时:
使用自由标签保持方式,LSR可以直接利用原来非下一跳邻居发来的标签,迅速重建LSP,但需要更多的内存和标签空间。
使用保守标签保持方式,LSR只保留来自下一跳邻居的标签,节省了内存和标签空间,但LSP的重建会比较慢。
保守标签保持方式通常与DoD方式一起,用于标签空间有限的LSR。

(9)PHP特性

在标签发布时,R3为作为192.168.3.0/24这条FEC的Egress LSR。分配标签时,R3为该FEC分配了标签3,并将该标签绑定信息通告给R2。
在数据转发时,R2作为到达192.168.3.0的次末跳(倒数第二跳),发现出标签值为3,于是将标签头部弹出,将IP报文转发给R3,而R3则仅需执行一次查询操作(查询FIB表)即可获得相应的转发信息,转发效率得到了提升。

(10)隐式空标签与显式空标签(1)

(11)隐式空标签与显式空标签(2)

在MPLS视图下,执行命令label advertise { explicit-null | implicit-null | non-null },配置向倒数第二跳分配的标签。
根据参数的不同,可以配置Egress向倒数第二跳分配不同的标签。
缺省情况下,使用的是implicit-null,Egress向倒数第二跳节点分配隐式空标签,值为3。
如果配置的是explicit-null,Egress节点向倒数第二跳分配显式空标签,值为0。当需要支持MPLS QoS属性时,可以选用explicit-null。
如果配置的是non-null,Egress向倒数第二跳正常分配标签,即分配的标签值不小于16。

4.LDP工作过程详解
(1)组网介绍

华为设备目前缺省模式为下游自主方式(DU)+ 有序标签分配控制方式(Ordered)+ 自由标签保持方式(Liberal)。
对于从R1进入,到达192.168.4.0/24的数据,R1为Ingress LSR,R4为Egress LSR。

(2)标签分发-Egress LSR

注:缺省情况下,根据32位的主机IP路由触发LDP建立LSP。可以通过手工配置触发非32位路由的LSP建立。

(3)标签分发-Transit LSR

注:当R2发生故障时,OSPF路由将会重新收敛,此时R1的路由表中192.168.4.0/24路由的下一跳将会切换至R3,此时R1将启用R3所通告的、关于192.168.4.0/24的标签。

(4)标签分发-Ingress LSR

当R1收到发往192.168.4.1的IP报文时,首先在其FIB表中查询该目的IP地址,它发现所匹配的表项的Tunnel ID为非0,因此继续在NHLFE中查询该Tunnel ID,然后意识到需要将对该IP报文压入标签并进行标签转发,出接口为GE0/0/0、下一跳为R2、出站标签为1021,于是为报文插入标签头部并转发出去。

下一跳标签转发项(Next Hop Label Forwarding Entry) 下一跳标记转发入口NHLFE

(5)标签转发-Igress LSR

当R1收到发往192.168.4.1的IP报文时,首先在其FIB表中查询该目的IP地址,它发现所匹配的表项的Tunnel ID为非0,因此继续在NHLFE中查询该Tunnel ID,然后意识到需要将对该IP报文压入标签并进行标签转发,出接口为GE0/0/0、下一跳为R2、出站标签为1021,于是为报文插入标签头部并转发出去。

(6)标签转发-Transit LSR

当R2收到携带1021标签的标签报文时,查询ILM,根据ILM对应到NHLFE中的表项。于是,R2对该标签报文通过swap操作将标签更换为1041,并从相应的接口转发出去。

(7)标签转发-Engress LSR

当R4收到携带1041标签的标签报文时,查询ILM,根据ILM查询到操作为Pop。于是,R4对该标签报文通过Pop操作将最外层标签剥离,此时该报文已经变成了标准IP报文,R4将对该IP报文执行标准的IP转发流程。
R4在转发该报文时分别查询了LFIB和FIB表,作为最后Egress LSR,其存在转发效率提升的可能性,怎么做?

(8)在MPLS中,运行LDP协议的LSR的操作小结

5.LDP基础配置
(1)LDP基本配置命令(1)

(2)LDP基本配置命令(2)
(3)LDP基本配置命令(3)

6.案例拓扑

以AR1为例子

[czyAR1]mpls lsr-id 10.0.1.1

[czyAR1]mpls 
[czyAR1]mpls ldp
[czyAR1]inter g0/0/0
[czyAR1-GigabitEthernet0/0/0]mpls ldp

因为192.168.1.0/24不是32掩码的路由,所以要额外配置触发LSP建立:

备注这里触发LSP建立的时候会导致AR4学不到AR1的10.0.1.1,目前我还没搞清楚是什么原理,如果需要让24位的网络和环回口都被学习到的话需要lsp-trigger all

[czyAR1]ip ip-prefix ldp permit 192.168.1.0 24
[czyAR1]mpls
[czyAR1-mpls]lsp-trigger ip-prefix ldp

同理AR4也是

[czyAR4]ip ip-prefix ldp permit 192.168.4.0 24
[czyAR4]mpls 
[czyAR4-mpls]lsp-trigger ip-prefix ldp

验证

7.总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/840726.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JKI State Machine的特点与详细介绍

JKI State Machine是一种基于状态机的LabVIEW架构,由JKI公司开发。它广泛用于开发复杂的应用程序,提供了一种灵活且可扩展的结构,适用于多种任务的管理和执行。其设计目标是提高开发效率、代码可读性和可维护性。 2. 基本架构 JKI State Ma…

【算法题】520 钻石争霸赛 2024 全解析

都是自己写的代码,发现自己的问题是做题速度还是不够快 520-1 爱之恒久远 在 520 这个特殊的日子里,请你直接在屏幕上输出:Forever and always。 输入格式: 本题没有输入。 输出格式: 在一行中输出 Forever and always…

python给图片加上图片水印

python给图片加上图片水印 作用效果代码 作用 给图片加上图片水印图片水印的透明度,位置可自定义 效果 原始图片: 水印图片: 添加水印后的图片: 代码 from PIL import Image, ImageDraw, ImageFontdef add_watermark(in…

体检系统商业源码,C/S架构的医院体检系统源码,大型健康体检中心管理系统源码

体检系统商业源码,C/S架构的医院体检系统源码,大型健康体检中心管理系统源码 体检信息管理系统软件是对医院体检中心进行系统化和规范化的管理。系统从检前,检中,检后整个业务流程提供标准化以及精细化的解决方案。实现体检业务市…

优化css样式的网站

一、按钮的css样式 https://neumorphism.io/#e0e0e0https://neumorphism.io/#e0e0e0 二、渐变样式 Fresh Background Gradients | WebGradients.com 💎Come to WebGradients.com for 180 beautiful linear gradients in CSS3, Photoshop and Sketch. This collect…

Git Core Lecture

1、Git 简介 官方介绍:Git is a fast distributed revision control system (Git 是一个快速的分布式版本控制系统) 2、Git Core Command 2.1 git init git 工程初始化,会在工作区 (working directory) 根目录中创建.git 目录 # 创建目录 $ mkdir git-i…

C# 深拷贝和浅拷贝

文章目录 1.深拷贝2.浅拷贝3.拷贝类4.浅拷贝的实现5.深拷贝实现5.1 浅拷贝对象,对引用类型重新一个个赋值5.2 反射实现5.3 利用XML序列化和反序列化实现 1.深拷贝 拷贝一个对象时,不仅仅把对象的引用进行复制,还把该对象引用的值也一起拷贝。…

python期末作业:批量爬取站长之家的网站排行榜数据并保存,数据分析可视化

爬虫作业,含python爬取数据和保存文件,数据分析使用pyecharts做数据可视化 整体上分析网站的排名,直观看各个网站的热度。 数据分析之后大致的效果: 整个项目分为两个大的部分,第一部分就是抓取网站排名数据,然后保存为Excel、csv等格式,其次就是从文件中…

【30天精通Prometheus:一站式监控实战指南】第8天:redis_exporter从入门到实战:安装、配置详解与生产环境搭建指南,超详细

亲爱的读者们👋   欢迎加入【30天精通Prometheus】专栏!📚 在这里,我们将探索Prometheus的强大功能,并将其应用于实际监控中。这个专栏都将为你提供宝贵的实战经验。🚀   Prometheus是云原生和DevOps的…

arc-eager算法XJTU-NLP自然语言处理技术期末考知识点

arc-eager算法:以我/做了/一个/梦为例来描述arc-eager算法的四个操作:shift,left-arc,right-arc,reduce XJTU-NLP期末考点2024版 题型:5*6简答题4*15计算题 简答题考点: (1&#…

Java+Spring+ IDEA+MySQL云HIS系统源码 云HIS适合哪些地区的医院?

JavaSpring IDEAMySQL云HIS系统源码云HIS适合哪些地区的医院? 云HIS适合哪些地区的医院? 云HIS(云医院信息系统)适合多种地区的医院,特别是那些希望实现医疗服务的标准化、信息化和规范化,同时降低IT运营成…

42-2 应急响应之计划任务排查

一、进程排查 进程排查是指通过分析系统中正在运行的进程,以识别和处理恶意程序或异常行为。在Windows和Linux系统中,进程是操作系统的基本单位,因此对于发现和处理恶意软件或异常活动至关重要。恶意程序通常会以进程的形式在系统中运行,执行各种恶意操作,比如窃取信息、破…

每日一题 包含不超过两种字符的最长子串

目录 1.前言 2.题目解析 3.算法原理 4.代码实现 1.前言 首先我打算介绍一下,我对滑动窗口的理解。 滑动窗口可以分为四个步骤: 进窗口: 在这一步骤中,我们决定了要在窗口中维护的信息。例如,在这个问题中&#xff…

Codeforces Round 946 (Div.3)

C o d e f o r c e s R o u n d 946 ( D i v . 3 ) \Huge{Codeforces~Round~946~(Div.3)} Codeforces Round 946 (Div.3) 题目链接:Codeforces Round 946 (Div. 3) 文章目录 Problems A. Phone Desktop题意思路标程 Problems B. Symmetric Encoding题意思路标程 Pr…

ubuntu 配置用户登录失败尝试次数限制

前言: 通过修改pam配置来达到限制密码尝试次数! 1:修改 /etc/pam.d/login 配置(这里只是终端登录配置,如果还需要配置SSH远程登录限制,只配置下面的 /etc/pam.d/pam.d/common-auth 即可) vim…

SpringCloud的Config配置中心,为什么要分Server服务端和Client客户端?

SpringCloud的Config配置中心,为什么要分Server服务端和Client客户端? 在SpringCloud的Config配置中心中分了Server服务端和Client客户端,为什么需要这样分呢?它的思想是所有微服务的配置文件都放到git远程服务器上,让…

Elasticsearch集群搭建学习

Elasticsearch集群聚合、集群搭建 RestClient查询所有高亮算分控制 数据聚合DSL实现Bucket聚合DSL实现Metrics聚合RestAPI实现聚合 拼音分词器如何使用拼音分词器?如何自定义分词器?拼音分词器注意事项? 自动补全数据同步集群搭建ES集群结构创…

蓝桥杯备赛——DP【python】

一、小明的背包1 试题链接:https://www.lanqiao.cn/problems/1174/learning/ 问题描述 输入实例 5 20 1 6 2 5 3 8 5 15 3 3 输出示例 37 问题分析 这里我们要创建一个DP表,DP(i,j)表示处理到第i个物品时消耗j体…

Atlas 200 DK(Model 3000)安装MindSpore Ascend版本

一、参考资料 mindspore快速安装 二、重要说明 经过博主多次尝试多个版本,Atlas 200 DK(Model 3000)无法安装MindSpore Ascend版本。 三、准备工作 1. 测试环境 设备型号:Atlas 200 DK(Model: 3000) Operating System Vers…

依赖的各种java库(工具类) :fastjson,lombok,jedis,druid,mybatis等

lombok 功能&#xff1a; Lombok 是一个实用的Java类库&#xff0c;可以通过简单的注解来简化和消除一些必须有但显得很臃肿的Java代码。 导入包&#xff1a;使用Lombok首先要将其作为依赖添加到项目中&#xff0c;在pom.xml文件中手动添加 <dependency><groupId&g…