PIM 概述
本文介绍了 PIM 网络元素和 PIM 消息,并概述了 PIM-SM 配置选项、ASM 和 SSM。有关配置 PIM 的信息,请参阅 协议无关组播 - PIM
Cumulus Linux 仅支持 PIM-SM 模式。
PIM 网络元素
网络元素 | 描述 |
---|---|
第一跳路由器 (FHR) | 连接到源路由器的路由器。FHR 控制 PIM 注册过程。 |
最后一跳路由器 (LHR) | 路径中的最后一个路由器,连接到感兴趣的组播接收器。对于每个具有感兴趣接收器的网络子网,只有一个 LHR,但是组播组可以在整个网络中拥有多个 LHR。 |
汇集点 (RP) | 允许发现组播源和组播接收器。RP 向 FHR 发送 PIM 注册停止消息。
|
PIM 共享树 (RP 树) 或 (*,G) 树 | 以 RP 为根的组播树。当接收器想要加入组播组时,它们沿着共享树向 RP 发送加入消息。 |
PIM 最短路径树 (SPT) 或 (S,G) 树 | 以给定组的组播源为根的组播树。每个组播源都有一个唯一的 SPT。SPT 可以与 RP 树匹配,但这不是必需的。SPT 表示将组播流量从源发送到感兴趣的接收器的最有效方式。 |
传出接口 (OIF) | 指示在其上发送 PIM 或组播数据包的接口。OIF 是朝向组播接收器的接口。 |
传入接口 (IIF) | 指示在其上接收组播数据包的接口。IIF 可以是朝向源或朝向 RP 的接口。 |
反向路径转发接口 (RPF 接口) | 用于到达 RP 或源的路径。除非直接连接到源,否则必须有有效的 PIM 邻居才能确定 RPF。 |
组播路由 (mroute) | 指示组播源和组播组以及相关的 OIF、IIF 和 RPF 信息。 |
星号-G mroute (*,G) | 表示 RP 树。* 是通配符,表示任何组播源。G 是组播组。例如,(*,G) 是 (*, 239.1.2.9)。 |
S-G mroute (S,G) | 这是表示源条目的 mroute。S 是组播源 IP。G 是组播组。例如,(S,G) 是 (10.1.1.1, 239.1.2.9)。 |
PIM 消息
PIM 消息 |
描述 |
---|---|
PIM Hello | 在网段上宣告组播路由器的存在。默认情况下,PIM hello 每 30 秒发送一次。例如22.1.2.2 > 224.0.0.13 |
PIM 加入/剪枝 (J/P) | 指示组播路由器想要接收或不再接收的组。PIM 加入或剪枝消息是单个 PIM 消息,其中包含要加入的组列表和要离开的组的第二个列表。消息可以请求加入或剪枝 SPT 或 RP 树(也称为 (*,G) 加入或 (S,G) 加入)。 注意:PIM 将加入和剪枝消息发送到各个接口上的 PIM 邻居。消息永远不会是单播。 ![]() 此 PIM 加入和剪枝适用于组 239.1.1.9,该组有 1 个加入和 0 个剪枝。 单个数据包中可以存在多个组的加入和剪枝。 以下显示了 S,G 剪枝示例 21:49:59.470885 IP (tos 0x0, ttl 255, id 138, offset 0, flags [none], proto PIM (103), length 54) |
PIM 注册 | 从 FHR 发送到 RP 以宣告组播组的单播数据包。FHR 将原始组播数据包完全封装在 PIM 注册消息中。RP 解封装 PIM 注册消息,并沿着 (*,G) 树向接收器转发。 |
PIM 空注册 | 一种特殊的 PIM 注册消息类型,其中数据包中包含 Null-Register 标志。FHR 使用空注册消息向 RP 发出信号,表明源仍在发送组播流量。与普通的 PIM 注册消息不同,空注册消息不封装原始数据包。 |
PIM 注册停止 | RP 向 FHR 发送 PIM 注册停止消息以停止发送消息。例如21:37:00.419379 IP (tos 0x0, ttl 255, id 24, offset 0, flags [none], proto PIM (103), length 38) |
IGMP 成员报告 (IGMP 加入) | 组播接收器向组播路由器发送 IGMP 成员报告消息,以指示他们对特定组播组的兴趣。IGMP 加入消息触发 PIM *,G 加入。IGMP 版本 2 查询发送到所有主机上的组播地址 224.0.0.1。IGMP 版本 2 报告(加入)发送到组的组播地址。IGMP 版本 3 消息发送到 IGMP v3 特定的组播地址 224.0.0.22。 |
IGMP 离开 | 告诉组播路由器组播接收器不再需要组播组。IGMP 离开消息触发 PIM *,G 剪枝。 |
ASM 概述
组播路由的行为因源在接收器请求组播流之前发送,还是接收器尝试在没有任何源之前加入流而异。
接收器先加入
当接收器加入组时,它会向 IGMPv3 组播组 224.0.0.22 发送 IGMP 成员加入消息。侦听 IGMPv3 组的网段的 PIM 组播路由器接收 IGMP 成员加入消息,并成为该组的 LHR。

这将创建一个 (*,G) mroute,其 OIF 是接收 IGMP 成员报告的接口,IIF 是 RP 的 RPF 接口。
LHR 生成 PIM (*,G) 加入消息,并从朝向 RP 的接口发送它。LHR 和 RP 之间的每个组播路由器都构建一个 (*,G) mroute,其中 OIF 是接收 PIM 加入消息的接口,传入接口是 RP 的反向路径转发接口。

- 当 RP 接收到 (*,G) 加入消息时,它不会发送任何额外的 PIM 加入消息。只要接收器想要接收组播组,RP 就会维护 (*,G) 状态。
- 与组播接收器不同,组播源不向 FHR 发送 IGMP(或 PIM)消息。组播源开始发送,FHR 接收流量并构建 (*,G) 和 (S,G) mroute。然后,FHR 启动 PIM 注册过程。
PIM 注册过程
当第一跳路由器 (FHR) 从源接收到组播数据包时,FHR 不知道网络中是否有任何感兴趣的组播接收器。FHR 将数据包封装在单播 PIM 注册消息中。FHR 是此数据包的源,RP 地址是目的地。RP 构建 (S,G) mroute,解封装组播数据包,并沿着 (*,G) 树转发它。
当未封装的组播数据包沿着 (*,G) 树向下传输到感兴趣的接收器时,同时,RP 向 FHR 发送 PIM (S,G) 加入。这在 RP 和 FHR 之间的每个组播路由器上构建 (S,G) 状态。
当 FHR 接收到 PIM (S,G) 加入时,它继续封装并发送 PIM 注册消息,但也复制数据包并沿着 (S,G) mroute 发送它。
然后,RP 沿着 (S,G) 树接收组播数据包,并向 FHR 发送 PIM 注册停止以结束注册过程。
![]() | ![]() |
发送者在接收器加入之前启动
组播发送者可以在没有任何额外的 IGMP 或 PIM 信令的情况下发送组播数据。当 FHR 接收到组播流量时,它会封装它并向汇集点 (RP) 发送 PIM 注册。
当 RP 接收到 PIM 注册时,它会构建 (S,G) mroute;但是,没有 (*,G) mroute,也没有感兴趣的接收器。
RP 丢弃 PIM 注册消息,然后向 FHR 发送 PIM 注册停止消息。
接收到 PIM 注册停止而没有任何相关的 PIM 加入,使 FHR 没有传出接口。FHR 丢弃此组播流量,直到收到 PIM 加入。
Cumulus Linux 从接收组播流量的接口向 RP 地址发送 PIM 注册消息。
PIM 空注册
为了在 RP 没有接收器时,或者如果 RP 不在 SPT 树上时,通知 RP 组播流量仍在流动,FHR 会定期发送 PIM 空注册消息。FHR 发送设置了 Null-Register 标志但没有任何数据的 PIM 注册。这种特殊的 PIM 注册通知 RP 组播源仍在发送,以防任何新的接收器上线。
在接收到 PIM 空注册后,RP 发送 PIM 注册停止以确认它接收到 PIM 空注册消息。
有关更多信息,请参阅 RFC 7761 - 协议无关组播 - 稀疏模式。
SSM 概述
接收器先加入
当接收器发送带有已定义源的 IGMPv3 加入时,LHR 构建一个 S,G 条目,并根据路由表向最接近源的 PIM 邻居发送 PIM S,G 加入。LHR 和 FHR 之间的完整路径包含 S,G 状态,尽管没有组播流量流动。接收器和 LHR 之间的定期 IGMPv3 加入以及 PIM 邻居之间的 PIM S,G 加入维护此状态。当发送者开始发送流量时,流量会通过从发送者到接收器的预构建 SPT 流动。
发送者在接收器加入之前启动
在 SSM 中,当发送者开始发送流量时,FHR 没有任何现有的 mroute。流量被丢弃,并且在接收器加入之前不会发生任何进一步的事情。SSM 不依赖于 RP,也没有 PIM 注册过程。
ASM 和 SSM 之间的差异
SSM 与 ASM 组播的不同之处在于以下方面
- SSM 不使用 RP。SSM 不需要 RP,因为接收器始终知道发送者的地址。
- SSM 不使用 *,G PIM 加入消息。组播发送者始终是已知的,因此 SSM 中的 PIM 加入消息始终是 S,G 加入消息。
- SSM 不使用共享树或 *,G 树。PIM 加入消息始终朝向源发送,沿途构建 SPT。
- SSM 需要 IGMPv3。ASM 允许接收器仅指定他们想要加入的组,而无需了解发送者。您可以同时使用 IGMPv2 和 IGMPv3。使用 IGMPv3,您可以请求组播组的特定源(发送 S,G IGMP 加入)。
- SSM 不使用 PIM 注册过程或 SPT 切换。如果没有共享树或 RP,则不需要 PIM 注册过程。S,G 加入直接朝向 FHR。