个人认为,理解报文就理解了协议。通过报文中的字段可以理解协议在交互过程中相关传递的信息,更加便于理解协议。
因此本文将在 NG MVPN BGP 协议报文的基础上进行介绍。
自动换行
MCAST-VPN:
- 关于 MVPN 基本原理,可参考RFC6513-Multicast in MPLS/BGP IP VPNs。
- 关于 BGP 传递的常用组播路由,可参考RFC6514-BGP Encodings and Procedures for Multicast in MPLS/BGP IP VPNs。
其他相关资料可参考:
- 关于MVPN场景下的Rosen方案的MDT(Multicast Distribution Tree)组播,可参考RFC6037-Cisco Systems’ Solution for Multicast in BGP/MPLS IP VPNs。
- 关于mLDP协议基本原理,可参考RFC6388-LDP Extensions for P2MP and MP2MP LSPs。
- 关于MVPN场景下的单播VPNv4/VPNv6路由,可参考RFC6515-IPv4 and IPv6 Infrastructure Addresses in BGP Updates for Multicast VPN。
- 关于BGP MCAST-VPN路由携带的mLDP FEC,可参考RFC7441-Encoding Multipoint LDP in the NLRI of BGP MCAST-VPN Routes。
- 关于MCAST-VPN使用的IR隧道的明确定义,可参考RFC7988-Ingress Replication Tunnels in Multicast VPN。
- 关于LDP提供组播实现的FEC,可参考IANA发布的Label Distribution Protocol Parameters。
- 关于BGP定义的组播路由类型,可参考IANA发布的BGP Parameters中的BGP MCAST-VPN Route Types。
- 关于BGP传递的组播隧道类型,可参考IANA发布的BGP Parameters中的P-Multicast Service Interface Tunnel (PMSI Tunnel) Tunnel Types。
- 关于BGP携带的扩展团体类型,可参考IANA发布的Border Gateway Protocol Extended Communities。
- 关于BGP地址族AFI的相关参数,可参考IANA发布的Address Family Numbers。
- 关于BGP子地址族SAFI的相关参数,可参考IANA发布的Subsequent Address Family Identifiers Parameters。
…
组播VPN还存在大量其他相关RFC,感兴趣者可查阅相关资料。
个人能力有限,有问题可私信交流。
Next Generation MCAST-VPN
1.基础介绍
1.1.组播IP
传统网络进行地址分配时,将IPv4网络分为5类:
A类:1.0.0.0 - 126.0.0.0
B类:128.0.0.0 - 191.254.0.0
C类:192.0.0.0 - 223.255.255.0
D类:224.0.0.0 - 239.255.255.255
2进制的前4个bit固定为1110:
Note:224(十进制)=1110 0000(2进制);239(十进制)=1110 1111(2进制)
E类:240.0.0.0-239.255.255.255,保留地址
其中 D 类地址称为组播 IP。虽然目前 CIDR(Classless Inter-Domain Routing,无类域间路由) 和 VLSM(Variable Length Subnet Mask,可变长子网掩码) 的出现淡化了 IP 分类,但组播 IP 范围并未发生变化。
其中组播IP又可进行如下划分:
224.0.0.0-224.0.0.255:预留永久组播地址,通常为协议所使用。
224.0.1.0-231.255.255.255 和 233.0.0.0-238.255.255.255:ASM(Any Source Multicast) 模型使用。
232.0.0.0-232.255.255.255:SSM(Source-Specific Multicast) 模型使用。
239.0.0.0-239.255.255.255:本地管理组地址,也即私网组播IP。
需要说明的是,上述仅是 IPv4 组播地址的一个大致分类。其中还包含了保留组播地址、网络间控制组播地址等。感兴趣者可查阅相关资料。
常用协议组播地址:
组播地址 使用者 224.0.0.1 所有主机及路由器监听地址 224.0.0.2 所有路由器监听地址 224.0.0.4 DVMRP协议使用 224.0.0.5
224.0.0.6OSPFv2协议使用 224.0.0.9 RIPv2协议使用 224.0.0.12 DHCP协议特定场景使用 224.0.0.13 PIM协议使用 224.0.0.14 RSVP协议特定场景使用 224.0.0.18 VRRPv2协议使用 224.0.0.22 IGMPv3协议使用 224.0.0.251 mDNS协议使用 224.0.0.252 Link-local Multicast Name Resolution协议使用 关于其他 IPv4 组播地址的使用,感兴趣者可查阅 IANA 发布的《IPv4 Multicast Address Space Registry》等相关资料。
1.2.组播MAC
通常的 MAC 地址为 48bits,6 字节。
1@:第一个字节的最后 1 个 bit = 1,表明该MAC为组播MAC,否则为单播MAC。
2@:MAC 地址的前三个字节 24bits 称为 OUI (Organizationally unique identifier,厂商标识),需要向 IEEE 购买分配。后 24bits,由厂家自行分配。
3@:组播 MAC 由于没有明确的目的主机,因此规定 组播MAC由组播IP映射 而来。
映射规则如下:
1@:IPv4 Multicast MAC 的高 24 bit = 01‑00‑5E,已分配给 IANA 规划使用。
2@:IPv4 Multicast MAC 的后 23 bit 由组播 IPv4 的后 23bit 直接映射而来。也即实际取值为 01‑00‑5E‑00‑00‑00 至 01‑00‑5E‑7F‑FF‑FF。
3@:IPv4 Multicast MAC 的第 25 位 bit 固定为0。
4@:组播 IPv4 实际上有 32 - 4 = 28bits (固定前缀 1110),因此存在 5bits 数据无法进行对应。
因此实际上每 2^5 = 32 个组播 IPv4 对应一个组播 MAC。而且由于错配的 bit 位是高 bit 位的 IP,所以通常对应同一个组播 MAC 的 32 个 IP 是不连续的。需要进行 2 进制转换。
例如:224.1.0.1、224.129.0.1、225.1.0.1、225.129.0.1、226.1.0.1、226.129.0.1、…、239.1.0.1、239.129.0.1 具有相同的组播 MAC = 01-00-5e-01-00-01。
关于 IANA 分配使用的其他 MAC 情况,可查看《IANA OUI Ethernet Numbers》等相关资料。
自动换行
IPv6 的组播 IP 和组播 MAC,情况稍有变化:
IPv6 组播 MAC 地址的高16位为 0x3333,低 32 位为 IPv6 组播地址的低 32 位。常用的 IPv6 组播地址为 ff00::/8。感兴趣者可查阅 IANA 发布的《IPv6 Multicast Address Space Registry》等相关资料。
4@:此外还有协议规定组播 MAC。
例如,某些协议组播 MAC 以 01-80-C2 开头:01-80-C2-00-00-00 用于 STP BPDU,01-80-C2-00-00-14 和 01-80-C2-00-00-15 用于集成 ISIS 等。
1.3.背景及术语
1.3.1.组播技术
相对于单播的点对点通讯,组播主要因其点对多点通讯特点而在 IPTV、视频会议、远程教育等业务中被广泛应用。组播的主要优势在于可同时跨网段传输给多个目标,按需发送不存在流量冗余,一次发送多次复制不占用额外的网络带宽,路由交换设备处理占用资源少,等。
目前常用的路由器-主机组播路由协议有 IGMP(Internet Group Management Protocol),主要用于识别和处理用户终端的组播加组和离组行为。其相关原理可参考博客-组播IGMP-原理介绍+报文分析+配置示例。
域内组播路由协议有 PIM(Protocol Independent Multicast),主要用于建立组播分发树从而引流组播流至终端用户。其相关原理可参考博客-组播PIM-原理介绍+报文分析+配置示例。
域间组播路由协议有 MSDP(Multicast Source Discovery Protocol),主要用于在跨域场景下实现组播源发现。其相关原理可参考博客-组播MSDP-原理介绍+报文分析+配置示例-RFC3618。
在 VPN 场景中,BGP/MPLS IP VPN 由于其可靠性和安全性而得到广泛应用。与之对应的组播技术称为 MVPN(Multicast Virtual Private Network)。通过 MVPN 技术可以在现有的 BGP/MPLS IP VPN 上将私网组播数据流量透过公网传递到 VPN 的远端站点。BGP/MPLS IP VPN 的相关原理可参考博客-BGP MPLS/LDP-3层虚拟专用网络原理介绍+报文分析+配置示例。其中的 MPLS/LDP 相关原理可参考MPLS/LDP原理介绍+报文分析+配置示例。
当前的 NG MVPN(Next Generation MVPN) 技术主要通过 BGP 协议传递私网组播路由,通过 MPLS P2MP 隧道封装私网组播流量,实现私网组播数据流量透过公网传递到 VPN 的远端站点。
《RFC6513-Multicast in MPLS/BGP IP VPNs 的 12.1.3.Encapsulation in MPLS》中认为当使用 P2MP MPLS LSP 或 a MP2MP LSP 来实例化 PMSI 隧道时应当禁用 Penultimate-hop-popping(PHP,倒数第二跳弹出) 行为。
1.3.2.基本概念-RFC6513
先前博客已介绍关于组播和 MPLS/LDP VPN 相关内容,此处仅说明与 MVPN 强相关的内容。
组播分发树:
Inclusive Tree:集成树。骨干网中从一个或多个 MVPN 中承载所有组播流量的单个 Multicast Distribution Tree 组播分发树。一个集成组播树应当包含所有使用该树连接到任何 一个 MVPN 的所有 PE。包含多个 MVPN 的集成组播树是一颗 Aggregate Inclusive Tree 聚合集成树。
在每棵集成树仅支持一个 MVPN 的状态下,P 设备的维护的表象上限与支持的 MVPN 数量成正比,而非 MVPN 中的组播流数量成正比。
MVPN aggregation set:当每颗集成树可支持多个 MVPN 时,称为 MVPN 聚合集。此时,P 设备的维护的表象上限与 MVPN 聚合集数量和每个 MVPN 的平均 PE 数的乘积成正比。
Selective Tree和Aggregate Selective Tree:为了避免 PE 收到不需要的组播数据而传输特定组播组数据的组播分发树称为 Selective Tree 选择树。当承担多个 MVPN 的组播流时,称为 Aggregate Selective Tree 聚合选择树。
自动换行
MVPN 模型:
组播路由信息交互:MVPN 中的 PE 节点之间的组播路由信息交互通常有两种基本方式。一种是通过 PE-PE PIM,另一种是通过 BGP。前者通常需要建立组播路由邻接,后者则通过 mLDP 和 MVPN-BGP 的 Carrier’s Carrier 模型来实现。
c-multicast signaling 用来配置 C-Multicast 路由的信令传递方式为 BGP。
MVPN的两类站点集:MVPN 有两类站点集,Sender Sites set 和 Receiver Sites set。发送者站点集的主机用于为接收者站点集的主机产生组播数据。接收者站点集的主机只能接收来自发送者站点集的组播数据。同时一个站点可以同时成为发送者站点和接收者站点。当所有站点都有这两种角色时,站点之间可相互产生和接收流量。
当 MVPN 通过 BGP 进行自动发现时,发送者站点集需要发现接收者站点集以便发送组播数据,而接收者站点集需要发现发送者站点集以便接收组播数据。发送者站点集之间或接收者站点集之间无需自动发现。
sender-enable 用来将 PE 配置成发送者 PE,默认情况下 PE 为接收者 PE。
PE-PE组播数据交互:在集成树中,PE-PE Tunnel 可以以 MPLS、IP 和 GRE 等方式来封装。组播分发树可以由单向或双向、SSM 或 ASM 的 PIM 协议来形成。点到多点的 LSP 可以由 RSVP-TE 或 mLDP 协议来创建。多点到多点的 LSP 可以由 mLDP 协议来创建。
Upstream Label Assignment:为了使多个 MVPN 汇聚在一颗组播分发树上,树的 Root 节点可以以《RFC5331-MPLS Upstream Label Assignment and Context-Specific Label Space》中定义的上游标签分配方式为每个流分配标签。
自动换行
MVPN 概念:
multicast C-instances、PIM C-instances和PIM P-instances:如果 PE 连接到多个 MVPN,则 PE 将运行多个独立的组播路由协议实例。 我们将这些组播路由实例称为“VPN-specific multicast routing instances/特定 VPN 的组播路由实例”,或者更简单地称为“multicast C-instances/组播 C-实例”。
当 PE-CE 链路使用 PIM 作为组播路由协议,multicast C-instances 也被称为 PIM C-instances。如果 PE 节点还具有与 SP 公网的 PIM 邻接关系,也称其运行了 PIM P-instances。但是,在任何情况下,PIM P-instances 实例都不会包含特定于 VPN 的组播路由信息。
C-和P-:为了区分不同组播场景下的 PIM C-instances 和 PIM P-instances,以 C- 和 P- 前缀进行区分。
例如,
P-Join和C-Join:前者表示 PIM P-instances 处理的 PIM 加入,后者表示 PIM C-instances 处理的 PIM 加入。
P-group address和C-group address:前者表示 SP 公网地址空间中的组地址,后者表示 VPN 地址空间中的组地址。
(C-S,C-G)和(C-*,C-G):前者表示 PIM C-instances 实例下的源树 C-Flows 组播流,后者表示 PIM C-instances 实例下的共享树 C-Flows 组播流。
C-tree、shared C-trees和source-specific C-trees:PIM C-instances 处理的组播分发树称为 C-tree,其中又可分为 shared C-trees 共享树和 source-specific C-trees 源树。
C-multicast routes:multicast C-instances 下的 MVPN customers’ multicast routing information。
C-RP:multicast C-instances 下的 Customer Rendezvous Point。
PMSI:Provider Multicast Service Interface 或 P-Multicast Service Interface。RFC6513/RFC7582 中明确定义,这一概念指运营商提供的允许给定 MVPN 中的 PE 组播数据流到其他 PE 的行为。P-Tunnel 用于指代实例化服务的传输机制。PMSI 由 P-Tunnel 实例化。
PMSI 用于传输 C-multicast 数据流量。C-multicast 数据沿 C-tree 传输,但在 SP 公网中,所有 C-tree 都通过 P-Tunnel 进行隧道传输。
自动换行
MI-PMSI:Multidirectional Inclusive P-Multicast Service Interface。发送者站点集 PE 的组播流将会被其他所有接收者站点集 PE 接收,其中连接到特定 MVPN 的所有发送者站点集 PE 都能够传输。每个 MVPN 最多有一个 MI-PMSI。
UI-PMSI:Unidirectional Inclusive P-Multicast Service Interface。发送者站点集 PE 的组播流将会被其他所有接收者站点集 PE 接收,其中只有连接到特定 MVPN 的特定发送者站点集 PE 能够传输。每个 MVPN 最多有一个 UI-PMSI。
S-PMSI:Selective P-Multicast Service Interface。发送者站点集 PE 的组播流将会被其他部分接收者站点集 PE 接收。
I-PMSI 通常会导致额外的组播流,而 S-PMSI 则会产生额外的控制开销。
P-Tunnel实例化PMSI:在 RFC6513 中定义了四种实例化方式,分别为 P-instance 下的 PIM、mLDP、RSVP-TE 和 Mesh of Unicast P-Tunnel。
每种方式都具有各自的局限性。其中单个 mLDP P2MP LSP 可以实例化 S-PMSI 或者 UI-PMSI。单个 mLDP MP2MP LSP 或多个 mLDP P2MP LSP 可以实例化 MI-PMSI。《RFC6513-Multicast in MPLS/BGP IP VPNs 的 12.1.3.Encapsulation in MPLS》中认为当使用 P2MP MPLS LSP 或 a MP2MP LSP 来实例化 PMSI 隧道时应当禁用 Penultimate-hop-popping (PHP,倒数第二跳弹出)行为。
自动换行
mldp 用来指定实例化 I-PMSI 方式为 mldp 隧道。
2.NG MVPN协议原理
2.1.NG MVPN协议基本原理-RFC6513/RFC6514
2.1.1.组播信息传递
A-D routes:auto-discovery routes。NG MVPN 场景下基于 BGP 的自动发现是通过新的 MCAST-VPN 地址族 (AFI 1/2 = IPv4/IPv6,SAFI 5 = MCAST-VPN) 来完成。
BGP MCAST-VPN Route Types:
Type Value Router Type Ref. 0x01 Intra-AS I-PMSI A-D route RFC6514/RFC7441 0x02 Inter-AS I-PMSI A-D route RFC6514/RFC7441 0x03 S-PMSI A-D route RFC6514/RFC7441 0x04 Leaf A-D route RFC6514/RFC7441 0x05 Source Active A-D route RFC6514/RFC7441 0x06 Shared Tree Join route RFC6514/RFC7441 0x07 Source Tree Join route RFC6514/RFC7441 0x43 S-PMSI A-D route for C-multicast mLDP RFC7441 0x44 Leaf A-D route for C-multicast mLDP RFC7441 0x47 Source Tree Join route for C-multicast mLDP RFC7441 其中 Type 1-5 为 Auto-Discovery routes 用于 BGP 的自动发现,Type 6-7 为 C-multicast routes 用于携带组播路由信息,Type 67-68 和 Type 71 为 C-multicast mLDP routes 用于 PE-CE 之间链路使用 mLDP C-multicast control protocol 时传递组播路由信息。
对于一条 Type 1 = Intra-AS I-PMSI A-D route 路由,除对应的 BGP NLRI 信息外还可以包含:RT 扩展团体属性(Type16)、PMSI Tunnel 属性(Type22)、PE Distinguisher Labels 属性(Type27)、P-tunnel identifier、MVPN 聚合能力和解封装标签。
UMH:Upstream Multicast Hop,用于确定将那个上游组播节点作为正确的 RPF 邻居,以接收 (S,G) 或 (*,G) 数据包进入 VPN 主干网的 PE 或者是 ASBR。
当 PE 收到来自 CE 的 C-Join/Prune 消息时,会将特定组播流标识为特定 (S,G) 源树或特定 (*,G) 的共享树。如果到组播源 C-S 的路由跨越 VPN 公网,则 PE 需要为 (S,G) 或 (*,G) 组播流查找 UMH。
符合 UMH 选择条件的每条 VPNv4 路由都应携带 VRF Route Import 扩展团体属性。如果使用 BGP 通告 C-multicast 路由信息,或者如果路由来自属于多个 AS 的 VRF,则必须携带该属性。VRF Route Import Extended Community 用于表示发起路由的 PE 和 UMH 路由选择。
如果使用 BGP 通告 C-multicast 路由信息,或者如果使用“Segmented inter-AS Tunnels”,则每个 UMH 路由还必须携带一个 Source AS Extended Community。Source AS Extended Community 用于 UMH 路由选择。
自动换行
此外,Intra-AS I-PMSI A-D route 或 S-PMSI A-D route 还有可能包含 BGP Path Attributes 27 = PE Distinguisher Labels。这是一组多个上游分配的 Label 和 PE 地址之间的绑定关系描述。《RFC6513-Multicast in MPLS/BGP IP VPNs的11.2. Partitioned Sets of PEs》认为当使用 mLDP P2MP LSP 传输沿特定双向 C-tree 组播流等场景时必须使用。同时《RFC6513-Multicast in MPLS/BGP IP VPNs 的 12.1.3.Encapsulation in MPLS》中认为当使用 P2MP MPLS LSP 或 a MP2MP LSP 来实例化 PMSI 隧道时应当禁用 Penultimate-hop-popping (PHP,倒数第二跳弹出)行为。《RFC6514-BGP Encodings and Procedures for Multicast in MPLS/BGP IP VPNs的PE Distinguisher Labels Attribute》认为 PE Distinguisher Labels Attribute 的 PE 地址应当与 MCAST-VPN NLRI 中的 Originating Router’s IP Address 具有相同的地址族类型。
UMH Route Candidate Set:每一跳 UMH 路由应包含 <route,Upstream PE,Upstream RD> 三元组信息,多组 <route,Upstream PE,Upstream RD> 信息称为 UMH 路由候选集。
PE 必须从 UMH Route Candidate Set 中选择一条路由作为 “Selected UMH Route(选定的 UMH 路由)”。 对应的 Upstream PE 称为 “Selected Upstream PE(选定的上游 PE)”,对应的 Upstream RD 称为 “Selected Upstream RD(选定的上游 RD)”。
default Upstream PE selection:默认的 UMH 路由选择方式为:选择上游 PE 地址数值最大的路由。
此外,《RFC6513-Multicast in MPLS/BGP IP VPNs 的 5.1.3.Selecting the Upstream PE》中认为 UMH 路由的选择还有必须支持但默认禁用的如下方式:
@:对于给定 <C-root,C-group>,将 UMH Route Candidate Set 中路由从 0 开始进行编号。编号顺序按 PE 地址从最低到最高 IP 地址进行。
@:将 C-root 和 C-group 进行 exclusive-or 异或运算,随后结果取 n。选择编号为 n 的 UMH 路由。
RFC6513 也允许使用其他哈希算法来进行 UMH 路由选择,并允许形成某种形式的负载均衡。
自动换行
umh-select highest-ip 用来选择使能MVPN VPN实例下最大IP地址做为UMH。默认择单播优选的路由做为UMH。
BSR:Bootstrap Router,启动路由器。当 PE 需要将某个 MVPN 的 BSR 消息传输给其他 PE 时,必须将自己的 IP 地址作为源 IP 地址放入 BSR 消息中。当 PE 从其他 PE 收到特定 MVPN 的 BSR 消息时,只有当该消息中的 IP 源地址是 Bootstrap 路由器 IP 地址的选定上游 PE 时,PE 才会接受该消息。
PIM BSR 原理定义于《RFC5059-Bootstrap Router Mechanism for Protocol Independent Multicast》,主要用于 PIM RP 的动态选举。
2.1.2.组播流与P-Tunnels
C-Multicast组播流解封装:当使用 MPLS 进行隧道封装时,隧道封装/解封装由与特定 MVPN 对应的 Label 来识别。 为了使每个出口 PE(这里应当包含公网上的 P 设备等转发设备) 都必须能够将此 MPLS Label与同一 MVPN 相关联,往往使用上游分配方式。Label binding 过程由入口 PE 以 BGP 方式通告时发起。
其中外层 Label 应当包含 P-tree 信息,而内层 Label 应当包含确定正确 MVPN 的封装/解封装信息。
C-Flows组播流与特定P-Tunnels的绑定:
- C-Flows 组播流进入到特定 P-Tunnels 或从特定 P-Tunnels 切换到其他特定 P-Tunnels 的动作,总是由发送者 PE 来决定完成。
- C-Flows 组播流与特定 P-Tunnels 进行绑定时,必须发出所需的控制平面信息。
- P-Tunnels 切换到其他特定 P-Tunnels 时,一个发送者 PE 仅能在其中一个特定 P-Tunnels 中传输 C-Flows 组播流。
- P-Tunnels 切换到其他特定 P-Tunnels 时,发送者 PE 必须等待“切换”延迟,然后才能在 P-Tunnels 上发送 C-Flows 组播流。建议允许此延迟是可配置的。
接收者PE从P-Tunnels接收C-Flows组播流:
- 如果 P-Tunnels 是 mLDP LSP,则 PE 需要使用 mLDP 加入 P-Tunnels (除非它已经加入)。
- 如果接收者 PE 之前在另一个 P-Tunnels 上接收 C-Flows,则可以运行切换计时器,并且在该计时器过期之前,应接受在两条 P-Tunnels 上的给定 C-Flows 流量。随后在计时器结束后拆除旧隧道的资源。
- 如果接收者 PE 确定不再需要接收在任何 C-Flows,则可能会启动信令以将自身从特定 P-Tunnels 中删除。
multicast wtr 用来配置私网组播快速重路由回切等待时间,默认600s。该命令主要在双发送者 PE 的 mLDP P2MP 隧道双根 1+1 场景下使用。当主隧道故障恢复后,叶子节点/接收者 PE 会在该等待时间后接收来自主隧道的业务流。
S-PMSI 优化组播分发树:
I-PMSI 建立的组播树往往无论是否存在下游接收者 PE 都会转发相应的 C-Flows,如果特定 C-Flows 流量较大则可以将其切换至 S-PMSI 建立的组播树。在《RFC6513-Multicast in MPLS/BGP IP VPNs的7.2.Optimizing Multicast Distribution via S-PMSIs》中给出了一种 I-PMSI 向 S-PMSI 切换的示例:如果接口带宽与无需接收组播流的接收者 PE 个数的乘积大于某个阈值则发生切换。
group X.X.X.X source X.X.X.X threshold 用于指定 I-PMSI 向 S-PMSI 切换的带宽数值,并指定建立 S-PMSI 隧道的方式为 mldp。
如果 C-Flows 转发速率高于 threshold-value,则由 I-PMSI 开始向 S-PMSI 切换。延迟时间取决于 switch-delay(默认5s)。由于存在必要的流量计算和协议处理过程,实际切换时间将比切换延时计时器长。
如果 C-Flows 转发速率低于threshold-value,则由 S-PMSI 开始向 I-PMSI 切换。延迟时间取决于 holddown-time(默认60s)。
自动换行
此外,当 S-PMSI 向 I-PMSI 回切时,S-PMSI 隧道存在 tunnel-withdraw-delay 撤销延迟。在该定时器触发前,如果组播数据又要从 I-PMSI 切换到 S-PMSI,将直接切换到 S-PMSI 隧道。否则定时器触发后,撤销 S-PMSI 隧道。
tunnel-withdraw-delay 命令用来配置 VPN 实例由 S-PMSI 切换回 I-PMSI 时,S-PMSI 隧道撤销的延迟时间,默认 5s。
UDP报文的P-tunnel绑定与保活:
在《RFC6513-Multicast in MPLS/BGP IP VPNs的7.4.2.UDP-Based Protocol》中这样描述,可以通过一种在 MI-PMSI 上周期发送的 S-PMSI Join message UDP 报文将 C-Flows 绑定到 P-Tunnel 中。其中 UDP 报文的目的地址为 ALL-PIM-ROUTERS = 224.0.0.13,目的端口为 3232。
2.1.3.MVPN的跨域和单向C-tree防环
MVPN的跨域类型:
Non-segmented Inter-AS P-tunnels:
此种模型下的 P-tunnels 隧道是一个跨越 AS 边界的单个 P-tunnels。隧道上的每个节点都必须使用相同的技术。从本质上讲,ASBR 对于非分段的 AS 间 P-tunnels 没有意义。
《RFC6513-Multicast in MPLS/BGP IP VPNs的8.1.Non-Segmented Inter-AS P-Tunnels》认为如果使用此种方式建立隧道,在 BGP 进行信令自动发现时要求 Intra-AS I-PMSI A-D 必须能够跨越 AS 传递。
当 PE 由于收到了特定的 Type 1 = Intra-AS I-PMSI A-D route 或者 Type 3 = S-PMSI A-D route 而产生 PIM Join/Prune 消息以设置 inter-AS PMSI 时,有可能产生《RFC5384-PIM Join Attribute Format》中定义的 OptionType 26 = Join Attribute Hello Option 用于携带新定义的 MVPN Join attribute。
auto-discovery inter-as 用于使能跨 AS 域的自动发现功能。配置该命令后,发送给 eBGP 邻居的 Type 1 = Intra-AS I-PMSI A-D route 和 Type 3 = S-PMSI A-D route 将不再携带 No-Export 属性,从而使路由可以被发送到跨 AS 域的设备上进行自动发现。该命令会受到 peer advertise-community 命令影响。
自动换行
Non-segmented Inter-AS P-tunnels 隧道上的每个节点都必须使用相同的技术。当使用 BGP 在 OptionB 方案下传递组播信息时,对 C-multicast routes 的处理与在相应情况下处理单播 VPN 路由完全相同。
Segmented inter-AS P-tunnels 方式的 MVPN:
此种模型下的 P-tunnels 隧道由交替的多个 inter-AS segments 和 intra-AS segments 组成。
inter-AS segments 用于连接不同 AS 的相邻 ASBR。这种单跳的 segments 是一个单播的 P-tunnels。
Intra-AS segments 用于连接同一 AS 内的 ASBR 和 PE。Segmented inter-AS P-tunnel 可被视为特定 AS 树的根,并且其叶子包含需要从根 AS 接收组播数据的其他 AS。
在同一个 AS 内,往往由于某种原因而将 intra-AS P-tunnels 进行 Segment 分段。例如通过一个 AS 内运行了不同的 IGP 协议建立了非同一性质的 P-tunnels(RSVP-TE P2MP 和 mLDP P2MP 的分段隧道)。
自动换行inter-area-segmented enable 用于在发送端 PE 支持分段隧道MVPN。
multicast mvpn inter-area-segmented enable 用于在 P 节点或者分段隧道的连接节点使能对域内跨Area分段隧道的支持。
自动换行
当特定C-Flows在多个S-PMSI中传输,且同一个站点的C-S的多归到多个 PE 时可能会收到多份组播流。具体而言有如下两种情况时可能会导致重复的组播流:
1@:包含 C-S/C-RP 的 MVPN 站点多归到多个 PE,并且单个 I-PMSI 或单个聚合 S-PMSI 用于传输由 C-S 发起的 C-Flows。
2@:客户请求的 C-G 标识在 ASM 模式下运行,其 C-tree 使用 PIM-SM 建立的组播树同时使用 MI-PMSI 传输 C-Flows。当接收者 PE 的路由器从 C-RP 树切换到 C-S 树。此时可能从发送者 PE 的 C-RP 树和 C-S 树都接收到组播流。
当MVPN的有重复组播流时通常有三种应对策略:
1@丢弃 “错误” PE 的组播流:接收者 PE 可以通过特定 PMSI 与特定发送者 PE 之间的关系来确认自己的上游 PE 节点。例如,通过 P2MP LSP来建立一个 non-segmented inter-AS tunnel 支持指定的 intra-AS PMSI 或者 inter-AS PMSI,就可用于确定入口 PE 的信息。
即使使用 AS 间分段 P-tunnels,如果使用聚合 S-PMSI 来传输数据包,则隧道封装必须包含一些可用于识别 PMSI 的信息;反过来,这会隐式识别入口 PE。
2@唯一转发者选举:可以使用先前介绍的类似 “default Upstream PE selection” 过程来唯一的选择自己的上游 PE。这一过程可以由发送者 PE 来完成来选举自己的唯一 CE,从而防止公网传输重复的组播流。
3@Native PIM 模型:如果在 MI-PMSI 上通过 PIM 来传播给定 MVPN 的 PE-PE 组播路由信息,则可以通过 PIM 协议的 Assert 断言机制等方式来防环。
ASM Group 下 C-RP 树和 C-S 树切换造成的重复组播包场景:
在《RFC6513-Multicast in MPLS/BGP IP VPNs的9.3.Switching from the C-RP Tree to the C-S Tree》中给出了这一场景示例。
1@:BGP 传递组播路由器信息,且 ISP 上建立 I-PMSI 型 P-tunnel。
2@:当 C-R1 和 C-R2 站点在 PIM SM 模型下发起 PIM Join (*,G) 消息时,PE3 和 PE4 将发送 BGP MVPN Type 6 = Shared Tree Join Routes。此时 PE1 将被识别为 PE3 和 PE4 两个站点的上游 PE,同时 PE3 和 PE4 两个站点建立 C-RP 树。
3@:随后,C-S 发送 (C-S,C-G) 的 C-Flows 而触发 CE5 发起 PIM Register 消息时,通过 I-PMSI 以 VPNv4 单播方式发送给 PE1。PE1 站点的 C-RP 在识别到 C-S 的存在而开始转发 C-Flows 给 PE3 和 PE4 两个站点的 C-R1 和 C-R2。
4@:此时还未发生问题,但假如 PE3 站点的 C-R1 接收到该 C-Flows 时有可能转而希望加入该 C-Flows 的 C-S 树而发起 PIM Join (S,G) 消息。此时 PE3 站点将发送 BGP MVPN Type 7 = Source Tree Join Routes,并将 PE2 识别为自己的上游 PE。
此时建立的 C-S 树将导致 PE2 在 I-PMSI 上发送 C-Flows 给 PE3。然而 PE1 站点的 C-RP 仍在持续将 C-Flows 在 I-PMSI 上发送给 PE3/PE4 站点,最终导致 PE3 站点接收到重复的组播流。
唯一转发者选举机制无法生效,因为该机制无法阻止 C-RP 树和 C-S 树上 C-Flows 的转发。
Type 5 = Source Active A-D route阻止重复组播流:
如果具有 (C-*,C-G) 状态的 PE 接收到 Type 5 = Source Active A-D route 时,将 PMSI 上的下游接口视为被剪枝状态不向其转发流量。如果 PE 的 (C-*,C-G) 状态没有 PMSI 作为下游接口,则可以接收来自产生 Type 5 = Source Active A-D route 发送者 PE 的组播流。
在上图场景下,PE2 将产生 Type 5 = Source Active A-D route。
PE4 接收到该路由后将自己的 (C-*,C-G) 状态向 (C-S,C-G) 状态转变,期望接收来自 PE2 的组播流。
PE1 接收到该路由后不将 C-Flows 转发给其他站点的 PE,但该站点的 C-RP 有可能会转发 C-Flows 给自己站点的其他接收者。
Co-Locating C-RPs的处理:
在《RFC4834-Requirements for Multicast in Layer 3 PPVPNs》中提到当 C-S 在 PIM-SM 模型下发出 ASM(Any-Source Multicast,任意组播源) C-G 流量时,如果 C-S 和接收者位于与 C-RP 不同的 VPN 站点中可能导致不必要的流量开销。
在《RFC6513-Multicast in MPLS/BGP IP VPNs 的 10.1.Co-Locating C-RPs on a PE》中提到的 Anycast RP 任播 RP 有望解决该问题。
2.2.BGP MCAST-VPN Route-RFC6514/RFC7441
在《RFC6514-BGP Encodings and Procedures for Multicast in MPLS/BGP IP VPNs》中主要定义了使用 BGP 来传递组播路由信息的基本原理。其中定义的 MCAST-VPN NLRI 可用于 MVPN 的自动发现、MVPN 的 I-PMSI 绑定、MVPN 的 S-PMSI 绑定、在 PE 间通告来自 CE 的组播路由消息、选择唯一转发 PE、以及共存 C-RP 的处理等。
其中定义的 AFI 1/2 = IPv4/IPv6,SAFI 5 = MCAST-VPN 用于携带 BGP MCAST-VPN NLRI;<AFI 1/2 = IPv4/IPv6,SAFI 129 = Multicast for BGP/MPLS IP VPN NLRI> 用于携带组播路由信息。
这种方式也称为 Next Generation MCAST-VPN 下一代组播 VPN 技术。
2.2.1.BGP MVPN NLRI
在《RFC4760-Multiprotocol Extensions for BGP-4》中主要定义了一种新的 BGP Path Attributes Type 14 = Multiprotocol Reachable NLRI。
当 AFI 1/2 = IPv4/IPv6,SAFI 5 = MCAST-VPN,此时可用于携带 BGP MCAST-VPN NLRI。
在《RFC6514-BGP Encodings and Procedures for Multicast in MPLS/BGP IP VPNs》中主要定义了 BGP MCAST-VPN NLRI 的封装格式。
其中定义了 7 种类型的 BGP MCAST-VPN NLRI。
在《RFC7441-mLDP FECs in the NLRI of BGP MCAST-VPN Routes》中又补充定义 3 种类型的 BGP MCAST-VPN NLRI。
BGP MCAST-VPN Route Types:
Type Value Router Type Ref. 0x01 Intra-AS I-PMSI A-D route RFC6514/RFC7441 0x02 Inter-AS I-PMSI A-D route RFC6514/RFC7441 0x03 S-PMSI A-D route RFC6514/RFC7441 0x04 Leaf A-D route RFC6514/RFC7441 0x05 Source Active A-D route RFC6514/RFC7441 0x06 Shared Tree Join route RFC6514/RFC7441 0x07 Source Tree Join route RFC6514/RFC7441 0x43 S-PMSI A-D route for C-multicast mLDP RFC7441 0x44 Leaf A-D route for C-multicast mLDP RFC7441 0x47 Source Tree Join route for C-multicast mLDP RFC7441 其中 Type 1-5 为 Auto-Discovery routes 用于 BGP 的自动发现,Type 6-7 为 C-multicast routes 用于携带组播路由信息,Type 67-68 和 Type 71 为 C-multicast mLDP routes 用于 PE-CE 之间链路使用 mLDP C-multicast control protocol 时传递组播路由信息。
对于一条 Type 1 = Intra-AS I-PMSI A-D route 路由,除对应的 BGP NLRI 信息外还可以包含:RT 扩展团体属性(Type16)、PMSI Tunnel 属性(Type22)、PE Distinguisher Labels 属性(Type27)、P-tunnel identifier、MVPN 聚合能力和解封装标签。此处仅介绍常用 BGP MCAST-VPN Route。
Type 1 = Intra-AS I-PMSI A-D route:
仅包含 MVPN 的 Route-Distinguisher 和 PE 地址。
Type 1 = Intra-AS I-PMSI A-D route NLRI 示例。
Type 2 = Inter-AS I-PMSI A-D route:
仅包含 MVPN 的 Route-Distinguisher 和 PE 所处的 AS Number。
Type 3 = S-PMSI A-D route:
包含 MVPN 的 Route-Distinguisher、(C-S,C-G) 和 PE 地址。
Type 3 = S-PMSI A-D route NLRI 示例。
Type 4 = Leaf A-D route:
仅包含 MVPN 的 Leaf Information 和 PE 地址。
Type 4 = Leaf A-D route 路由的 Route Key 字段通常可设置为 Type 2 = Inter-AS I-PMSI A-D route 路由的 MCAST-VPN NLRI,并且 Originating Router’s IP address 字段设置为可路由 ASBR 的 IP 地址。
详情可参考跨域场景下,MVPN的发现和建立。
Type 5 = Source Active A-D route:
包含 MVPN 的 Route-Distinguisher 和 (C-S,C-G)。
Type 5 = Source Active A-D route NLRI 示例。
Type 6 = Shared Tree Join route 和 Type 7 = Source Tree Join route:
两种 C-Multicast Routes 都具有相同的格式,包含 MVPN 的 Route-Distinguisher、AS-Number 和 (C-S,C-G)。
Type 6 = Shared Tree Join route NLRI 示例。另一种 C-Multicast Route 不在进行介绍。
对于 Type 6 = Shared Tree Join route,其 Multicast Source 字段应当以 C-RP address 进行填充。
自动换行
C-Multicast Route 用于确定接收者 PE 以何种方式加入到 C-tree 中。
rpt-spt mode 用来配置跨越公网方式建立 PIM SM 共享树。此时发送者 PE 向接收者 PE 发送 Type 6 = Shared Tree Join route 期望建立共享树。也即接收者 PE 需跨越公网与 C-RP 建立交互关系。
2.2.2.BGP MVPN Path Attribute
MVPN 使用 BGP 进行信令控制时,还需额外携带对应的 BGP 属性信息。
1@BGP Path Attribute Type 22 = PMSI Tunnel Attribute:
1@Flags:1 字节,用于表示特定的需求。
Flags 字段的第一个 0 bit 未指定,其余 bit 依次为:
E-bit:Extension bit,定义于《RFC7902-LDP Extensions for P2MP and MP2MP LSPs》主要用于未来扩展使用。当置位时,表示可以携带更长的 Additional PMSI Tunnel Attribute Flags Extended Community。这种扩展团体属性长 6 字节,并仅能携带一个。
LIR-pF-bit:Leaf Information Required per-Flow bit,定义于《RFC8534-Explicit Tracking with Wildcard Routes in Multicast VPN》仅在特定路由的特定隧道类型种携带。当置位时,可用于显式跟踪。
T-bits:Assisted Replication Type bits,定义于《RFC9574-Optimized Ingress Replication Solution for EVPN》有 2 bits 长。用于表示通告路由器的 Assisted Replication 角色。
BM-bit::Broadcast and Multicast bit,定义于《RFC9574-Optimized Ingress Replication Solution for EVPN》是 Pruned Flooding Lists (PFLs) flags 之一。当置位时,表示需要将节点从 BM flooding list 中剪枝。
U-bit::Unknown bit,定义于《RFC9574-Optimized Ingress Replication Solution for EVPN》是 Pruned Flooding Lists (PFLs) flags 之一。当置位时,表示需要将节点从 Unknown flooding list 中剪枝。
L-bit::Leaf Information Required bit,定义于《RFC6514-BGP Encodings and Procedures for MVPNs》表示需要隧道节点信息等场景。例如,当 PE 接收到 L-bit 置位的 Type 2 = Inter-AS I-PMSI A-D route 或 Type 3 = S-PMSI A-D route 时,将产生 Type 4 = Leaf A-D Route。
2@Tunnel Type:1 字节,用于表示建立 PMSI tunnel 的类型。
目前 IANA 定义了近 20 种建立 PMSI tunnel 的方式。
自动换行
Tunnel Type 0 = no tunnel information present:此类型仅在为特定 C-Flows 流启用显式跟踪时使用,但不包含隧道信息。
Tunnel Type 2 = mLDP P2MP LSP:表示通过《RFC6388-LDP Extensions for P2MP and MP2MP LSPs》中定义的方式来建立 PMSI tunnel。
Tunnel Type 6 = Ingress Replication:使用此类型建立 PMSI tunnel 时,Tunnel Identifier 字段应携带本地 PE 的单播隧道接收端点 IP 地址。一个使用场景是 EVPN VXLAN 环境,该场景原理可参考《博客-VXLAN-原理介绍+报文分析+配置实例-RFC7348/RFC8365》。
3@MPLS Label:3 字节,用于携带与隧道关联的封装/解封装信息。该字段为 0 时表示缺少 MPLS Label。
4@Tunnel Identifier:可变长,用于携带具体的隧道属性信息。
Tunnel Type 2 = mLDP P2MP LSP 来建立 PMSI tunnel 示例,此时携带《RFC6388-LDP Extensions for P2MP and MP2MP LSPs》中定义的 mLDP FEC。
当设备收到未知类型的 Tunnel Type 或无法解析对应的 PMSI Tunnel Attribute 时,视为此 BGP Update 消息中包含的所有路由都已被撤销。并且该属性通常和 Type 1 = Intra-AS I-PMSI A-D route、Type 2 = Inter-AS I-PMSI A-D route、Type 3 = S-PMSI A-D route 和 Type 4 = Leaf A-D route一起出现。
自动换行
2@BGP Path Attribute Type 16 = Extended Communities 携带的 Source AS Extended Community 和 VRF Route Import Extended Community:
在《RFC4360-BGP Extended Communities Attribute》中定义了 BGP Path Attribute Type 16 = Extended Community,其应具有如下格式:
其中 Type 字段分为 Type high 和 Type low:
Type high:1字节,主要用于描述 Extended Community 是 Regular 类型还是 Extended 类型。RFC4360中将这一字节的高位bit进行了定义,I-bit (IANA-bit 用于描述是否支持 First Come First Serve) 和 T-bit (Transitive-bit 用于描述是否支持在AS内传递。)。
high-order octet of the Type Field。
自动换行
例如在 RFC7153 中有区分:
0x00 为 Transitive Two-Octet AS-Specific Extended Community;
0x01 为 Transitive IPv4-Address-Specific Extended Community;
0x02 为 Transitive Four-Octet AS-Specific Extended Community;
0x03 为 Transitive Opaque Extended Community;
0x06 为 EVPN Extended Community;
等等 Type high 不在进行介绍,感兴趣者可自行查阅资料。
自动换行
《RFC4360-BGP Extended Communities Attribute》中定义的 Two-Octet AS Specific Extended Community 格式为:
Global Administrator:2 字节,填充以 AS number。
Local Administrator:4 字节,由 community 的 sub-type 定义。
自动换行
《RFC4360-BGP Extended Communities Attribute》中定义的 IPv4 Address Specific Extended Community 格式为:
Global Administrator:4 字节,填充以网络指定的 IPv4 地址。
Local Administrator:2 字节,由 community 的 sub-type 定义。
Type low:1字节,主要用于描述每种 Extended Community 的具体类型。
自动换行
《RFC6514-BGP Encodings and Procedures for Multicast in MPLS/BGP IP VPNs》以及《RFC6515-IPv4 and IPv6 Infrastructure Addresses in BGP Updates for Multicast VPN》中定义:
Type = 0x0009 为 Source AS two-octet AS-Specific Extended Community;
Type = 0x0209 为 Source AS four-octet AS-Specific Extended Community;
Type = 0x000b 为 VRF Route Import Transitive IPv6-Address-Specific Extended Community (IPv6 有独特要求);
Type = 0x010b 为 VRF Route Import Transitive IPv4-Address-Specific Extended Community。
《RFC5701-IPv6 Address Specific BGP Extended Community Attribute》中新定义了 BGP Path Attribute Type 26 = IPv6 Address Specific Extended Community,用于纯 IPv6 环境下携带 IPv6-Address-Specific Extended Community Types。IPv6 Address Specific extended community 具有 20 字节的长度,前 2 个字节用于标识具体类型。因此 Type high 字段有可能与 IPv4 网络相同。
自动换行Source AS Extended Community 和 VRF Route Import Extended Community 示例。
自动换行
Source AS Extended Community 的 Global Administrator 字段必须设置为 PE 的 AS Number,Local Administrator 字段设置为 0。有 MVPN 站点的 PE 产生与 MVPN 内的目标关联的 VPN 单播路由时,必须携带该扩展团体属性。
VRF Route Import Extended Community 的 Global Administrator 字段必须设置为 PE 的 IP 地址,Local Administrator 字段用于唯一标识包含 PE 的 VRF。Local Administrator 字段的分配是一个本地行为。根据《RFC6513-Multicast in MPLS/BGP IP VPNs 的 5.1.2.Information Carried by Eligible UMH Routes》中的要求,不携带 VRF Route Import Extended Community 的路由无法被选择为可用的 UMH。
自动换行
3@BGP Path Attribute Type 27 = PE Distinguisher Labels Attribute:
这是一组多个上游分配的 Label 和 PE 地址之间的绑定关系描述。《RFC6513-Multicast in MPLS/BGP IP VPNs的11.2. Partitioned Sets of PEs》认为当使用 mLDP P2MP LSP 传输沿特定双向 C-tree 组播流等场景时必须使用。同时《RFC6513-Multicast in MPLS/BGP IP VPNs 的 12.1.3.Encapsulation in MPLS》中认为当使用 P2MP MPLS LSP 或 a MP2MP LSP 来实例化 PMSI 隧道时应当禁用 Penultimate-hop-popping (PHP,倒数第二跳弹出)行为。
《RFC6514-BGP Encodings and Procedures for Multicast in MPLS/BGP IP VPNs的PE Distinguisher Labels Attribute》认为 PE Distinguisher Labels Attribute 的 PE 地址应当与 MCAST-VPN NLRI 中的 Originating Router’s IP Address 具有相同的地址族类型。
2.3.BGP MCAST的控制面交互-RFC6514
2.3.1.单域场景下MVPN的自动发现和隧道建立
intra-AS mechanisms 适用于单域场景下 MVPN 的自动发现和隧道建立,以及 Option A 跨域 non-segmented inter-AS tunnels MVPN 的自动发现和隧道建立。
1@单个 AS 域场景下 Type 1 = Intra-AS I-PMSI A-D Routes 的产生:
1@:所有参与 MVPN auto-discovery/binding 的路由器都必须产生 Type 1 = Intra-AS I-PMSI A-D Routes。
2@:该路由的应将
- RD 应填充为 VRF RD。
- Originating Router’s IP Address 应填充为 VRF Route Import Extended Community 的 Global Administrator 字段。<VRF RD,Originating Router’s IP Address> 用于唯一标识一个给定的组播 VRF。
3@:当该路由携带 BGP Path Attribute Type 22 = PMSI Tunnel Attribute 时,
- 如果 PE 使用 P-tree 为 MVPN 建立 P-tunnel,则 BGP Path Attribute Type 22 = PMSI Tunnel Attribute 必须包含 P-tree 的标识。
- 如果 PE 将多个 MVPN 聚合到上述介绍的 P-tree 上时,BGP Path Attribute Type 22 = PMSI Tunnel Attribute 应额外携带 MPLS 上游分配的标签。该标签由 PE 唯一绑定到与该路由关联的 MVPN。
- 如果 PE 使用入口复制,BGP Path Attribute Type 22 = PMSI Tunnel Attribute 除将 Tunnel Type 设置为 6 标识 Ingress Replication 外,还应额外携带下游分配的 MPLS 标签。此标签用于对 PE 通过单播隧道接收的 MVPN 流量进行多路复用。
- 必须将携带的 L-bit(Leaf Information Required) 设置为 0,并在收到时忽略该字段。
4@:MP_REACH_NLRI attribute 的 Next Hop 字段必须与 Originating Router’s IP Address 字段相同。
自动换行
2@单个 AS 域场景下 Type 1 = Intra-AS I-PMSI A-D Routes 的接收:
1@:如果有效且最优 Type 1 = Intra-AS I-PMSI A-D Routes 路由不携带 BGP Path Attribute Type 22 = PMSI Tunnel attribute 且未使用 Tunnel Type 6 = ingress replication 隧道类型,则发起路由的 PE 将仅使用 S-PMSI 将流量发送到远端 PE。
如果先验地知道给定单播 VPN 路由的 NLRI 中承载的地址都不能充当 C-S 或 C-RP,则此类路由可以不携带 VRF Route Import Extended Community。根据《RFC6513-Multicast in MPLS/BGP IP VPNs 的 5.1.2.Information Carried by Eligible UMH Routes》中的定义,不携带 VRF Route Import Extended Community 的路由无法被选择为可用的 UMH。
因此上述行为是指对于接收者 PE 来说,如果已选定产生特定单播 VPN 路由的发送者 PE 作为 UMH,并且该 PE 也发起了 Type 1 = Intra-AS I-PMSI A-D 路由,但此路由不携带 BGP Path Attribute Type 22 = PMSI Tunnel attribute,则此发送者 PE 将仅使用 S-PMSI 发送组播数据。
2@:如果有效且最优 Type 1 = Intra-AS I-PMSI A-D Routes 路由携带 BGP Path Attribute Type 22 = PMSI Tunnel attribute,则
- 如果其同时使用了 Tunnel Type 6 = ingress replication 隧道类型,则转发 C-Flows 时应当使用 Tunnel Identifier 字段中的 MPLS 标签。
- 如果其同时使用 Tunnel Type 2 = mLDP P2MP LSP 隧道类型,则接收 PE 应尽快加入 Tunnel Identifier 标识的 P-tree。
- 如果其同时不携带 Label,则 PE 接收到 P-tree 的 C-Flows 在相匹配的 VRF 内进行转发。
- 如果其同时携带 Label,则该标签应为上游指定标签。同时 PE 接收到 P-tree 的 C-Flows 在相匹配的 VRF 内进行转发且以该标签为标识。
详细的处理原则,请查阅相关资料。
2.3.2.跨域场景下MVPN的自动发现和隧道建立
跨域场景下,ASBR 当使用 segmented inter-AS tunnels 时:
- 必须配置 ASBR Import RT 用于控制 Type 4 = Leaf A-D route 和 C-multicast routes(Type 6 = Shared Tree Join route 和 Type 7 = Source Tree Join route) 的处理。
ASBR 传递的 ASBR Import RT 是一个 IP-Address-Specific Route Target Extended Community。
Global Administrator 字段:必须设置为本 AS 通告 Type 2 = Inter-AS I-PMSI A-D routes 和 Type 3 = S-PMSI A-D routes 中 Next Hop 字段的值。如果有不同下一跳,则必须携带多个 ASBR Import RT Extended Community 以包含不同下一跳。
Local Administrator 字段:必须设置为 0。
按此定义,ASBR Import RT 如果是 transitive IPv4-Address-Specific Extended Community,则该 Extended Community Type value 应为 0x0102。
- 必须配置 ASBR 支持的 intra-AS segments 类型。同时也允许 ASBR 从接收的 Intra-AS I-PMSI A-D 路由派生隧道类型。
- 如果 ASBR 本身也承担接收者 PE 的作用,则 ASBR 也必须参与自己 AS 内部的 MVPN 自动发现和绑定。
此处仅介绍跨域场景 segmented inter-AS tunnels 的建立,non-segmented inter-AS tunnels 也可适用 intra-AS mechanisms。
自动换行
1@多个 AS 域场景下 Type 2 = Inter-AS I-PMSI A-D route 的产生:
1@:当 ASBR 确定本 AS 内至少存在一个 PE 具有 MVPN 的直连站点时,ASBR 将产生 Type 2 = Inter-AS I-PMSI A-D route。其中该路由
- RD 字段设置为 ASBR 的本地 MVPN RD。
- Source AS 字段设置为 ASBR 的 AS Number。
2@:该路由 MP_REACH_NLRI 属性的 Next Hop 字段设置为 ASBR 的可路由 IP 地址。
3@:当且仅当 MVPN 使用 I-PMSI 隧道时,Type 2 = Inter-AS I-PMSI A-D route 路由会携带 BGP Path Attribute Type 22 = PMSI Tunnel attribute 属性。
同时 Tunnel Type 6 = Ingress Replication,L-bit(Leaf Information Required bit) 设置为 1,不携带 MPLS 标签。
4@:如果需要将 Type 1 = Intra-AS I-PMSI A-D route 聚合到 Type 2 = Inter-AS I-PMSI A-D route 中,默认聚合策略为仅聚合具有完全相同 RT 的路由。设备必须支持该默认聚合策略。
如果对于给定的 MVPN 和给定的 AS 且 AS 内所有站点都没有组播源,则该 AS 的 ASBR 可以避免为该 MVPN 发起 Type 2 = Inter-AS I-PMSI A-D route 路由。
自动换行
2@多个 AS 域场景下 Type 2 = Inter-AS I-PMSI A-D route 的 eBGP 接收,同时还伴随 Type 4 = Leaf A-D route 的 eBGP 产生和接收:
Inter-AS tree:每个接口者站点 AS 都将记录自己到具有 C-S 的起源 AS1 的 Reverse Path。该 Reverse Path 由一系列 ASBR 组成,每个 ASBR 具有 <本AS,中间AS,…,中间AS,C-S AS> 结构。该 Reverse Path 最终形成了跨 AS 的 multicast distribution Inter-AS tree,C-Flows 将沿着 Inter-AS tree 进行转发。
此时,每个 AS 传递 Type 2 = Inter-AS I-PMSI A-D route 的 BGP Next Hop 成为该 AS 在以 AS1 为根的 multicast distribution Inter-AS tree 上的 upstream multicast hop。
1@:如果有效且最优 Type 2 = Inter-AS I-PMSI A-D route 路由携带 BGP Path Attribute Type 22 = PMSI Tunnel attribute,则将该路由重新通告给其他邻居时必须将 Next Hop 设置为可路由的地址。
2@:如果有效且最优 Type 2 = Inter-AS I-PMSI A-D route 路由携带 BGP Path Attribute Type 22 = PMSI Tunnel attribute,则将该路由重新通告给其他邻居时也必须包含该属性同时重构该属性。
- 如果 inter-AS tunnel 的 intra-AS segment 使用 Tunnel Type 6 = ingress replication 隧道类型,则重新通告时必须取 Tunnel Type 6 = ingress replication 隧道类型,不携带 Label。
- 如果 inter-AS tunnel 的 intra-AS segment 使用 P-tree 传递 MVPN 信息,则重新通告时必须包含树的标识。ASBR 在实例化树时,可以将 BGP Path Attribute Type 22 = PMSI Tunnel attribute 的 L-bit(Leaf Information Required bit) 置位。此时,该 ASBR 可以从本 AS 内其他 PE/ASBR 发送的 Type 4 = Leaf A-D route 中获取叶子节点信息。
- 如果 inter-AS tunnel 的 intra-AS segment 使用 P-tree 传递两个或多个 MVPN 聚合信息时,则重新通告时还应携带一个上游分配的 Label。该Label 由 PE 唯一绑定到与该路由关联的 MVPN。
3@:ASBR 必须向接收 Type 2 = Inter-AS I-PMSI A-D route 的 eBGP 邻居发送 Type 4 = Leaf A-D route。该 Type 4 = Leaf A-D route 路由的
- Route Key 字段设置为 Type 2 = Inter-AS I-PMSI A-D route 路由的 MCAST-VPN NLRI。
- Originating Router’s IP address 字段设置为可路由 ASBR 的 IP 地址。
- 必须包含 BGP Path Attribute Type 22 = PMSI Tunnel attribute,其 Tunnel Type 6 = Ingress Replication,Tunnel Identifier = 通告路由器的可路由 IP 地址。并且还应包含下游分配的 Label。下游 PE 通过该 Label 解封装从 eBGP 邻居单播隧道发送来的 MVPN 流量。
- Next Hop 字段必须与 Originating Router’s IP Address 字段相同。
- 为了控制路由的分发范围,Type 4 = Leaf A-D route 必须携带 NO_ADVERTISE BGP Community(由 BGP Path Attribute Type 8 = COMMUNITIES 携带)。
《RFC1997-BGP Communities Attribute》中定义了值为 0xFFFFFF02 的 NO_ADVERTISE Well-known Communities。所有携带该 Communities 的路由不得传递给其他 BGP peer。
自动换行auto-discovery inter-as 用于使能跨 AS 域的自动发现功能。配置该命令后,发送给 eBGP 邻居的 Type 1 = Intra-AS I-PMSI A-D route 和 Type 3 = S-PMSI A-D route 将不再携带 No-Export 属性,从而使路由可以被发送到跨 AS 域的设备上进行自动发现。该命令会受到 peer advertise-community 命令影响。
4@:ASBR 必须从 eBGP 邻居接收的 Type 4 = Leaf A-D route 的 Route Key 字段应当与从该邻居接收 Type 2 = Inter-AS I-PMSI A-D route 的 MCAST-VPN NLRI 字段一致。且路由应当满足对应的 import RT 要求。
5@:当 ASBR 从下游 eBGP 邻居接收到 ASBR 自己产生的 Type 2 = Inter-AS I-PMSI A-D route,则 ASBR 向下游 eBGP 邻居 (one-hop ASBR-ASBR LSP) 转发自己 AS 内部隧道 (由 Type 1 = Intra-AS I-PMSI A-D routes 定义) 而来的组播流时将使用与之对应 Type 4 = Leaf A-D route 中 BGP Path Attribute Type 22 = PMSI Tunnel attribute 携带的 Label 进行转发。
6@:当 ASBR 从下游 eBGP 邻居接收到其他 ASBR 发送的 Type 2 = Inter-AS I-PMSI A-D route,则 ASBR 向下游 eBGP 邻居 (one-hop ASBR-ASBR LSP) 转发自己 AS 内部隧道 (由 Type 2 = Inter-AS I-PMSI A-D route 定义) 而来的组播流时将使用与之对应 Type 4 = Leaf A-D route 中 BGP Path Attribute Type 22 = PMSI Tunnel attribute 携带的 Label 进行转发。
详情可查阅相关资料。
自动换行
3@多个 AS 域场景下 Type 2 = Inter-AS I-PMSI A-D route 的 iBGP 接收,同时还伴随 Type 4 = Leaf A-D route 的 iBGP 产生和接收:
1@:BGP route reflector 重新通告 Type 2 = Inter-AS I-PMSI A-D route 时,不得改变 MP_REACH_NLRI 的 Next Hop 字段。这是因为 Next Hop 字段用于控制 Type 6-7 C-multicast routes 流。
2@:同一个 AS 内的多个 ASBR 通告了相同信息的 Type 2 = Inter-AS I-PMSI A-D route 时,其他不同的 ASBR 可以不选择同一个 ASBR 通告的该路由作为自己的最优路由。
3@:ASBR 收到 Type 2 = Inter-AS I-PMSI A-D route 时会将其向自己的 eBGP 邻居转发。同时 MP_REACH_NLRI 属性的 Next Hop 字段设置为 ASBR 的可路由 IP 地址。如果 ASBR 收到的该 Type 2 = Inter-AS I-PMSI A-D route 包含 BGP Path Attribute Type 22 = PMSI Tunnel attribute,则向 eBGP 转发时也必须携带。
4@:ASBR/PE 收到 Type 2 = Inter-AS I-PMSI A-D route 且携带 BGP Path Attribute Type 22 = PMSI Tunnel attribute 时
- 如果 Tunnel Type 2 = mLDP P2MP LSP 时,ASBR/PE 应当尽快加入到该路由相应的 P-tree。
- 如果 mLDP P2MP LSP 不包含 Label 时,则该路由相应的 P-tree 标识了一个 intra-AS LSP。该 LSP 是 Type 2 = Inter-AS I-PMSI A-D route 路由通告的 inter-AS tunnel 的一部分,MVPN 隧道的根为产生 Type 2 = Inter-AS I-PMSI A-D route 路由的 AS。
- 如果 mLDP P2MP LSP 包含上游分配的 Label 时,则 intra-AS LSP 可以进一步拼接到 AS 间隧道的 ASBR-ASBR AS 间分段。PE 收到时接收 intra-AS LSP 传递而来的 C-Flows。
- 如果 L-bit(Leaf Information Required bit) 置位时,应当产生一个新的 Type 4 = Leaf A-D route 传递给 iBGP 邻居。该路由依照先前规则携带对应的 Route Key 及 Originating Router’s IP address。
5@:新的 Type 4 = Leaf A-D route 传递给 iBGP 邻居时,该路由应当
- Route Key 字段应当填充为收到的 Type 2 = Inter-AS I-PMSI A-D route 的 NLRI 字段。Originating Router’s IP 字段应当填充为 ASBR/PE 的可路由地址。
- 当收到的 Type 2 = Inter-AS I-PMSI A-D route 携带 BGP Path Attribute Type 22 = PMSI Tunnel attribute 中的 Tunnel Type 6 = Ingress Replication 时,则新产生的 Type 4 = Leaf A-D route 也应当该属性并将 Tunnel Type 设置为 Ingress Replication。并且该属性的中的 Tunnel Identifier 必须携带 ASBR/PE 的可路由地址和下游分配的 MPLS 标签。该标签用于对 PE/ASBR 通过单播隧道接收的 MVPN 流量进行解封装。
- 还应携带一个 IP Address-Specific Extended Community。其 Global Administrator 字段填充 Type 2 = Inter-AS I-PMSI A-D route 的 Next Hop 字段,Local Administrator 字段设置为 0。
- Next Hop 字段必须设置为 Originating Router’s IP Address。
- 为了控制路由的分发范围,Type 4 = Leaf A-D route 必须携带 NO_ADVERTISE BGP Community(由 BGP Path Attribute Type 8 = COMMUNITIES 携带)。
《RFC1997-BGP Communities Attribute》中定义了值为 0xFFFFFF02 的 NO_ADVERTISE Well-known Communities。所有携带该 Communities 的路由不得传递给其他 BGP peer。
自动换行auto-discovery inter-as 用于使能跨 AS 域的自动发现功能。配置该命令后,发送给 eBGP 邻居的 Type 1 = Intra-AS I-PMSI A-D route 和 Type 3 = S-PMSI A-D route 将不再携带 No-Export 属性,从而使路由可以被发送到跨 AS 域的设备上进行自动发现。该命令会受到 peer advertise-community 命令影响。
6@:如果 ASBR 收到 iBGP 发送 Type 4 = Leaf A-D route,其 Route Key 字段必须与本地 Type 2 = Inter-AS I-PMSI A-D route 的 NLRI 字段相匹配。同时
- 如果不携带 BGP Path Attribute Type 22 = PMSI Tunnel attribute,则可以使用该路由来确定 P-tree 的叶子信息。 P-tree 的叶子节点为 Originating Router’s IP address 字段。
- 如果携带 BGP Path Attribute Type 22 = PMSI Tunnel attribute 且 Tunnel Type 6 = Ingress Replication 时,ASBR 还可以来构建 intra-AS LSP。
2.3.3.C-Multicast Routing信息的交互
MVPN的单播路由和组播路由:
在某些情况下 CE 可能会向 PE 分发一组非单播路由的特殊路由专门用于 UMH 选择。例如,当 CE-PE 之间使用 BGP 协议时可以向 PE 发送一个 <AFI 1/2 = IPv4/IPv6,SAFI 2 = multicast forwarding NLRI> 的特殊路由用于 UMH。此时,可以将单播的路由称为“单播路由 VRF”,另一个用于 UMH 选择的单播路由为“UMH VRF”。
单播路由 VRF 也可用于 UMH 选择,这里只表明可使用其他 NLRI 来进行 UMH 选择。UMH 路由应当包含到达 C-S 的单播路由,以及 Source AS Extended Community 和 VRF Route Import Extended Community。
对于给定的 PE 上的 MVPN,UMH VRF 使用的 RD 应与单播路由 VRF 使用的 RD 相同。
此外也可以使用 <AFI 1/2 = IPv4/IPv6,SAFI 129 = Multicast for BGP/MPLS IP VPN NLRI> 来交互 UMH VRF 信息。这些路由必须携带 VRF Route Import Extended Community。当使用 BGP 用于交换 C-multicast routes 或者如果使用 segmented inter-AS tunnels,则该路由还必须携带 Source AS Extended Community。
自动换行
1@当CE-PE间使用PIM作为C-Multicast Protocol时,产生C-multicast routes路由:
Type 6 = Shared Tree Join route 和 Type 7 = Source Tree Join route 为 VPN C-multicast routes 用于携带组播路由信息向上游发送以便加入组播出接口。
此外,C-multicast routes 的聚合事实上由 BGP 来完成。这是因为对于给定 MVPN 的特定 (C-S,C-G)/(C-*,C-G) 的 C-multicast routes,多个 PE 公布的 MACT-VPN NLR 是相同的。关于其详细内容可查看相关资料。
1@:当 PE 上的 C-PIM 创建新的 (C-S,C-G) 状态且 C-S 的上游邻居非本地 PE,则 PE 必须产生 Type 7 = Source Tree Join route的 C-multicast route。该路由的 Multicast Source 字段填充为 C-S,Multicast Group 字段填充为 C-G。相应的当 PE 上的 C-PIM 撤销 (C-S,C-G) 状态则应撤销该路由。
2@:当 PE 上的 C-PIM 创建新的 (C-*,C-G) 状态且 C-S 的上游邻居非本地 PE,则 PE 必须产生 Type 6 = Shared Tree Join route 的 C-multicast route。该路由的 Multicast Source 字段填充为 C-RP,Multicast Group 字段填充为 C-G。相应的当 PE 上的 C-PIM 撤销 (C-*,C-G) 状态则应撤销该路由。
3@:如果本地和上游 PE 属于相同 AS,则 C-multicast routes 的 RD 应以 VPN 单播路由的 RD 来填充。该 VPN 单播路由前缀应可以包含特定 MVPN 的 C-S(也即 PE 可以通过该 VPN 路由可达 C-S)。
4@:如果本地和上游 PE 属于不同 AS,则 C-multicast routes 的 RD 应以 Type 2 = Inter-AS I-PMSI A-D route 路由的 RD 来填充。Type 2 = Inter-AS I-PMSI A-D route 路由的 Source AS 字段应包含上游 PE 所属的 AS。C-multicast routes 还应携带一个 IP Address-Specific Extended Community。其 Global Administrator 字段填充 Type 2 = Inter-AS I-PMSI A-D route 的 Next Hop 字段,Local Administrator 字段设置为 0。
该扩展团体属性为 ASBR Import RT。
自动换行
2@ASBR间C-multicast routes路由的传递:
1@:对于 segmented inter-AS tunnels,当 ASBR 已校验收到 C-multicast routes 路由的正确性和最优性后,ASBR 将该路由的 RD 字段和 Source AS 字段与 Type 2 = Inter-AS I-PMSI A-D route 的 RD 字段和 Source AS 字段进行匹配。当存在这样的 Type 2 = Inter-AS I-PMSI A-D route 时,认为该 C-multicast routes 路由有效。
2@:当 ASBR 接收到产生 Type 2 = Inter-AS I-PMSI A-D route 的 eBGP 邻居的撤销 C-multicast routes 路由时,ASBR 将撤销对应的路由并将撤销路由转发给 iBGP 邻居。
3@:当 ASBR 接收到不是产生 Type 2 = Inter-AS I-PMSI A-D route 的 eBGP 邻居的撤销 C-multicast routes 路由时,ASBR 在重新转发该 C-multicast routes 路由之前需修改其 IP Address-Specific 类型的 ASBR Import RT 扩展团体属性。
自动换行
3@当CE-PE间使用PIM作为C-Multicast Protocol时,PE收到C-multicast routes路由的处理原理:
1@:当 PE 收到 Type 7 = Source Tree Join route 时,创建对应的 (C-S,C-G) 表项。如果 PE 上的本地策略是将 (C-S,C-G) 绑定到 S-PMSI,则 PE 会将 S-PMSI 添加到 (C-S,C-G) 状态的传出接口列表。否则,PE 会将 I-PMSI 添加到 (C-S,C-G) 状态的传出接口列表中。
2@:当 PE 收到 Type 6 = Shared Tree Join route 时,创建对应的 (C-*,C-G) 表项。如果 PE 上的本地策略是将 (C-*,C-G) 绑定到 S-PMSI,则 PE 会将 S-PMSI 添加到 (C-*,C-G) 状态的传出接口列表。否则,PE 会将 I-PMSI 添加到 (C-S,C-G) 状态的传出接口列表中。
2.3.4.C-Trees和P-Tunnels的绑定
《RFC6514-BGP Encodings and Procedures for Multicast in MPLS/BGP IP VPNs的9.1.2.Receiving Intra-AS I-PMSI A-D Routes》认为如果有效且最优 Type 1 = Intra-AS I-PMSI A-D Routes 路由不携带 BGP Path Attribute Type 22 = PMSI Tunnel attribute 且未使用 Tunnel Type 6 = ingress replication 隧道类型,则发起路由的 PE 将仅使用 S-PMSI 将流量发送到远端 PE。
Type 3 = S-PMSI A-D Routes 也可以用于将 C-trees 绑定到 P-Tunnels 上。
1@Type 3 = S-PMSI A-D Routes的产生:
1@:Type 3 = S-PMSI A-D Routes NLRI 的
- RD 字段设置为与 (C-S,C-G) 关联的 MVPN VRF 的 RD。
- Multicast Source 字段和 Multicast Source Length 字段必须反应真实的 C-Flows。
- Originating Router’s IP Address 字段必须设置为本地 PE 发送的组播源 VPN 单播路由中 VRF Route Import Extended Community 的 Global Administrator 字段。<RD,Originating Router’s IP Address> 的组合唯一标识给定的组播 VRF。
2@:Type 3 = S-PMSI A-D Routes 携带 BGP Path Attribute Type 22 = PMSI Tunnel attribute
- 必须包含 P-multicast tree 的标识。
- 其他 PE/ASBR 可以发起 Type 4 = Leaf A-D route 以响应自己发送的 Type 3 = S-PMSI A-D Routes。通过将自己发送的 Type 3 = S-PMSI A-D Routes 的 L-bit(Leaf Information Required) 设置为 1 来获取自身 AS 中组播树的叶子节点信息。
- 当 L-bit(Leaf Information Required) 设置为 1 时,必须携带一个或多个 IP Address-Specific Extended Community。其 Global Administrator 字段填充 Type 3 = S-PMSI A-D Routes 的 Next Hop 字段,Local Administrator 字段设置为 0。
- PE 可以将 PE 发起的两个或多个 Type 3 = S-PMSI A-D Routes 聚合到同一 P-multicast tree 上。如果聚合了不同 MVPN 的路由,则必须携带上游分配的标签。
- 如果聚合了相同 MVPN 的路由且使用 PIM 作为 CE-PE 之间的 C-multicast routing protocol,则可以携带上游分配的标签。
3@:Type 3 = S-PMSI A-D Routes 的 Next Hop 字段必须与 Originating Router’s IP Address 字段相同。
4@:Type 3 = S-PMSI A-D Routes 不指定 RT 时,默认携带的 RT 集合有
- 如果存在到 C-S 的单播 VPN 路由但不存在到 C-RP 的单播 VPN 路由,则 RT 集合取【到 C-S 的单播 VPN 路由 RT】与【Type 1 = Intra-AS I-PMSI A-D 路由 RT 的交集。
- 如果不存在到 C-S 的单播 VPN 路由但存在到 C-RP 的单播 VPN 路由,则 RT 集合取【到 C-RP 的单播 VPN 路由 RT】与【Type 1 = Intra-AS I-PMSI A-D 路由 RT】的交集。
- 如果同时存在到 C-S 的单播 VPN 路由和到 C-RP 的单播 VPN 路由,则 RT 集合取【到 C-S 的单播 VPN 路由 RT 和到 C-RP 的单播 VPN 路由 RT 的并集】与【Type 1 = Intra-AS I-PMSI A-D 路由 RT】的交集。
自动换行
2@Type 3 = S-PMSI A-D Routes的ASBR处理:
1@:Type 3 = S-PMSI A-D Routes 的 ASBR 处理原则与 Type 2 = Inter-AS I-PMSI A-D route 的 ASBR 处理原则基本相同。
2@:在某些情况下,ASBR 可以将一个或多个上游 Type 3 = S-PMSI A-D Routes 合并为下游 Type 2 = Inter-AS I-PMSI A-D route。
自动换行
3@Type 3 = S-PMSI A-D Routes的PE处理:
1@:Type 3 = S-PMSI A-D Routes 的 PE 处理原则与 Type 2 = Inter-AS I-PMSI A-D route 的 iBGP 处理原则基本相同。
2@:以下 PE 处理原则也应当被视为正确。
- 下游 PE 发起针对 (C-S,C-G) 的 Type 7 = Source Tree Join route 给上游发起 Type 3 = S-PMSI A-D Routes 的 PE。
- 下游 PE 发起针对 (C-*,C-G) 的 Type 6 = Shared Tree Join route 给上游发起 Type 3 = S-PMSI A-D Routes 的 PE。此种情况下,下游 PE 可以不收到来自上游 PE 的 Type 5 = Source Active A-D route,但如果收到则产生最优 Type 5 = Source Active A-D route 的 PE 必须与接收 Type 6 = Shared Tree Join route 的上游 PE 为同一个 PE。
- 如果上游 PE 发起 Type 3 = S-PMSI A-D Routes 的 L-bit(Leaf Information Required) 设置为 1,则下游 PE 应当产生 Type 4 = Leaf A-D route。Type 4 = Leaf A-D route 的 Route Key 字段应被设置为 Type 3 = S-PMSI A-D Routes 的 NLRI。
自动换行
当CE-PE间使用PIM作为C-Multicast Protocol时,Shared C-Tree向Source C-Tree的切换:
这一原则仅适用于使用组播 ASM 地址的情况,并且仅适用于同时使用 C-RP 和 C-S 站点间 C-Tree 的 MVPN。
在本笔记的《2.1.3.MVPN的跨域和单向C-tree防环》章节,我们介绍了《RFC6513-Multicast in MPLS/BGP IP VPNs的9.3.Switching from the C-RP Tree to the C-S Tree》中提到的 Type 5 = Source Active A-D route 用于 C-tree 切换时的防止多包的场景。
并且《RFC6513-Multicast in MPLS/BGP IP VPNs的9.3.Switching from the C-RP Tree to the C-S Tree》中规定如果上游 PE 收到来自下游 PE 发起的针对 (C-S,C-G) 的 Type 7 = Source Tree Join route,上游 PE 会将 S-PMSI/I-PMSI 隧道加入到 (C-S,C-G) 的出接口列表。如果未产生 Type 5 = Source Active A-D route,则必须产生该路由。
Type 5 = Source Active A-D route 的产生应有如下原则。
- MP_REACH_NLRI 的 RD 字段取上游 PE MVPN 的 VRF 的 RD。
- Multicast Source 和 Multicast Source Length 字段携带 C-S 信息。
- Multicast Group 和 Multicast Group Length 字段携带 C-G 信息。
- MP_REACH_NLRI 的 Next Hop 字段必须设置为携带组播源 VPN 单播路由中 VRF Route Import Extended Community 的 Global Administrator 字段。
- Type 5 = Source Active A-D route 应传播到 MVPN 的所有 PE。
- 如果收到 Type 7 = Source Tree Join route 的撤销路由,上游 PE 会将 S-PMSI/I-PMSI 隧道从 (C-S,C-G) 的出接口列表中删除。同时 PE 也将撤销 Type 5 = Source Active A-D route。
Type 5 = Source Active A-D route 的接收应有如下原则。
-
如果对于给定 MVPN 的特定 (C-S,C-G) Type 5 = Source Active A-D route 中的 C-G 与本地 (C-*,C-G) 状态的 C-G 相同,则称其为可匹配。
-
对于下游 PE 从 PE-CE 链路上因接收 PIM 消息而将 PE-CE 链路作为新产生 (C-*,C-G) 条目的出接口时,下游 PE 必须检查是否有匹配的 Type 5 = Source Active A-D route。如果可匹配,则应当将其状态设置为准备接收产生最优 Type 5 = Source Active A-D route 上游 PE 的发送的 C-Flows。
-
如果 PE 发现给定 (C-*,C-G) 条目有 I-PMSI/S-PMSI 作为出接口时,必须将 I-PMSI/S-PMSI 隧道上的下游状态机过渡到 Prune 剪枝状态。
-
上述 Prune 剪枝动作必须延迟一个可控的时间,以便所有 PE 足以收到 Type 5 = Source Active A-D route。
-
在某些情况下,当 PE 知晓组播源的存在以后可以产生一个 Type 5 = Source Active A-D route 通告给其他所有 PE。同时当 PE 知晓组播源失效以后,也应撤回该 Type 5 = Source Active A-D route。
关于其详细内容可查看相关资料。
3.NG MVPN场景介绍
3.1.BGP NG MVPN over Non-segmented Intra-AS mLDP P-tunnels
建立如下图所示的拓扑:
PC1:作为组播源发起特定 (C-S,C-G) 组播流数据 C-Flows,承担网络的 C-S 角色。
NE1、NE2和NE3:作为公网设备,需建立公网 P-tunnels。
NE3:额外作为 C-RP,用于向 C-S 一侧建立 SPT 源树,同时向组播接收者一侧建立 RPT 共享树。
PC1:作为组播接收者,用于发起组播组加组请求。
1@:由于整个公网节点都使用 mLDP P2MP LSP 来建立 P-tunnels,因此称为 Non-segmented Intra-AS mLDP P-tunnels。在这种场景下公网节点都使用同一种 IGP 协议。
2@:PE-CE 一侧使用 PIM 作为 C-Multicast Protocol 来建立组播表项。此时省略了 CE 设备,但不影响相关的功能介绍。同时将 C-RP 角色也叠加在 PE 上。
3@:对于跨域场景,往往还需建立 C-RP 之间的 MSDP 邻居用于传递组播源消息。
PE1典型配置 (省略其他 IGP 等信息):
multicast mvpn 1.1.1.1
#
ip vpn-instance test
ipv4-family
route-distinguisher 1:1
vpn-target 100:300 export-extcommunity
vpn-target 100:300 import-extcommunity
multicast routing-enable
mvpn
vpn-target 10:30 export-extcommunity
vpn-target 10:30 import-extcommunity
sender-enable
c-multicast signaling bgp
spt-only mode
ipmsi-tunnel
mldp
spmsi-tunnel
group 225.1.1.0 255.255.255.0 mldp
#
mpls lsr-id 1.1.1.1
#
mpls
#
mpls ldp
mldp p2mp
#
ipv4-family
#
bgp 100
router-id 1.1.1.1
peer 3.3.3.3 as-number 100
peer 3.3.3.3 connect-interface 1.1.1.1
#
ipv4-family unicast
undo synchronization
undo peer 3.3.3.3 enable
#
ipv4-family mvpn
policy vpn-target
peer 3.3.3.3 enable
#
ipv4-family vpnv4
policy vpn-target
peer 3.3.3.3 enable
#
ipv4-family vpn-instance test
import-route direct
#
pim vpn-instance test
static-rp 33.3.3.3
#
3.1.1.控制面及转发面交互
控制面行为:
1@:控制面上所有 PE/P 设备都使用 OSPFv2 搭建 underlay 环境,用于构建 P-tunnels 的基本通路。
2@:控制面上所有 PE/P 设备都使能 MPLS LDP 同时传递 mLDP P2MP FEC 信息,用于构建完成的 P-tunnels。该 P-tunnels 使用的 mLDP FEC 是一种 Opaque 不透明 FEC。由《RFC6388-LDP Extensions for P2MP and MP2MP LSPs》中定义。本场景下与 mLDP P2MP FEC 关联的标签分配方式仍然为下游分配。
mLDP P2MP FEC 及其关联的 Label 信息。
3@:PE 节点之间建立 MVPN 地址族邻居关系用于传递 MVPN 路由信息。
控制面建立:
1@:当 PE 之间建立 MVPN 地址族邻居关系时,PE 节点相互发送 Type 1 = Intra-AS I-PMSI A-D route。同时 NE1 节点作为发送者 PE 需额外包含 P-tunnels 的 P-Roots 信息。
Type 1 = Intra-AS I-PMSI A-D route 交互。该行为包含的 Opaque unique ID 用于唯一标识 P-trees 信息。
2@:当触发终端加组后,C-RP 向组播源发送针对 (C-S,C-G) 的源树加组信息。
Type 7 = Source Tree Join route 路由信息交互。由于此时 C-RP 至 C-S 需跨越公网,因此传递 SPT 树信息。
3@:当组播源转发超过某一速率时,将触发向 S-PMSI 隧道过渡并携带新的 P-trees 标识。
Type 3 = S-PMSI A-D route 携带新的隧道信息。此时由下游重新触发 mLDP p2mp LSP 的建立。
转发面行为:
1@:当接收者 PE 接收到 MVPN A-D route 携带的 P-tree 信息后,由下游至上游依次建立 mLDP p2mp LSP。
2@:当发送者 PE 接收到来自 C-S 的特定 C-Flows 后,由特定组播 VPN 标识迭代如对应的 mLDP p2mp LSP 中。
组播数据流为单层 Label,并且《RFC6513-Multicast in MPLS/BGP IP VPNs 的 12.1.3.Encapsulation in MPLS》中认为当使用 P2MP MPLS LSP 或 a MP2MP LSP 来实例化 PMSI 隧道时应当禁用 Penultimate-hop-popping(PHP,倒数第二跳弹出) 行为。因此该隧道自始至终都为单层标签转发。
3.2.常用命令介绍
display bgp mvpn all peer 用于查看针对 MVPN地址组的邻居建立情况。
自动换行display bgp mvpn all routing-table all-type 用于查看 MVPN 路由收发概况。
自动换行
display bgp mvpn vpn-instance 用于具体查看针对特定组播 VPN 传递的路由详细信息。
自动换行
display mpls mldp lsp p2mp 用于查看特定 Opaque unique ID 建立的 mLDP p2mp LSP 信息。