组播基础 PIM 原理

PIM-DM

产生原因

为了构建组播网络,实现组播数据的转发,需要在网络中配置组播协议。PIM(Protocol Independent Multicast)是目前应用最为广泛的域内组播协议。其中 PIM-DM(Protocol Independent Multicast-Dense Mode,协议无关组播-密集模式)是 PIM 协议的实现方式之一。

PIM-DM 主要采用扩散 - 剪枝的方式转发组播数据,即 PIM-DM 首先将组播数据扩散到各个网段,然后再裁剪掉不存在组成员的网段。通过周期性的 “扩散 — 剪枝”,构建并维护一棵连接组播源和组成员的单向无环 SPT(Shortest Path Tree)树,最终实现组播数据的转发。由于对组播组成员稀疏的网络会产生大量 Prune 消息,而对规模较大的网络扩散 - 剪枝周期会很长,所以 PIM-DM 适合规模较小、组播组成员相对比较密集的网络。

相关概念

结合图介绍 PIM-DM 协议的基本概念:

PIM-DM 组网图
在这里插入图片描述

  • PIM 设备

支持 PIM 协议的组播设备称为 PIM 设备。PIM 设备上使能了 PIM 协议的接口称为 PIM 接口。

  • SPT

SPT 称为最短路径树。以组播源为根,组播组成员为叶子的组播分发树称为 SPT。SPT 适用于 PIM-DM、PIM-SM(Protocol Independent Multicast-Sparse Mode)和 PIM-SSM(Protocol Independent Multicast-Source-Specific Multicast)。

实现过程

PIM-DM 域中组播数据转发的实现过程是:

  1. 邻居发现(Neighbor Discovery)

在 PIM-DM 域中,PIM 设备通过周期性的向所有其它 PIM 设备发送 Hello 消息,来发现 PIM 邻居,维护 PIM 设备之间的 PIM 邻居关系。

缺省情况下,无论 PIM 设备是否收到来自邻居的 Hello 消息,都会接收其他的 PIM 控制消息或组播报文。但是如果 PIM 设备配置了邻居检查功能,则只有在 PIM 设备接收到来自邻居的 Hello 消息后,才会接收其他的 PIM 控制消息或组播报文。

  1. 扩散(Flooding)

PIM-DM 假设网络中的每个子网都存在至少一个组播组成员,因此组播数据将被扩散到网络中的所有节点,网络中所有的 PIM 设备都能接收到组播数据。

  1. 剪枝(Prune)

组播数据扩散到网络中后,PIM-DM 对没有组播数据接收者的分支进行剪枝,只保留包含接收者的分支,即确保网络中只有需要组播数据的 PIM 设备能够接收到组播数据,不需要组播数据的 PIM 设备接收不到组播数据。

  1. 状态刷新(State-Refresh)

如果设备处于剪枝状态,其上游 PIM 设备会维护一个 “剪枝定时器”。当剪枝定时器超时,上游 PIM 设备恢复对不需要数据的下游 PIM 设备的数据转发,这样会导致不必要的网络资源浪费。采用状态刷新可使上游 PIM 设备周期性发送 State-Refresh 消息,刷新所有设备的剪枝定时器状态,对不需要数据的下游设备始终保持剪枝状态。

  1. 嫁接(Graft)

当被剪枝分支的节点上出现了组播组成员时,为了减少该节点恢复成转发状态所需的时间,PIM-DM 使用嫁接机制主动恢复其对组播数据的转发。

  1. 断言(Assert)

如果在一个网段内出现多台 PIM 设备,则相同的组播报文可能会被重复发送到该网段。通过断言(Assert)可以为网段选定唯一的组播数据转发者,避免冗余的组播数据转发。

以下详细介绍具体的实现过程。

邻居发现(Neighbor Discovery)

与 PIM-SM 协议相同,请参见下文 PIM-SM 域中组播数据转发的实现过程

扩散(Flooding)

组播数据源(Source)把数据发送到 Device A,Device A 把数据报文发送给所有的邻居。这时 Device B 与 Device C 也会相互转发数据报文,但 PIM-DM 协议采用 RPF(Reverse Path Forwarding)检查机制可以保证数据只从一个方向接收。最后数据被扩散到连接接收者的 Device B 和没有连接接收者的 Device C。以上的过程称之为扩散。

PIM-DM 扩散示意图
在这里插入图片描述
剪枝(Prune)

由于 Device C 没有接收者,不需要数据,则向上游 Device A 发送 Prune 消息,通知 Device A 不必再向该下游网段转发数据。Device A 收到 Prune 消息后,停止向该下游接口转发,以上的过程称之为剪枝。

由于 Device A 上还存在其他处于转发状态的下游接口,因此 Device A 向 Device B 转发组播数据。后续到达的组播数据只向 Device B 转发,从而实现了一棵连接组播源和组成员 Receiver 的单向无环最短路径树。

PIM-DM 剪枝示意图
在这里插入图片描述

状态刷新(State-Refresh)

若 Device A 对 Device C 所在网段处于剪枝状态,那么 Device A 对 Device C 的接口会维护一个 “剪枝定时器”,当剪枝定时器超时,Device A 就会恢复对不需要数据的 Device C 的数据转发,这样会导致不必要的网络资源浪费。

PIM-DM 协议采用状态刷新特性解决此问题:离组播源最近的第一跳 Device A 周期性触发 State-Refresh 消息。State-Refresh 消息在全网扩散,刷新所有设备上的剪枝定时器状态,对不需要数据的下游设备始终保持剪枝状态。

嫁接(Graft)

如果之前处于剪枝状态的 Device C 收到接收者 User B 的 IGMP Report 报文,请求转发组播源数据。为了避免扩散 - 剪枝的周期长,导致新出现的组成员不能快速得到组播数据,PIM-DM 用嫁接方式实现数据的快速转发。

Device C 发送 Graft 消息,请求上游 Device A 恢复对应出接口的转发。Device A 收到 Graft 消息后,将连接 Device C 的出接口恢复转发,组播数据报文由该下游接口到达 Device C。

PIM-DM 嫁接示意图
在这里插入图片描述

断言(Assert)

在组播网络中,如果出现如下情况,则说明网段上还存在着其他的组播转发者。

  • 该组播报文不能通过 RPF 检查。

  • 接收到该组播报文的接口是本路由器上(S,G)表项中的一个下游接口。

此时,路由器会执行 Assert 机制:

路由器从该下游接口发送 Assert 消息。同时,该下游接口也接收到了来自该网段上其他组播转发者的 Assert 消息。Assert 消息的目的地址为 224.0.0.13,源地址为下游接口地址,TTL 为 1。Assert 消息中携带:该 PIM 设备到组播源或 RP 的开销、所采用的单播路由协议的优先级、组播组地址 G。

路由器将自身条件与对方报文中携带的信息进行比较,称为 Assert 竞选。规则如下:

  1. 单播路由协议优先级较高者获胜。

  2. 如果优先级相同,则到组播源的开销较小者获胜。

  3. 如果以上都相同,则下游接口 IP 地址最大者获胜。

根据 Assert 竞选结果,路由器将执行不同的操作:

  • 如果获胜,则该下游接口保持转发状态,路由器负责后续在该网段上的(S,G)转发,该下游接口称为 Assert winner。

  • 如果落败,则禁止该下游接口转发组播报文,将其从(S,G)表项下游接口列表中删除。该下游接口称为 Assert loser。

Assert 竞选结束后,该网段上只存在一个有下游接口的上游路由器,只传输一份组播报文。Assert winner 周期性发送 Assert 消息,维持 Assert winner 的状态。若 Assert loser 的定时器超时后,Assert loser 仍没有收到 Assert winner 的 Assert 消息,则重新添加下游接口转发组播数据。

如果 Device B 和 Device C 都能够接收到组播源 Source 发出的组播报文,并且均能通过 RPF 检查,创建(S,G)表项。Device B、Device C 的下游接口连接在同一网段,那么 Device B 和 Device C 就会同时向该网段发送组播数据。Assert 机制可以保证一个网段只能存在一个组播数据转发者。Assert 过程如下:

  1. Device B 从下游接口接收到 Device C 发来的组播报文,RPF 检查失败,报文被丢弃。同时,Device B 向该网段发送 Assert 消息。

  2. Device C 将自身的路由信息与对方的 Assert 消息中携带的路由信息进行比较,由于自身到组播源的开销较大而落败。于是禁止该下游接口转发组播报文,将其从 Device C 的(S,G)表项的下游接口列表中删除。

  3. Device C 从该网段接收到 Device B 发来的组播报文,RPF 检查失败,报文被丢弃。Assert 过程结束。

PIM-DM 断言示意图
在这里插入图片描述

PIM-SM

PIM-SM(Protocol Independent Multicast-Sparse Mode,协议无关组播 - 稀疏模式)可以有效解决大型网络且用户分布比较分散的场景中,“点到多点” 的数据传输问题,使用户能够按需接收数据。

PIM-SM 假设网络中所有主机均不需要接收组播数据,只有在主机明确提出需要接收组播数据时,才会构建组播分发树,向提出需求的主机转发组播数据

相关概念

介绍 PIM-SM 协议的基本概念:

PIM 组网图
在这里插入图片描述

  • PIM 设备

支持 PIM 协议的组播路由器称为 PIM 设备。PIM 设备上使能了 PIM 协议的接口称为 PIM 接口。

  • PIM 域

由 PIM 设备所组成的网络称为 PIM 网络。

通过在组播设备接口上设置 BSR 边界,可以限制 BSR 消息的传播,从而划分 PIM-SM 域。将一个大的 PIM 网络划分成多个 PIM 域,可以实现组播业务之间的隔离,便于管理网络。

  • DR(Designated Router,指定路由器)

在 PIM 网络中,存在两种 DR:

  • 组播源 DR:在 PIM-SM 中,组播源 DR 是与组播源直接相连且负责向 RP 发送注册报文的 PIM 设备。

  • 接收者 DR:与组播组成员(通常为接收者主机)直接相连且负责向该组成员转发组播数据的 PIM 设备。

  • RP(Rendezvous Point,汇聚点)

RP 是 PIM-SM 网络的转发核心。接收者 DR 向 RP 发起加入,构建以 RP 为根的 RPT;组播源 DR 向 RP 发送注册报文,在 RP 上创建(S,G)表项,通过 RP 向组成员传输组播报文。网络中的设备必须知道 RP 的地址,RP 分类如下:

  • RP 分类
RP 类型实现机制使用场景注意事项
静态 RP用户可在网络中的所有 PIM 设备上手工配置相同的地址为静态 RP 地址,网络中的所有 PIM 设备都以此地址作为 RP 地址。对于中小型网络,建议选择静态 RP 方式,对设备要求低,也比较稳定。
说明:如果网络中只有一个组播源,建议选择直连组播源的设备做为静态 RP,这样可以省略组播源 DR 向 RP 注册的过程。
采用静态 RP 方式要确保域内所有路由器(包括 RP 本身)的 RP 信息以及服务的组播组范围全网一致。
动态 RP在 PIM 域内将几台 PIM 设备配置为 C-RP(Candidate-RP),即候选 RP。
在这些 C-RP 中,通过竞选产生 RP,BSR 通过 Bootstrap 消息将当前网络中的所有 C-RP 信息汇总为 RP-Set,发布给所有的 PIM 设备。
网络中的所有 PIM 设备根据 RP-Set,使用相同的规则进行计算和比较,从多个 C-RP 中竞选出 RP。由于所有 PIM 设备使用相同的 RP-Set 和相同的竞选规则,即:它们具有相同的 RP 信息。一旦竞选出的 RP 出现故障,剩余 C-RP 会重新进行选举,产生新的 RP。
对于大型网络,可以采用动态 RP,可靠性高,可维护性强。
如果网络中存在多个组播源,且分布密集,建议选择与组播源比较近的核心设备作为 C-RP。
如果网络中存在多个用户,且分布密集,建议选择与用户比较近的核心设备作为 C-RP。
如果使用动态 RP,则必须同时配置 BSR。通过 BSR,组播网络中的路由器可以动态地掌握组播组到 RP 的映射。
Embedded-RP(嵌入式 RP)Embedded-RP 是 ASM 模式下路由器获取 RP 地址的一种方式,可应用于 IPv6 PIM-SM 域内和域间。
RP 地址嵌入在 IPv6 组地址中,路由器获取 IPv6 组地址的同时获取该 IPv6 组播组地址对应的 RP 地址。
可解决由于 MSDP 不支持 IPv6 网络导致 IPv6 PIM-SM 域间无法互相获取 RP 信息,组播业务不通的问题。-

BSR(Bootstrap Router,自举路由器)

BSR 负责在 PIM-SM 网络启动后,收集网络内的 RP 信息,然后将 RP 集(即组 - RP 映射数据库)发布到整个 PIM-SM 网络。
一个网络内部只能有一个 BSR,但是可以配置多个候选 BSR,即 C-BSR(Candidate-Bootstrap Router)。一旦 BSR 出现故障,剩余 C-BSR 中会重新选举出 BSR。

  • RPT(Rendezvous Point Tree,共享树)

以 RP(Rendezvous Point)为根,组播组成员为叶子的组播分发树称为 RPT。

  • SPT(Shortest Path Tree,最短路径树)

SPT 以组播源为根,组播组成员为叶子的组播分发树称为 SPT。

实现过程

PIM-SM 域中组播数据转发的实现过程

  1. 邻居发现(Neighbor Discovery)

在 PIM-SM 域中,PIM 设备通过周期性的向所有 PIM 设备发送 Hello 消息,来发现 PIM 邻居,维护 PIM 设备之间的 PIM 邻居关系。

说明
缺省情况下,无论 PIM 设备是否收到来自邻居的 Hello 消息,都会接收其他的 PIM 控制消息或组播报文。但是如果 PIM 设备配置了邻居检查功能,则只有在 PIM 设备接收到来自邻居的 Hello 消息后,才会接收其他的 PIM 控制消息或组播报文。

  1. DR 竞选(DR Election)

PIM 设备之间交互 Hello 消息为共享网络选举 DR,接收者 DR 将作为该共享网络中组播数据的唯一转发者,组播源 DR 负责将组播源的数据发送给 RP。

  1. RP 发现(RP Discovery)

RP 是 PIM-SM 域中的核心设备。通过配置静态或动态 RP,依靠此 RP 为整个网络转发组播数据。

  1. RPT 建立(RPT Setup)

PIM-SM 假设所有主机都不需要接收组播数据,只向明确提出需要组播数据的主机转发。实现组播转发的核心任务就是构建并维护 RPT,组播数据通过 RP 沿 RPT 转发给接收者。

  1. SPT 切换(SPT Switchover)

在 PIM-SM 域中,一个组播组唯一对应一个 RP 和 RPT,RP 是所有组播数据必经的中转站。但由 RP 转发组播数据的转发路径不一定是从组播源到接收者的最短路径,且当组播流量变大时,RP 负担增大,因此,当组播数据的转发速率超过阈值时,可进行 SPT 切换,直接在组播源与接收者间建立最优路径,缓解 RP 的负担。

如果网络中出现了异常情况,可以通过断言和 DR 切换延迟来保证组播数据的正常传输:

  • 断言(Assert)

如果在一个网段内出现多台 PIM 设备,则相同的组播报文可能会被重复发送到该网段。可通过断言为网段选定唯一的组播数据转发者,避免冗余的组播数据的转发。

  • DR 切换延迟(DR Switchover Delay)

当网络中的某接口由 DR 变为非 DR 时,PIM 设备会立即停止使用此接口转发数据。如果此时新 DR 的组播数据还未到达,那么将会出现短暂的组播数据断流。配置 DR 切换延迟后,该接口在延迟时间超时前仍然继续转发组播数据,避免组播数据断流的情况。

以下详细介绍具体的实现过程:

邻居发现(Neighbor Discovery)

PIM 设备在每个使能了 PIM 的接口上,都会对外发送 Hello 消息。封装 Hello 消息的组播报文有如下特点:

  • 目的地址是 224.0.0.13,表示同一网段中所有 PIM 设备

  • 源地址为接口的 IP 地址

  • TTL 数值为 1,仅发送给邻居接口

Hello 消息的作用:发现邻居、协调各项协议参数、维持邻居关系。

  • 发现 PIM 邻居

同一网段中的 PIM 设备都必须接收目的地址为 224.0.0.13 的组播报文。这样在收到 Hello 消息以后,直接相连的组播路由器之间,就可以知道自己的邻居信息。

  • 协调各项协议参数

Hello 消息中携带多项协议参数,邻居之间通过 Hello 消息来进行协商,这些参数包括:

  • DR_Priority:表示各路由器接口竞选 DR 的优先级,优先级越高越容易获胜。

  • Holdtime:表示保持邻居为可达状态的超时时间。

  • LAN_Delay:表示共享网段内传输 Prune 消息的延迟时间。

  • Override-Interval:表示 Hello 消息中携带的否决剪枝的时间间隔。

  • 维持邻居关系

PIM 设备之间周期性地发送 Hello 消息。如果 Holdtime 超时还没有收到该 PIM 邻居发出的新的 Hello 消息,则认为该邻居不可达,将其从邻居列表中清除。

PIM 邻居的变化将导致网络中组播拓扑的变化。如果组播分发树上的某上游邻居或下游邻居不可达,将导致组播路由重新收敛,组播分发树迁移。

DR 竞选(DR Election)

在组播源或组成员所在的网段,通常同时连接着多台 PIM 设备。这些 PIM 设备之间通过交互 Hello 消息成为 PIM 邻居,Hello 消息中携带 DR 优先级和该网段接口地址。路由器将自身情况与对方报文中携带的信息进行比较,称为 DR 竞选。规则如下:

  • DR 优先级较高者获胜(网段中所有路由器都支持 DR 优先级)。

  • 如果 DR 优先级相同或该网段存在不支持在 Hello 消息中携带 DR 优先级的路由器,则 IP 地址较大者获胜。

DR 竞选示意图
在这里插入图片描述
RP 发现(RP Discovery)

  • 静态 RP

静态 RP 通过配置命令在网络中的所有路由器上配置相同的 RP 地址来指定,无需进行竞选。

  • 动态 RP

如果配置动态 RP,则需要在 PIM 设备间竞选产生。

动态 RP 竞选机制原理图
在这里插入图片描述

动态 RP 的竞选规则如下:

  1. 使用动态 RP,必须同时配置 C-BSR(Candidate-Bootstrap Router),由 C-BSR 竞选产生 BSR。

    最初,每个 C-BSR 都认为自己是 BSR,向全网发送 Bootstrap 消息。Bootstrap 消息中携带 C-BSR 地址、C-BSR 的优先级。每一台路由器都收到所有 C-BSR 发出的 Bootstrap 消息,通过比较这些 C-BSR 信息,竞选产生 BSR。竞选规则如下:

    a. 优先级较高者获胜(优先级数值越大优先级越高)。

    b. 如果优先级相同,IP 地址较大者获胜。

    由于所有路由器使用相同的竞选规则,所以得到的获胜 BSR 也相同。网络中的所有路由器都知道 BSR 的地址。

  2. C-RP 向 BSR 发送 C-RP Advertisement 消息,消息中携带 C-RP 地址、服务的组范围和 C-RP 优先级等。

  3. BSR 将这些信息汇总为 RP-Set,封装在 Bootstrap 消息中,发布给全网的每一台 PIM-SM 设备。

  4. 各路由器根据 RP-Set,使用相同的规则进行计算和比较,从多个针对特定组的 C-RP 中竞选出该组 RP。规则如下:

    a. 与用户加入的组地址匹配的 C-RP 服务的组范围掩码最长者获胜。

    b. 如果与用户加入的组地址匹配的 C-RP 服务的组范围掩码长度相同,则比较 C-RP 优先级,C-RP 优先级较高者获胜(优先级数值越大优先级越低)。

    c. 如果优先级相同,则执行 Hash 函数,计算结果较大者获胜。

    d. 如果以上都相同,则 C-RP 地址较大者获胜。

  5. 由于所有路由器使用相同的 RP-Set 和竞选规则,所以得到的 “组播组 - RP” 对应关系也相同。路由器将 “组播组 - RP” 对应关系保存下来,指导后续的组播操作。

如果路由器需要与支持 Auto-RP 的设备互通,可以使能 Auto-RP 侦听功能。使能后,路由器可以接收 Auto-RP 宣告和发现报文,并解析报文的源地址,根据源地址进行 RPF 检查。

  • 如果 RPF 检查失败,则路由器丢弃该 Auto-RP 报文。

  • 如果 RPF 检查通过,则路由器向其他 PIM 邻居转发 Auto-RP 报文,此报文中携带 RP 服务的组地址范围,指导后续的组播操作。

Auto-RP 侦听功能仅 IPv4 支持。

  • Embedded RP

Embedded-RP 是 ASM 模式下路由器获取 RP 地址的一种方式,仅应用于 IPv6 PIM-SM,为避免 RP 选举结果不一致,Embedded-RP 优先级高于其他 RP 选举机制。嵌入式 RP 的地址需要编码在 IPv6 组播组地址中,可以嵌入 RP 的组播组地址必须同时满足下面两个条件:

  • 在 IPv6 组播组地址范围之内。

  • IPv6 组播组地址范围不能是 SSM 范围内的组地址。

从 IPv6 组播组地址中计算出此 RP 地址后,就可以利用此 RP 地址发现路由并指导组播数据的转发。

计算 RP 地址的步骤为:

  1. 复制 IPv6 组播组地址的 network prefix 的前 plen 位。

  2. 用 RIID 的内容代替最后 4 位。RIID 表示 RP 的接口 ID,没有默认值。

执行上述步骤之后,产生的地址即为 Embedded RP 地址。

IPv6 组地址与 RP 地址的映射关系
在这里插入图片描述

  • Anycast RP

在传统的 PIM-SM 域中,每个组播组只能映射到一个 RP。但当网络负载较大或者流量过于集中时,可能导致 RP 的压力过大、RP 失效后路由收敛较慢、组播转发路径非最优等问题。

可以通过实现 Anycast RP 解决上述问题,目前有两种配置 Anycast RP 的方法:

  • 采用 MSDP 协议:在同一 PIM-SM 域内设置多个具有相同地址的 RP,并在这些 RP 之间通过建立 MSDP(Multicast Source Discovery Protocol)对等体的方式共享组播数据源信息。

采用 MSDP 协议实现 Anycast RP 支持 IPv4 网络。

  • 采用 PIM 协议:在同一个 PIM-SM 域内设置多个具有相同地址的 RP,同时在这些 RP 所在的设备上配置全网唯一标识该 RP 的本地地址,用于这些设备之间相互建立无连接的对等体,对等体之间以 Register 消息的方式共享组播源信息。采用 PIM 协议实现 Anycast RP 支持 IPv4 和 IPv6 网络。
  • 说明
    在同一 PIM-SM 域内,不支持同时使用 MSDP 和 PIM 协议两种方式配置同一个 Anycast RP;采用 PIM 协议实现 Anycast RP 支持通过命令行设置有选择地将从 MSDP 获得的域外数据源信息通知给域内的其它对等体(可配置)。

通过以上两种方式之一实现 Anycast RP,接收者和组播源分别选择距离自己最近的 RP 进行 RPT 的创建,当接收者 DR 接收到组播数据后自行决定是否发起 SPT 切换。从而实现 RP 路径最优及负荷分担。下面重点介绍采用 PIM 协议实现 Anycast RP 的原理。

采用 PIM 协议实现 Anycast RP 典型组网图
在这里插入图片描述
在 PIM-SM 域内,组播源 S1 和 S2 向组播组 G 发送组播数据,U1 和 U2 是组播组 G 的成员。在 PIM-SM 域内应用 PIM 协议实现 Anycast RP 的配置方法如下:

  • 配置 RP1 和 RP2,使用相同的 IP 地址(使用 Loopback 接口,假设为 10.10.10.10)。

  • 在 RP1 和 RP2 两个设备间配置无连接的对等体关系(使用网络中唯一标识的 IP 地址,假设 RP1 的 IP 地址为 1.1.1.1,RP2 的 IP 地址为 2.2.2.2)。

采用 PIM 协议实现 Anycast RP 的实现过程如下:

  1. 接收者选择距离最近的 RP 发送 Join 消息构建 RPT 树。
  • U1 加入以 RP1 为根的 RPT,在 RP1 上创建(*,G)。
  • U2 加入以 RP2 为根的 RPT,在 RP2 上创建(*,G)。
  1. 组播源选择距离最近的 RP 进行注册。
  • DR1 向 RP1 发送 Register 消息,在 RP1 上创建(S1,G)。从 S1 发来的组播数据沿 RPT 到达 U1。
  • DR2 向 RP2 发送 Register 消息,在 RP2 上创建(S2,G)。从 S2 发来的组播数据沿 RPT 到达 U2。
  1. RP 收到源 DR 发过来的 Register 消息,重新封装成 Register 消息转给自己的对等体,共享组播源信息。
  • RP1 收到源 DR1 发过来的(S1,G)Register 消息后,将该 Register 消息的源地址和目的地址替换为 1.1.1.1 和 2.2.2.2,重新封装后发送到 RP2。RP2 收到该 Register 消息后检查发现该 Register 消息来自对等体 1.1.1.1,不再转发给其它对等体,只是处理该 Register 消息。

  • RP2 收到源 DR2 发过来的(S2,G)Register 消息后,将该 Register 消息的源地址和目的地址替换为 2.2.2.2 和 1.1.1.1,重新封装后发送到 RP1。RP1 收到该 Register 消息后检查发现该 Register 消息来自对等体 2.2.2.2,不再转发给其它对等体,只是处理该 Register 消息。

  1. RP 加入以源端 DR 为根的 SPT,将组播数据引下来。
  • RP1 向 S2 发送 Join 消息。从 S2 发来的组播数据先沿 SPT 到达 RP1,再沿 RPT 到达 U1。

  • RP2 向 S1 发送 Join 消息。从 S1 发来的组播数据先沿 SPT 到达 RP2,再沿 RPT 到达 U2。

  1. 接收者 DR 接收到组播数据后,自行决定是否发起 SPT 切换。

RPT 建立(RPT Setup)

RPT 建立原理图
在这里插入图片描述

建立 RPT 的过程即建立组播数据转发路径的过程。

RPT 的建立及数据转发过程如下:

  • 当网络中出现活跃的组播源(组播源向某组播组 G 发送第一个组播数据)时,组播源端 DR 将组播数据封装在 Register 消息中单播发往 RP,在 RP 上创建(S,G)表项,注册源信息。

  • 当网络中出现组成员(用户主机通过 IGMP 加入某组播组 G)时,接收者 DR 向 RP 发送 Join 消息,在通向 RP 的路径上逐跳创建(*,G)表项,生成一棵以 RP 为根的 RPT。

  • 当网络中同时出现组成员和向该组发送数据的组播源时,以 RP 为中转站,组播数据先被封装在 Register 消息中单播发往 RP,再沿 RPT 到达组成员。

RPT 实现了组播数据按需转发的目的,减少无需求数据对网络带宽的占用。

为了减轻 RPT 的转发负担、提高组播数据转发效率,PIM-SM 允许进行 SPT 切换。即建立一条从数据源直接到接收者的转发链路,组播源可以沿 SPT 将组播数据转发到接收者。

SPT 切换(SPT Switchover)

在 PIM-SM 网络中,一个组播组只对应一个 RP,只构建一棵 RPT。在未进行 SPT 切换的情况下,所有发往该组的组播报文都必须先封装在 Register 消息中发往 RP,RP 解封装后,再沿 RPT 分发。

由于所有通过 RPT 转发的组播数据报文必须经过 RP 中转,所以当组播数据报文逐渐增多时,会对 RP 形成巨大的负担。为了解决此问题,PIM-SM 允许由 RP 或接收者 DR 触发 SPT 切换,建立一条从数据源直接到接收者的转发链路。

接收者 DR 进行 SPT 切换的原理图
在这里插入图片描述
SPT 切换的两种方式:

  • RP 触发 SPT 切换

RP 收到源端 DR 的 Register 消息后,将封装在 Register 消息中的组播数据沿 RPT 转发给组成员,同时 RP 会向源端 DR 发送 SPT Join 消息,建立 RP 到源的 SPT。

SPT 建立成功后,当 RP 从 SPT 接收到第一个组播数据报文后,RP 停止使用 Register 消息,使源端 DR 和 RP 免除了频繁的封装 / 解封装。组播数据从与组播源直接相连的路由器,通过 SPT 树转发到 RP,再沿 RPT 转发给组成员。

  • 组成员端 DR 触发 SPT 切换。

    1. 组播数据由 RPT 转发,接收者 DR(DeviceD)向 RP 发送 (*,G) Join 消息,组播数据沿组播源 DR (DeviceA)->RP (DeviceB)-> 接收者 DR (DeviceD) 到达接收者(Receiver)。

    2. 接收者 DR 周期性检测组播报文的转发速率。一旦发现(S,G)报文的转发速率超过阈值,则触发 SPT 切换。

    3. 接收者 DR 直接向组播源端 DR 发送 (S,G) Join 消息,当接收者 DR 收到沿 SPT 发来的组播数据后,丢弃沿 RPT 发来的组播数据,同时向 RP 发送 Prune 消息,删除 RPT 中的此接收者,实现从 RPT 向 SPT 的切换。

    4. 组播数据由 SPT 转发,组播数据沿组播源 DR (DeviceA)-> 接收者 DR (DeviceD) 到达接收者(Receiver)。

建立从源到组成员的 SPT 后,后续报文可能不再流经 RP。由于 RPT 不一定是路径最短的树,进行 SPT 切换后,减少了组播数据在网络中的传输延迟。

网络中可能存在一个组播源向多个组播组发送组播报文。若指定了针对某个组播组范围的 SPT 切换策略:

  • SPT 切换前,这些报文都沿 RPT 到达组成员端 DR。

  • 完成 SPT 切换后,只有组播源发往属于 SPT 切换策略中组播组范围内的组播组的报文沿 SPT 转发,而组播源发往其他组播组的报文,仍会沿 RPT 转发。

断言(Assert)

在组播网络中,如果出现如下情况,则说明网段上还存在着其他的组播转发者。

  • 该组播报文不能通过 RPF 检查。

  • 接收到该组播报文的接口是本路由器上(S,G)表项中的一个下游接口。

此时,路由器会执行 Assert 机制:

路由器从该下游接口发送 Assert 消息。同时,该下游接口也接收到了来自该网段上其他组播转发者的 Assert 消息。Assert 消息的目的地址为 224.0.0.13,源地址为下游接口地址,TTL 为 1。Assert 消息中携带:该 PIM 设备到组播源或 RP 的开销、所采用的单播路由协议的优先级、组播组地址 G。

路由器将自身条件与对方报文中携带的信息进行比较,称为 Assert 竞选。规则如下:

  1. 单播路由协议优先级较高者获胜。

  2. 如果优先级相同,则到组播源的开销较小者获胜。

  3. 如果以上都相同,则下游接口 IP 地址最大者获胜。

根据 Assert 竞选结果,路由器将执行不同的操作:

  • 如果获胜,则该下游接口保持转发状态,路由器负责后续在该网段上的(S,G)转发,该下游接口称为 Assert winner。

  • 如果落败,则禁止该下游接口转发组播报文,将其从(S,G)表项下游接口列表中删除。该下游接口称为 Assert loser。

Assert 竞选结束后,该网段上只存在一个有下游接口的上游路由器,只传输一份组播报文。Assert winner 周期性发送 Assert 消息,维持 Assert winner 的状态。若 Assert loser 的定时器超时后,Assert loser 仍没有收到 Assert winner 的 Assert 消息,则重新添加下游接口转发组播数据。

DR 切换延迟(DR Switchover Delay)

如果当前 DR 出现故障,将导致 PIM 邻居关系超时,其他 PIM 邻居之间会触发新一轮的 DR 竞选过程。

缺省情况下,接口由 DR 变为非 DR 时,路由器会立即停止使用此接口转发数据。如果此时新 DR 的组播数据还未到达,那么将会出现短暂的组播数据断流。

在一个接口配置 PIM DR 切换延迟后,当某个使能 PIM-SM 的接口由于收到一个新邻居的 Hello 消息导致该接口由 DR 变为非 DR 时,该接口在延迟时间超时前仍然具有部分 DR 功能,并继续转发组播数据。

如果在 DR 延迟期间收到新 DR 转发过来的数据,处于 DR 延迟的路由器将会立刻停止转发数据,从而保证不会出现重复数据流的现象。此时在共享网段上若收到新的 IGMP Report 消息,处于 DR 切换延迟状态的旧 DR 将不会为其向上游发送 PIM Join 消息,而由新 DR 处理。

说明
在 DR 切换延迟期间,如果新 DR 收到原 DR 发送的组播数据,则会触发 Assert 竞选。

PIM-SM 管理域机制

为了实现网络管理精细化,可以选择将一个 PIM-SM 网络划分为多个 BSR 管理域和一个 Global 域。这样一方面可以有效地分担单一 BSR 的管理压力,另一方面可以使用私有组地址为特定区域的用户提供专门服务。

每个 BSR 管理域中维护一个 BSR,为某一特定地址范围的组播组服务。Global 域中维护一个 BSR,为所有剩余的组播组服务。

下文将从地域空间、组地址范围、组播功能三个角度分析 BSR 管理域 Global 域的关系。

  • 地域空间

BSR 管理域_地域空间
在这里插入图片描述

对于有相同组地址的不同管理域,各 BSR 管理域所包含的路由器互不相同,同一路由器不能从属于多个 BSR 管理域。各 BSR 管理域在地域上相互独立,且相互隔离。BSR 管理域是针对特定地址范围的组播组的管理区域,属于此范围的组播报文只能在本管理域内传播,无法通过 BSR 管理域边界。

Global 域包含 PIM-SM 网络内的全部路由器。不属于任意 BSR 管理域的组播报文,可以在整个 PIM 网络范围内传播。

  • 组地址范围

BSR 管理域_地址范围
在这里插入图片描述

每个 BSR 管理域为特定地址范围的组播组提供服务,不同的 BSR 管理域服务的组播组范围可以重叠。该组播地址只在本 BSR 管理域内有效,相当于私有组地址。BSR1 域和 BSR3 域对应的组地址范围出现重叠。

不属于任何 BSR 管理域的组播组,一律属于 Global 域的服务范围。即 Global 域组地址范围是 G-G1-G2。

  • 组播功能

Global 域和每个 BSR 管理域都包含针对自己域的 C-RP 和 BSR 设备,这些设备在行使相应功能时,仅在本域内有效。即 BSR 机制和 RP 竞选在各管理域之间是隔离的。

每个 BSR 管理域都有自己的边界,该管理域的组播信息(C-RP Advertisement 消息、Bootstrap 消息等)不能跨越域传播。同时 Global 域的组播信息可以在整个 Global 域内传递,可以穿越任意 BSR 管理域。

PIM-SSM

采用 PIM-SM 协议实现组播数据传输需要在网络中维护 RP(Rendezvous Point),若网络中的接收者已经知道了组播源的具体位置,希望直接向组播源请求组播数据,则可以通过 PIM-SSM(Protocol Independent Multicast-Source-Specific Multicast)实现组播组成员的快速加入,直接在组播源和组成员之间建立 SPT(Shortest Path Tree),无需维护 RP。

与 ASM 模型相比,SSM 模型无需维护 RP、无需构建 RPT、无需注册组播源。

SSM 模型是借助 PIM-SM 的部分技术和 IGMPv3/MLDv2(Multicast Listener Discovery version 2)来实现的,其建立组播转发树的过程与 PIM-SM 创建 SPT 树的过程相似,即接收者 DR(Designated Router)在知道组播源的具体位置后,直接向组播源发送 Join 消息,将组播数据发送到接收者。

说明
在 SSM 方式下,组播流量的转发基于一个(S,G)通道(类似于电视频道),组播的接收者必须先加入某个特定的组播流的通道,才能够接收该通道的组播流。即接收者必须订阅某个通道或者取消某个通道来决定是否接收组播流量,目前,支持通道订阅的标准协议只有 IGMPv3,其实就是接收者同时指定加入的组以及组播源来完成通道订阅。

相关概念

由于 PIM-SSM 是借助 PIM-SM 的部分技术实现的,因此,PIM-SSM 的相关概念在 PIM-SM 中已体现,详细内容请参见上文 PIM-SM 中相关概念。

实现过程

PIM-SSM 域中组播数据转发的实现过程是:

  1. 邻居发现(Neighbor Discovery)

在 PIM-SSM 域中,设备通过周期性的向所有 PIM 设备发送 Hello 消息,来发现 PIM 邻居,维护各设备之间的 PIM 邻居关系。

说明
缺省情况下,无论 PIM 设备是否收到来自邻居的 Hello 消息,都会接收其他的 PIM 控制消息或组播报文。但是如果 PIM 设备配置了邻居检查功能,则只有在 PIM 设备接收到来自邻居的 Hello 消息后,才会接收其他的 PIM 控制消息或组播报文。

  1. DR 竞选(DR Election)

PIM 设备之间交互 Hello 报文为共享网络选举 DR,接收者 DR 将作为该共享网络中组播数据的唯一转发者。

  1. SPT 构建

在 PIM-SSM 网络中,网络中的用户能够预先知道组播源的具体位置。因此用户在加入组播组时,可以明确指定从哪些源接收信息。组成员端 DR 了解到用户的需求后,直接向组播源的方向发送 Join 消息,在组播源与组成员之间建立 SPT,组播数据由组播源沿 SPT 到达接收者。

说明

  • 除可以采用用户动态加入的方式直接构建 SPT 外,还可以通过静态组加入和 SSM-Mapping 建立组播分发树,构建 SPT。
  • 在 SSM 中,DR 仅在与组成员相连的共享网段上有效。由 DR 向组播源的方向发送 Join 消息,逐跳创建(S,G)表项,构建 SPT。
  • PIM-SSM 支持 PIM DR 切换延迟、PIM Silent、BFD for PIM 特性。

PIM 可靠性

为确保 PIM 协议在网络中应用的可靠性,实现了以下机制:

  • BFD for PIM

BFD for PIM

为了减小设备故障对业务的影响,提高网络的可靠性,网络设备需要快速检测到与相邻设备间的通信故障,以便及时采取措施,保证业务继续进行。

现有的故障检测方法主要包括:

  • 硬件检测:例如通过 SDH(Synchronous Digital Hierarchy,同步数字体系)告警检测链路故障。硬件检测的优点是可以很快发现链路故障,但此检测方法不适用于所有介质。

  • 慢 Hello 机制:通常是指路由协议的 Hello 机制。这种机制检测到故障所需时间为秒级。对于高速数据传输,例如吉比特速率级,超过 1 秒的检测时间将导致大量数据丢失;对于时延敏感的业务,例如语音业务,超过 1 秒的延迟也是不能接受的。

  • 其他检测机制:不同的协议或设备制造商有时会提供专用的检测机制,但在系统间互联互通时,这样的专用检测机制通常难以部署。

BFD(Bidirectional Forwarding Detection)检测机制可提供毫秒级的快速检测,并采用单一机制对所有类型的介质、协议层进行检测,实现全网统一的检测机制。其检测原理是在两个系统间建立 BFD 会话,并沿它们之间的路径周期性发送 BFD 检测报文,如果一方在检测周期内没有收到 BFD 检测报文,则认为该路径发生了故障。

在组播的应用中,如果共享网段上的当前 DR(Designated Router)发生故障,其他 PIM 邻居会等到邻居关系超时才触发新一轮的 DR 竞选过程,导致组播数据传输中断,中断的时间将不小于邻居关系的超时时间,通常是秒级。

BFD for PIM 能够在毫秒级内检测共享网段内的链路状态,快速响应 PIM 邻居故障。如果配置了 BFD for PIM 功能的接口在检测周期内没有收到当前 DR 发送的 BFD 检测报文,则认为当前 DR 发生故障,BFD 快速把会话状态通告给路由管理模块(RM),再由 RM 通告给 PIM。PIM 模块触发新一轮的 DR 竞选过程,而不是等到邻居关系超时,从而缩小组播数据传输的中断时间,提高组播数据传输的可靠性。

说明
目前,BFD for PIM 功能支持 IPv4 和 IPv6 PIM-SM/SSM(Source-Specific Multicast)网络。

在与用户主机相连的共享网段上,DeviceB 的下游接口 Port 2 和 DeviceC 的下游接口 Port 1 之间建立 PIM BFD session,通过在链路两端发送 BFD 检测报文检测链路状态。

BFD for PIM 原理图
在这里插入图片描述
DeviceB 的下游接口 Port 2 作为当前 DR,负责接收端组播数据的转发。若接口 Port 2 发生故障,BFD 快速把会话状态通告给 RM(Routing Management),再由 RM 通告给 PIM。PIM 模块触发新一轮的 DR 竞选,DeviceC 的下游接口 Port 1 作为新当选的 DR,在短时间内向接收端转发组播数据,从而缩小组播数据传输的中断时间。

PIM 安全性

组播业务除了实现 PIM 协议的基本功能外,还实现了 PIM 安全性的管理功能,提供了限制、过滤、检查等手段,确保组播业务在网络中的正常运行。
PIM 安全特性

PIM 安全特性适用协议目的原理适用设备保护设备
BSR 地址范围限制IPv4 PIM-SM IPv6 PIM-SM在应用 BSR(BootStrap Router)机制的 PIM-SM 网络中,任何一台组播路由器都可以被配置为 C-BSR(Candidate-BootStrap Router),从而参与 BSR 竞选。一旦竞选获胜,就会掌管网络中 RP 信息的发布权。
此功能用来防止 BSR 欺骗,避免恶意主机取代网络中合法的 BSR,确保 BSR 的安全性。
通过配置 ACL 并定义过滤规则,可限定合法的 BSR 地址范围,使设备丢弃来自该地址范围之外的 BSR 报文。网络中的所有组播设备BSR
C-RP 地址范围限制IPv4 PIM-SM IPv6 PIM-SM在应用 BSR 机制的 PIM-SM 网络中,任何一台组播路由器都可以被配置为 C-RP(Candidate-Rendezvous Point),为该地址范围内的组播组服务。
C-RP 通过单播发送 C-RP Advertisement 消息到 BSR,BSR 将收集到的所有 C-RP 信息汇总为 RP-Set,使用 Bootstrap 消息在全网内扩散。之后,由本地组播路由器根据 RP-Set 计算出特定组地址范围对应的 RP。
此功能用来防止 C-RP 欺骗,避免恶意主机取代网络中合法的 C-RP,确保 C-RP 的安全性,从而保证正确选举出网络中的 RP。
通过配置 ACL 并定义过滤规则,可限定合法的 C-RP 地址范围及其服务的组播组范围,使 BSR 丢弃来自该地址范围之外的 C-RP Advertisement 消息。C-BSRRP
PIM 表项的数量限制IPv4 PIM-SM IPv4 PIM-SSM此功能用来对 PIM-SM 和 PIM-SSM 表项数量进行限制,避免由于组播数据或者组播 IGMP/PIM 协议报文的攻击导致组播路由表项过多,使路由器内存占用过多或 CPU 使用率过高,从而确保组播业务在网络中的安全性。通过配置全局 PIM 表项数量限制,可以控制 PIM 表项建立的数量。
如果超过 PIM 表项数量限制,将不能再建立 PIM 表项。PIM (*, G) 和 (S, G) 表项是分别进行限制的,即:如果超过 PIM (*, G) 表项的限制,则不能再建立 PIM-SM 的 (*, G) 表项。
如果超过 PIM (S, G) 表项的限制,则不能再建立 PIM-SM 的 (S, G) 表项和 PIM-SSM 的 (S, G) 表项。
网络中的所有 PIM 设备网络中的所有 PIM 设备
Register 消息过滤IPv4 PIM-SM IPv6 PIM-SM在 PIM-SM 网络中,任何一个新出现的组播源都必须首先在 RP 处 “注册”,即由组播源 DR(Designated Router)向 RP 发送 Register 消息,继而才能将组播数据传输到组成员。
此功能用来避免由于恶意设备发送非法 Register 消息攻击网络,进而导致组播转发树无法正常建立,组播数据不能正确到达接收者。
通过配置 ACL 并定义过滤规则,可实现 RP 过滤由组播源 DR 发送的 Register 消息,根据报文过滤规则接收或拒绝和规则匹配的 Register 消息。RPRP
PIM 邻居过滤IPv4 PIM-SM IPv6 PIM-SM IPv4 PIM-SSM IPv6 PIM-SSM网络中,可能会有某些未知设备运行 PIM 协议,阻止组播路由器成为 DR。
此功能用来防止网络中的组播路由器与其它未知设备建立 PIM 邻居关系或未知设备成为 DR。
通过配置 ACL 并定义过滤规则,可实现接口只与符合过滤规则的地址建立邻居关系,删除不符合过滤规则的邻居。网络中的所有组播设备网络中的所有组播设备
Join 信息过滤IPv4 PIM-SM IPv6 PIM-SM IPv4 PIM-SSM IPv6 PIM-SSM接口上接收的 Join/Prune 消息中包含 Join 信息和 Prune 信息。
此功能用来过滤 Join 信息,从而防止非法用户加入。
通过配置 ACL 并定义过滤规则,可用来过滤 Join 信息,设备根据符合过滤规则的 Join 信息建立 PIM 表项。网络中的所有组播设备网络中的所有组播设备
源地址过滤IPv4 PIM-SM IPv6 PIM-SM IPv4 PIM-SSM IPv6 PIM-SSM此功能用来实现设备根据源或源组对接收的组播数据报文进行过滤,从而确保网络中组播数据报文的安全性。通过配置 ACL 并定义过滤规则,设备只转发源地址属于过滤规则范围内的组播报文,或转发源地址和组地址都属于过滤规则范围内的组播报文。网络中的所有组播设备网络中的所有组播设备
PIM 邻居检查IPv4 PIM-SM IPv6 PIM-SM IPv4 PIM-SSM IPv6 PIM-SSM此功能用来保证设备接收或发送的 Join/Prune 消息和 Assert 消息的安全性。接收或发送 Join/Prune 消息和 Assert 消息时,检查该消息是否来自 PIM 邻居或发送给 PIM 邻居,如果是则处理,否则丢弃。网络中的所有组播设备网络中的所有组播设备
PIM SilentIPv4 PIM-SM IPv6 PIM-SM IPv4 PIM-SSM IPv6 PIM-SSM若在设备直连用户主机的接口上使能了 PIM-SM,就可以在该接口上建立 PIM 邻居,处理各类 PIM 协议报文。但此配置同时存在着安全隐患:当恶意主机模拟发送 PIM Hello 消息时,有可能导致设备瘫痪。
此功能用来避免配置了 PIM-SM 的设备的接口受到模拟的 PIM 邻居的攻击。
禁止接口接收和转发任何 PIM 协议报文,删除该接口上的所有 PIM 邻居。与用户主机网段直连的接口,且该网段上只能连接一台 PIM 设备与用户主机网段直连的 PIM 设备
PIM IPSec(IP Security)IPv4 PIM-SM IPv6 PIM-SM IPv4 PIM-SSM IPv6 PIM-SSM此功能用来对 IPv4 或 IPv6 PIM 协议报文进行认证处理,防止伪造的 IPv4 或 IPv6 PIM 协议报文攻击或 DOS(Deny of Service)攻击,从而确保组播业务在网络中的安全性。PIM IPSec 是通过指定安全联盟 SA(Security Association)对接口发送和接收的 IPv4 或 IPv6 PIM 协议报文进行认证处理。
处理过程为:接口发送 IPv4 或 IPv6 PIM 协议报文前,IPSec 对 IPv4 或 IPv6 PIM 协议报文封装 AH(Authentication Header)报文头。接口收到 IPv4 或 IPv6 PIM 协议报文后,IPSec 通过 SA 检查 AH 报文头,如果检查成功,IPv4 或 IPv6 PIM 协议报文被转发,否则被丢弃。
可以认证的 IPv4 或 IPv6 PIM 协议报文主要分为:IPv4 或 IPv6 PIM 组播协议报文。例如 Hello 报文、Join/Prune 报文等。
IPv4 或 IPv6 PIM 单播协议报文。例如 Register 报文、Register-Stop 报文等。
网络中的所有 PIM 设备网络中的所有 PIM 设备

PIM FRR

PIM FRR 通过单播备份 FRR 路径建立主备链路,为组播 PIM-SM 或者 PIM-SSM(Protocol Independent Multicast-Source-Specific Multicast)的 SPT(Shortest Path Tree)转发树提供链路或节点故障保护,确保流量中断时间小于 50ms,实现链路故障后可以快速切换,从而减小组播流量的丢失。

产生原因

组播转发树的建立依赖于单播路由,当网络中的链路或节点故障时,需要经历单播路由重新收敛,从而触发组播转发树的重新建立,但这个过程耗时较长,会导致组播流量丢失过多。

PIM FRR(Fast ReRoute)技术可以解决此问题。PIM FRR 根据单播备份 FRR 路由,分别向组播源发送主备双加入,建立主备组播转发树,使主备链路交叉节点上分别从主备链路各收到一份组播流量。转发层面选收主链路的流量,丢弃备链路的流量,当主链路发生故障时,立刻选收备链路的流量,从而减少组播流量的丢失。

说明
目前仅支持 IPv4 PIM-SSM 或者 IPv4 PIM-SM 中的 SPT 转发树的快速保护。且对于 Extranet 场景,仅支持源 VPN 表项,不支持接收者 VPN 表项。

实现过程

PIM FRR 的实现过程包括下面三个步骤:

  1. 主备组播转发树的建立

PIM-SM 中完成 SPT 切换的(S, G)表项或者 PIM-SSM 的(S, G)表项根据单播路由添加主入接口后,查找单播是否存在备份 FRR 路由,如果存在则添加备份入接口。同时向组播源发送主备双份 PIM 加入报文,建立主备组播转发树。主备组播转发树的建立过程。

主备组播转发树的建立示意图

在这里插入图片描述
2. 故障检测及保护

建立主备组播转发树之后,存在主备路由的设备能收到双份组播流量(如图 1 中的 DeviceA)。转发层面选收主链路的流量,丢弃备链路的流量,当某一主链路或节点发生故障时,通过检测主链路的组播流量,能够快速感知链路或节点故障,并立刻选收备链路流量。下面针对链路故障和节点故障,分别举例如所示。

PIM FRR 链路及节点保护

故障类型故障前故障后
本端链路故障如图所示,DeviceA 选收主链路的组播流量,丢弃备链路的组播流量。
PIM FRR 故障前示意图
在这里插入图片描述
如图所示,当 DeviceA 所在的主链路发生故障时,则 DeviceA 立刻选收从 DeviceD 来的备份路径流量,即 DeviceB->DeviceD->DeviceA。
PIM FRR 故障后示意图
在这里插入图片描述
节点故障如图所示,DeviceA 选收主链路的组播流量,丢弃备链路的组播流量。
PIM FRR 故障前示意图
在这里插入图片描述
如图所示,当节点 DeviceB 发生故障时,则 DeviceA 立刻选收从 DeviceD 来的备份路径流量,即 DeviceC->DeviceD->DeviceA。
PIM FRR 故障后示意图
在这里插入图片描述
远端链路故障如图所示,DeviceA 选收主链路的组播流量,丢弃备链路的组播流量。
PIM FRR 故障前示意图
在这里插入图片描述
如图所示,当远端链路发生故障时,DeviceA 通过检测组播流量感知到故障,则 DeviceA 立刻选收从 DeviceD 来的备份路径流量,即 DeviceC->DeviceD->DeviceA。
PIM FRR 故障后示意图
在这里插入图片描述
  1. 回切流程

当链路或节点故障恢复时,PIM 协议层感知路由变化后,启动路由回切流程,再平滑收敛到当前最优的主路径上。

IGP FRR 无法计算备份路由的 PIM FRR 场景

PIM FRR 依赖于 IGP FRR 计算主备路由。一般情况下,通过 IGP FRR 是可以在每个节点上算出主备路由的,但是当组网中节点不断增加时,就会出现某些节点无法算出备份路由的场景。

为了解决上述问题,需要通过组播静态路由计算主备路由。

以下面的 NON-ECMP 组网为例:

环形组网 PIM FRR 示意图
在这里插入图片描述

说明
NON-ECMP 组网 PIM FRR 场景下,组播源与接收者之间的设备必须都为设备且配置了 PIM FRR。

如上图所示环形组网中,DeviceC 与接收者相连,DeviceC 到组播源的主路径为 DeviceC->DeviceB->DeviceA,DeviceD->DeviceC 之间的链路根据 IGP FRR 是无法生成备份路由的,因为 IGP FRR 计算备份路由要求备用下一跳节点 DeviceD 到 DeviceA 的距离必须小于 DeviceC 到 DeviceA 与 DeviceD 到 DeviceC 的距离之和,即 DeviceD->DeviceE->DeviceF->DeviceA 的 cost 值要小于 DeviceC->DeviceA 的 cost 值 + DeviceD->DeviceC 的 cost 值,但是上述组网中不满足这个要求,因此在这种组网中,IGP FRR 无法为 PIM FRR 计算出备用路径。

为了解决上述问题,使用组播静态配置方式指定到组播源的主用路径和备用路径。配置组播静态路由需要指定出接口及下一跳地址,以下以 DeviceC 为基准点进行举例说明。DeviceC 左侧设备配置的主用路径为顺时针方向,备用路径为逆时针方向;DeviceC 右侧设备配置的主用路径为逆时针方向,备用路径为顺时针方向,即:

  • 组播静态路由主链路:DeviceC->DeviceB->DeviceA,优先级高。

  • 组播静态路由备链路:DeviceC->DeviceD->DeviceE->DeviceF->DeviceA,优先级低。

故障前,DeviceC 选收主链路的组播流量,丢弃备链路的组播流量。当发生故障后,例如 DeviceB->DeviceC 链路故障,DeviceC 立刻选收备份路径流量。

说明

  • 出现远端链路故障(比如 DeviceA 和 DeviceB 之间的链路故障)时,DeiveC 控制层面无法感知故障,PIM 表项主备入接口维护不变,转发层面会切换到备路径进行流量转发。
  • 相邻两台设备,配置组播静态路由的时候,都把对方配置为主路由,那么此时无法实现链路故障保护功能,也接收不到组播流量。
  • 相邻两台设备,配置的组播静态路由主备下一跳出接口需要在同一个链路上(以 DeviceC 和 DeviceB 为例,DeviceC 配置的组播静态路由主路由下一跳出接口与 DeviceB 配置的组播静态路由备路由下一跳出接口需要在同一个链路上)。如果相邻设备存在多条链路,需要将多条链路绑定在 trunk 接口。
  • 当有多环交叉时,对于多环交叉节点,配置组播静态路由时需要将朝向源方向指定为主路由。
  • 当在组网添加节点时,需要修改上下游节点的组播静态路由的下一跳。

使用价值

PIM FRR 可以为网络中对实时性要求比较高的组播业务提供链路故障保护功能。

使用限制

当前 PIM FRR 的使用限制如下:

  • 不支持部署在组播 Extranet 场景中。

  • 仅支持应用在 IPv4 网络中。

  • 对于 ECMP(Equal-Cost Multiple Path,等值多路径负载分担)场景,由于 IGP 无法计算出备路径,因此不支持节点保护优先。

  • 对于 NON-ECMP 场景,存在以下限制:

  • 如果在使用 IGP 的网络中部署 PIM FRR,由于 IGP 没有备份备用路径,因此在主备倒换过程中,组播备用路径可能会因为平滑而被删除,导致切换过程中主路径故障,无法进行快速切换。

  • 仅支持基于 LFA FRR 的 NON-ECMP PIM FRR,不支持基于 Remote FRR 的 NON-ECMP PIM FRR。

  • 如果在使用静态路由的网络中部署 PIM FRR,相邻的设备不能互相把对方设置为主路由,否则会导致无法收到组播数据,PIM FRR 也无法实现路径保护。

  • 如果在使用静态路由的网络中部署 PIM FRR,在网络中增加新的节点时,需要同时修改上下游设备及受影响设备的组播静态路由。

  • 在基于 LFA FRR 的网络中部署时,会继承 IGP LFA FRR 的使用限制。

  • 在基于 LFA FRR 的网络中部署时,如果备份路径为 ECMP 路径,则不支持主备路径快速切换。

  • 如果设备存在配置了 TE 隧道,已使能 Local-MT,且 TE 接口为到组播源的下一跳接口,则即使部署了 PIM FRR,也无法生成主备路径对组播流量进行保护。

  • 在使用组播静态路由的网络中,存在以下限制:

  • 如果配置了负载分担,则相邻设备的负载分担模式必须一致。

  • 如果将连接组播源的主路径的下一跳指定为相邻设备,会出现无法响应远端路由故障的情况。该状况会导致组播用户无法接受到组播流量。为解决该问题,可以通过将下一跳地址配置为组播源地址,同时配置组播静态路由作为备份路由。(对于该解决方法,网络中不能存在等价路由,如果有设备上存在等价路由,且等价路由下一跳的出接口连接了两台及以上设备,需要通过修改开销值来消除等价路由。)

  • 如果配置的主备链路形成环路,则 PIM 协议也会受环路影响,即使用户退出,停止接收组播流量,PIM 协议表项也会一致保留,无法删除。

  • PIM FRR 仅支持 PIM-SM 的 SPT 表项(S,G)表项,有组播流量时才会生成备路径和 PIM-SSM 表项。

  • 对于 IPTV 组播业务不连续的场景,不支持部署 PIM FRR 进行路径保护。

基于组播源克隆的 PIM FRR

基于组播源克隆的 PIM FRR 通过克隆加入消息,并手工指定的 RPF(Reverse Path Forwarding)向量路径,组播源的组播流量克隆后通过不同的 RPF 向量路径发送,从而实现为组播服务提供链路或节点故障保护,在链路故障后可以快速切换,确保流量中断时间小于 50ms,从而减小组播流量的丢失。

产生原因

PIM FRR 基于单播路由 FRR 或组播静态路由 FRR 建立备份路径,实现对链路或节点的保障。但对于较为复杂的场景,现有的 PIM FRR 无法有效地提供端到端的节点或链路保护机制。

基于组播源克隆的 PIM FRR(Fast ReRoute)技术可以解决此问题。其使用规划的 RPF 向量路径,将克隆的到组播源的加入消息发送至组播源,而后将克隆的组播流量发送至组播用户。组播接收设备选收主链路的流量,丢弃备链路的流量,当主链路发生故障时,立刻选收备链路的流量,从而减少组播流量的丢失。

说明

  • 目前仅支持 IPv4 PIM-SM,IPv4 PIM-SSM 和 Rosen MVPN 场景。

实现过程

基于组播源克隆的 PIM FRR 通过克隆到组播源的加入消息,并指定到组播源的两条路径,头端克隆组播源的组播流量,并按之前规划的路径分别向组播用户发送,从而实现组播流量的双流双发选收。

基于组播源克隆的 PIM FRR 示意图
在这里插入图片描述
基于组播源克隆的 PIM FRR 的实现过程包括下面三个步骤:

  1. 到组播源的加入克隆

用户侧设备向组播源发送 (S, G) 加入时,会克隆为 (S1, G) 和 (S2, G),同时发向组播源。

  1. 指定 RPF 向量路径

在用户侧设备中指定 (S1, G) 和 (S2, G) 到组播源的 RPF 矢量路径,到组播源的加入消息会按照指定的路径分别发送。RPF 向量路径可分为严格显式路径和松散显式路径,严格显式路径中指定节点的下一跳时,会使用下一节点(需互为 PIM 邻居)上直连当前节点的接口 IP 地址作为本节点的下一跳地址;松散显式路径中指定节点下一跳时,可以使用下一节点的任意接口 IP 地址(路由可达即可)作为本节点的下一跳地址。

  1. 组播源的组播流量克隆

组播源侧将组播源根据 (S, G) 发送的组播流量克隆为 (S1, G) 和 (S2, G) 的组播流量,然后将克隆后的两份组播流量按照指定的 RPF 向量路径发送至组播用户。

使用场景

基于严格显式路径的源克隆方式 PIM FRR

如下图所示,Device A 下挂组播用户 Receiver1,用户通过 IGMPv3 点播组播服务。组播源连接在 Device F 上。

基于严格显式路径的组播源克隆 PIM FRR 示意图
在这里插入图片描述
执行步骤如下:

  • 在 Device A 上配置克隆到组播源的加入后,组播组 G 加入组播源 S 的加入消息会被克隆为 (S1, G) 和 (S2, G),然后通过指定到 S1 和 S2 的显式路径,到 S1 的路径为主路径,到 S2 的路径为备路径。其中到 S1 的路径的各节点下一跳分别为 InterfaceB、InterfaceC、InterfaceF1;到 S2 的路径的各节点下一跳分别为 InterfaceD、InterfaceE、InterfaceF2。两条路径均到达 Device F。

  • 在 Device F 上配置组播流量的克隆,将按 (S, G) 转发的组播流量复制为按 (S1, G) 和 (S2, G) 转发。两组相同的组播流量会按照加入消息所建立的主备路径转发。

  • Device A 对收到的两份组播流量进行选收,接收从主路径收到的组播流量,丢弃从备路径收到的组播流量。当主路径出现故障时,立即切换到接收备路径的组播流量。

基于松散显式路径的源克隆方式 PIM FRR

如下图所示,Device A 下挂组播用户 Receiver1,用户通过 IGMPv3 点播组播服务。组播源连接在 Device F 上。

基于松散显式路径的组播源克隆 PIM FRR 示意图
在这里插入图片描述

执行步骤如下:

  • 在 Device A 上配置克隆到组播源的加入后,组播组 G 加入组播源 S 的加入消息会被克隆为 (S1, G) 和 (S2, G),然后通过指定到 S1 和 S2 的显式路径,到 S1 的路径为主路径,到 S2 的路径为备路径。其中到 S1 的路径的各节点下一跳分别为 Loopback2、Loopback3、Loopback6;到 S2 的路径的各节点下一跳分别为 Loopback4、Loopback5、Loopback6。两条路径均到达 Device F。

  • 在 Device F 上配置组播流量的克隆,将按 (S, G) 转发的组播流量复制为按 (S1, G) 和 (S2, G) 转发。两组相同的组播流量会按照加入消息所建立的主备路径转发。

  • Device A 对收到的两份组播流量进行选收,接收从主路径收到的组播流量,丢弃从备路径收到的组播流量。当主路径出现故障时,立即切换到接收备路径的组播流量。

基于严格显式路径的 Rosen MVPN 场景下源克隆方式 PIM FRR

如下图所示,Device A 下挂组播用户 Receiver1,用户通过 IGMPv3 点播组播服务。组播源连接在 Device F 上。其中 Device A、Device C 和 Device E 为 PE 设备,Device F 为 CE 设备。用户侧和组播源侧网络为私网。

基于严格显式路径的 Rosen MVPN 场景下组播源克隆 PIM FRR 示意图
在这里插入图片描述
执行步骤如下:

  • 在 Device A 上配置将到组播源 S 的加入克隆为到组播源 S1 和 S2 的加入后,组播组 G 加入组播源 S 的加入消息会被克隆为 (S1, G) 和 (S2, G),然后通过指定到 S1 和 S2 的私网严格显式路径,其中到 S1 的路径为主路径,到 S2 的路径为备路径。S1 和 S2 的路径的下一跳分别为 Loopback3、Loopback5。Device C 和 Device E 收到加入消息后,在私网中转发至组播源侧设备 Device F,请求组播数据。

  • Device F 向 Device C 和 Device E 转发组播流量。Device C 和 DeviceE 上配置组播流量的克隆,Device C 将收到的组播流量克隆,然后按 (S11, G) 和 (S12, G) 转发;Device E 将收到的组播流量克隆,然后按 (S21, G) 和 (S22, G) 转发。(S11, G) 和 (S21, G) 的组播流量按照 Device A 指定的公网严格显式路径,向 Device A 发送;(S12, G) 和 (S22, G) 的组播流量按照 Device A 指定的公网严格显式路径,向 Device B 和 Device D 发送,然后再转发至 Device A。Device A 中配置了将到 S1 的加入克隆为到 S11 和 S12 的加入,到 S2 的加入克隆为到 S21 和 S22 的加入,进而接收上游转发的四份组播流量。

  • Device A 从 Device B 和 Device D 收到 (S12, G) 和 (S22, G) 的组播流量,从 Rosen MVPN 隧道中收到 (S11, G) 和 (S21, G) 的组播流量。(S11, G) 和 (S12, G) 的组播流量中选取 (S11, G) 的流量作为 (S1, G) 的流量,(S21, G) 和 (S22, G) 的组播流量中选取 (S21, G) 的流量作为 (S2, G) 的流量。Device A 最终选取主路径 (S1, G) 的组播流量,根据 (S, G) 表项转发至组播用户,丢弃备路径 (S2, G) 的组播流量。当主路径出现故障时,立即切换到接收备路径的组播流量。

说明
对于 Rosen MVPN 场景,需要注意:

  • 对于私网不连续的组播流量,当公网部署了基于源克隆的 PIM FRR 保护时,需要通过在根节点配置策略使不连续的组播流量仍然在公网的 Share-group 中转发。
  • RPF 向量路径仅支持配置严格显式路径。
  • Share-group 不支持通过基于源克隆的 PIM FRR 进行保护。
  • 严格显式路径中配置的地址必须为 BGP Peer 的地址。

使用价值

基于组播源克隆的 PIM FRR 可以为网络中对实时性要求比较高的组播业务提供链路故障保护功能。

PIM 控制消息

PIM 通过路由器之间交互 PIM 控制消息实现组播路由功能。PIM 控制消息使用 IP 报文封装。

PIM 控制消息的封装格式

在这里插入图片描述

  • IP 报文头的协议类型字段值为 103,用来标识数据部分封装了 PIM 消息。

  • IP 报文头的目的地址字段用来标识该 PIM 消息的目的接收者。可以是单播地址,也可以是组播地址。

PIM 控制消息类型

所有的 PIM 控制消息头部有相同的格式:

PIM 控制消息格式
在这里插入图片描述
PIM 消息中以可编码的格式封装单播地址及组播地址,如组地址采用 Encoded-Group format,源地址采用 Encoded-Source format,BSR 地址采用 Encoded-Unicast format 等。根据支持不同的协议类型如 IPv4 和 IPv6,可编码封装的地址的长度是可变的。

PIM 控制消息字段说明

字段 说明
VersionPIM 版本,值为 2。
Type
0:Hello(PIM-DM 与 PIM-SM 都适用)
1:Register(只适用于 PIM-SM)
2:Register-Stop(只适用于 PIM-SM)
3:Join/Prune(PIM-DM 与 PIM-SM 都适用)
4:Bootstrap(只适用于 PIM-SM)
5:Assert(PIM-DM 与 PIM-SM 都适用)
6:Graft(只适用于 PIM-DM)
7:Graft-Ack(只适用于 PIM-DM)
8:Candidate-RP-Advertisement(只适用于 PIM-SM)
9:State-Refresh(只适用于 PIM-DM)
Reserved 保留字段。
Checksum 校验和。

Hello 消息

PIM 设备从所有 PIM 接口周期性的向外发送 Hello 消息。PIM 设备之间通过交互 Hello 消息,发现 PIM 邻居并维护邻居关系。

封装 Hello 消息的 IP 报文源地址为本地接口地址,目的地址为 224.0.0.13,TTL 值为 1。使用组播方式发送。

Hello 消息格式
在这里插入图片描述
Hello Option 字段格式
在这里插入图片描述
Hello 消息字段说明

字段长度说明
Type4 比特消息类型,值为 0。
Reserved4 比特保留字段。
发送时设置为 0,接收时忽略此值。
Checksum8 比特校验和。
Option Type2 字节参数类型,有效取值参见下表。
Option Length2 字节Option Value 字段长度。
Option Value可变长度参数值。

有效 Option Type 取值

Option TypeOption Value
1Holdtime,表示保持邻居为可达状态的超时时间,若超时仍没有收到 Hello 消息则认为邻居不可达。
2该字段由三部分组成:
LAN Prune Delay:在共享网段上传递 Prune 消息的延迟时间。
Override Interval:在共享网段上执行剪枝前的否决时间。
T:Join 消息抑制能力位。
19DR Priority,表示各路由器接口竞选 DR(Designated Router)的优先级,优先级越高越容易获胜。
20Generation ID,Hello 消息中携带的随机数,表示当前邻居状态。
如果状态发生更新则随机数也会更新。当路由器发现接收到的来自上游的 Hello 消息中包含不同 Generation ID 值,则认为上游邻居已经丢失或上游邻居状态已经改变。
21State Refresh Capable,表示邻居状态刷新时间间隔。
24Address List,PIM 接口的从地址列表。

Register 消息

Register 消息只在 PIM-SM 中使用。

当 PIM-SM 网络中出现活跃组播源时,源端 DR 向 RP(Rendezvous Point)发送 Register 消息,进行源注册。

封装 Register 消息的 IP 报文源地址为源端 DR,目的地址为 RP。使用单播方式发送。

Register 消息格式
在这里插入图片描述
Register 消息字段说明

字段长度说明
Type4 比特消息类型,值为 1。
Reserved8 比特保留位。
发送时此字段被清零,接收时不处理此字段。
Checksum16 比特校验和。
B1 比特边界位。
N1 比特空注册位。
Reserved230 比特保留位。发送时此字段被清零,接收时不处理此字段。
Multicast data packet变长组播数据报文。源端 DR 将接收到的组播数据报文封装在 Register 消息中发往 RP。RP 解封装后,学习到该组播数据报文的(S,G)信息。

一个组播源可能同时向多个组播组发送数据,则源端 DR 必须向每个组播组对应的 RP 发送 Register 消息。一个 Register 消息只能封装一个组播数据报文,所以只能携带一项(S,G)信息。

在注册抑制期间,DR 向 RP 发送 “空注册消息”,通告组播源仍处于激活状态;注册抑制超时后,DR 重新使用 Register 注册消息封装组播数据报文。在 “空注册消息” 中,Multicast data packet 字段只包含组播数据报文的 IP 头:组播源地址和组地址等。

Register-Stop 消息

说明
Register-Stop 消息只在 PIM-SM 中使用。

在 PIM-SM 网络中,在以下三种情况下,RP 将会向组播源端 DR 发送 Register-Stop 消息。

  • 接收者不再通过 RP 接收发往某组播组的数据

  • RP 不再为某组播组服务

  • 组播数据转发路径已经由 RPT(Rendezvous Point Tree)切换到 SPT(Shortest Path Tree)

组播源端 DR 收到 Register-Stop 消息后,停止使用 Register 注册消息封装组播数据报文,并进入注册抑制状态。

封装 Register-Stop 消息的 IP 报文源地址为 RP,目的地址为源端 DR。使用单播方式发送。

Register-Stop 消息格式
在这里插入图片描述
Register-Stop 消息字段说明

字段长度说明
Type4 比特消息类型,值为 2。
Reserved8 比特保留位。
发送时此字段被清零,接收时不处理此字段。
Checksum16 比特校验和。
Group Address(Encoded-Group format)变长组播组地址 G。
Source Address(Encoded-Unicast format)变长组播源地址 S。

一个 RP 可能同时为多个组播组服务,而一个组播组可能同时对应多个向其发送数据的组播源。因此,一个 RP 上可能同时进行着多项(S,G)注册。

一个 Register-Stop 消息中只能携带一项(S,G)信息。当 RP 向源端 DR 发送一个 Register-Stop 消息,只能结束一项(S,G)注册。

源端 DR 收到携带(S,G)信息的 Register-Stop 消息后,只停止(S,G)报文的封装。源 S 向其他组播组发出的报文仍然使用 Register 消息封装。

Join/Prune 消息

一条 Join/Prune 消息中可以同时包含 Join 信息和 Prune 信息。只包含 Join 信息的 Join/Prune 消息称为 Join 消息。只包含 Prune 信息的 Join/Prune 消息称为 Prune 消息。

  • 当 PIM 设备下游没有组播需求时,从上游接口发出 Prune 消息,通知上游停止向该网段转发组播报文。

  • 当 PIM-SM 网络中出现组成员时,组成员端 DR 从朝向 RP 的 RPF 接口,发出 Join 消息,通知上游邻居向该网段转发组播报文。Join 消息逐跳向上,构建 RPT。

  • 当 RP 触发 SPT 切换时,RP 从朝向组播源的 RPF 接口,发送 Join 消息,通知上游邻居向该网段转发组播报文。Join 消息逐跳向上,构建 RP - 源树。

  • 当组成员端 DR 触发 SPT 切换时,组成员端 DR 从朝向组播源的 RPF(Reverse Path Forwarding)接口,发送 Join 消息,通知上游邻居向该网段转发组播报文。Join 消息逐跳向上,构建 SPT。

  • PIM 共享网段中可能同时连接着一个下游接口和多个上游接口。假设某上游接口发出 Prune 消息。如果其他上游接口仍然需要接收组播报文,则必须在 “剪枝否决时间” 内发出 Join 消息,那么该网段上负责转发的下游接口才不执行剪枝操作。

说明

  • 在组播网络中,用户侧路由器接口如果使能了 PIM 功能,则由 PIM DR 决定 Join 消息的发送。因为只有 PIM DR 才会添加出接口,只有添加出接口的路由器才会发送 Join 消息。

DeviceA 的 Port 1 接口是一个下游接口,DeviceB 的 Port 2 接口和 DeviceC 的 Port 3 接口都是上游接口。如果 DeviceB 从 Port 2 接口发起 Prune 消息,DeviceC 的 Port 3 接口和 DeviceA 的 Port 1 接口都会收到该消息,此时,如果 DeviceC 还想接收组播数据,那么就必须在剪枝否决时间(override-interval)内发送一个 Join 消息,这样 DeviceA 的 Port 1 接口才知道下游还有需要组播数据的路由器,不执行剪枝操作。

PIM 共享网段的 Join/Prune 消息
在这里插入图片描述

封装 Join/Prune 消息的 IP 报文源地址为本地接口地址,目的地址为 224.0.0.13,TTL 值为 1。使用组播方式发送。

Join/Prune 消息格式
在这里插入图片描述
Group J/P Record 字段格式
在这里插入图片描述
Join/Prune 消息字段说明

字段长度说明
Type4 比特消息类型,值为 3。
Reserved8 比特保留位。
发送时此字段被清零,接收时不处理此字段。
Checksum16 比特校验和。
Upstream Neighbor Address(Encoded-Unicast format)变长上游邻居地址。
也就是收到 Join/Prune 消息的路由器上,进行 Join 或 Prune 操作的下游接口地址。
Number of Groups8 比特消息中包含的组播组数目。
Holdtime16 比特接收 Join/Prune 消息的路由器保持相应接口加入 / 剪枝状态的时间。
Group Address(Encoded-Group format)变长组播组地址。
Number of Joined Sources16 比特针对该组播组,请求加入的组播源总数。
Number of Pruned Sources16 比特针对该组播组,请求剪枝的组播源总数。
Joined Source Address (Encoded-Source format)变长请求加入的组播源地址。
Pruned Source Address (Encoded-Source format)变长请求剪枝的组播源地址。

Bootstrap 消息

说明
Bootstrap 消息只在 PIM-SM 中使用。

当 PIM-SM 网络中使用动态 RP 时,配置了 C-BSR(Candidate-BootStrap Router)的路由器从所有 PIM 接口周期性的发送 Bootstrap 消息,参与 BSR 竞选。竞选获胜者,继续发送 Bootstrap 消息,向域内所有 PIM 设备发布 RP-Set 信息。

封装 Bootstrap 消息的 IP 报文源地址为 PIM 接口地址,目的地址为 224.0.0.13,使用组播方式发送。TTL 为 1,在 PIM-SM 网络中逐跳转发,最终达到全网泛滥。

Bootstrap 消息格式
在这里插入图片描述
Group-RP Record 字段格式

在这里插入图片描述
Bootstrap 消息字段说明

字段长度说明
Type4 比特消息类型,值为 4。
N1 比特该位为 1 时表示不转发 Bootstrap 消息片段。
Reserved7 比特保留位。
发送时此字段被清零,接收时不处理此字段。
Checksum16 比特校验和。
Fragment Tag16 比特随机数,用来区分 Bootstrap 消息。
Hash Mask length8 比特C-BSR 的 Hash 掩码长度。
BSR-priority8 比特C-BSR 优先级。
BSR-Address(Encoded-Unicast format)变长C-BSR 地址。
Group Address (Encoded-Group format)变长组播组地址。
RP-Count8 比特希望为该组服务的 C-RP 的总数。
Frag RP-Cnt8 比特在本段内包含的 C-RP 地址的个数。
对于一个给定的组来说,如果 Bootstrap 消息分片,Frag RP-Cnt 字段便于将 RP-Set 分片。
RP-address (Encoded-Unicast format)变长C-RP(Candidate-Rendezvous Point)的地址。
RP-holdtime16 比特C-RP 发出的 advertisement 消息的老化时间,表示 C-RP 的有效时间。
RP-Priority8 比特C-RP 的优先级。

在 PIM 接口上配置pim bsr-boundary命令,可以将接口配置为 BSR 边界。众多 BSR 边界接口将网络划分成不同 PIM-SM 域,自举报文无法通过 BSR 边界。

Assert 消息

在共享网段上,如果 PIM 设备从(S,G)或(*,G)表项的下游接口收到(S,G)报文,则表示该网段存在其他的转发者。路由器从该下游接口发出 Assert 消息,参与竞选。竞选落败者停止下游接口的转发。

封装 Assert 消息的 IP 报文源地址为本地接口地址,目的地址为 224.0.0.13,TTL 值为 1。使用组播方式发送。

Assert 消息格式
在这里插入图片描述
Assert 消息字段说明

字段 长度 说明
Type4 比特 消息类型,值为 5。
Reserved8 比特 保留位。
发送时此字段被清零,接收时不处理此字段。
Checksum16 比特 校验和。
Group Address (Encoded-Group format) 变长 组播组地址。
Source address (Encoded-Unicast format) 变长 如果竞选 (S,G) 表项的唯一转发者,则为组播源地址。
如果竞选 (*,G) 表项的唯一转发者,则地址为 0。
R1 比特 RPT 位。
如果竞选 (S,G) 表项的唯一转发者,该位为 0。
如果竞选 (*,G) 表项的唯一转发者,该位为 1。
Metric Preference31 比特 到 Source address 的单播路径的优先级。
如果 R 位为 1, 则为到 RP 的单播路径的优先级。
Metric32 比特 到 Source address 的单播路由的开销。
如果 R 位为 1, 则为到 RP 的单播路径的开销。

Graft 消息

说明
Graft 消息只在 PIM-DM 中使用。

在 PIM-DM 网络中,路由器上出现组成员时,如果本身不在 SPT 上,则从对应的(S,G)表项的上游接口发送 Graft 消息。上游邻居立即恢复下游接口的转发。如果上游邻居不在 SPT 上,则继续向上游发送 Graft 消息。

封装 Graft 消息的 IP 报文源地址为上游接口地址,目的地址为 RPF 邻居,使用单播方式发送。

Graft 消息格式与 Join/Prune 消息相同。其中,部分字段取值与 Join/Prune 消息存在差异,如下表所示。

Graft 消息部分字段取值

字段说明
Type消息类型,值为 6。
Joined source address(Encoded-Source format)待嫁接的(S,G)的源地址。
Number of Pruned Sources对于 Graft 消息,该字段没有使用,取值为 0。
HoldTime对于 Graft 消息,该字段没有使用,取值为 0。

Graft-Ack 消息

说明
Graft-Ack 消息只在 PIM-DM 中使用。

在 PIM-DM 网络中,路由器收到下游发来的 Graft 消息后,恢复相应下游的转发。同时从该下游接口发出 Graft-Ack 消息,表示已经接受嫁接请求。如果发出 Graft 消息的路由器在一个设定时间内没有收到 Graft-Ack 消息,则认为上游未收到 Graft 消息,重发 Graft 消息。

封装 Graft-Ack 消息的 IP 报文源地址为上游设备的下游接口地址,目的地址为 Graft 消息的发出者,使用单播方式发送。

Graft-Ack 消息与 Graft 消息格式相同,并复制了 Graft 消息的内容。其中,部分字段取值与 Graft 消息存在差异,如下表所示。

Graft-Ack 消息部分字段取值

字段说明
Type消息类型,值为 7。
Upstream Neighbor Address(Encoded-Unicast format)Graft 消息的发出者地址。

C-RP Advertisement 消息

说明
C-RP Advertisement 消息只在 PIM-SM 中使用。

当 PIM-SM 网络中使用动态 RP 时,配置了 C-RP 的路由器周期性的向 BSR 发送 Advertisement 消息,通告希望服务的组范围。

封装 Advertisement 消息的 IP 报文源地址为源端 C-RP,目的地址为 BSR。使用单播方式发送。

Advertisement 消息格式
在这里插入图片描述
Advertisement 消息字段说明

字段长度说明
Type4 比特消息类型,值为 8。
Reserved8 比特保留位。
发送时此字段被清零,接收时不处理此字段。
Checksum16 比特校验和。
Prefix-Cnt8 比特组播地址前缀值。
Priority8 比特C-RP 优先级。
Holdtime16 比特Advertisement 消息的老化时间。
RP-Address(Encoded-Unicast format)变长C-RP 地址。
Group Address(Encoded-Group format)变长组播组地址。

State-Refresh 消息

说明
State-Refresh 消息只在 PIM-DM 中使用。

在 PIM-DM 网络中,为了避免被剪枝的接口因为 “剪枝定时器” 超时而恢复转发,离组播源最近的第一跳路由器会周期性地触发 State-Refresh 消息。State-Refresh 消息在全网扩散,刷新所有路由器上的剪枝定时器状态。

封装 State-Refresh 消息的 IP 报文源地址为下游接口地址,目的地址为 224.0.0.13,TTL 值为 1,使用组播方式发送。

State-Refresh 消息格式
在这里插入图片描述

State-Refresh 消息字段说明

字段长度说明
Type4 比特消息类型,值为 9。
Reserved8 比特保留位。
发送时此字段被清零,接收时不处理此字段。
Checksum16 比特校验和。
Multicast Group Address(Encoded-Groupformat)变长组播组地址。
Source Address(Encode-Source format)变长组播源地址。
Originator Address(Encoded-Unicast format)变长第一跳路由器地址。
Metric Preference32 比特到达源的单播路由优先级。
Metric32 比特到达源的单播路由开销。
Masklength8 比特到达源的单播路由地址掩码长度。
TTL8 比特State-Refresh 消息的 TTL,用来限制消息的传输范围,逐跳减一。
P1 比特剪枝指示标。
如果 State-Refresh 消息由被剪枝接口发出,则 P 为 1,否则为 0。
N1 比特立即剪枝标志。
每三个 State-Refresh 消息应将此位置为 1。接收时不处理此字段。此标志为与老版本 State-Refresh 消息兼容。
O1 比特断言覆盖标志。
接收时不处理此字段。此标志为与老版本 State-Refresh 消息兼容。
Interval8 比特发送 State-Refresh 消息的时间间隔。

组播 Over P2MP TE 隧道

采用 P2MP(point-to-multipoint) TE(Traffic Engineering)隧道承载组播业务,不仅能够为当前 IP/MPLS 骨干网中的组播业务流量提供良好的流量工程能力和可靠性,而且可以使运营商在获得这种网络服务能力的同时保持相对较低的网络运营成本。

产生原因

传统的核心网和骨干网通常使用 IP/MPLS 骨干网传输业务报文。目前的 IP/MPLS 骨干网出现了越来越多的组播业务应用,主要包括 IPTV(Internet Protocol Television)、多媒体会议、实时网络对战游戏等,它们都要求相应的业务承载网络能提供带宽保证、良好的 QoS 以及可靠性。当前已有的组播解决方案主要有如下两种,它们都具有明显的优缺点,不能满足当前的组播业务需求以及网络运营商的需求:

  • 采用 IP 组播技术:它可以在已有的 P2P(Point-to-Point)网络中通过升级部署完成,节省升级和维护成本。但是,IP 组播与 IP 单播一样,不具备 QoS(Quality of Service)和流量规划能力,可靠性差。而组播应用通常对实时性和可靠性要求极高,IP 组播难以满足要求。

  • 建立组播专用的网络:这种网络通常使用 SONET(Synchronous Optical Network)/SDH(Synchronous Digital Hierarchy)作为承载,它们具有极高的可靠性和传输速率。但是建立专网需要投入大量资金,需要独立维护,运营成本很高。

IP/MPLS 骨干网的运营商期望一种只需在现有的 IP/MPLS 骨干网设备上通过软件升级、并且具有良好流量工程能力的组播解决方案。

组播 Over P2MP TE 隧道正是这样一种技术,它融合了 IP 组播报文传送效率高和 MPLS TE 端到端的 QoS 保障等优点,建立一个 “树形” 隧道,用来传输组播数据。

使用价值

在 IP/MPLS 骨干网上部署 P2MP TE 技术,有以下好处:

  • 优化网络带宽资源利用;

  • 为组播业务提供带宽保证;

  • 骨干网核心节点无需部署 PIM 等组播协议,从而简化网络部署。

相关概念

P2MP TE 的数据转发融合了 IP 组播的报文传送特点,在分叉节点处进行 MPLS 报文的复制,然后再进行相应的标签操作,确保各个 sub-LSP 的共用链路上只发送一份数据报文,使得网络的带宽资源利用率最大化。

组播 Over P2MP TE 隧道的主要技术

采用 P2MP TE 隧道运行组播业务,对于组播业务而言,主要需要处理组播流量导入和导出的问题,即处理 Ingress 节点和 Egress 节点的相关配置问题,保证组播流量在经过 P2MP TE 隧道后能够正确转发。

组播 Over P2MP TE 隧道的组网图
在这里插入图片描述

  • Ingress 节点

在 Ingress 节点(PE1 和 PE2)的 P2MP Tunnel 接口上,将组播数据导入 P2MP TE 隧道。

  • Egress 节点

在 Egress 节点(PE3、PE4、PE5 和 PE6),需要配置忽略 RPF(Reverse Path Forwarding)单播逆向路由检查,并根据网络中 RP 的部署位置判断是否需要配置组播源代理。

  • 忽略单播逆向路由检查

在 Egress 节点上,配置忽略 RPF 单播逆向路由检查。

  • 组播源代理

在采用 PIM-SM 的 P2MP TE 场景中,如果 RP(Rendezvous Point)部署在 Egress 侧,则组播源无法找到 RP,无法向 RP 注册组播源信息。这时,采用组播源代理可由 Egress 代替组播源,向 RP 注册组播源信息。

对于 ASM(Any-Source Multicast)范围的组播数据,当组播数据被引到 Egress 节点,本 Egress 节点不是组播源直连设备,且如果该组播组对应的 RP 不是本设备,则组播数据不能继续转发。为解决该场景中下游主机无法接收数据问题,实现组播源代理特性,使本 Egress 设备向 PIM 域的 RP(如 RP 部署在 AR1 或 AR2 上)发送注册报文,走共享树转发组播数据,确保下游主机接收到组播数据。

VIA:huawei

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值