计算机网络-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 转发的本质是将数据…...

5. 【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--微服务基础工具与技术--Nacos
一、什么是Nacos Nacos 是阿里巴巴开源的一款云原生应用基础设施,它旨在简化微服务架构中服务治理和配置管理的复杂性。通过 Nacos,服务在启动时可以自动注册,而其他服务则可以通过名称来查找并访问这些注册好的实例。同时,Nacos…...
【每日关注】科技圈重要动态
时代新动态 2025 年 2 月 12 日科技圈重要动态总结全球 AI 治理新进展巴黎 AI 宣言签署,美英缺席 科技巨头合作与竞争苹果联姻阿里开发中国版AI功能DeepSeek生态持续扩展OpenAI拒绝马斯克收购,矛盾公开化 汽车行业动态小米汽车销量跃居新势力第二比亚迪智…...
【算法】用C++实现A*算法
A*算法的背景与原理 A*(A-Star)算法是一种广泛应用于路径规划和图搜索问题中的启发式搜索算法。它结合了Dijkstra算法的广度优先搜索和贪心最佳优先搜索的优点,通过引入启发式函数来估计从当前节点到目标节点的成本,从而有效地减少搜索空间。A*算法的核心思想是使用一个评…...

细胞计数专题 | LUNA-FX7™新自动对焦算法提高极低细胞浓度下的细胞计数准确性
现代细胞计数仪采用自动化方法,在特定浓度范围内进行细胞计数。其上限受限于在高浓度条件下准确区分细胞边界的能力,而相机视野等因素则决定了下限。在图像中仅包含少量可识别细胞或特征的情况下,自动对焦可能会失效,从而影响细胞…...

记一次Self XSS+CSRF组合利用
视频教程在我主页简介或专栏里 (不懂都可以来问我 专栏找我哦) 目录: 确认 XSS 漏洞 确认 CSRF 漏洞 这个漏洞是我在应用程序的订阅表单中发现的一个 XSS 漏洞,只能通过 POST 请求进行利用。通常情况下,基于 POST 的…...
JVM 类加载子系统在干什么?
JVM 类加载子系统是什么? 类加载子系统(Class Loader Subsystem)是 JVM 负责 加载、链接和初始化 .class 文件的组件。它的主要作用是将字节码文件加载进 JVM 并准备执行。 类加载器(ClassLoader)是 字节码的搬运工&…...
Golang轻松实现消息模板变量替换:text/template
text/template 是 Go 语言标准库中的一个包,用于生成文本输出。它通过解析模板并根据给定的数据执行模板来生成最终的文本。text/template 提供了强大的模板引擎,支持条件判断、循环、变量替换等功能。 基本概念 模板:模板是一个文本文件或…...

DeepSeek模型R1服务器繁忙,怎么解决?
在当今科技飞速发展的时代,人工智能领域不断涌现出令人瞩目的创新成果,其中DeepSeek模型无疑成为了众多关注焦点。它凭借着先进的技术和卓越的性能,在行业内掀起了一股热潮,吸引了无数目光。然而,如同许多前沿技术在发…...
《探秘Windows 10驱动开发:从入门到实战》
《探秘Windows 10驱动开发:从入门到实战》 为什么要在 Windows 10 编写驱动程序 在当今数字化时代,计算机已成为人们生活和工作中不可或缺的工具 ,而 Windows 10 作为一款广泛使用的操作系统,其生态系统的丰富性和复杂性不言而喻。在这个庞大的体系中,驱动程序扮演着举足…...

Golang的容器化部署流程
# Golang的容器化部署流程 什么是容器化部署 容器化部署是将应用程序、运行环境及其依赖项打包在一起,以便可以在任何环境中快速、一致地运行的技术。它提供了更高效的资源利用、更便捷的部署和更稳定的环境。 的容器化支持 天生支持跨平台编译,使得将Go…...
计算机网络,大白话
好嘞,咱就从头到尾,给你好好说道说道计算机网络里这些“门门道道”的概念: 1. 网络(Network) 啥是网络? 你可以把网络想象成一个“大Party”,大家(设备)聚在一起&#…...

智慧城市V4系统小程序源码独立版全插件全开源
智慧城市V4系统小程序源码:多城市代理同城信息服务的全域解决方案 在数字化浪潮的推动下,智慧城市已成为全球发展的核心战略。作为这一领域的革新者,智慧城市V4系统小程序源码凭借其多城市代理同城信息服务能力与多商家营销功能,…...
SpringBoot分布式应用程序和数据库在物理位置分配上、路由上和数量上的最佳实践是什么?
在设计和部署Spring Boot分布式应用程序时,物理位置分配、路由和数据库数量的最佳实践对系统性能、可用性和可维护性至关重要。以下是相关建议: 1. 物理位置分配 最佳实践: 靠近用户部署:将应用实例部署在靠近用户的数据中心&a…...
【LeetCode Hot100 哈希】两数之和、字母异位词分组、最长连续序列
哈希 1. 两数之和题目描述解题思路步骤:时间复杂度:空间复杂度: 代码实现 2. 字母异位词分组题目描述解题思路步骤:时间复杂度:空间复杂度: 代码实现 3. 最长连续序列题目描述解题思路关键思路:…...

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/…...
无人机常见的定位方式
目录 1、卫星导航定位 2、基于地面基站定位 3、惯性导航定位 4、视觉定位 5、其他定位技术 目前无人机的定位方式主要有以下几种: 1、卫星导航定位 GPS 定位:全球定位系统是应用最广泛的卫星导航系统,无人机上的 GPS 接收器接收至少四…...

【Git版本控制器】:第一弹——Git初识,Git安装,创建本地仓库,初始化本地仓库,配置config用户名,邮箱信息
🎁个人主页:我们的五年 🔍系列专栏:Linux网络编程 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 相关笔记: https://blog.csdn.net/dj…...

使用 EDOT 监测由 OpenAI 提供支持的 Python、Node.js 和 Java 应用程序
作者:来自 Elastic Adrian Cole Elastic 很自豪地在我们的 Python、Node.js 和 Java EDOT SDK 中引入了 OpenAI 支持。它们为使用 OpenAI 兼容服务的应用程序添加日志、指标和跟踪,而无需任何代码更改。 介绍 去年,我们宣布了 OpenTelemetry…...
基于 STM32 的病房监控系统
标题:基于 STM32 的病房监控系统 内容:1.摘要 基于 STM32 的病房监控系统摘要:本系统采用 STM32 微控制器作为核心,通过传感器实时监测病房内的环境参数,如温度、湿度、光照等,并将数据上传至云端服务器。医护人员可以通过手机或…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...