计算机网络-MPLS转发原理
在上一篇关于 MPLS 基础的文章中,我们了解了 MPLS 的基本概念、术语以及它在网络中的重要性。今天,我们将深入探讨 MPLS 转发的原理与流程,帮助大家更好地理解 MPLS 是如何在实际网络中工作的。
一、MPLS 转发概述
MPLS 转发的本质是将数据归到对应的 FEC(Forwarding Equivalence Class,转发等价类),并按照提前建立好的 LSP(Label Switched Path,标签交换路径)进行转发。
- 对于整个 MPLS 域,LSP 是某一给定的 FEC 进入域和离开域的路径,可以看作是 LSR(Label Switching Router,标签交换路由器)的有序集合。
- 对于单台 LSR,需要建立标签转发表,用标签来标识 FEC,并绑定相应的标签处理和转发等行为。

- 同一个FEC,若进入MPLS域的Ingress LSR(入站LSR)不同,转发时的LSP也不相同。
- 同一个FEC,LSR的处理方式相同,不论这个FEC来自哪里(进入设备的接口)。
- LSR的转发动作决定了LSP,而标签转发表确定转发动作,所以建立标签转发表也可以理解为建立LSP。
- 如图所示,因为有着相同的目的地,所以这三份数据属于同一个转发等价类FEC1。同时由于入站LSR不同,这些数据将分别在LSP1、LSP2和LSP3上被转发。因为标签仅具有本地意义,所以每台LSR上给同一FEC分配的标签,可以相同,也可以不同。
简单理解就是对于去往目的网络4.4.4.4,MPLS域内的LSR都有明确的路径规划,也就是FEC或者说LSP。
二、MPLS 体系结构
MPLS 的体系结构由控制平面(Control Plane) 和转发平面(Forwarding Plane) 组成。
- 控制平面:负责产生和维护路由信息以及标签信息。它包括 IP 路由协议和路由信息表,标签分发协议和标签信息表。
- 转发平面:也称数据平面(Data Plane),负责普通 IP 报文的转发以及带 MPLS 标签报文的转发。它包括 IP 转发信息表和标签转发信息表。

大致可以理解为高速公路和车辆的关系,控制平面负责搭建公路,转发依靠车辆运输。控制平面是无连接的,主要功能是负责产生和维护路由信息以及标签信息。转发平面也称为数据平面,是面向连接的, 主要功能是负责普通IP报文的转发以及带MPLS标签报文的转发。
控制平面与转发平面的交互:
在 MPLS 网络中,控制平面和转发平面通过路由信息和标签信息进行交互。IP 路由协议在 LSR 之间交互路由信息,形成路由信息表(RIB)。标签分发协议(LDP)在 LSR 之间交互标签信息,形成标签信息表(LIB)。转发平面根据控制平面提供的信息,建立转发信息表(FIB) 和标签转发信息表(LFIB),从而实现数据的快速转发。

就是进来的报文先交由控制平面进行计算得出路由信息和标签信息,然后将结果交给转发平面从哪个接口转发,打上标签进行处理。
三、LSP 建立原则
3.1 LSP 建立原则
当网络层协议为 IP 协议时,FEC 所对应的路由必须存在于 LSR 的 IP 路由表中,否则该 FEC 的标签转发表项不生效。LSR 用标签标识指定 FEC,所以该 FEC 的数据被发送至 LSR 时,必须携带正确的标签,才能被 LSR 正确的处理。

对某一FEC,设备上存在进(In)标签和出(Out)标签,分别表示该FEC的数据接收时和发送时所携带的标签。
以R2转发到4.4.4.0/24的数据为例,R1为R2的上游(Upstream)LSR,R3为R2的下游(Downstream)LSR。为确保标签报文能被正确的处理和转发,那么R1发给R2的报文所携带的标签与R2上绑定到4.4.4.0/24的相同,即R1的出标签等于R2的入标签。 同理,R2关于4.4.4.0/24这条FEC的出标签必须等于R3的入标签。
简单来说就是标签必须是相对应,有进有出,然后在入栈LSR或者出栈LSR是没有进或者出标签,弹出标签转换为普通IP报文。
3.2 LSP 建立方式
MPLS 需要为报文事先分配好标签,建立一条 LSP,才能进行报文转发。LSP 分为静态 LSP 和动态 LSP 两种。
静态 LSP:用户通过手工为各个 FEC 分配标签而建立的。静态 LSP 不使用标签发布协议,不需要交互控制报文,因此消耗资源比较小。但通过静态方式建立的 LSP 不能根据网络拓扑变化动态调整,需要管理员干预。适用于拓扑结构简单并且稳定的小型网络。

动态 LSP:通过标签发布协议动态建立。常用标签发布协议是 LDP(Label Distribution Protocol),它负责 FEC 的分类、标签的分发以及 LSP 的建立和维护等一系列操作。LDP 广泛应用于 VPN 服务上,具有组网、配置简单、支持基于路由动态建立 LSP、支持大容量 LSP 等优点。

类似静态路由和动态路由的意思,静态需要手工维护,动态可以自动生成和动态维护。由于静态LSP各节点上不能相互感知到整个LSP的情况,因此静态LSP是一个本地的概念。除了LDP还有其它的一些标签分发协议如:RSVP-TE、MP-BGP。
四、MPLS 标签转发流程
LSR 处理报文时主要根据** FTN(FEC-to-NHLFE)** 、NHLFE(Next Hop Label Forwarding Entry)下一跳标签转发表项和** ILM(Incoming Label Map)入标签映射**。
- FTN:当 LSR 收到 IP 报文并需要进行 MPLS 转发时使用,FTN 只在 Ingress LSR 存在。FTN 包括 Tunnel ID、FEC 到 NHLFE 的映射信息。
- NHLFE:LSR 对报文(MPLS 或 IP 报文)进行 MPLS 转发时使用,NHLFE 在 Ingress 和 Transit LSR 存在。 NHLFE 包括 Tunnel ID、出接口、下一跳、出标签、标签操作类型等信息。
- ILM:用于指导 MPLS 报文的转发(MPLS 或 IP 转发),ILM 只在 Transit 和 Egress LSR 存在。 ILM 包括 Tunnel ID、入标签、入接口、标签操作类型等信息。

下面再详细说明对应的转发过程,概念有点绕口。
4.1 Ingress LSR 的处理

当 IP 报文进入 MPLS 域时,Ingress LSR 会进行以下操作:
- 查看 FIB 表,检查目的 IP 地址对应的 Tunnel ID 值是否为 0x0(如果 Tunnel ID 值为 0x0,则进入正常的 IP 转发流程)。
- 如果 Tunnel ID 值不为 0x0,根据 FIB 表的 Tunnel ID 找到对应的 NHLFE 表项,将 FIB 表项和 NHLFE 表项关联起来。
- 查看 NHLFE 表项,可以得到出接口、下一跳、出标签和标签操作类型。
- 在 IP 报文中压入出标签,同时处理 TTL,然后将封装好的 MPLS 报文发送给下一跳。
在Ingress LSR,通过查询FIB表(得到FTN信息)和NHLFE表指导报文的转发。
当IP报文进入MPLS域时,首先查看FIB表,检查目的IP地址对应的Tunnel ID值是否为0x0。
- 如果Tunnel ID值为0x0,则进入正常的IP转发流程。
- 如果Tunnel ID值不为0x0,则进入MPLS转发流程。
至于这里为什么tunnel id不为0x0,就要提到我们前面将的,FEC必须是预先配置好,不管是手动静态LSP还是动态LDP,就是说路径已经提前规划好了,然后到达目的地址3.3.3.3在FIB转发表的Tunnel ID就是0x11了,这是前提。
4.2 Transit LSR 的处理

当 MPLS 报文在 MPLS 域转发时,Transit LSR 会进行以下操作:
- 根据 MPLS 的标签值查看对应的 ILM 表,得到 Tunnel ID。
- 根据 ILM 表的 Tunnel ID 找到对应的 NHLFE 表项。
- 查看 NHLFE 表项,得到出接口、下一跳、出标签和标签操作类型,标签操作类型为 Swap,则交换标签。
大致就是根据前期定义的FEC手动从入接口的Z标签,然后通过Tunnel ID查找标签转发表,知道了从出接口转发,然后打上Y标签进行转发。
4.3 Egress LSR 的处理


当 MPLS 报文需要离开 MPLS 域时,Egress LSR 会进行以下操作:
- 根据 ILM 查询到该标签对应的操作为 Pop,说明需要剥离该标签。
- 根据当前标签头部的下一层报文头部进行下一步处理。如果 S=1,表明该标签是栈底标签,直接进行 IP 转发;如果 S=0,表明还有下一层标签,根据下一层标签进行处理。
4.4 MPLS 详细转发过程

MPLS 转发过程涉及多个步骤,包括 Ingress LSR 的标签压入、Transit LSR 的标签交换和 Egress LSR 的标签弹出。通过这些步骤,MPLS 报文能够在 MPLS 域内高效地转发,并最终到达目的地。
总结:MPLS 转发是 MPLS 技术的核心,它通过标签的压入、交换和弹出,实现了数据的快速转发。MPLS 的体系结构由控制平面和转发平面组成,控制平面负责路由和标签信息的维护,转发平面负责数据的转发。通过静态或动态方式建立 LSP,MPLS 网络能够高效地处理和转发数据报文。
相关文章:
计算机网络-MPLS转发原理
在上一篇关于 MPLS 基础的文章中,我们了解了 MPLS 的基本概念、术语以及它在网络中的重要性。今天,我们将深入探讨 MPLS 转发的原理与流程,帮助大家更好地理解 MPLS 是如何在实际网络中工作的。 一、MPLS 转发概述 MPLS 转发的本质是将数据…...
【设计模式】【行为型模式】职责链模式(Chain of Responsibility)
👋hi,我不是一名外包公司的员工,也不会偷吃茶水间的零食,我的梦想是能写高端CRUD 🔥 2025本人正在沉淀中… 博客更新速度 👍 欢迎点赞、收藏、关注,跟上我的更新节奏 🎵 当你的天空突…...
【H5自适应】高端科技类pbootcms网站模板 – 三级栏目、下载与招聘功能支持
(H5自适应)高端大气的科技类pbootcms网站模板 带三级栏目、下载和招聘功能 后台地址:您的域名/admin.php 后台账号:admin 后台密码:123456 为了提升系统安全,请将后台文件admin.php的文件名修改一下。修改之后,后台…...
【Java 面试 八股文】框架篇
框架篇 1. Spring框架中的单例bean是线程安全的吗?2. 什么是AOP?3. 你们项目中有没有使用到AOP?4. Spring中的事务是如何实现的?5. Spring中事务失效的场景有哪些?6. Spring的bean的生命周期?7. Spring中的…...
原型模式详解(Java)
原型模式(Prototype Pattern),作为一种极具代表性的创建型设计模式,其核心思想在于通过复制,亦即克隆现有的对象,来达成创建新对象的目的,而非依赖传统的构造函数途径。这一模式巧妙地基于现有对…...
TCP拥塞控制机制
TCP拥塞控制机制是TCP协议中至关重要的一部分,用于防止网络出现拥塞,保证网络的高效、稳定运行 拥塞控制的基本概念 拥塞:在计算机网络中,拥塞是指当网络中存在过多的分组时,网络性能下降的现象,如延迟增…...
自动化UI测试 | 什么是测试驱动开发(TDD)和行为驱动开发(BDD)?有何区别?
TDD(测试驱动开发)和BDD(行为驱动开发)是两种独特的软件开发技术,它们在测试的内容和方式上有所不同。尽管名称相似,但服务于不同的目的。 什么是TDD? TDD代表测试驱动开发。它是一个过程&…...
DeepSeek 助力 Vue 开发:打造丝滑的进度条
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...
一场始于 Selector Error 的拯救行动:企查查数据采集故障排查记
时间轴呈现事故进程 17:00:开发人员小李正在尝试利用 Python 爬虫从企查查(https://www.qcc.com)抓取公司工商信息。原本一切正常,但突然发现信息采集失败,程序抛出大量选择器错误。17:15:小李发现&#x…...
微信服务号推送消息
这里如果 没有 就需要点新的功能去申请一下 申请成功之后就可以设置模版消息 推送到用户接受的页面是 需要后端调用接口 传递token 发送给客户...
24电子信息类研究生复试面试问题汇总 电子信息类专业知识问题最全!电子信息复试全流程攻略 电子信息考研复试真题汇总
你是不是在为电子信息考研复试焦虑?害怕被老师问到刁钻问题、担心专业面答不上来?别慌!作为复试面试92分逆袭上岸的学姐,今天手把手教你拆解电子信息类复试通关密码!看完这篇,让你面试现场直接开大…...
嵌入式EasyRTC实时通话支持海思hi3516cv610,编译器arm-v01c02-linux-musleabi-gcc
EasyRTC已经完美支持海思hi3516cv610,编译器arm-v01c02-linux-musleabi-gcc,总体SDK大小控制在680K以内(预计还能压缩100K上下): EasyRTC在hi3516cv610芯片上能双向通话、发送文字以及二进制指令,总体运行…...
如何搭建Wi-Fi CVE漏洞测试环境:详细步骤与设备配置
引言 随着Wi-Fi技术的普及,Wi-Fi网络成为了现代通信的重要组成部分。然而,Wi-Fi网络的安全性始终是一个备受关注的话题。通过漏洞扫描和安全测试,网络管理员可以及早发现并修复Wi-Fi设备中存在的安全隐患。本篇文章将详细介绍如何搭建Wi-Fi …...
sqlalchemy 使用fetchmany 报错 KeyError 或 AttributeError
问题 我遇到的问题是 AttributeError: Could not locate column in row for column xxxx 解决 首先看你定义的模型类是否缺失了相关的字段 Column XXX not found._clould not locate column in row for column-CSDN博客 其次 rows result.fetchmany(1000) for (row,) i…...
计算机视觉中图像的基础认知
一、图像/视频的基本属性 在计算机视觉中,图像和视频的本质是多维数值矩阵。图像或视频数据的一些基本属性。 宽度(W) 和 高度(H) 定义了图像的像素分辨率,单位通常是像素。例如,一张 1920x10…...
Docker Desktop WebAPI《1》
方法1 》》生成 的文档不要动, 》》执行 Container(Dockerfile) 会生成镜像文件和容器 》》生成的镜像和容器 在 Docker Desktop 中可以查看 用VS 的 Container Dockerfile 调试 但把这个调试工工具 停止,WebAPi就不能访问了 …...
ELK安装部署同步mysql数据
ELK 安装部署指南 ELK 是 Elasticsearch、Logstash 和 Kibana 的简称,用于日志收集、存储、分析和可视化。 1. 安装 Elasticsearch Elasticsearch 是一个分布式搜索和分析引擎。 1.1 下载并安装 访问 Elasticsearch 官网 下载最新版本。 解压并安装: tar…...
《OpenCV》——特征提取与匹配方法
特征提取 特征提取是从原始数据中提取出能够代表数据本质特征和关键信息的过程,在很多领域都有广泛应用。原始数据往往包含大量的冗余信息,特征提取的目的是去除这些冗余,提取出最具代表性、最能区分不同类别或模式的特征,从而降…...
Oracle DBA 诊断及统计工具-2
Oracle 数据表空间和索引表空间的资源分配比例总结 在 Oracle 数据库中,数据表空间和索引表空间并没有固定的资源分配比例,其分配需要综合考虑多种因素,以下是详细分析不同场景下的分配建议以及具体的分配思路。 影响分配比例的因素 数据读…...
如何使用DHTMLX Scheduler的拖放功能,在 JS 日程安排日历中创建一组相同的事件
DHTMLX Scheduler 是一个全面的调度解决方案,涵盖了与规划事件相关的广泛需求。假设您在我们的 Scheduler 文档中找不到任何功能,并且希望在我们的 Scheduler 文档中看到您的项目。在这种情况下,很可能可以使用自定义解决方案来实现此类功能。…...
矩阵元素的“鞍点”
题意: 一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。 本题要求编写程序,求一个给定的n阶方阵的鞍点。 输入格式: 输入第一行给出一个正整数n(1≤n≤6)。随后n行,每行给出n个整数…...
Qt的isVisible ()函数介绍和判断窗口是否在当前界面显示
1、现象:当Qt的窗口最小化时,isVisible值一定是true,这是正常的。 解释:在Qt中,当你点击窗口的最小化按钮时,Qt内部不会自动调用 hide() 方或 setVisible(false) 来隐藏窗口。相反,它会改变窗口…...
Unity-Mirror网络框架-从入门到精通之LagCompensation示例
文章目录 前言什么是滞后补偿Lag Compensation示例延迟补偿原理ServerCubeClientCubeCapture2DSnapshot3D补充LagCompensation.cs 独立算法滞后补偿器组件注意:算法最小示例前言 在现代游戏开发中,网络功能日益成为提升游戏体验的关键组成部分。本系列文章将为读者提供对Mir…...
Jenkins 通过 Execute Shell 执行 shell 脚本 七
Jenkins 通过 Execute Shell 执行 shell 脚本 七 一、创建 .sh 文件 项目目录下新建 .sh 文件 jenkins-script\shell\ci_android_master.sh添加 Execute Shell 模块 在 Command 中添加 # 获取 .sh 路径 CI_ANDROID_MASTER_PATH"${WORKSPACE}/jenkins-script/shell/…...
PyCharm 批量替换
选择替换的内容 1. 打开全局替换窗口 有两种方式可以打开全局替换窗口: 快捷键方式: 在 Windows 或 Linux 系统下,按下 Ctrl Shift R。在 Mac 系统下,按下 Command Shift R。菜单操作方式:点击菜单栏中的 Edit&…...
Linux-文件基本操作
1.基本概念 文件: 一组相关数据的集合 文件名: 01.sh //文件名 2.linux下的文件类型 b block 块设备文件 eg: 硬盘 c character 字符设备文件 eg: 鼠标,键盘 d directory 目录文件 eg: 文件夹 - regular 常规文件…...
HTTP 请求头、响应头常见字段分析
目录 请求头AcceptAccept-EncodingUser-AgentConnectionCache-ControlHost 响应头Content-EncodingETagContent-TypeVaryx-business-use-case-usageAccess-Control-Allow-Originfacebook-api-versionStrict-Transport-SecurityPragmaCache-ControlExpiresx-fb-request-id 和 x-…...
postman登录cookie设置
1.设置环境变量, 定义变量存放共享的登录信息 如Cookie 2.登录接口编码test脚本获取cookie信息 let jsessionidCookie pm.cookies.get("JSESSIONID");if (jsessionidCookie) {let cookie "JSESSIONID" jsessionidCookie "; Admin-Tok…...
Oracle临时表空间(基础操作)
临时表空间 临时表空间:用来存放用户的临时数据,临时数据在需要时被覆盖,关闭数据库后自动删除,其中不能存放永久性数据。 用户进程和服务器进程是一对一的叫做专用连接。 任何一个用户连到oracle数据库,oracle都会…...
数据结构-基础
1、概念: 程序 数据结构 算法 2、程序的好坏 可读性,稳定性,扩展性,时间复杂度,空间复杂度。 3、数据结构 是指存储、组织数据的方式,以便高效地进行访问和修改。通过选择适当的数据结构, 能…...
