MPLS协议原理

本文介绍了MPLS协议的产生背景,它因解决路由器转发瓶颈而诞生。阐述了MPLS的基本概念,包括包头封装、网络结构、体系结构和数据报文结构。还详细说明了LSP的两种建立方式——静态和动态LSP的特点,以及LDP邻居发现机制。

产生背景

90年代初,互联网流量快速增长,而由于当时硬件技术的限制,路由器采用最长匹配算法逐跳转发数据包,成为网络数据转发的瓶颈。快速路由技术成为当时研究的一个热点。
在各种方案中,IETF确定MPLS协议作为标准的协议。MPLS采用短而定长的标签进行数据转发,大大提高了硬件限制下的转发能力;而且MPLS可以扩展到多种网络协议(如IPv6,IPX等)。
路由器使用软件进行转发,速度慢。交换机使用硬件进行转发,速度快。

MPLS概述

在这里插入图片描述
MPLS的包头封装于二层和三层之间,可以理解为一个2.5层的协议。

MPLS基本网络结构

在这里插入图片描述
**LSP(Label Switch Path):**标签交换路径,即到达同一目的地址的报文在MPLS网络中经过的路径。
**FEC(Forwarding Equivalent Class):**转发等价类,一般指具有相同转发处理方式的报文。在MPLS网络中,到达同一目的地址的所有报文就是一个FEC。

MPLS体系结构

在这里插入图片描述
**控制层面:**也可以理解为逻辑层面,即路由时如何传递和产生的。
**转发层面:**落实到实际的设备之上,需要考虑黑洞等一系列问题。而不是只考虑逻辑上的传递。
IP路由协议->产生路由信息->组成路由信息库->LDP标签分发协议为路由信息打上标签->组成标签信息库
有了路由信息库->就会产生转发信息库;有了标签信息库->就会产生标签转发信息表

MPLS数据报文结构

在这里插入图片描述
**标签(Label):**是一个短而定长的、只有本地意义标识的,用于唯一标识去往同意目的地的报文分组。
**Label:**20bit,用于交互,定长。
**Exp:**用于QOS流量分类标记使用。
**S:**标识是否是栈底,MPLS为了支持无限的业务,所以标签也是可以进行嵌套的。可以理解为去第一个地方之后,还要转去第二个地方,但是从起点到终点没有一条完整的LSP,所以必须一段段走。
**TTL:**用于防止无限走下去,防止环路产生。

LSP建立方式

在这里插入图片描述
建立LSP(可以理解为标签搭建起来的路径)的方式有两种:
静态LSP:用户以手工的方式为各个转发等价类分配标签,建立转发隧道。
动态LSP:通过标签发布协议动态建立转发隧道。

静态LSP:

在这里插入图片描述
静态LSP特点:
①不使用标签发布协议,不需要交互控制报文,资源消耗比较少;
②通过静态方式建立的LSP在网络拓扑变化的情况下,自身不能进行改变,需要管理员进行手动调整。
③静态方式建立LSP适用于拓扑简单并且稳定的网络。

动态LSP:

动态LSP通过LDP协议实现对FEC的分类,标签分配,以及LSP的建立和维护等操作。
动态LSP特点:

①组网配置简单,易于维护管理。
②支持基于路由动态建立LSP,网络拓扑发生变化时,能够及时反映网络状况。

LDP邻居发现机制

在这里插入图片描述

简言之就是先发送Hello包(基于UDP)进行邻居的发现,在建立TCP连接进行建立邻居,随后进入会话等机制。
**Discovery:**进行邻居的发现。
**TCP:**建立TCP连接。
**Session:**参数协商。
**Advertisement:**通告地址以及标签映射。
**Notification:**在出现错误的时候进行发送。

### MPLS LDP协议工作原理详解 #### 建立LDP会话 多协议标签交换 (MPLS) 中的标签分发协议 (LDP) 是一种用于在网络设备间分配标签并建立标签交换路径 (LSP) 的控制协议。为了实现这一目标,两个标签交换路由器 (LSR) 需要先通过TCP连接建立LDP会话[^1]。 #### 动态交换标签与FEC映射信息 一旦建立了LDP会话,LSRs就可以开始动态地交换关于转发等价类 (FEC) 和相应标签的信息。这种信息交换允许网络中的各个节点知道如何处理特定的数据流,并据此建起完整的LSP。 #### FEC分类和标签分配 LDP不仅管理着这些通信通道上的数据传输,还定义了具体的流程来决定哪些流量属于同一个FEC类别,并为它们分配唯一的标签。这一步骤对于确保不同类型的业务能够得到适当的服务质量至关重要。 #### 维护LSP状态 除了初始设置外,LDP也持续监控已创建的LSP的状态,当检测到任何变化时——比如链路失效或拓扑变更——它将及时更新相应的标签绑定关系以保持整个系统的连通性和效率。 ```python # Python伪代码展示简单的LDP邻居发现机制 def discover_ldp_neighbors(): """模拟LDP邻居发现过程""" neighbors = [] while True: neighbor_hello_message = receive_hello_message() if is_valid_neighbor(neighbor_hello_message): establish_tcp_session_with_neighbor(neighbor_hello_message.source_ip) send_initialization_message_to_new_neighbor(neighbor_hello_message.source_ip) # 添加新邻居至列表 neighbors.append({ 'ip': neighbor_hello_message.source_ip, 'state': 'initialized' }) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小刘不忙!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值