image.png

1. Label Distribution Protocol(标签分发协议)特征


  • 是 MPLS 的一种控制层面(信令)的协议
  • 以单播形式发送 Hello 消息发现的邻接体叫做远端邻接体
  • 以组播「224.0.0.2」形式发送 Hello 消息发现的邻接体叫做本地邻接体
  • 本地 LDP Session 建立在两个 LSR 之间(直连)
  • 远端 LDP Session 可以建立在 LSR 之间(直连)或远端(非直连)
  • 通过「UDP 646 」发现 Peer
  • 通过「TCP 646 」建立 Session
  • LDP 默认是为 32/ IGP 分发标签
  • LSR-ID 需要 IGP 可达,默认下也是传输地址
  • MPLS 域内一般都是 LDP
  • 在华为设备上,LSR-ID 也是传输地址。在其他厂商可能是自动选的 Loopback IP 地址大的作为 LSR-ID
  • 沿途的所有设备到达更新源地址必须是相同的掩码
  • TTL 和环路检测,默认依赖 IGP,如果是 IGP 出现环路那么 LDP 也会出现环路

    LDP 简单来说:就是通过 UDP646 发现邻居,通过 TCP646 建立邻居关系,然后为本地的 /32 位路由分配标签,通过传输地址(LSR-ID)通告给下游设备,下游设备通过分配的标签进行数据转发[转发的前提是 IGP 可达和下一跳可达(传输地址可达),放入 LFIB 的前提是 IGP 最优]

2. LDP Message


除了 Discovery(Hello)消息使用 UDP(端口646)外,LDP 的 Session、Advertisement 和 Notification 消息都使用 TCP(端口646)传输

1)LDP Message 类型

一共四类报文

  • Discovery Message:宣告和维护网络中的 LSR
  • Session Message:建立、维护和终止 LDP Peer 之间的会话
  • Advertisement Message:生成、改变和删除 FEC 的标签映射
  • Notification Message:宣告告警和错误信息

image.png

2)发现邻居

用于 LSR 发现潜在的 LDP 对等体,并相互交换Label/FEC 映射(标签映射只有本地有意义)

  • 直连组播发现机制:[周期性地发送 UDP 的 Hello 消息,目的地址是组播地址 224.0.0.2 来发现直连的 LSR]。如果 LSR 在特定接口接收到 Hello 消息,则该接口存在 LDP 对等体
  • 单播远端发现机制:[周期性地发送 UDP 的 Hello 消息到指定 IP 地址]。如果 LSR 接收到 Hello 消息,表明该 LSR 存在 LDP 对等体

    3)建立 Session 过程

    MPLS LDP - 图3
  1. 双方互相发送 Hello 消息,Hello 消息中携带传输地址(也是 LSR-ID),用来建立 LDP Session
  2. 传输地址大的做为主动方,发起建立 TCP 连接
  3. TCP 建立完成后,主动方发起初始化消息,开始协商 LDP Session 参数(LDP Version、Label 分发方式、Keepalive 保持定时器、PDU 长度、标签空间等)
  4. 被动方认可参数协商后,则发送初始化消息和 Keepalive 消息给主动方
  5. 主动方收到初始化信息后,回应 Keepalive 消息给被动方,此时 Session 建立

注:如果不认可相关参数,则发送 Notification 消息,终止 LDP Session 建立

4)常见的 LDP Session 故障

  1. IGP 协议错误导致 LSR-ID 地址不可达(传输地址不可达)
  2. 环回接口掩码错误(华为默认只仅仅为 /32 的路由分发标签)
  3. 修改传输地址
  4. 认证
  5. ACL 引发的问题

    5)LDP 状态机

    image.png

    3. LDP 标签的分发、控制和保持


华为设备默认:DU + Ordered + Liberal

1)LDP 标签空间

基于平台(设备)的标签空间,会话中的 LDP ID 末位为 0,LSR 为一个目的网段只分配一个标签,并将该标签发送给所有的 LDP Peer

2)LDP 标签分发方式

  • 自主方式(DU):LSR 不需要从上游获得标签请求,自主的向 FEC 分配标签,并向上游通告该 FEC 的标签映射
    • 华为设备默认只为 32位的主机路由分配标签,可以在 MPLS 下修改为其他前缀分配 lsp-tirgeer all
  • 按需方式(DoD):LSR 需要获得上游的标签请求才能分发标签和向上游通告该 FEC 的映射标签

    3)LDP 标签控制方式

    下游设备为上游分配标签,上游使用该标签承载数据

  • 独立分配(Independent):本地 LSR 可以自主地分配一个标签绑定到某个 FEC,并通告给上游 LSR,而无需等待下游的标签

    • 下游自主方式(DU + Independent):LSR(Transit)无需等待下游(Egress)的标签,就会直接向上游(Ingress)分发标签
    • 下游按需方式(DoD + Independent):发送 FEC 标签请求的LSR(Ingress)的直连下游(Transit)会直接回应标签,而不必等待来自最终下游(Egress)的标签
  • 有序分配(Ordered):对于 LSR 上某个 FEC 的标签映射,只有当该 LSR 已经具有此 FEC 下一跳的标签映射消息、或者该 LSR 就是此 FEC 的出节点时,该 LSR 才可以向上游发送此 FEC 的标签映射

    • 下游自主方式(DU + Ordered):LSR(Transit)只有收到下游(Egress)的标签映射消息,才会向上游(Ingress)分发标签
    • 下游按需方式(DoD + Ordered):发送 FEC 标签请求的 LSR(Ingress)的直连下游(Transit)只有收到最终下游(Egress)的标签映射消息,才会向上游(Ingress)分发标签

      4)LDP 标签保持方式

  • 自由方式(Liberal):从邻居收到的标签映射,无论邻居 LSR 是不是自己的下一跳都保留

    • 当网络拓扑变化引起下一跳邻居改变时,可以迅速重建 LSP,但需要更多的内存和标签空间
  • 保守方式(Conservative):从邻居收到的标签映射,只有当邻居 LSR 是自己的下一跳时才保留

    • 当网络拓扑变化引起下一跳邻居改变时,较慢的重建 LSP,但节省了内存和标签空间

      4. LDP 优化机制

      1)次末跳弹出 PHP

      任意 LSP 设备都会为自身的直连接口(/32 Loopback 接口)向上游分配 PoP/3 的标签

  • 在最后一条节点上,标签几乎没有了使用价值。如果没有次末跳弹出,出口 PE 设备会查找 LFIB 后移除标签,再查找 FIB 转发进行报文的转发,这样会增加出口 PE 设备负担(一般出口 PE 性能不高)。这时就需要利用「PHP 特性(标签为隐式空标签 3)」,在倒数第二跳就将标签弹出,减少最后一跳的负担。最后一跳直接进行 IP 转发或内层标签转发

    2)TTL 的处理方式

    管道模式可以隐藏拓扑结构

① Uniform(统一模式)

在出口/入口 PE 处把 IP TTL 和 MPLS TTL 互相拷贝(TTL 繁衍)

  • 在入口 PE 不做改变的把 IP TTL -1 拷贝到 MPLS TTL,在 MPLS 传输时按照外层 TTL 进行转发,在次末跳上把 MPLS TTL 拷贝到 IP TTL

MPLS LDP - 图5

② Pipe(管道模式)

把整个 MPLS 域看成一台设备,MPLS 域内按照 MPLS 标准的 TTL 处理。在出 MPLS 域时 IP TTL - 1

MPLS LDP - 图6

3)ICMP 响应报文

单层标签时,通常采用第一种方式回应 TTL 超时消息;多层标签时,通常采用第二种方式回应 TTL 超时消息

  1. 如果 LSR 上有到达报文发送者的路由,则通过 IP 路由,直接向发送者回应 TTL 超时消息
  2. 如果 LSR 上没有到达报文发送者的路由,则 ICMP 响应报文将按照 LSP 继续传送,到达 LSP 出节点后,由出口 PE 节点将该消息返回给发送者

    5. LDP-IGP 的同步


LDP 与 LGP 同步功能主要用来解决 LSP 中存在主备链路的组网下,通过抑制 IGP 正常发布路由来保证 LDP 和 IGP 同步收敛,减少 LSP 流量的丢失

  • MPLS LDP-IGP 的解决方案不能用于 BGP 的标签分发
  • LDP-IGP 同步计时器
    • Hold-Down Timer:用来抑制 IGP 邻居建立的时间
    • Hold-Max-Cost Timer:用来控制通告接口链路最大 Cost 值的时间
    • Delay Timer:用来抑制 LSP 建立的时间
  • LDP-IGP 没有同步带来的问题

MPLS LDP - 图7

  • 主链路故障恢复后,由于 IGP 比 LDP 收敛速度快,IGP 会先于 LDP 切换回主链路,导致的 LSP 流量丢失
    • 当故障恢复后,开始建立 LDP 邻居,并同时使用 Hold-Down Timer 时间抑制 IGP 的邻居建立。只有 LDP Session 建立后,双方互相发送Mapping 消息并进行 IGP 的同步建立。当 IGP 邻居关系建立后,切换回原来的主链路
  • 主链路正常,但 LDP Session 发生故障。LSP 流量从主链路切换到备份链路,而 IGP 流量继续从主链路转发,导致 LSP 流量丢失
    • LDP Session 故障,LDP 会通知 IGP 主链路向邻居发布最大 Cost 值,启动 Hold-Max-Cost 定时器,并切换至备份链路
    • 防止 LDP 会话一直不能重新建立,可通过配置 Hold-Max-Cost 定时器为永久发布最大开销值,使流量在主链路的 LDP 会话重新建立之前,一直都使用备份链路

LDP-IGP同步.pdf

6. 环路检测


一般来说 IGP 中没有环路(依赖 IGP 进行防环),则 LDP 中也不会有环路

  • TTL 环路检测(IGP)
    • 帧模式的 MPLS 使用 TTL
    • 信元模式的 MPLS 没有 TTL
  • 距离矢量法(与 BGP 的 AS-Path 类似)
    • LSR 会检测本设备的 LSR-ID 是否包含在路径信息中。路径信息中没有本设备的 ID,则添加。如果在路径信息中包含了本设备的 LSR-ID,则认为产生环路,从而终止 LSP 的建立。
  • 最大跳数法(与 RIP 的最大跳数限制类似)
    • 每经过一个子网(设备)跳数值 + 1,一旦超过规定的最大值,则认为产生环路,从而终止 LSP 的建立