My short study of how PIM Sparse-Mode multicast works:

The Sender
Here is what happens when sender originates streaming to a multicast group.
R4#ping 224.88.88.88 repeat 100 |
The router that is a PIM DR for this network segment (R6) sends Register message to the rendezvous-point:
R6#show ip interface brief Interface IP-Address OK? Method Status Protocol GigabitEthernet1 10.0.46.6 YES manual up up GigabitEthernet2 10.0.56.6 YES manual up up GigabitEthernet3 unassigned YES unset administratively down down GigabitEthernet4 10.0.67.6 YES manual up up Loopback0 6.6.6.6 YES manual up up Tunnel0 10.0.56.6 YES unset up up R6#show ip pim interface Address Interface Ver/ Nbr Query DR DR Mode Count Intvl Prior 10.0.56.6 GigabitEthernet2 v2/S 1 30 1 10.0.56.6 10.0.67.6 GigabitEthernet4 v2/S 1 30 1 10.0.67.7 10.0.46.6 GigabitEthernet1 v2/S 0 30 1 10.0.46.6(R6 Gi1 IP)
|
The router that has one of its interfaces configured as a rendezvous-point checks the reverse path, creates the PIM tunnel and responds with Register-Stop message:
R3#debug ip pim
|
Here is how these messages look:


Notice the structure of PIM Register – it is a unicast IP packet that carries PIM datagram together with original ICMP packet sent by R4 to the multicast group.
R3 now has (*,G) and (S, G) entries created.
R3#show ip mroute IP Multicast Routing Table Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected, L - Local, P - Pruned, R - RP-bit set, F - Register flag, T - SPT-bit set, J - Join SPT, M - MSDP created entry, E - Extranet, X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement, U - URD, I - Received Source Specific Host Report, Z - Multicast Tunnel, z - MDT-data group sender, Y - Joined MDT-data group, y - Sending to MDT-data group, G - Received BGP C-Mroute, g - Sent BGP C-Mroute, N - Received BGP Shared-Tree Prune, n - BGP C-Mroute suppressed, Q - Received BGP S-A Route, q - Sent BGP S-A Route, V - RD & Vector, v - Vector, p - PIM Joins on route, x - VxLAN group Outgoing interface flags: H - Hardware switched, A - Assert winner, p - PIM Join Timers: Uptime/Expires Interface state: Interface, Next-Hop or VCD, State/Mode (*, 224.88.88.88), 00:01:30/stopped, RP 3.3.3.3, flags: SP Incoming interface: Null, RPF nbr 0.0.0.0 Outgoing interface list: Null
|
Both entries have P-flag. This means that the traffic for this multicast group is pruned, because there are no receivers. For the same reason (S,G) entry has Null in Outgoing interface. Incoming interface is already known at this stage.
The receiver
Make a receiver join the group:
R1#debug ip igmp IGMP debugging is on R1#conf t Enter configuration commands, one per line. End with CNTL/Z. R1(config)#int e0/0 R1(config-if)#ip igmp join-group 224.88.88.88
|
And it sends the IGMP membership report frame structure:

This basicaly says “I want to listen to this group”.
The router that receives IGMP Report messages sends PIM-Join Message to the RP:

On RP we now can see outgoing interface in (*,G) entry. This is where it sees the receiver.
R3#sho ip mroute IP Multicast Routing Table Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected, L - Local, P - Pruned, R - RP-bit set, F - Register flag, T - SPT-bit set, J - Join SPT, M - MSDP created entry, E - Extranet, X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement, U - URD, I - Received Source Specific Host Report, Z - Multicast Tunnel, z - MDT-data group sender, Y - Joined MDT-data group, y - Sending to MDT-data group, G - Received BGP C-Mroute, g - Sent BGP C-Mroute, N - Received BGP Shared-Tree Prune, n - BGP C-Mroute suppressed, Q - Received BGP S-A Route, q - Sent BGP S-A Route, V - RD & Vector, v - Vector, p - PIM Joins on route, x - VxLAN group Outgoing interface flags: H - Hardware switched, A - Assert winner, p - PIM Join Timers: Uptime/Expires Interface state: Interface, Next-Hop or VCD, State/Mode (*, 224.88.88.88), 00:18:09/00:03:00, RP 3.3.3.3, flags: S Incoming interface: Null, RPF nbr 0.0.0.0 Outgoing interface list: Ethernet0/1, Forward/Sparse, 00:18:09/00:03:00
|
Now, if we start sending traffic to the group again we see get replies from the receiver:
R4#ping 224.88.88.88 repeat 100 Type escape sequence to abort. Sending 100, 100-byte ICMP Echos to 224.88.88.88, timeout is 2 seconds: Reply to request 0 from 10.0.12.1, 62 ms Reply to request 1 from 10.0.12.1, 8 ms |
But on the RP we still have the trafic for 224.88.88.88 pruned and no record that has both incoming and outgoing interface.
R3#sh ip mroute IP Multicast Routing Table Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected, L - Local, P - Pruned, R - RP-bit set, F - Register flag, T - SPT-bit set, J - Join SPT, M - MSDP created entry, E - Extranet, X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement, U - URD, I - Received Source Specific Host Report, Z - Multicast Tunnel, z - MDT-data group sender, Y - Joined MDT-data group, y - Sending to MDT-data group, G - Received BGP C-Mroute, g - Sent BGP C-Mroute, N - Received BGP Shared-Tree Prune, n - BGP C-Mroute suppressed, Q - Received BGP S-A Route, q - Sent BGP S-A Route, V - RD & Vector, v - Vector, p - PIM Joins on route, x - VxLAN group Outgoing interface flags: H - Hardware switched, A - Assert winner, p - PIM Join Timers: Uptime/Expires Interface state: Interface, Next-Hop or VCD, State/Mode (*, 224.88.88.88), 00:49:35/00:03:03, RP 3.3.3.3, flags: S Incoming interface: Null, RPF nbr 0.0.0.0 Outgoing interface list: Ethernet0/1, Forward/Sparse, 00:03:44/00:03:03
|
This is because the traffic has switched to Shortest-Path Tree which doesn’t include R3. R6 forwards packets coming from 10.0.46.4 out interface GigabitEthernet2 (Towards R5):
R6#sh ip mroute IP Multicast Routing Table Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected, L - Local, P - Pruned, R - RP-bit set, F - Register flag, T - SPT-bit set, J - Join SPT, M - MSDP created entry, E - Extranet, X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement, U - URD, I - Received Source Specific Host Report, Z - Multicast Tunnel, z - MDT-data group sender, Y - Joined MDT-data group, y - Sending to MDT-data group, G - Received BGP C-Mroute, g - Sent BGP C-Mroute, N - Received BGP Shared-Tree Prune, n - BGP C-Mroute suppressed, Q - Received BGP S-A Route, q - Sent BGP S-A Route, V - RD & Vector, v - Vector, p - PIM Joins on route, x - VxLAN group Outgoing interface flags: H - Hardware switched, A - Assert winner, p - PIM Join Timers: Uptime/Expires Interface state: Interface, Next-Hop or VCD, State/Mode (*, 224.88.88.88), 00:02:19/stopped, RP 3.3.3.3, flags: SPF Incoming interface: GigabitEthernet2, RPF nbr 10.0.56.5 Outgoing interface list: Null
|
Then R5 forwards them out GigabitEthernet1 (Towards R2):
R5#show ip mroute IP Multicast Routing Table Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected, L - Local, P - Pruned, R - RP-bit set, F - Register flag, T - SPT-bit set, J - Join SPT, M - MSDP created entry, E - Extranet, X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement, U - URD, I - Received Source Specific Host Report, Z - Multicast Tunnel, z - MDT-data group sender, Y - Joined MDT-data group, y - Sending to MDT-data group, G - Received BGP C-Mroute, g - Sent BGP C-Mroute, N - Received BGP Shared-Tree Prune, n - BGP C-Mroute suppressed, Q - Received BGP S-A Route, q - Sent BGP S-A Route, V - RD & Vector, v - Vector, p - PIM Joins on route, x - VxLAN group Outgoing interface flags: H - Hardware switched, A - Assert winner, p - PIM Join Timers: Uptime/Expires Interface state: Interface, Next-Hop or VCD, State/Mode (*, 224.88.88.88), 00:04:29/stopped, RP 3.3.3.3, flags: SP Incoming interface: GigabitEthernet1, RPF nbr 10.0.235.3 Outgoing interface list: Null
|
Which forwards them to the receiver (R1) out Ethernet0/0:
R2#show ip mroute IP Multicast Routing Table Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected, L - Local, P - Pruned, R - RP-bit set, F - Register flag, T - SPT-bit set, J - Join SPT, M - MSDP created entry, E - Extranet, X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement, U - URD, I - Received Source Specific Host Report, Z - Multicast Tunnel, z - MDT-data group sender, Y - Joined MDT-data group, y - Sending to MDT-data group, G - Received BGP C-Mroute, g - Sent BGP C-Mroute, N - Received BGP Shared-Tree Prune, n - BGP C-Mroute suppressed, Q - Received BGP S-A Route, q - Sent BGP S-A Route, V - RD & Vector, v - Vector, p - PIM Joins on route, x - VxLAN group Outgoing interface flags: H - Hardware switched, A - Assert winner, p - PIM Join Timers: Uptime/Expires Interface state: Interface, Next-Hop or VCD, State/Mode (*, 224.88.88.88), 00:55:17/stopped, RP 3.3.3.3, flags: SJC Incoming interface: Ethernet0/1, RPF nbr 10.0.235.3 Outgoing interface list: Ethernet0/0, Forward/Sparse, 00:09:26/00:02:05
|
All of the multicast routes the packets are following have SPT-bit set (T-flag in multicast routing table) which means they are part of Shortest Part Tree.