首页 > 其他分享 >MPLS 标签分发协议

MPLS 标签分发协议

时间:2023-02-17 15:31:39浏览次数:40  
标签:分发 标签 报文 MPLS 发送 会话 LDP 邻居

LSP 的路径形成,一共分为两种模式,一种是静态,一种是动态分发。静态在前面已经说过了,那么这篇文章就着重讲一下 LDP 标签分发协议。在 MPLS 网络中,路由器通过运行 LDP 协议为每条内部路由映射一个标签,然后再把这个标签信息通告给邻居设备,路由器通过这种方法建立起一个标签转发表,最终形成一条完整的 LSP 。

LDP 的基本概念

  • 标签空间 LDP 分配标签的方式有两种。 一种是基于设备接口的标签分发,也就是设备的每个接口都对应这不一样的标签,且每个接口标签都是唯一的,LER 为同一条 FEC 在不同接口打上的标签是不同的。 二是基于设备平台来进行标签分发,就是这个标签就是代表这个设备本身,设备所有的接口对应的标签都和其设备本身这个对应的标签一样,LER 为同一条 FEC 通告的标签相同。
  • 上游LSR/下游LSR 数据报文的上下游定义是由数据流向来决定的,,数据流总是由上游发往下游的。标签的通告,既可以是下游通告给上游,也可以是上游通告给下游。

图片.png

从 PC1 发起数据请求去访问 PC2 ,那么这个时候 LSR2 就是 LSR3 的上游,LSR1 又是 LSR2 的上游。标签的通告方法既可以是上游向下游发起通告,也可以是下游向上游发起通告。

  • PHP 倒数第二跳弹出 在 MPLS 网络的出站 LER 处,首先需要对接收的报文进行标签移除,然后报文就变成一个 IP 报文,并根据 FIB 表的查找并转发,由于此动作需要进行两次查表转发,会对数据转发效率有影响。如果出站时流量较大会对设备性能造成一定的影响。为减轻出站设备的压力,标签在到达出站 LER 之前就会被剥离掉,那么报文在到达出站 LER 设备就已经是 IP 报文了,直接按照 FIB 表进行查找转发了。提高了出站 LER 设备的工作效率。

LDP 的报文

  • 发现(Discovery)消息:用于通告和维护网络中邻居的存在,如Hello消息。
  • 会话(Session)消息:用于建立、维护和终止LDP对等体之间的会话,如Initialization
  • 消息、Keepalive消息。
  • 通告(Advertisement)消息:用于创建、改变和删除FEC的标签映射,如Address消息、Label Mapping消息。 -通知(Notification)消息:用于提供建议性的消息和差错通知。

LDP 报文是基于 TCP 的,端口号为 646 ,并且报文格式是基于 TLV 的方式来封装的。TLV 是一种简单高效的编码模式,全称是 Tag、Length、Value,并具备良好的可扩展性。

  • Hello 报文 LDP 的 Hello 报文用于发现邻居并用作后期邻居关系的维护,基于 UDP 来发送,发送目的地址是 224.0.0.2 在启用了 LDP 协议的接口上会周期性的发送。 Hello 报文里面会携带一些通用的参数,比如保持时间,发送方的地址。如果双方的保持时间不一样,会按照时间短的哪一个进行 TCP 连接。
  • Initialization 报文 该报文的主要作用是用来协商 LDP 邻居会话参数,包括标签的分发方式、防环机制和标签空间。
  • Address 报文 该报文用来向 LDP 邻居通告本端的所有接口 IP 地址,以便邻居可以通过 IP 转发表的下一跳地址来决定出站标签。 如果一台 LDP 路由器从不同邻居接收到相同的 FEC 标签映射,那么需要为该 FEC 选择一个最佳的 out 标签,这时候就会根据路由表和标签转发表来决定 out 标签。
  • 标签通告报文 标签通告报文用来向 LDP 邻居发布 FEC 标签的绑定内容,一个标签通告可以发布多个标签信息,标签通告报文还包括标签请求、标签撤销和标签释放报文。
  • Keepalive 报文 LDP 邻居会话建立后,双方会定期的交互 Keepalive 报文,用来对 TCP 会话的保活检测,默认检测周期为 15s 。超时时间为 45s 。Keepalive 报文没有具体内容,格式较为简单。
  • Notification 报文 通知报文分为错误通告或者查询通知。在发生一下事件时会发出通告报文。 收到数据包格式错误、 无法识别的 TLV 、 会话超时、 报文中会向邻居报告具体差错类型。

LDP 标签的发布和管理

发布标签的仿式是指下游的 LSR 发布标签映射通告时,采取主动出击或者在收到上游 LSR 请求后被动回复,也就是 DU(Downstream Unsolicited) 和 DoD(Downstream On Demand) 两种方式方式。

  • DU :下游自主 当下游 LSR 和 上游 LSR 建立完 LDP 会话后,下游若需要发送报文,会直接发送标签映射通告,也就是说从下游往上游的 LSR ,在接收到下游发送的报文,会直接按照标签映射表对报文进行打标签,然后往上游传递。 优点:上游设备不需要发送标签请求,所以机制比较简单。 缺点:上游设备会收到所有的 LDP 邻居主动发送的映射消息。 下游主动发送标签,因此会建立大量的 LSP 。但是有些 LSP 不一定是有效的。
  • DoD 下游按需 在收到上游 LSR 的标签请求后,会针对上游 LSR 所请求的 FEC 发送对应的标签映射信息给上游,每一次传递都会提前进行标签的请求,下游设备在收到上游请求后再进行标签写入并传递。 优点:每个 LSP 都是建立在请求下产生的,所以 LSP 每个都是有效的。 缺点:每次都需要进行标签请求,对设备会造成额外的开销。

LDP 会话的建立过程

LDP 的会话建立在 TCP 之上的,所以会话建立必须是需要知道对端的 IP 地址的。根据获知邻居的 IP 地址的方式将 LDP 会话分成两类。 本地 LDP 会话:建立会话的设备是直连。 远端 LDP 会话:建立会话的可以是直连,也可以是非直连的。

  • 邻居发现 在启动 LDP 协议后,设备会开始发送 Hello 报文,报文内包含一些基本的邻居信息,例如 IP 地址这些建立邻居的必备信息,然后由 IP 地址较大的一方发起 TCP 连接,这种方式建立起来的邻居就是,本地 LDP 会话。若是手动指定邻居地址的方式建立的邻居,就称为远端 LDP 会话,若设备之间属于非直连,那么会通过单播进行传递 Hello 报文。
  • 会话建立 LDP 邻居之间相互发现或直接指定了邻居地址后,开始建立 TCP 连接,建立完 TCP 连接后,相互发送初始化报文进行参数协商,如果接收了对方的参数,那么就会回复 Keepalive 报文,完成 LDP 会话的建立。如果期间发生了错误,则会发送 Notification 报文来报告对应的错误,最终导致连接被关闭。状态为 Operational 表示 TCP 会话建立完成,邻居之间可以交换标签通告等报文了。在会话建立后,双方会定期发送 Hello 报文以检测邻居状态,也会定期发送 Keepalive 报文来检测 TCP 连接状态。

LDP 会话状态机

LDP 协议从邻居发现到会话建立经历了 4 个状态。

  • Non Existent 状态: LDP 协议的初始状态,类似 BGP 的 Idle 状态。开始时双方通过组播进行 Hello 报文的发送,并选举出主动方和被动方,双方都接收 Hello 报文后,开始建立 TCP 连接,然后是建立三次握手,当建立完成后双方进入到 Initialized 状态。
  • Initialized 状态 该状态下主动方和被动方的工作要点不同。主动方先发送 Initialization 报文,随后就转变为 Opensent 状态,并等待被动方回应 Initialization 报文。被动方在这状态会等待主动方发送 Initialization 报文过来,收到了 Initialization 报文中的参数全都正常,会给主动方回应 Initialization 和 Keepalive 报文,随后便转入 Opensent 状态。如果收到了非 Initialization 报文状态就会退回 Non Existent 状态, 图片.png
  • Opensent 状态: 这个状态是主动方发送了 Initialization 报文后的状态,这个状态下主动方会等待对端发来的 Keepalive 报文和 Initialization 报文后,收到被动发来的报文后,会向被动方发送 Keepalive 报文,双方均会进入 Opensent 状态,若收到的报文异常,则会回退至最初的状态。
  • Openrec 状态 : 不管是主动方还是被动方,在收到参数正确的 Initialization 报文后,等待对方发送 Keepalive 报文的状态,当收到了 Keepalive 报文后,就进入下一阶段 Operational 状态。
  • Operational 状态: 到达此处状态就以为着 LDP 邻居建立成功了,可以发送和交换 LDP 报文,此状态下双方会周期性的发送 Keepalive 报文进行保活,如果该报文接收时间超时,那么邻居会立刻断开退回初始状态。

标签:分发,标签,报文,MPLS,发送,会话,LDP,邻居
From: https://blog.51cto.com/u_14167341/6064299

相关文章