草庐IT

MPLS基础介绍

阿豪的笔记 2023-04-18 原文

MPLS(Multi-Protocol Label Switching,多协议标签交换)位于TCP/IP协议栈中的链路层和网络层之间,以标签交换替代IP转发。用于向IP层提供连接服务,同时又从链路层得到服务。

MPLS不局限于特定的链路层协议,能够使用任意二层介质传输网络分组。MPLS的核心技术可扩展到多种网络协议,包括IPv6、IPX、Appletalk、DECnet、CLNP等。它不仅支持多种高层协议与业务,而且在一定程度上可以保证信息传输的安全性。

MPLS基本概念

MPLS网络结构

MPLS网络的典型结构如图1所示,其基本组成单元是标签交换路由器LSR(Label Switching Router)。LSR是指可以进行MPLS标签交换和报文转发的网络设备,也称为MPLS节点。

图1 MPLS网络结构

由LSR构成的网络区域称为MPLS域,根据LSR在MPLS域中位置的不同,可将LSR分为边沿路由器LER和核心LSR(Core LSR)。

  • LER:位于MPLS域边缘、连接其它网络的LSR称为边沿路由器LER(Label Edge Router)。如果一个LSR有一个不运行MPLS的相邻节点,那么该LSR就是LER。

  • Core LSR:区域内部的LSR称为核心LSR(Core LSR),如果一个LSR的相邻节点都运行MPLS,则该LSR就是核心LSR。

转发等价类

转发等价类FEC(Forwarding Equivalence Class)是一组具有某些共性的数据流的集合。这些数据流在转发过程中被LSR以相同方式处理。

FEC可以根据地址、业务类型、QoS等要素进行划分。例如,在传统的采用最长匹配算法的IP转发中,到同一条路由的所有报文就是一个转发等价类。

标签

标签(Label)是一个短而定长的、只具有本地意义的标识符,用于唯一标识一个分组所属的FEC。在某些情况下,对应一个FEC可能会有多个入标签,但是一台路由器上,一个标签只能代表一个FEC。

标签长度为4个字节,封装结构如图2所示。

图2 MPLS报文首部结构

标签共有4个域:

  • Label:20bit,标签值域。

  • Exp:3bit,用于扩展。现在通常用做CoS(Class of Service),其作用与Ethernet802.1p的作用类似。

  • S:1bit,栈底标识。MPLS支持多层标签,即标签嵌套。S值为1时表明为最底层标签。

  • TTL:8bit,和IP分组中的TTL(Time To Live)意义相同。

标签封装在链路层和网络层之间。这样,标签能够被任意的链路层所支持。标签在分组中的封装位置如图3所示。

图3 标签在分组中的封装位置

标签栈

标签栈(Label stack)是指标签的排序集合。MPLS报文支持同时携带多个标签,靠近二层首部的标签称为栈顶标签或外层标签;靠近IP首部的标签称为栈底标签,或内层标签。理论上,MPLS标签可以无限嵌套。

图4 标签栈

标签栈按后进先出方式组织标签,从栈顶开始处理标签。

标签操作类型

标签的操作类型包括标签压入(Push)、标签交换(Swap)和标签弹出(Pop)。

  • Push:指当IP报文进入MPLS域时,MPLS边界设备在报文二层首部和IP首部之间插入一个新标签;或者MPLS中间设备根据需要,在标签栈顶增加一个新的标签。

  • Swap:当报文在MPLS域内转发时,根据标签转发表,用下一跳分配的标签,替换MPLS报文的栈顶标签。

  • Pop:当报文离开MPLS域时,将MPLS报文的标签去掉;或者MPLS倒数第二跳节点处去掉栈顶标签。

标签交换路径

标签交换路径:一个转发等价类在MPLS网络中经过的路径称为标签交换路径LSP(Label Switched Path)。

LSP是从入口到出口的一个单向路径。如图5所示,LSP中的LSR可以分为入节点、中间节点和出节点

图5 MPLS LSP

  • 入节点(Ingress):LSP的起始节点,一条LSP只能有一个Ingress。Ingress的主要功能是给报文压入一个新的标签,封装成MPLS报文进行转发。

  • 中间节点(Transit):LSP的中间节点,一条LSP可能有多个Transit。Transit的主要功能是查找标签转发信息表,通过标签交换完成MPLS报文的转发。

  • 出节点(Egress):LSP的末节点,一条LSP只能有一个Egress。Egress的主要功能是弹出标签,恢复成原来的报文进行相应的转发。

其中Ingress和Egress既是LSR,又是LER;由此可见,由LER负责对进入MPLS域的报文划分FEC,并为这些FEC压入标签,进行MPLS转发。当报文离开MPLS域时弹出标签,恢复成原来的报文,再进行相应的转发。

倒数第二跳弹出

在最后一跳节点,标签已经没有使用价值,所以可以利用倒数第二跳弹出特性PHP(Penultimate Hop Popping),在倒数第二跳节点处将标签弹出,最后一跳节点直接进行IP转发或者下一层标签转发,从而减少最后一跳的负担。

PHP在Egress节点上配置。PHP的Egress节点分配给倒数第二跳节点一个特殊的标签:标签值3。当一个LSR发现自己被分配了标签值为3时,它并不用这个值替代栈顶原来的标签,而是直接执行Pop操作。Egress节点直接进行IP转发或下一层标签转发。

上游和下游

根据数据传送的方向,LSR可以分为上游和下游。

  • 上游:以指定的LSR为视角,根据数据传送的方向,所有往本LSR发送MPLS报文的LSR都可以称为上游LSR。

  • 下游:以指定的LSR为视角,根据数据传送的方向,本LSR将MPLS报文发送到的所有下一跳LSR都可以称为下游LSR。

如图6所示,对于发往192.168.1.0/24的数据流来说,LSR-A是LSR-B的上游节点,LSR-B是LSR-A的下游节点。同理,LSR-B是LSR-C上游节点。LSR-C是LSR-B的下游节点。

图6 上游和下游概念

标签分发

将目的地址相同的分组报文划分为一个FEC,然后从MPLS标签资源池中取出一个标签,分配给这个FEC。LSR记录该标签和FEC的对应关系,并将该对应关系封装成消息报文,通告给上游的LSR,这个过程称为标签分发。

图7 标签分发示意图

如图7,LSR-B和LSR-C对去往192.168.1.0/24的报文划分为一个FEC,然后为该FEC分配标签,并向上游通告。由此可见,标签是由下游向上游分配的。

标签发布协议

标签发布协议是MPLS的控制协议(也可称为信令协议),负责FEC的分类、标签的分发以及LSP的建立和维护等一系列操作。

MPLS可以使用多种标签发布协议,例如LDP、RSVP-TE和MP-BGP。

  • LDP(Label Distribution Protocol)是专为标签发布而制定的协议。它利用沿途各LSR路由转发表中的信息来确定下一跳,通过逐跳方式建立LSP。

    虽然LDP是专门用来实现标签分发的协议,但LDP并不是唯一的标签分发协议。通过对BGP、RSVP等已有协议进行扩展,也可以支持MPLS标签的分发。

  • RSVP-TE(Resource Reservation Protocol Traffic Engineering)

    资源预留协议RSVP是为Integrated Service模型而设计的,用于在一条路径的各节点上进行资源预留。RSVP工作在传输层,但不参与应用数据的传送,是一种网络上的控制协议,类似于ICMP。

    为了能够建立基于约束的LSP,对RSVP协议进行了扩展。扩展后的RSVP信令协议称为RSVP-TE信令协议,主要用于建立TE隧道。它拥有普通LDP LSP没有的功能,如发布带宽预留请求、带宽约束、链路颜色和显式路径等。

  • MP-BGP(Multiprotocol Border Gateway Protocol)是在BGP协议基础上扩展的协议。MP-BGP引入Community属性,支持为MPLS VPN业务中私网路由和跨域VPN的标签路由分配标签。

MPLS的体系结构

MPLS的体系结构由控制平面和转发平面组成。MPLS体系结构如图8所示。

图8 MPLS体系结构示意图

  • 控制平面是依赖IP路由的,即控制协议报文是通过IP路由进行传输的,主要功能是负责标签的分配、标签转发表的建立、标签交换路径的建立、拆除等工作。

  • 转发平面也称为数据平面,是不依赖IP路由的,可以使用ATM、Ethernet等二层网络。转发平面的主要功能是对IP包进行标签的添加和删除,同时依据标签转发表对收到的分组进行转发。

LSP的基本建立过程

MPLS需要为报文事先分配好标签,建立一条LSP,才能进行报文转发。

标签由下游分配,按从下游到上游的方向分发。如图9,由下游LSR在IP路由表的基础上进行FEC的划分,并将标签分配给特定FEC,再通过标签发布协议通知上游LSR,以便建立标签转发表和LSP。

图9 LSP建立

LSP分为静态LSP和动态LSP两种。

  • 静态LSP由管理员手工配置

  • 动态LSP则利用路由协议和标签发布协议动态建立。MPLS可以使用多种标签发布协议,例如:LDP、RSVP-TE和MP-BGP。

MPLS转发

基本转发过程

以支持PHP的LSP为例,说明MPLS报文的基本转发过程。

图10 MPLS标签分发和报文转发
 

如图10,MPLS建立了一条LSP,其目的地址为3.3.3.3/32。则MPLS报文转发大体过程如下:

  1. Ingress节点收到目的地址为3.3.3.3/32的IP报文,添加标签Z并转发。

  2. Transit节点收到该标签报文,进行标签交换,将标签Z弹出,换成标签Y。

  3. 倒数第二跳Transit节点收到带标签Y的报文。因Egress分给它的标签值为3,进行PHP操作,弹出标签Y并转发报文。从倒数第二跳到Egress之间报文以IP报文形式传输。

  4. Egress节点收到该IP报文,将其转发给目的地3.3.3.3/32。

具体转发流程

当IP报文进入MPLS域时,首先查看FIB表,检查目的IP地址对应的Tunnel ID值是否为0x0。

  • 如果Tunnel ID值为0x0,则进入正常的IP转发流程。

  • 如果Tunnel ID值不为0x0,则进入MPLS转发流程。

说明:

Tunnel ID:为了给使用隧道的上层应用(如VPN、路由管理)提供统一的接口,系统自动为各种隧道分配了一个ID,也称为Tunnel ID。该Tunnel ID只是本地有效。

图11 MPLS转发流程

MPLS转发流程如图11所示,报文转发过程如下:

1. 在Ingress,通过查询FIB表和NHLFE表指导报文的转发。

Ingress节点的处理流程如下:

  1. 查看FIB表,根据目的IP地址找到对应的Tunnel ID。

  2. 根据FIB表的Tunnel ID找到对应的NHLFE表项,将FIB表项和NHLFE表项关联起来。

  3. 查看NHLFE表项,可以得到出接口、下一跳、出标签和标签操作类型,标签操作类型为Push。

  4. 在IP分组报文中压入获得的标签,并根据QoS策略处理EXP,同时处理TTL,然后将封装好的MPLS分组报文发送给下一跳。

说明:

NHLFE(Next Hop Label Forwarding Entry)下一跳标签转发表项包括:Tunnel ID、出接口、下一跳、出标签、标签操作类型等信息,用于指导MPLS报文的转发。

2. 在Transit,通过查询ILM表和NHLFE表指导MPLS报文的转发。

Transit节点收到MPLS报文后的处理:

  1. 根据MPLS的标签值查看对应的ILM表,可以得到Token。

  2. 根据ILM表的Token找到对应的NHLFE表项。

  3. 查看NHLFE表项,可以得到出接口、下一跳、出标签和标签操作类型。

     如果标签值>=16,则标签操作类型为Swap。

     如果标签值为3,则标签操作类型为Pop。

  4. MPLS报文的处理方式根据不同的标签值而不同。

    如果标签值>=16,则用新标签替换MPLS分组报文中的旧标签,同时处理EXP和TTL,然后将替换完标签的MPLS分组报文发送给下一跳。

    如果标签值为3,则直接弹出标签,同时处理EXP和TTL,然后进行IP转发或下一层标签转发。

说明:

ILM(Incoming Label Map,入标签映射):入标签到一组下一跳标签转发表项的映射,包括:Tunnel ID、入标签、入接口、标签操作类型等信息。

ILM在Transit节点的作用是将标签和NHLFE绑定。通过标签索引ILM表,就相当于使用目的IP地址查询FIB,能够得到所有的标签转发信息。

3. 在Egress,通过查询ILM表指导MPLS报文的转发。

Egress节点收到MPLS报文后,查看ILM表获得标签操作类型,同时处理EXP和TTL。

  1. 如果标签中的S=1,表明该标签是栈底标签,直接进行IP转发。

  2. 如果标签中的S=0,表明还有下一层标签,继续进行下一层标签转发。

MPLS对TTL的处理

MPLS标签中包含一个8位的TTL域,其含义与IP头中的TTL域相同。MPLS对TTL的处理除了用于防止产生路由环路外,也用于实现Traceroute功能。

相关标准中定义了两种MPLS对TTL的处理模式:Uniform和Pipe。缺省情况下,MPLS对TTL的处理模式为Uniform。

Uniform模式

IP分组经过MPLS网络时,在入节点,IP TTL减1映射到MPLS TTL字段,此后报文在MPLS网络中按照标准的TTL处理方式处理。在出节点将MPLS TTL减1后映射到IP TTL字段。如图12所示。

图12 Uniform模式下TTL的处理

Pipe模式

在入节点,IP TTL值减1,MPLS TTL字段为固定值,此后报文在MPLS网络中按照标准的TTL处理方式处理。在出节点会将IP TTL字段的值减1。即IP分组经过MPLS网络时,无论经过多少跳,IP TTL只在入节点和出节点分别减1。

图13 Pipe模式下TTL的处理

基于MPLS的VPN

基于MPLS的VPN通过LSP将私有网络的不同分支联结起来,形成一个统一的网络,如图14所示。基于MPLS的VPN还支持对不同VPN间的互通控制。图14中:

  • CE(Customer Edge)是用户边缘设备,可以是路由器,也可以是交换机或主机;

  • PE(Provider Edge)是服务商边缘节点,位于骨干网络。

在骨干网络中,还存在P(Provider),是服务提供商网络中的骨干节点,不与CE直接相连。P设备只需要具备基本MPLS转发能力,不维护VPN信息。

图14 基于MPLS的VPN

基于MPLS的VPN具有以下特点:

  1. PE负责对VPN用户进行管理、建立各PE间LSP连接、同一VPN用户各分支间路由分派。

  2. PE间的路由分派通常是用LDP或MBGP协议实现。

  3. 支持不同分支间IP地址复用和不同VPN间互通。

有关MPLS基础介绍的更多相关文章

  1. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  2. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  3. 软件测试基础 - 2

    Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功

  4. ES基础入门 - 2

    ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear

  5. 【网络】-- 网络基础 - 2

    (本文是网络的宏观的概念铺垫)目录计算机网络背景网络发展认识"协议"网络协议初识协议分层OSI七层模型TCP/IP五层(或四层)模型报头以太网碰撞路由器IP地址和MAC地址IP地址与MAC地址总结IP地址MAC地址计算机网络背景网络发展        是最开始先有的计算机,计算机后来因为多项技术的水平升高,逐渐的计算机变的小型化、高效化。后来因为计算机其本身的计算能力比较的快速:独立模式:计算机之间相互独立。    如:有三个人,每个人做的不同的事物,但是是需要协作的完成。    而这三个人所做的事是需要进行协作的,然而刚开始因为每一台计算机之间都是互相独立的。所以前面的人处理完了就需要将数据

  6. H2数据库配置及相关使用方式一站式介绍(极为详细并整理官方文档) - 2

    目录H2数据库入门以及实际开发时的使用1.H2数据库的初识1.1H2数据库介绍1.2为什么要使用嵌入式数据库?1.3嵌入式数据库对比1.3.1性能对比1.4技术选型思考2.H2数据库实战2.1H2数据库下载搭建以及部署2.1.1H2数据库的下载2.1.2数据库启动2.1.2.1windows系统可以在bin目录下执行h2.bat2.1.2.2同理可以通过cmd直接使用命令进行启动:2.1.2.3启动后控制台页面:2.1.3spring整合H2数据库2.1.3.1引入依赖文件2.1.4数据库通过file模式实际保存数据的位置2.2H2数据库操作2.2.1Mysql兼容模式2.2.2Mysql模式

  7. 【Elasticsearch基础】Elasticsearch索引、文档以及映射操作详解 - 2

    文章目录概念索引相关操作创建索引更新副本查看索引删除索引索引的打开与关闭收缩索引索引别名查询索引别名文档相关操作新建文档查询文档更新文档删除文档映射相关操作查询文档映射创建静态映射创建索引并添加映射概念es中有三个概念要清楚,分别为索引、映射和文档(不用死记硬背,大概有个印象就可以)索引可理解为MySQL数据库;映射可理解为MySQL的表结构;文档可理解为MySQL表中的每行数据静态映射和动态映射上面已经介绍了,映射可理解为MySQL的表结构,在MySQL中,向表中插入数据是需要先创建表结构的;但在es中不必这样,可以直接插入文档,es可以根据插入的文档(数据),动态的创建映射(表结构),这就

  8. c++基础-运算符 - 2

    目录1关系运算符2运算符优先级3关系表达式的书写代码实例:下面是面试中可能遇到的问题:1关系运算符C++中有6个关系运算符,用于比较两个值的大小关系,它们分别是:运算符描述==等于!=不等于小于>大于小于等于>=大于等于这些运算符返回一个布尔值,即true或false。例如,当x等于y时,x==y的结果为true,否则结果为false。2运算符优先级在C++中,关系运算符的优先级高于赋值运算符,但低于算术运算符。以下是关系运算符的优先级,从高到低排列:运算符描述>,,>=,关系运算符==,!=相等性运算符&&逻辑与`如果在表达式中有多个运算符,则按照优先级顺序依次进行运算。3关系表达式的书写在

  9. 计算机必读基础书籍 - 2

    一.计算机组成原理    这本书利用组合逻辑、同步时序逻辑电路设计的相关知识,从逻辑门开始逐步构建运算器、存储器、数据通路和控制器,最终集成为完整的CU原型系统,使读者从设计者的角度理解计算机部件构成及运行的基本原理,掌握软硬件协同的概念。    全书共9章,主要内容包括计算机系统概述、数据信息的表示、运算方法与运算器、存储系统、指令系统、中央处理器、指令流水线、总线系统、输入输出系统。1.计算机系统概述1.1计算机发展历程    计算机是一种能够按照事先存储的程序,自动、高速、准确地对相关信息进行处理的电子设备。1946年2月,世界上第一台电子数字计算机ENIAC(ElectronicNum

  10. 0基础学习软件测试有哪些建议 - 2

    其实现在基础的资料和视频到处都是,就是看你有没有认真的去找学习资源了,去哪里学习都是要看你个人靠谱不靠谱,再好的教程和老师,你自己学习不进去也是白搭在正式选择之前,大可以在各种学习网站里面找找学习资源先自己学习一下为什么选择学软件测试?同学们理由众多!大概分这几类:①不受开发语言、行业产品变化限制;②入门更简单,对零基础、女生都友好;③软件项目都需要测试人员,职业生涯稳;④学习周期短,但薪资并不低。要想“肩扛”一条线?需掌握三大技能:技能1:掌握测试流程,熟悉系统框架能提前与开发人员一起制定测试计划,通过测试左移,推动代码评审,代码审计,单元测试,自动化冒烟测试,来保证研发阶段的质量。技能2:

随机推荐