3.1. Phase One: RP Tree (阶段一: RP 树)
在阶段一中, 组播接收者表达其接收目的地为某个组播组的流量的兴趣。通常, 它使用 IGMP [2] 或 MLD [4] 来完成此操作, 但其他机制也可以用于此目的。接收者所在子网的本地路由器之一被选举为该子网的 Designated Router (指定路由器, DR)。在接收到接收者的兴趣表达后, DR 随后向该组播组的 RP 发送一个 PIM Join 消息。这个 Join 消息被称为 (,G) Join, 因为它为组 G 的所有源加入该组。(,G) Join 逐跳地向该组的 RP 传播, 并且在它经过的每个路由器中, 组 G 的组播树状态被实例化。最终, (,G) Join 要么到达 RP, 要么到达一个已经具有该组的 (,G) Join 状态的路由器。当许多接收者加入该组时, 它们的 Join 消息在 RP 上会聚, 并形成一个根植于 RP 的组 G 的分发树。这被称为 RP Tree (RP 树, RPT), 也被称为共享树 (shared tree), 因为它被发送到该组的所有源共享。只要接收者保持在该组中, Join 消息就会定期重新发送。当叶网络上的所有接收者离开该组时, DR 将向该组播组的 RP 发送一个 PIM (*,G) Prune 消息。然而, 如果由于任何原因未发送 Prune 消息, 该状态最终将超时。
组播数据发送者只需开始发送目的地为组播组的数据。发送者的本地路由器 (DR) 获取这些数据包, 对它们进行单播封装, 并将它们直接发送到 RP。RP 接收这些封装的数据包, 对它们进行解封装, 并将它们转发到共享树上。然后, 数据包遵循 RP Tree 上路由器中的 (*,G) 组播树状态, 在 RP Tree 分支的地方被复制, 并最终到达该组播组的所有接收者。将数据包封装到 RP 的过程称为注册 (registering), 封装数据包被称为 PIM Register 数据包。
在阶段一结束时, 组播流量以封装方式流向 RP, 然后以原生方式通过 RP 树流向组播接收者。