3.3. Phase Three: Shortest-Path Tree (阶段三: 最短路径树)
尽管让 RP 向源回接可以消除封装开销, 但它并不能完全优化转发路径。对于许多接收者来说, 与从源到接收者的最短路径相比, 经由 RP 的路由可能涉及显著的绕道。
为了获得更低的延迟或更高效的带宽利用, 接收者 LAN 上的路由器 (通常是 DR) 可以选择性地启动从共享树到源特定最短路径树 (SPT) 的转移。为此, 它向 S 发出一个 (S,G) Join。这会在通往 S 的路径上的路由器中实例化状态。最终, 此 Join 要么到达 S 的子网, 要么到达一个已经具有 (S,G) 状态的路由器。当这种情况发生时, 来自 S 的数据包开始遵循 (S,G) 状态流动, 直到它们到达接收者。
此时, 接收者 (或接收者上游的路由器) 将接收到两份数据副本: 一份来自 SPT, 一份来自 RPT。当来自 SPT 的第一批流量开始到达时, DR 或上游路由器开始丢弃通过 RP 树到达的来自 S 的 G 组数据包。此外, 它向 RP 发送一个 (S,G) Prune 消息。这被称为 (S,G,rpt) Prune。Prune 消息逐跳传播, 在通往 RP 的路径上实例化状态, 指示来自 S 的 G 组流量不应该在此方向上转发。修剪会一直传播, 直到它到达 RP 或仍然需要来自 S 的流量用于其他接收者的路由器。
到现在为止, 接收者将沿着接收者和 S 之间的最短路径树接收来自 S 的流量。此外, RP 正在接收来自 S 的流量, 但这些流量不再沿着 RP 树到达接收者。就接收者而言, 这是最终的分发树。