MPLS LDP概述

一、概述

LDP是MPLS的一种控制协议,相当于传统网络中的信令协议,负责FEC的分类、标签的分配以及LSP的建立和维护等操作。LDP规定了标签分发过程中的各种消息以及相关处理过程。

1、基本概念

LDP对等体是指相互之间存在直接的LDP会话、可直接使用LDP来 交换标签消息(包括标签请求消息和标签映射消息)的两个 LSR。比 如,BGP 路由协议和 IKE(因特网密钥交换)中的对等体,其实它们 的基本设计思想是一样的,尽管它们所实现的功能不一样。在LDP对等 体中,通过它们之间的LDP会话可获得下游对等体为某FEC分配的MPLS 入标签,以此作为本端对应FEC的出标签。LDP对等体之间可以是直连的,也可以是非直连的,这点与IBGP中的对等体类似(MP-EBGP中的 对等体也可以是非直连的)。

如图1-1所示,LSR_1下面连接了一台二层交换机SW,然后在这台 二层交换机下又连接多个LSR路由器,LSR_1与LSR_2、LSR_3和LSR_4 之间则可以看成是直连的对等体关系;同理,LSR_5与LSR_2、LSR_3 和LSR_4之间也是直连对等体关系,但LSR_1与LSR_5之间也可以建立 对等体关系,它们之间是非直连对等体关系。

图1-1 LSR对等体示例

2.LDP邻接体

当一台LSR接收到对端发送的Hello消息后,两端之间就建立了LDP 邻接体关系(也就是邻居关系),这种LDP邻接体存在两种类型。

本地邻接体(Local Adjacency):通过组播形式(目的IP地址为 224.0.0.2,代表本地子网中的所有路由器)发送Hello消息(称为"链路 Hello消息")发现的邻接体叫作本地邻接体。

当一个源路由器通过一接口以组播方式发送一条 Hello 消息后,则 在这条链路下的所有直连路由器都会收到,然后这些路由器就是这个 源路由器的本地邻接体。如图 1-1中的LSR_1以组播方式发送一条Hello 消息,则LSR_2、LSR_3和LSR_4都可以收到,它们都是LSR_1的本地 邻接体。

远端邻接体(Remote Adjacency):以单播形式发送 Hello 消息 (称之为"目标Hello消息")发现的邻接体叫作远端邻接体。

远端邻接体通常被认为是非直连的,但也可以是直连的。如图 1-1 中的 LSR_1 向LSR_5以单播方式发送一条Hello消息,则LSR_5就是 LSR_1的远端邻接体。

LDP 通过邻接体来维护对等体的存在,对等体的类型取决于维护 它的邻接体的类型。一个对等体可以由多个邻接体来维护,如果同时 包括本地邻接体和远端邻接体,则该对等体类型为本远共存对等体。

二、LDP会话

LSR之间交互标签绑定消息之前必须建立LDP会话。LDP会话可以分为:

  • 本地LDP会话(Local LDP Session):建立会话的两个LSR之间是直连的;
  • 远程LDP会话(Remote LDP Session):建立会话的两个LSR之间可以是直连的,也可以是非直连的。

两台LSR之间交互Hello消息之后,即建立起邻接体(Adjacency)关系;

在建立邻接体关系的基础上,两台LSR之间交互LDP会话消息,建立起LDP会话,两台设备之间形成LDP对等体关系;

三、LSR ID与LDP ID

每一台运行了LDP的LSR除了必须配置LSR ID,还必须拥有LDP ID。

  • LDP ID的长度为48bit,由32bit的LSR ID与16bit的标签空间标识符(Label Space ID)构成。
  • LDP ID以"LSR ID : 标签空间标识"的形式呈现。例如2.2.2.2:0。

标签空间标识一般存在两种形态:

  • 值为0:表示基于设备(或基于平台)的标签空间;基于平台的方式分配标签的时候是全局一致的,同一条路由分配给不同的设备的标签都是一致的。
  • 值非0:表示基于接口的标签空间:基于接口的标签分配方式的话,可以为不同的路由分配相同的标签,那么如果收到的是同一条路由怎么去分配标签呢?那么就看是从哪个接口收到的路由假如是从1号接口发出1.1.1.1的路由就分配1029的标签,如果是从2号接口发出1.1.1.1的路由就分配1030标签。

四、LDP消息类型

运行LDP协议的LSR之间通过交换LDP消息来实现邻居发现、会话建立与维护以及标签管理等功能。

1、Hello报文:仅仅用来发现邻居的,不用来建立邻居,组播报文目的地址为:224.0.0.2(所有路由器都会监听并接收的地址),使用的是UDP协议端口号为646,该报文中有一个重要的内容---用来建立LDP会话的地址transport地址 。此外该报文中还有一个关键内容:LSR-ID, 有点类似于OSPF中的Router-id,而我们前面介绍的transport地址就默认等于LSR-ID ,双方都拿到了对方的地址了之后,就会建立TCP会话,在LDP会话、通告和通知消息中,主动方(对等体间IP地址大的一 方)发送的消息中的源端口为任意TCP端口,目的端口为 TCP 646(LDP协议端口号),被动方发送的消息中的源端口为TCP 646端口,目的端口为任意TCP端口 。,建立完成了之后就会开始发送我们的会话消息session其中有两个报文分别为init报文以及keepalive报文。

注意:既然需要建立TCP的会话,那么就必须保证双方的LSR-ID的路由可达。

举个例子:比如以下两台路由器相互发送了Hello报文,那么双方就知道了对方的地址,此时就可以去建立TCP会话了

2、init报文:用来协商参数,例如:标签的分发方式等。假如双方的分发方式不一致则无法正常建立LDP会话。

3、KeepAlive报文:用来维护LDP的会话,此时我们的LDP会话就建立完成了。

4、Advertisement消息:用于创建、改变和删除特定的FEC-标签绑定。

5、label mapping报文:为非物理接口的32位主机路由分配标签(为环回口分配标签)

6、notification消息:

五、LDP报文封装

LDP协议报文包括了LDP头部和LDP消息两部分。

  • LDP头部中携带了LDP版本、报文长度等信息;
  • LDP消息中携带了消息类型、消息长度等信息。

以上就是本章的全部内容了,文章若有错误或疑问可联系博主删除更改,感谢大家的浏览观看!

相关推荐
tritone1 小时前
我在阿贝云免费服务器上搭建RustDesk自建服务器(Self-Hosting)的真实体验【推荐】
运维·服务器
2301_800050991 小时前
DNS 服务器
linux·运维·笔记
慌糖1 小时前
自动化接口框架搭建分享-pytest第二部分
运维·自动化·pytest
Lin_Aries_04211 小时前
容器化简单的 Java 应用程序
java·linux·运维·开发语言·docker·容器·rpc
岁岁种桃花儿1 小时前
详解 Kubernetes 命令:kubectl exec -it nginx -- bash 及实战场景
运维·nginx·kubernetes
小牛马爱写博客1 小时前
DNS 服务器与 DHCP 服务器详解及配置指南
linux·运维·服务器·dns·dhcp
维尔切1 小时前
HAProxy 负载均衡器
linux·运维·数据库·负载均衡
VueVirtuoso2 小时前
前后端部署 + Nginx 配置 + Cloudflare 全攻略(通俗易懂版)
运维·nginx
QQ12958455042 小时前
服务器跨域问题CORS的解决
运维·服务器
小白银子2 小时前
零基础从头教学Linux(Day 42)
linux·运维·服务器·网络·nginx