跳到主要内容

RFC 6388 - LDP 扩展: 点对多点 (P2MP) 与多点对多点 (MP2MP) 标签交换路径

Internet Engineering Task Force (IETF) IJ. Wijnands, Ed. Request for Comments: 6388 Cisco Systems, Inc. Category: Standards Track I. Minei, Ed. ISSN: 2070-1721 K. Kompella Juniper Networks B. Thomas November 2011

摘要 (Abstract)

本文档描述对标签分发协议 (Label Distribution Protocol, LDP) 的扩展, 用于在 MPLS 网络中建立点对多点 (Point-to-Multipoint, P2MP) 与多点对多点 (Multipoint-to-Multipoint, MP2MP) 标签交换路径 (Label Switched Path, LSP). 这些扩展亦称为多点 LDP (multipoint LDP, mLDP). 多点 LDP 在不依赖其他组播树构建协议的情况下构造 P2MP 或 MP2MP LSP. 本文档描述以接收方发起方式构建此类 LSP 的协议元素与规程. 多点 LSP 可有多种应用, 例如 IP 组播或 BGP/MPLS 三层虚拟专用网 (L3VPN) 中的组播支持. 此类应用如何使用 LDP 信令的多点 LSP 超出本文档范围.

本备忘录状态 (Status of This Memo)

本文档为互联网标准跟踪文档, 是 IETF 的产物, 代表 IETF 社区共识. 更多信息见 RFC 5741 第 2 节. 当前状态、勘误与反馈见 http://www.rfc-editor.org/info/rfc6388.

Copyright (c) 2011 IETF Trust and the persons identified as the document authors. All rights reserved. 本文档受 BCP 78 与 IETF Trust 法律条款约束.

目录 (Table of Contents)

  1. 引言
  2. 使用 LDP 建立 P2MP LSP
  3. 使用 LDP 建立 MP2MP LSP
  4. MP LSP 中的微环路
  5. LDP MP Status TLV
  6. LAN 上的上游标签分配
  7. 根节点冗余
  8. Make Before Break (MBB)
  9. mLDP FEC 元素的 Typed Wildcard
  10. 安全考虑
  11. IANA 考虑 12–14. 致谢、贡献作者与参考文献

1. 引言 (Introduction)

LDP 协议在 [RFC5036] 中描述. 它定义了在网络中建立点对点 (P2P) 与多点对点 (MP2P) LSP 的机制. 本文档描述对 LDP 的扩展, 用于建立 P2MP 与 MP2MP LSP, 统称为多点 LSP (MP LSP).

  • P2MP LSP: 允许来自单个根 (或入口) 节点的流量投递到多个叶 (或出口) 节点.
  • MP2MP LSP: 允许来自多个入口节点的流量投递到多个出口节点.

对 MP LSP 所经过的 LDP 邻居, 每个邻居只发送一份分组副本. 这在网络中不使用组播协议的情况下完成. 给定入口节点可有多个以不同标识符为根的 MP LSP.

解决方案假定 MP LSP 的叶节点知道它们所属的根节点与 MP LSP 标识符. 该信息的分发机制超出本文档范围. 应用如何使用由 LDP 信令的 MP LSP 亦超出范围.

相关文档包括 [RFC6348]、[L3VPN-MCAST] 与 [RFC4875].

1.1 约定 (Conventions)

关键词 "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY" 与 "OPTIONAL" 的解释见 RFC 2119 [RFC2119].

本文档中所有显示为 "reserved" 的新字段在发送时 MUST 置零, 在接收时 MUST 忽略.

1.2 术语 (Terminology)

部分术语取自 [RFC6348]:

术语含义
mLDPLDP 的多点扩展
P2P LSP一个入口 LSR 与一个出口 LSR 的 LSP
P2MP LSP一个入口 LSR 与一个或多个出口 LSR 的 LSP
MP2P LSP一个或多个入口 LSR 与唯一出口 LSR 的 LSP
MP2MP LSP具有区分根节点、连接一组节点的 LSP, 任一节点发送的流量投递到所有其他节点
MP LSP多点 LSP (P2MP 或 MP2MP)
Ingress LSR可沿 LSP 发送数据分组的 LSR; P2MP 仅有一个 (常称根节点), MP2MP 可有多个
Egress LSR可从 LSP 取出数据分组的 LSR; P2MP/MP2MP 可有多个出口
Transit LSR经直接相连的上游 LSR 可达根, 并有一个或多个直接相连下游 LSR 的 LSR
Bud LSR既是出口又有一个或多个直接相连下游 LSR 的 LSR
Leaf node在 P2MP 上下文中为出口或 Bud LSR; 在 MP2MP 中对同一 LSP 既是入口又是出口, 亦可为 Bud
CRC32按 ISO 3309 / ITU-T V.42 的 CRC-32 算法计算的校验值
FECForwarding Equivalence Class (转发等价类)

1.3 可管理性 (Manageability)

MPLS LSR 可用 [RFC3813] 定义的 MIB 模块建模与管理. 该模块完全能够处理支持 P2MP LSP 所需的一对多 in-segment 到 out-segment 关系. [RFC3815] 定义 LDP 管理对象. 本文档定义的扩展可能需要额外 MIB 模块或对 [RFC3815] 的扩展, 属未来研究.

2. 使用 LDP 建立 P2MP LSP (Setting Up P2MP LSPs with LDP)

P2MP LSP 由单个根节点、零个或多个中转节点以及一个或多个叶节点组成.

  • 叶节点 发起 P2MP LSP 的建立与拆除, 并安装转发状态以将在 P2MP LSP 上收到的流量投递到所需之处 (如何做超出范围).
  • 中转节点 安装 MPLS 转发状态, 并将 P2MP LSP 建立 (与拆除) 向根传播.
  • 根节点 安装转发状态以将流量映射到 P2MP LSP (根如何判定哪些流量应走该 LSP 超出范围).

2.1 对使用 LDP 建立 P2MP LSP 的支持

使用 [RFC5561] 定义的 LDP 能力通告对 P2MP LSP 建立的支持. 支持本文档 P2MP 规程的实现 MUST 实现 Initialization 消息中的 Capability Parameters 规程.

定义新的 Capability Parameter TLV — P2MP Capability:

 0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|1|0| P2MP Capability (0x0508) | Length (= 1) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|S| Reserved |
+-+-+-+-+-+-+-+-+
  • S: 如 [RFC5561] 所规定.
  • P2MP Capability TLV MUST 在 LDP Initialization 消息中通告.
  • 通告表示支持本文档详述的 P2MP LSP 建立规程.
  • 若对等方未通告相应能力, 则 SHOULD NOT 向该对等方发送使用 P2MP FEC Element 的标签消息.

2.2 P2MP FEC Element

为使用 LDP 建立 P2MP LSP, 定义新协议实体 P2MP FEC Element, 用作 FEC TLV 中的 FEC Element. 注意 P2MP FEC Element 不一定标识必须映射到 LSP 的流量, 因此从该角度看 "FEC" 一词有些误用.

P2MP FEC Element 由 P2MP LSP 根的地址与一个不透明值 (opaque value) 组成. 不透明值由一个或多个 LDP MP opaque value 元素组成, 在根节点上下文中唯一. (Root Node Address type, Root Node Address, Opaque Value) 的组合在 MPLS 网络内唯一标识一个 P2MP LSP.

编码:

 0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|P2MP Type(0x06)| Address Family | Address Length|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ Root Node Address ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Opaque Length | Opaque Value ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +
~ ~
字段说明
TypeP2MP FEC Element 类型为 0x06
Address Family两八位组, 来自 IANA "Address Family Numbers", 编码根 LSR 地址族
Address Length根 LSR 地址的八位组长度
Root Node Address按 Address Family 编码的主机地址
Opaque Length不透明值的八位组长度
Opaque Value一个或多个 MP opaque value 元素
  • 若 Address Family 为 IPv4, Address Length MUST 为 4; 若为 IPv6, MUST 为 16.
  • 若 Address Length 与 Address Family 定义的长度不匹配, 接收方 SHOULD 中止处理包含该 FEC Element 的消息, 并向 LDP 对等方发送 "Unknown FEC" Notification 指示错误.
  • 若 FEC TLV 包含 P2MP FEC Element, 则该 P2MP FEC Element MUST 是 FEC TLV 中唯一的 FEC Element.

2.3 LDP MP Opaque Value Element

LDP MP opaque value 元素用于 P2MP 与 MP2MP FEC Element. 它携带对入口 LSR 与叶 LSR 有意义、但中转 LSR 无需解释的信息.

基本类型 (basic type) 编码: Type (< 255) | Length | Value

扩展类型 (extended type) 编码: Type = 255 | Extended Type | Length | Value

IANA 维护基本类型与扩展类型注册表 (见第 11 节).

2.3.1 通用 LSP 标识符 (Generic LSP Identifier)

通用 LSP 标识符是基本类型的不透明值元素:

  • Type: 1
  • Length: 4
  • Value: 在由根地址标识的根上下文中唯一的 32 位整数

当流量到 LSP 的映射是非算法性的、通过 LDP 以外手段完成时, 推荐使用此类型.

2.4 使用 P2MP FEC Element

处理规则中使用下列记号:

  1. P2MP FEC Element <X, Y>: 根节点地址 X、不透明值 Y 的 FEC Element.
  2. P2MP Label Mapping <X, Y, L>: 带单个 P2MP FEC Element <X, Y> 与标签 L 的 Label Mapping 消息. 标签 L MUST 从发送方 LSR 的 per-platform 标签空间分配 ([RFC3031] 第 3.14 节). 接口标签空间的使用超出范围.
  3. P2MP Label Withdraw <X, Y, L>: 带 P2MP FEC Element 与标签 L 的 Label Withdraw.
  4. P2MP LSP <X, Y>: 根 X、不透明值 Y 的 P2MP LSP.
  5. L' -> {<I1, L1>, ..., <In, Ln>}: 在 LSR X 上, 入标签 L' 映射到出接口/标签对集合.

2.4.1 Label Mapping (标签映射)

叶节点通过向上游发送 Label Mapping 发起 P2MP LSP 建立. 上游选择基于到根的单播路由 (典型为 IGP 下一跳). 若存在多个等价上游, 使用文档规定的哈希规程选择一个, 以避免不必要的复制并保证稳定性:

  1. 候选上游 LSR 按 IP 地址从低到高编号.
  2. 计算 H = (CRC32(Opaque Value)) modulo N (N 为候选数).
  3. 选择编号为 H 的上游 LSR U.

中转节点在收到下游的 Label Mapping 后:

  • 分配本地标签;
  • 安装从上游入标签到下游出接口/标签的转发状态;
  • 若尚未向上游发送过该 FEC 的 Label Mapping, 则向上游传播.

根节点在收到 Label Mapping 后安装将流量推入 P2MP LSP 的转发状态.

2.4.2 Label Withdraw (标签撤销)

叶不再希望属于某 P2MP LSP 时发送 Label Withdraw. 中转节点在失去所有下游兴趣后, 向上游传播 Label Withdraw 并删除本地状态. 根在失去所有下游后删除映射状态.

2.4.3 上游 LSR 变更 (Upstream LSR Change)

当到根的下一跳因路由变化而改变时, 节点 MUST 向新上游发送 Label Mapping, 并向旧上游发送 Label Withdraw (或按 MBB 规程先建后拆, 见第 8 节), 以避免流量中断与微环路.

3. 使用 LDP 建立 MP2MP LSP (Setting up MP2MP LSPs with LDP)

MP2MP LSP 使集合中的任一叶节点都能向所有其他叶发送流量. 概念上, MP2MP 可视为:

  • 一棵以根为汇聚点的 下游树 (与 P2MP 类似, 从根到叶); 以及
  • 从各叶回到根的 上游路径, 使得叶发送的流量先到根 (或适当汇聚点), 再沿下游树分发.

3.1 对 MP2MP 的支持

类似 P2MP, 使用 LDP Capability 通告 MP2MP Capability. 未通告则 SHOULD NOT 向该对等方发送 MP2MP FEC 标签消息.

3.2 MP2MP Downstream 与 Upstream FEC Elements

定义两类 FEC Element (类型码见 IANA / 规范正文):

  • MP2MP Downstream FEC Element: 标识从根向叶方向的下游树.
  • MP2MP Upstream FEC Element: 标识从叶向根方向的上游路径.

两者共享根地址与 opaque value 结构, 与 P2MP FEC 类似, 但类型字段不同以区分方向.

3.3 使用 MP2MP FEC Elements

记号包括:

  • 下游/上游 LSP、FEC Element
  • MP2MP-D / MP2MP-U Label Mapping、Withdraw、Release

3.3.1 MP2MP Label Mapping

叶节点同时建立下游与上游状态:

  1. 向上游发送 下游 Label Mapping (类似 P2MP), 安装从根方向接收流量的状态.
  2. 接收上游 Label Mapping (或本地分配上游标签) 以向根方向发送流量.

中转与根协调双向标签绑定, 确保:

  • 叶发送的分组沿上游路径到达可扇出的节点;
  • 再沿下游分支复制到其他叶;
  • 对同一 LDP 邻居只发送一份副本.

3.3.2 MP2MP Label Withdraw

撤销下游或上游绑定时, 对等方释放相应标签与转发状态. 当某方向不再有下游兴趣时, 向上游传播撤销.

3.3.3 MP2MP 上游 LSR 变更

路由变化时, 上下游绑定都需迁移到新上游, 宜结合 MBB 以减少丢包.

4. MP LSP 中的微环路 (Micro-Loops in MP LSPs)

在路由收敛期间, 瞬态微环路可能导致组播流量循环. mLDP 实现 SHOULD 采用与单播一致的环路缓解策略 (例如等待 IGP 收敛、配合 MBB、TTL 保护). 文档讨论在上游变更时新旧路径重叠带来的环路风险, 并指向有序迁移规程.

5. LDP MP Status TLV (The LDP MP Status TLV)

定义 LDP MP Status TLV, 用于在 LDP 消息中携带多点 LSP 相关状态码 (例如 MBB 相关状态).

5.1 LDP MP Status Value Element

Status Value Element 编码类型化状态信息; IANA 注册 Status Value Element 类型.

5.2 包含 LDP MP Status 的消息

5.2.1 在 LDP Notification 中发送

Notification 消息可携带 MP Status, 用于异步通知对等方 (例如 MBB 就绪).

5.2.2 在 Label Mapping 中携带

Label Mapping 可包含 MP Status TLV, 以在映射时传递附加状态 (例如 MBB Status Code).

6. LAN 上的上游标签分配 (Upstream Label Allocation on a LAN)

在共享 LAN 上, 多个 LSR 可能是同一 MP LSP 的邻居. 为高效复制, 文档讨论上游标签分配, 使 LAN 上可使用共享组播/复制语义.

6.1 LAN 上的 LDP MP2MP

6.1.1 MP2MP 下游转发

在 LAN 上, 下游方向可使用使多个接收方共享同一标签上下文的分配方式, 减少不必要的单播复制.

6.1.2 MP2MP 上游转发

上游方向需确保来自不同叶的流量正确到达根方向下一跳, 同时避免 LAN 上的重复与环回.

7. 根节点冗余 (Root Node Redundancy)

单根是潜在单点故障. 文档描述根节点冗余规程, 使叶可属于以不同根标识的相关 MP LSP, 或在主根失败时切换到备份根.

7.1 P2MP 的根冗余规程

  • 应用层或控制器可通告主/备根与 opaque 标识.
  • 叶可同时建立到备份根的 P2MP 状态, 或在检测到失败后重建.
  • 与 MBB 结合可实现更平滑的切换.

7.2 MP2MP 的根冗余规程

MP2MP 的上下游状态均依赖根; 切换根时 MUST 一致地迁移下游树与上游路径, 避免分裂树或黑洞.

8. Make Before Break (MBB)

8.1 MBB 概述

MBB 目标是在改变上游 LSR (或路径) 时, 先建立新路径再拆除旧路径, 使流量尽量不中断. 对 P2MP/MP2MP, 这需要协调新旧上游的标签映射与转发状态激活时机.

8.2 MBB Status Code

定义 MBB 相关状态码, 经 MP Status TLV 传递, 指示 MBB 能力、等待通知或 MBB 完成等.

8.3 MBB Capability

通过 LDP Capability 通告对 MBB 规程的支持. 双方均支持时才使用完整 MBB 信令.

8.4 MBB 规程

8.4.1 术语

  • MBB LSP <X, Y>: 处于 MBB 过程中的 P2MP 或 MP2MP 条目.
  • A(N, L) / iA(N, L): 活动/非活动接受元素 (上游邻居 N, 标签 L).
  • F(N, L) / F'(N, L): 转发状态及标记为待发 MBB 通知的状态.
  • MBB Notification / MBB Label Mapping: 携带 MBB 状态的通知与映射消息.

8.4.2–8.4.6 关键步骤摘要

  1. 检测需要上游变更.
  2. 向新上游发送带 MBB 指示的 Label Mapping, 安装 非活动 接受/转发状态.
  3. 等待下游 MBB 就绪通知 (若适用).
  4. 激活新路径转发, 再向旧上游 Withdraw.
  5. 对 MP2MP, 上下游方向均需按文档顺序操作, 避免半连接状态.

9. mLDP FEC Element 的 Typed Wildcard

定义对 mLDP FEC Element 的 typed wildcard 支持, 以便在 Label Withdraw / Release / Request 等消息中通配匹配一类多点 FEC, 简化批量操作. 具体编码与匹配规则对齐 LDP typed wildcard 框架.

10. 安全考虑 (Security Considerations)

mLDP 继承 [RFC5036] 的 LDP 安全考虑. 额外风险包括:

  • 恶意 Label Mapping 可建立昂贵的组播状态与带宽消耗 (DoS).
  • 伪造根/opaque 可劫持或注入组播树.
  • 未授权对等方可影响 P2MP/MP2MP 拓扑.

部署 SHOULD 使用 LDP 认证 ([RFC5036] / TCP-MD5 或后续 TCP-AO 等)、过滤 LDP 对等体、限制可接受的根地址与 opaque 策略, 并监控异常状态增长.

11. IANA 考虑 (IANA Considerations)

IANA 注册包括 (详见规范正文):

  1. LDP MP Opaque Value Element basic type
  2. LDP MP Opaque Value Element extended type
  3. LDP MP Status Value Element type
  4. 相关 Capability 参数码点 (P2MP、MP2MP、MBB 等)
  5. FEC Element 类型码 (P2MP 0x06 等)

12. 致谢 (Acknowledgments)

感谢对 mLDP 设计与审查作出贡献的 IETF 工作组成员与实现者.

13. 贡献作者 (Contributing Authors)

见英文源完整列表. 主要编辑/作者: IJ. Wijnands (Cisco), I. Minei, K. Kompella (Juniper), B. Thomas.

14. 参考文献 (References)

14.1 规范性引用

  • [RFC2119] Bradner, S., BCP 14.
  • [RFC5036] Andersson, L., et al., "LDP Specification".
  • [RFC5561] Thomas, B., et al., "LDP Capabilities".
  • [RFC3031] Rosen, E., et al., "MPLS Architecture".

14.2 资料性引用

  • [RFC6348], [RFC4875], [RFC3813], [RFC3815], [L3VPN-MCAST], ISO 3309, ITU-T V.42.

完整列表见英文源 docs/rfc-6388/index.md.

运维要点摘要

  1. 叶驱动 (receiver-initiated): 叶知道根与 opaque 后向上游拉标签.
  2. 能力协商: 未通告 P2MP/MP2MP 能力则不发送对应 FEC.
  3. 上游选择: 基于到根的 IGP 路径; ECMP 时用 CRC32(opaque) 稳定哈希.
  4. per-platform 标签: P2MP Label Mapping 中的标签从平台标签空间分配.
  5. MBB: 路由变化时先建后拆, 降低丢包与微环路.
  6. 与应用解耦: 流量如何映射到 MP LSP (IP 组播、MVPN 等) 由其他规范定义.

相关资源


说明: 英文源约 81KB. 本中文版按章节完整翻译协议模型、FEC 编码、建立/撤销/MBB/冗余与安全要点. ASCII 位图保留英文布局; 逐字节边界情况与完整状态机请对照英文源实现.