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:宣告告警和错误信息
2)发现邻居
用于 LSR 发现潜在的 LDP 对等体,并相互交换Label/FEC 映射(标签映射只有本地有意义)
- 直连组播发现机制:[周期性地发送 UDP 的 Hello 消息,目的地址是组播地址 224.0.0.2 来发现直连的 LSR]。如果 LSR 在特定接口接收到 Hello 消息,则该接口存在 LDP 对等体
- 单播远端发现机制:[周期性地发送 UDP 的 Hello 消息到指定 IP 地址]。如果 LSR 接收到 Hello 消息,表明该 LSR 存在 LDP 对等体
3)建立 Session 过程
- 双方互相发送 Hello 消息,Hello 消息中携带传输地址(也是 LSR-ID),用来建立 LDP Session
- 传输地址大的做为主动方,发起建立 TCP 连接
- TCP 建立完成后,主动方发起初始化消息,开始协商 LDP Session 参数(LDP Version、Label 分发方式、Keepalive 保持定时器、PDU 长度、标签空间等)
- 被动方认可参数协商后,则发送初始化消息和 Keepalive 消息给主动方
- 主动方收到初始化信息后,回应 Keepalive 消息给被动方,此时 Session 建立
注:如果不认可相关参数,则发送 Notification 消息,终止 LDP Session 建立
4)常见的 LDP Session 故障
- IGP 协议错误导致 LSR-ID 地址不可达(传输地址不可达)
- 环回接口掩码错误(华为默认只仅仅为
/32
的路由分发标签) - 修改传输地址
- 认证
- ACL 引发的问题
5)LDP 状态机
3. LDP 标签的分发、控制和保持
华为设备默认:DU + Ordered + Liberal
1)LDP 标签空间
基于平台(设备)的标签空间,会话中的 LDP ID 末位为 0,LSR 为一个目的网段只分配一个标签,并将该标签发送给所有的 LDP Peer
2)LDP 标签分发方式
- 自主方式(DU):LSR 不需要从上游获得标签请求,自主的向 FEC 分配标签,并向上游通告该 FEC 的标签映射
- 华为设备默认只为 32位的主机路由分配标签,可以在 MPLS 下修改为其他前缀分配
lsp-tirgeer all
- 华为设备默认只为 32位的主机路由分配标签,可以在 MPLS 下修改为其他前缀分配
按需方式(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 的标签映射
自由方式(Liberal):从邻居收到的标签映射,无论邻居 LSR 是不是自己的下一跳都保留
- 当网络拓扑变化引起下一跳邻居改变时,可以迅速重建 LSP,但需要更多的内存和标签空间
保守方式(Conservative):从邻居收到的标签映射,只有当邻居 LSR 是自己的下一跳时才保留
在最后一条节点上,标签几乎没有了使用价值。如果没有次末跳弹出,出口 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
② Pipe(管道模式)
把整个 MPLS 域看成一台设备,MPLS 域内按照 MPLS 标准的 TTL 处理。在出 MPLS 域时 IP TTL - 1
3)ICMP 响应报文
单层标签时,通常采用第一种方式回应 TTL 超时消息;多层标签时,通常采用第二种方式回应 TTL 超时消息
- 如果 LSR 上有到达报文发送者的路由,则通过 IP 路由,直接向发送者回应 TTL 超时消息
- 如果 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 没有同步带来的问题
- 主链路故障恢复后,由于 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 会话重新建立之前,一直都使用备份链路
6. 环路检测
一般来说 IGP 中没有环路(依赖 IGP 进行防环),则 LDP 中也不会有环路
- TTL 环路检测(IGP)
- 帧模式的 MPLS 使用 TTL
- 信元模式的 MPLS 没有 TTL
- 距离矢量法(与 BGP 的 AS-Path 类似)
- LSR 会检测本设备的 LSR-ID 是否包含在路径信息中。路径信息中没有本设备的 ID,则添加。如果在路径信息中包含了本设备的 LSR-ID,则认为产生环路,从而终止 LSP 的建立。
- 最大跳数法(与 RIP 的最大跳数限制类似)
- 每经过一个子网(设备)跳数值 + 1,一旦超过规定的最大值,则认为产生环路,从而终止 LSP 的建立