MPLS基本原理

MPLS概述:

传统IP路由转发

传统的IP转发采用的是逐条转发,数据报文经过每一台路由器,都要被进行解封装查看报文网络层信息,然后根据路由最长匹配原则查找路由表指导报文转发,这些流程导致了转发的性能低

特点:

所有路由器都需要指导全网的路由

IP头部不定长,处理效率低

传统IP转发是面向无连接的,无法提供较好的端到端Qos保证

MPLS-多标签协议交换:

位于TCP/IP协议栈中的数据链路层和网络层之间,可以向所有的网络层提供服务

原理:在数据链路层和网络层之间增加额外的MPLS头部,基于MPLS头部实现数据快速转发

MPLS术语

MPLS域:由一系列运行的MPLS的网络设备构成了MPLS域

LSR:标签路由交换器,支持MPLS的路由器,位于MPLS域边缘,连接其他网络LSR称为边沿路由器

LSR分类

入站LSR:向IP报文中压入MPLS头部并生成MPLS报文的标签路由交换器

中转LSR:将报文继续在MPLS域中转发的LSR

出站LSR:将MPLS报文中MPLS头部移除,还原为IP报文

FEC:转发等价类

指一组具有某些共性的数据流的集合,这些数据流在转发过程中被网络节点以相同方式处理

在MPLS网络中,FEC可以勇敢多种方式划分,比如用IP地址,网络掩码等

Ingress LSR决定数据所属的LSP

LSP:标签交换路径

标签报文穿越MPLS网络达到目的地所走的路径

同一个FEC的报文通常采用相同的LSP穿越MPLS域,所以对同一个FEC,LSR都是采用相同的标签转发

一条LSP包含一台入站LSR、一台出站LSR以及数量可变的中转LSR,因此LSP也可以看做是这些LSR的有序集合

LSP可以通过静态和动态两种方式建立

MPLS标签

IP报文进入MPLS域之前,,会被入站LSR压入MPLS头部标签,形成一个MPLS标签报文。一个标签报文可以包含多个MPLS标签

标签(Label):用于携带标签值,长度20bit

EXP(Experimental Use):主要用于CoS(Class of Service),长度3bit

S:如果该字段为1,则表示当前标签头部为栈底;如果该字段为0,则表示当前标签头部之后依然还有其他标签头部

TTL:用于当网络出现环路时,防止标签报文被无限制转发,与IP报文头部中的TTL具有相同的意义,长度8bit

MPLS标签栈

MPLS支持一层或多层标签头部,这些标签头部的有序集合被称为标签栈

最靠近二层头部的标签是栈顶标签,其中的S字段为零

最靠近IP头部的标签是栈顶标签,标签中的S字段为1

MPLS转发

概述:

MPLS转发的本质就是将数据归到对应的FEC并按照提前建立好的LSP进行转发

对于整个MPLS域,LSP是某一给定的FEC进入域和离开域的路径,可以看成是LSR的有序集合

对于单台LSR,需要建立标签转发表,用标签来标识FEC,并绑定相应的标签处理和转发等行为

同一个FEC,若进入MPLS域的入站LSR不同,转发时的LSP也不相同

标签转发表确定转发动作,LSR的转发动作决定了LSP,建立标签转发表也可以理解为建立LSP

MPLS体系结构:

MPLS体系结构是由控制平面和转发平面组成的

控制平面:

面向无连接,负责产生和维护路由信息以及标签信息

控制平面包括IP路由协议和路由信息表(用于选择路由),标签分发的协议和标签信息表(管理标签信息)

转发平面:

也是称为数据平面,是面向连接的,负责普通IP报文的转发以及带MPLS标签报文的转发

包括转发信息表,用于从路由信息表中提取必要的路由信息生成,负责普通IP报文的转发

包括标签转发信息表,负责带MPLS标签报文的转发

LSP建立的原则

当网络层协议为IP协议时,FEC所对应的路由必须存在于LSR的IP路由表中,否则该FEC的标签转发表项不生效

LSR用标签标识指定FEC,所以该FEC的数据被发送至LSR时,必须携带正确的标签,才能被LSR正确的处理

上游的LSR的出标签应该等于下游LSR的入标签

LSP建立方式

LSP分为静态和动态两种

静态LSP

用户通过手工为各个FEC分配标签而建立的(FEC是转发等价类)

不使用LSP标签发布协议,不需要交互控制报文,因此消耗资源比较小

不能根据网络拓扑变化动态调整,需要管理员干预

应用于拓扑结构简单且稳定的小型网络

前一节点出标签的值等于下一个节点入标签的值

由于静态LSP各节点上不能相互感知到整个LSP的情况,因此静态LSP是一个本地的概念

动态LSP

通过标签发布协议动态建立

标签发布协议,MPLS的控制协议,负责FEC的分类、标签的分发、LSP的建立和维护等一系列操作

LDP:标签分发协议,是常用的标签发布协议

应用于VPN上面,具有组网、配置简单、支持基于路由动态建立LSP、支持大容量LSP,也就是大规模拓扑

MPLS标签转发

LSR处理报文时主要是根据FTN、NHLFE和ILM

Tunnel ID:

为了给使用隧道的上层应用(如VPN、路由管理)提供统一的接口,系统自动为各种隧道分配了一个ID,称为Tunnel ID,长度为32bit,仅具有本地意义,即只需要在本地设备上唯一

FIB:

在IP网络中指导IP报文转发,从RIB中优选出的路由信息生成的,包含目的网段、出接口、下一跳IP地址等等

NHLFE

NHLFE用于指导MPLS报文的转发,包含Tunnel ID、出接口、下一跳、出标签、标签操作类型等信息,能够根据出标签找到对应的出接口和下一跳,进行报文转发。FEC与NHLFE的映射称为FTN(FEC-to-NHLFE),通过查看FIB表中Token值不为0x0的表项,能够获得FTN的详细信息。FTN只在Ingress存在

ILM

ILM是入标签与NHLFE的映射,它使得本地设备的入标签和出标签、Tunnel ID建立对应的对应关系。ILM在Transit节点的作用是将标签和NHLFE绑定。通过标签索引ILM表,就相当于使用目的IP地址查询FIB,能够得到所有的标签转发信息

Ingress LSR的处理,当IP报文进入MPLS域

1,Ingress LSR查看FIB标签,检查目的IP地址对应的Tuunel ID值是否为0x0,如果是,就进入正常的IP转发流程

2,不是0x0,就根据FIB表的Tunnel ID找到对应的NHLFE表项,将FIB表项和NHLFE表项关联起来

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

4,在IP报文中压入出标签,同时处理TTL,然后将封装好的MPLS报文发送给下一跳

当MPLS报文在域中转发时,Transit LSR的处理

Transit LSR根据MPLS的标签值查看对应的ILM表,得到Tunnel ID

根据ILM表的Tunnel ID找到对应的NHLFE表项

查看NHLFE表项,得到出接口、下一跳、出标签和标签操作类型,标签操作类型为Swap,则交换标签

Egress LSR的处理,当报文离开MPLS域时

Egress根据ILM查询到该标签对应的操作为Pop,说明需要剥离该标签

根据当前标签头部的下一层报文头部进行下一步处理

以上均为个人笔记,总结于华为有限技术公司学习资料和网络平台资源

如有问题,谢谢指正

### MPLS 工作原理详解 MPLS(Multiprotocol Label Switching,多协议标签交换)是一种数据承载技术,其核心思想是通过在分组上添加标签来简化和加速网络中的数据包转发过程。以下是关于 MPLS 工作原理的详细说明: #### 1. 标签栈与报文结构 MPLS 报文的核心是一个标签栈,位于二层数据帧头和三层数据之间[^1]。标签栈由一个或多个标签组成,每个标签长度为 4 字节,包含以下字段: - **Label (20 bits)**:用于标识转发等价类(FEC,Forwarding Equivalence Class)。 - **Exp (3 bits)**:通常用于 QoS(服务质量)标记。 - **S (1 bit)**:表示是否为栈底标签,用于支持多层标签嵌套。 - **TTL (8 bits)**:类似于 IP 报文中的 TTL 字段,用于防止报文在网络中无限循环。 #### 2. 路由转发优化 传统 IP 路由需要逐跳查找路由表以确定下一跳地址,这种查找操作可能非常耗时,尤其是在大规模网络中。MPLS 引入了基于标签的转发机制,显著提高了转发效率。当路由器接收到数据包时,它会检查标签栈中的顶层标签,并根据标签转发表(LFIB,Label Forwarding Information Base)决定如何处理该数据包[^2]。 #### 3. 标签分配与分发 MPLS 网络中的标签分配和分发由信令协议完成,常见的信令协议包括 LDP(Label Distribution Protocol)和 RSVP-TE(Resource Reservation Protocol - Traffic Engineering)。这些协议确保每个路由器都知道如何为其接收的数据包分配正确的标签[^3]。 #### 4. 标签操作 MPLS 定义了几种基本的标签操作,用于控制数据包在网络中的流动: - **Push**:向标签栈中添加一个新的标签。 - **Swap**:用新的标签替换当前的顶层标签。 - **Pop**:从标签栈中移除顶层标签。 例如,在次末节点弹出机制中,倒数第二跳设备会执行 Pop 操作,将标签移除,以便最后一跳设备进行纯 IP 转发[^4]。 #### 5. MPLS MTU 与分片 由于 MPLS 标签增加了额外的头部信息,可能导致原始报文长度超过链路层允许的最大传输单元(MTU)。为此,MPLS 引入了 MPLS MTU 的概念,在转发前比较报文长度与 MPLS MTU。如果报文长度超出 MPLS MTU,且允许分片,则对报文进行分片处理;否则直接丢弃报文[^1]。 #### 6. TTL 处理 MPLS 中的 TTL 字段继承自 IP 报文,用于防止报文在网络中无限循环。每经过一个 MPLS 路由器,TTL 值都会递减 1。如果 TTL 达到 0,则丢弃该报文并发送 ICMP 错误消息给源地址[^1]。 ```python # 示例代码:模拟 MPLS 标签操作 class MPLSPacket: def __init__(self, ip_packet): self.ip_packet = ip_packet self.label_stack = [] def push_label(self, label): self.label_stack.append(label) def swap_label(self, new_label): if self.label_stack: self.label_stack[-1] = new_label def pop_label(self): if self.label_stack: return self.label_stack.pop() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值