网络学习:MPLS标签与标签分配协议—LDP

目录

前言:

一、MPLS标签

1、定义:

2、标签结构:

3、标签识别:

二、标签分配协议---LDP(Lable Distribution Protocol)

1、定义:

2、标签分配协议的种类:

3、LDP消息类型

4、LDP会话建立和维护

5、LDP邻居状态机

6、标签转发表

7、LSP建立流程(标签分配的过程)

8、标签通告模式

9、标签控制模式

10、标签保持方式

11、带标签的MPLS报文转发流程


前言:

        在MPLS技术基础知识一文中,我们了解到MPLS、MPLS VPN、BGP MPLS VPN都是现在非常重要并且常见的技术,接下来我们将深入学习MPLS标签与它的分配协议—LDP。

一、MPLS标签

1、定义:

  • 一个短的、易于处理的、不包含拓扑信息、只具有局部意义的信息内容。Lable短是为了易于处理,通常可以用索引直接引用;只具有局部意义是为了便于分配。例如:一个路由器上的IN和OUT都是1500,并不会对转发产生啥影响。

  • 标签通常位于二层和三层的头部之间

  • LSR根据MPLS标签决定如何转发数据

2、标签结构:

image/png

image/png

标签只有4个字节,32个bits

分为4个区域:

(1)label:标签值,长度20bits,是标签转发的关键索引。

        0-15为保留标签:0表示该标签必须弹出,交给IPV4处理;2表示该标签必须弹出,交给IPV6处理;3表示倒数第二跳弹出;

        16-1024为静态标签;

        1024-65536位动态标签。

(2)TC位:Traffic Class field,流量类别字段,用于QOS标识优先级,长度3bits,数字越大,优先级越高。

        EXP ,Experimental Use,实验性使用字段,预期用途是作为“服务等级”(Class of Service,CoS) 字段;

        注意:TC和EXP所表示的意思是一样的,有的文档里用的EXP,有的文档里用的是TC,现在EXP”字段被重命名为“TC”字段

(3)S:栈底标识,长度1bits。

        S为1表示为最后一个标签;

        S为0表示后续还有标签。这就意味着我们可以多次封装标签,嵌套标签。这在MPLS VPN和BGP MPLS VPN中会被使用,如下图:

image/png

(4)TTL:存活时间,长度8bits,用于当网络出现环路时,防止标签报文被无限制转发。

        它有两种处理模式:

        1,Uniform:IP报文进入mpls网络时,拷贝IP头部的TTL至标签交换,每经过一次标签交换,标签TTL-1,经过出节点时,把标签TTL再次-1后替 换到原IP头部的TTL。

       2, pipe:IP头部进入MPLS时,IP头部TTL-1,MPLS标签中的TTL为固定值,每经过一次标签交换,标签TTL-1,直到经过出节点时,将IP头部TTL-1。

        这两种模式最大的区别在于Uniform可以使接收设备感到TTL值的变化,可以知道自己经过了几个路由器,而pipe做不到。

3、标签识别:

以太网帧中,通过Type字段对MPLS进行识别

Type=8847,代表承载的是MPLS报文

Type=0800,代表承载的是IP报文

image/png

二、标签分配协议---LDP(Lable Distribution Protocol)

1、定义:

用于LSR之间分配标签,建立LSP,简单可靠,是MPLS网络中应用最广泛的标签分配协议之一。

2、标签分配协议的种类:

LDP

RSVP-TE

MP-BGP----专门在BGP网络中,支持标签分配协议的,适合用IPV4

MP-BGP(BGP4+)----专门在BGP网络中,支持标签分配协议的,适合用IPV6

3、LDP消息类型

发现消息(discovery messages):用于LDP邻居的发现和维持。

会话消息(session messages):用于LDP邻居会话的建立、维持和中止。

通告消息(advertisement messages):用于LDP实体向LDP邻居宣告Label、地址等信息。

通知消息(Notification messages):用于向LDP邻居通知事件或错误。

4、LDP会话建立和维护

image/png

5、LDP邻居状态机

image/png

6、标签转发表

LDP会话建立完成后,路由器根据路由表进行标签分配,形成MPLS标签转发表

标签转发表包含入标签、出标签和出接口

入标签:接收到的报文携带的标签

出标签:转发数据把入标签替换为出标签

出接口:报文数据发出的接口

7、LSP建立流程(标签分配的过程)

上游与下游:

image/png

设备的上下游,与数据转发的方向相对,数据先到达的地方是上游,后到达的地方是下游。

流程:

image/png

注:标签分配的过程必须基于全网通的情况下

每台路由器是怎么知道自己是上游还是下游?假设用户A要和用户B通信,全网通,这3台路由器都已经配置了LDP协议,并且邻居已起来

过程描述:

  • 从A发出的数据包应该是这个样子:D:20.0.0.1+S:10.0.0.1,LSR1收到后会查看路由表,得知其下一跳是LSR2的左边接口,这也就意味是LSR1发现这个数据包的下一跳是自己的LDP邻居,于是LSR1就知道自己是这个数据包中去往目的地的上游,此时LSR1会向LSR2发起标签分配的请求,请求LSR2给LSR1分配一个去往20.0.0.1的标签。

  • LSR2收到数据包后也会查路由表寻找下一跳,也会向LSR3发起标签分配的请求,请求LSR3给LSR2分配一个去往20.0.0.1的标签。

  • LSR3收到数据包后也会查路由表,发现其下一跳不是自己的LDP邻居,这就意味着这个数据包的终点是自己,自己是最后一跳。

有一种复杂的情况:R1-R3都配置了LDP协议,唯独R4没有配置LDP协议

image/png

此时LSR3收到LSR2的数据包后,会查路由表找到目的地的下一跳,发现下一跳是LSR4,但LSR4不是自己的LDP邻居,这会让LSR3同样的认为自己就是这个数据包的终点,自己值最后一跳

  • 当LSR3知道自己是终点,是最后一跳时,LSR3会产生一个IN和OUT标签,但此时OUT标签是空的(因为它已经知道自己是最后一跳,就没必要给自己给标签了),IN标签是随机产生的,但是因为自己是最后一跳,所以,根据情况可以有三个选择:

0表示该标签必须弹出,交给IPV4处理;

2表示该标签必须弹出,交给IPV6处理;

3表示倒数第二跳弹出。

假设,这个图上配置的地址是IPV4地址,此时的IN标签应该为0,出接口没有(因为是最后一跳),最后LSR3会把自己的标签值通过标签通告报文(advertisement messages),传给自己的上游LSR2。

image/png

  • 当LSR2收到LSR3传的标签通告报文后,会将收到报文的接口S1/1作为自己的出接口,LSR3的IN标签作为自己的出标签,自身的IN标签可自动给出一个随机值,比如:IN=1200

    image/png

  • 当LSR1收到LSR2传的标签通告报文后,会将收到报文的接口S0/1作为自己的出接口,LSR2的IN标签作为自己的出标签,自身的IN标签可自动给出一个随机值,但因为自己是起点,所以没有IN标签

    image/png

  • 此时LSP的建立流程(标签分配的流程)就结束了。

总结:

(1)出节点LSR收到上游标签分配请求后,建立LSP

  • 出标签为空

  • 入标签设置为3或者0或者2,视情况而定

  • 出接口为IP路由表中目的网段的出接口

(2)出节点LSR向上游LSR发布标签映射消息,通告本机LSR的入标签

(3)上游LSR根据标签映射消息建立LSP

  • 出标签为下游LSR通告的入标签

  • 入标签随机产生

  • 出接口为收到标签映射消息的接口

(4)LSR继续向上游发布标签映射消息,直到入节点

(5)入节点LSR建立LSP

  • 出标签为下游LSR通告的入标签

  • 入标签为空

  • 出接口为收到标签映射消息的接口

8、标签通告模式

(1)DOD:downstream-on-demand,下游按需标记分配,默认模式

image/png

特征:上游LSR先向下游LSR发送标签请求信息;下游LSR收到标签请求消息后,为此FEC分配标签,并向上游逐层通告。

优点:没有访问需求的地址,不会建立LSP,减轻路由器的性能负担。

缺点:有访问需求才会触发建立LSP,会导致触发报文的前几个无法连通(LSP的建立需要过程,在每个路由器标签没有分配好前,有访问需求,会导致访问失败)。

(2)DU:downstream unsolicited,下游自主标记分配

image/png

特征:下游LSR在LDP会话建立后,主动向上游LSR通告标签映射消息,无需等待上游请求。

优点:无需统一访问请求触发,不会存在一组FEC前几个包不通的情况。

缺点:路由器会主动建立所有路由表中下一跳为非LDP邻居的网段的LSP,导致大量的LSP信息,而且很多可能是暂时无用的。

9、标签控制模式

有序:只有从最下游的LSR开始建立标签后,才能逐层通告

image/png

无序(独立):不管有没有收到下游的标签映射消息,都立即向上游发送标签映射消息(即使标签重复也无所谓)

image/png

10、标签保持方式

(1)保守模式:只保留最优路径的,来自下一跳邻居的标签,丢弃所有非下一跳邻居发来的标签;

如果IP路由表中存在等价路由,LSP会建立等价路径,做负载均衡。

image/png

特征:

增加LSP的收敛时间;(一旦主路故障了,需要启动备用路径,重新建立标签分配的过程)

节省内存空间和标签。

(2)自由模式:保留所有邻居标签

image/png

特征:

减少LSP收敛时间;

需要更多的内存和标签空间。

11、带标签的MPLS报文转发流程

  • 报文进入MPLS网络,入节点检查标签转发表,进行PUSH操作,如下图:

    image/png

  • 报文在Transilt LSR中传输时,路由器检查标签,并在标签转发表中匹配,进行标签SWAP操作

    image/png

  • 报文到达出节点,路由器弹出pop标签,并按照普通数据报文进行报文

    image/png

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

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

相关文章

回溯五题【Leetcode17数独/37组合问题/51N皇后/212字典树/980状态压缩】

文章目录 关于回溯37. 解数独(37.sudoku-solver)17. 电话号码的数字组合(17.letter-combinations-of-a-phone-number)51. N皇后(51.n-queens)212. 单词搜索 II(212.word-search-ii)简…

K次取反后最大化的数组和 加油站 分发糖果 柠檬水找零

1005.K次取反后最大化的数组和 力扣题目链接(opens new window) 给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。&a…

安装算法依赖时版本报错,依赖之间对应版本

困惑了很久,毕竟不是计算机专业专业出身,才知道安装深度学习算法各个依赖之间是有版本对应关系的。 (本文使我随笔记录,无价值) 比如: 再比如: 由于我第一步安装cuda时就和其他博主不一致&…

Vue基础入门(2)- Vue的生命周期、Vue的工程化开发和脚手架、Vue项目目录介绍和运行流程

Vue基础入门(2)- Vue的生命周期、Vue的工程化开发和脚手架、Vue项目目录介绍和运行流程 文章目录 Vue基础入门(2)- Vue的生命周期、Vue的工程化开发和脚手架、Vue项目目录介绍和运行流程5 生命周期5.1 Vue生命周期钩子5.2 在creat…

docker pull 拉取失败,设置docker国内镜像

遇到的问题 最近在拉取nginx时,显示如下错误:Error response from daemon: Get “https://registry-1.docker.io/v2/”: net/http: request canceled (Client.Timeout exceeded while awaiting headers)。 这个的问题是拉取镜像超时,通过检索…

c语言经典测试题11

1.题1 #include <stdio.h> int main() { int a[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}, *p a 5, *q NULL; *q *(p5); printf("%d %d\n", *p, *q); return 0; }上述代码的运行结果是什么呢&#xff1f; 我们来分析一下&#xff1a;我们创建了一个数…

第1题:两数之和

题目内容&#xff1a; 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。…

数据持久层框架:MyBatis-Plus

数据持久层框架&#xff1a;MyBatis-Plus 前言注解代码生成器CURD接口Service CRUD 接口Mapper CRUD 接口 条件构造器QueryWrapper和UpdateWrapperallEqeq、negt、ge、lt、lebetween、notBetweenlike、notLike、likeLeft、likeRight、notLikeLeft、notLikeRightisNull、isNotNu…

C 判断

判断结构要求程序员指定一个或多个要评估或测试的条件&#xff0c;以及条件为真时要执行的语句&#xff08;必需的&#xff09;和条件为假时要执行的语句&#xff08;可选的&#xff09;。 C 语言把任何非零和非空的值假定为 true&#xff0c;把零或 null 假定为 false。 下面…

UOS 20 安装redis 7.0.11 安装redis 7.0.11时 make命令 报错 /bin/sh: cc: command not found

UOS 20 安装redis 7.0.11 1、下载redis 7.0.112、安装redis 7.0.113、启动停止redis 7.0.114、安装过程问题记录 UOS 20 安装redis 7.0.11 安装redis 7.0.11时 make命令 报错 /bin/sh: cc: command not found、zmalloc.h:50:31: fatal error: jemalloc/jemalloc.h: No such fil…

代码随想录训练营第37天 | LeetCode 738.单调递增的数字、LeetCode 968.监控二叉树、

目录 LeetCode 738.单调递增的数字 文章讲解&#xff1a;代码随想录(programmercarl.com) 视频讲解&#xff1a;贪心算法&#xff0c;思路不难想&#xff0c;但代码不好写&#xff01;LeetCode:738.单调自增的数字_哔哩哔哩_bilibili 思路 ​​​​​​LeetCode 968.监控二…

代码随想录算法训练营第十四天| 144. 二叉树的前序遍历 ,145. 二叉树的后序遍历,94. 二叉树的中序遍历

两种写法&#xff0c;递归和非递归写法 递归&#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : va…

基于协同过滤的旅游推荐系统设计与实现

基于协同过滤的旅游推荐系统设计与实现 在当今旅游业蓬勃发展的背景下&#xff0c;人们对于旅游体验的需求日益增加&#xff0c;如何为用户提供更加个性化、精准的旅游推荐成为了旅游行业的一个重要课题。为解决这一问题&#xff0c;我们设计并实现了一个基于协同过滤的旅游推…

【设计模式 03】抽象工厂模式

一个具体的工厂&#xff0c;可以专门生产单一某一种东西&#xff0c;比如说只生产手机。但是一个品牌的手机有高端机、中端机之分&#xff0c;这些具体的属于某一档次的产品都需要单独建立一个工厂类&#xff0c;但是它们之间又彼此关联&#xff0c;因为都共同属于一个品牌。我…

android开发网络通信,带你彻底搞懂Android启动速度优化

实现方案 直接依赖 这种方式实现简单&#xff0c;但是耦合太严重&#xff0c;不方便维护与开发&#xff0c;当工程逐渐增大模块逐渐增多&#xff0c;依赖关系会非常复杂&#xff0c;不推荐这种方式。 事件或广播通信 EventBus&#xff1a; 我们非常熟悉的事件总线型的通信框…

Rust学习笔记:深度解析内存管理(二)

在这个信息爆炸的时代&#xff0c;学习一门新的编程语言不仅仅是为了找到一份好工作&#xff0c;更是为了打开思维的新窗口。Rust&#xff0c;作为一门注重安全、速度和并发的系统编程语言&#xff0c;正吸引着越来越多的年轻开发者的目光。今天&#xff0c;我们将一起深入探讨…

数据结构与算法:堆排序和TOP-K问题

朋友们大家好&#xff0c;本节内容来到堆的应用&#xff1a;堆排序和topk问题 堆排序 1.堆排序的实现1.1排序 2.TOP-K问题3.向上调整建堆与向下调整建堆3.1对比两种方法的时间复杂度 我们在c语言中已经见到过几种排序&#xff0c;冒泡排序&#xff0c;快速排序&#xff08;qsor…

微信小程序云开发教程——墨刀原型工具入门(安装以及基础使用教程)

引言 作为一个小白&#xff0c;小北要怎么在短时间内快速学会微信小程序原型设计&#xff1f; “时间紧&#xff0c;任务重”&#xff0c;这意味着学习时必须把握微信小程序原型设计中的重点、难点&#xff0c;而非面面俱到。 要在短时间内理解、掌握一个工具的使用&#xf…

稀碎从零算法笔记Day4-LeetCode:交替合并字符串

前言&#xff1a;今天妹有深夜档&#xff0c;因为8点有个飞机 题型&#xff1a;字符串、双指针&#xff08;笔者没用这个思路&#xff09; 链接&#xff1a;1768. 交替合并字符串 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 著作权归作者所有。商业转…

JasperStudio中TextField文本框组件渲染之后,出现行间距不一致的问题

目录 1.1、问题描述 1.2、解决方案 1.1、问题描述 最近在处理线上遇到的一个问题,是有关JasperReports报表相关的问题,问题背景大概是这样的:我们的项目中使用了JasperReports来渲染报表,其中使用到了Text Field文本框组件,但是问题是渲染出来的数据直接会出现一些间距…