PIM Sparse-Mode

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

Lab Topology
Lab Topology

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 interfaceAddress          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)

R6#debug ip pim

PIM(0): Send v2 Data-header Register to 3.3.3.3 for 10.0.46.4, group 224.88.88.88

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

PIM(0): Check RP 3.3.3.3 into the (*, 224.88.88.88) entry
PIM(0): Adding register decap tunnel (Tunnel1) as accepting interface of (*, 224.88.88.88).
PIM(0): Adding register decap tunnel (Tunnel1) as accepting interface of (10.0.46.4, 224.88.88.88).
PIM(0): Send v2 Register-Stop to 10.0.56.6 for 10.0.46.4, group 224.88.88.88

Here is how these messages look:

PIM-Register Message
PIM-Register Message
PIM-Register-Stop Message
PIM-Register-Stop Message

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

(10.0.46.4, 224.88.88.88), 00:01:30/00:01:29, flags: P
  Incoming interface: Ethernet0/1, RPF nbr 10.0.235.5
  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

IGMP(0): WAVL Insert group: 224.88.88.88 interface: Ethernet0/0 Successful
IGMP(0): Send v2 Report for 224.88.88.88 on Ethernet0/0

And it sends the IGMP membership report frame structure:

IGMP Membership Report
IGMP Membership Report

This basicaly says “I want to listen to this group”.

The router that receives IGMP Report messages sends PIM-Join Message to the RP:

PIM Join Message
PIM Join Message

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

(10.0.46.4, 224.88.88.88), 00:01:59/00:01:11, flags: PT
Incoming interface: Ethernet0/1, RPF nbr 10.0.235.5
Outgoing interface list: Null

(*, 224.0.1.40), 01:00:34/00:03:26, RP 3.3.3.3, flags: SJCL
Incoming interface: Null, RPF nbr 0.0.0.0
Outgoing interface list:
Ethernet0/1, Forward/Sparse, 01:00:33/00:03:26

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

(10.0.46.4, 224.88.88.88), 00:01:01/00:02:09, flags: PT
Incoming interface: Ethernet0/1, RPF nbr 10.0.235.5
Outgoing interface list: Null

(*, 224.0.1.40), 01:32:00/00:03:19, RP 3.3.3.3, flags: SJCL
Incoming interface: Null, RPF nbr 0.0.0.0
Outgoing interface list:
Ethernet0/1, Forward/Sparse, 01:32:00/00:03:19

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

(10.0.46.4, 224.88.88.88), 00:02:19/00:01:21, flags: FT
  Incoming interface: GigabitEthernet1, RPF nbr 0.0.0.0
  Outgoing interface list:
    GigabitEthernet2, Forward/Sparse, 00:02:19/00:03:08

(*, 224.0.1.40), 01:31:36/00:03:09, RP 3.3.3.3, flags: SJCL
Incoming interface: GigabitEthernet2, RPF nbr 10.0.56.5
Outgoing interface list:
GigabitEthernet4, Forward/Sparse, 01:29:43/00:03:09

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

(10.0.46.4, 224.88.88.88), 00:04:29/00:02:52, flags: T
  Incoming interface: GigabitEthernet2, RPF nbr 10.0.56.6
  Outgoing interface list:
    GigabitEthernet1, Forward/Sparse, 00:04:29/00:03:02

(*, 224.0.1.40), 01:34:39/00:03:16, RP 3.3.3.3, flags: SJCL
Incoming interface: GigabitEthernet1, RPF nbr 10.0.235.3
Outgoing interface list:
GigabitEthernet2, Forward/Sparse, 01:33:47/00:03:16

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

(10.0.46.4, 224.88.88.88), 00:06:43/00:02:13, flags: JT
  Incoming interface: Ethernet0/1, RPF nbr 10.0.235.5
  Outgoing interface list:
    Ethernet0/0, Forward/Sparse, 00:06:43/00:02:05

(*, 224.0.1.40), 01:39:03/00:02:59, RP 3.3.3.3, flags: SJCL
Incoming interface: Ethernet0/1, RPF nbr 10.0.235.3
Outgoing interface list:
Ethernet0/0, Forward/Sparse, 01:39:01/00:02:59

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.

Leave a Reply

Your email address will not be published. Required fields are marked *