Multicast PIM Assert Explained

I am having some issues understanding this statement -

“Now when R1 starts streaming multicast traffic towards R2 and R3 they will both forward multicast packets to R4 resulting in duplicate traffic.”

  1. Why will R1 start streaming simultaneously towards both R2 and R3?
  2. Why will R2 and R3 both forward multicast packets towards R4?

Can you explain this in a little more detail?

Hello Dhananjay

Multicast routing has two modes. Dense and Sparse mode. In dense mode, even if it is not requested, multicast traffic will be sent out all interfaces except for the incoming interface. In sparse mode, multicast traffic will only be transmitted to routers that request it. In both cases, if all four routers are configured with multicast and all four request multicast traffic, then R1 will send multicast traffic to both R2 and R3 and these will forward it to R4. You can find out more about this specific functionality at this lesson.

This is the behaviour of mutlicast if all routers request multicast traffic.

I hope this has been helpful!

Laz

@lagapidis thanks for that explanation

Hello Rene,

Thanks for the great explanation

PIM DR is used in PIM-Sparsh mode while PIM ASSERT is used in PIM-DENSE mode.

Considering PIM DR is used to find router in the same broadcast domain for join message towards RP and same DR is used to forward traffic as per RPF check.

While with PIM ASSERT only for DENSE Mode where only need to avoid duplicate packet transmissions.

Please confirm if my understanding is right?

Hello Prashant,

You almost got it. The purpose of the DR is to forward PIM register packets from a source to the RP and to forward join/prune packets from receivers to the RP. We only use a DR in PIM sparse mode.

The purpose of PIM assert is to ensure that when you have two or more routers on a multi-access network, that only one router forwards the multicast packets. It is typically used in PIM dense mode but it’s not exclusive to dense mode…it’s also needed sometimes in sparse mode. Here’s an example for that:

Hi Rene,
Sometimes PIM DR and PIM forwrder do the same role? I meant when you told don’t confuse this 2 features I’am confuse.

Hi Djan,

The DR has two roles:

- Send PIM register packets from source to RP.
- Forward PIM join/prune packets towards the RP.

The forwarder does something else. It ensures that downstream multicast traffic (from source to receiver) is only forwarded on a multi-access segment by one router, not two (otherwise we get duplicate packets).

Rene

1 Like

Hi Rene,
I would like to know how to generate Multicast traffic. It was mentioned that we need to ping to the multicast group from HOST.

S1(config)#do ping 239.1.1.1 repeat 2147483647

Type escape sequence to abort.
Sending 2147483647, 100-byte ICMP Echos to 239.1.1.1, timeout is 2 seconds:
......................................................................
......................................................................
......................................................................
.................
S1(config)#
S1(config)#do ping 239.1.1.1 repeat 2147483647

Type escape sequence to abort.
Sending 2147483647, 100-byte ICMP Echos to 239.1.1.1, timeout is 2 seconds:
...
S1(config)#

But my pings are not successful.

I have HOST who would like to join the group.

H2(config)#interface e0/0                      
H2(config-if)#ip igmp join-group 239.1.1.1 


R2(config-if)#do show ip mroute 239.1.1.1
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, 
       V - RD & Vector, v - Vector
Outgoing interface flags: H - Hardware switched, A - Assert winner
 Timers: Uptime/Expires
 Interface state: Interface, Next-Hop or VCD, State/Mode

(*, 239.1.1.1), 00:05:20/00:02:33, RP 0.0.0.0, flags: DC
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    Ethernet0/2, Forward/Dense, 00:05:20/00:00:00
    Ethernet0/1, Forward/Dense, 00:05:20/00:00:00
    Ethernet0/0, Forward/Dense, 00:05:20/00:00:00

Could you help to understand how to generate Multicast traffic.
Below is my source of Multicast, Config:
Router-S1:

interface Ethernet0/0
 ip address 192.168.1.1 255.255.255.0
no sh

ip default-gateway 192.168.1.254

I did ping from Source.

Hello Pravin

When creating a multicast topology, you have one multicast source, and many multicast destinations. The source is the location from which a multicast stream will be sent, and the destinations are those devices that have joined the specific multicast group. When a source sends out its multicast stream, it will send it to the multicast address that corresponds to the specific multicast group to which hosts have joined.

Now the source can really be any device, either host or router, so you can simply ping the multicast group IP address, and the ping will be sent to all joined devices. If this is not functioning, then there is something wrong with the multicast routing and the joining mechanisms that are configured.

Now in the multicast routing table output of your H2 device, for the multicast group, we see that the router is configured in dense mode, so we ignore the *,G entry. But there is no other entry, so there is no routing associated with any multicast addresses, so you will have no responses to your pings.

You must troubleshoot your topology to ensure that your multicast config is set up correctly. Also, please indicate to us the specific topology you are using so we can help you further.

I hope this has been helpful!

Laz

exact same topology used in PIM Dense Mode:

Now from S1 I am not getting ping response when I do

S1(config-if)#do ping 239.1.1.1 repeat 2147483647

Type escape sequence to abort.
Sending 2147483647, 100-byte ICMP Echos to 239.1.1.1, timeout is 2 seconds:
....
S1(config-if)#

But from H2 and H3:

H2(config-if)#do ping 239.1.1.1 repeat 2147483647

Type escape sequence to abort.
Sending 2147483647, 100-byte ICMP Echos to 239.1.1.1, timeout is 2 seconds:

Reply to request 0 from 192.168.2.2, 4 ms
Reply to request 1 from 192.168.2.2, 8 ms
Reply to request 2 from 192.168.2.2, 4 ms
Reply to request 3 from 192.168.2.2, 8 ms
Reply to request 4 from 192.168.2.2, 8 ms
Reply to request 5 from 192.168.2.2, 4 ms
H3(config-if)#do ping 239.1.1.1 repeat 2147483647

Type escape sequence to abort.
Sending 2147483647, 100-byte ICMP Echos to 239.1.1.1, timeout is 2 seconds:

Reply to request 0 from 192.168.3.3, 4 ms
Reply to request 1 from 192.168.3.3, 8 ms
Reply to request 2 from 192.168.3.3, 4 ms
Reply to request 3 from 192.168.3.3, 4 ms
Reply to request 4 from 192.168.3.3, 8 ms

Below are my config:

R1:

hostname R1

ip cef
ip multicast-routing 

interface Ethernet0/0
 ip address 192.168.1.254 255.255.255.0
 ip pim dense-mode
!
interface Ethernet0/1
 ip address 192.168.12.1 255.255.255.0
 ip pim dense-mode
!
interface Ethernet0/2
 ip address 192.168.13.1 255.255.255.0
 ip pim dense-mode

router ospf 1
 log-adjacency-changes
 network 192.168.1.0 0.0.0.255 area 0
 network 192.168.12.0 0.0.0.255 area 0
 network 192.168.13.0 0.0.0.255 area 0
!

======================================================

R2:

hostname R2
  
ip cef
ip multicast-routing 

interface Ethernet0/0
 ip address 192.168.12.2 255.255.255.0
 ip pim dense-mode
!
interface Ethernet0/1
 ip address 192.168.23.2 255.255.255.0
 ip pim dense-mode
!
interface Ethernet0/2
 ip address 192.168.2.254 255.255.255.0
 ip pim dense-mode
!

!
router ospf 1
 log-adjacency-changes
 network 192.168.2.0 0.0.0.255 area 0
 network 192.168.12.0 0.0.0.255 area 0
 network 192.168.23.0 0.0.0.255 area 0

==============================================================

R3:

!
hostname R3

ip cef
ip multicast-routing 

interface Ethernet0/0
 ip address 192.168.23.3 255.255.255.0
 ip pim dense-mode
!
interface Ethernet0/1
 ip address 192.168.13.3 255.255.255.0
 ip pim dense-mode
!
interface Ethernet0/2
 ip address 192.168.3.254 255.255.255.0
 ip pim dense-mode
!

!
router ospf 1
 log-adjacency-changes
 network 192.168.3.0 0.0.0.255 area 0
 network 192.168.13.0 0.0.0.255 area 0
 network 192.168.23.0 0.0.0.255 area 0

=================================================================

H2:

hostname H2

ip cef

interface Ethernet0/0
 ip address 192.168.2.2 255.255.255.0
 ip igmp join-group 239.1.1.1
!

!
ip default-gateway 192.168.2.254

====================================================================

H3:

hostname H3

ip cef

interface Ethernet0/0
 ip address 192.168.3.3 255.255.255.0
 ip igmp join-group 239.1.1.1
!

!
ip default-gateway 192.168.3.254

=========================================================================

S1:

!
hostname S1
       
ip cef    
      
interface Ethernet0/0
 ip address 192.168.1.1 255.255.255.0

!
ip default-gateway 192.168.1.254

I checked I have 2 ospf nei, 2 pim nei on R1,R2,R3
interfaces are config of R1,R2,R3 are configured with pim dense mode.

Also I see:

R1(config-if)#   do sh ip mroute

(*, 239.1.1.1), 00:08:13/00:01:22, RP 0.0.0.0, flags: D
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    Ethernet0/2, Forward/Dense, 00:08:13/00:00:00
    Ethernet0/1, Forward/Dense, 00:08:13/00:00:00
R2(config-if)#do sh ip mroute

(*, 239.1.1.1), 00:08:18/00:02:46, RP 0.0.0.0, flags: DC
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    Ethernet0/2, Forward/Dense, 00:08:18/00:00:00
    Ethernet0/1, Forward/Dense, 00:08:18/00:00:00
    Ethernet0/0, Forward/Dense, 00:08:18/00:00:00
R3(config-if)#           do sh ip mroute

(*, 239.1.1.1), 00:08:13/00:02:37, RP 0.0.0.0, flags: DC
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    Ethernet0/2, Forward/Dense, 00:07:57/00:00:00
    Ethernet0/1, Forward/Dense, 00:08:13/00:00:00
    Ethernet0/0, Forward/Dense, 00:08:13/00:00:00

Also when I initiate ping from Host itself H2 and H3, I see below on R1,R,2,R3

R1:

(*, 239.1.1.1), 00:05:02/stopped, RP 0.0.0.0, flags: D
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    Ethernet0/2, Forward/Dense, 00:05:02/00:00:00
    Ethernet0/1, Forward/Dense, 00:05:02/00:00:00

(192.168.3.3, 239.1.1.1), 00:00:27/00:02:32, flags: PT
  Incoming interface: Ethernet0/2, RPF nbr 192.168.13.3
  Outgoing interface list:
    Ethernet0/1, Prune/Dense, 00:00:26/00:02:33

(192.168.2.2, 239.1.1.1), 00:00:31/00:02:28, flags: PT
  Incoming interface: Ethernet0/1, RPF nbr 192.168.12.2
  Outgoing interface list:
    Ethernet0/2, Prune/Dense, 00:00:30/00:02:29

(*, 224.0.1.40), 00:23:04/00:02:15, RP 0.0.0.0, flags: DCL
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    Ethernet0/2, Forward/Dense, 00:22:28/00:00:00
    Ethernet0/1, Forward/Dense, 00:23:05/00:00:00

R2:

(*, 239.1.1.1), 00:17:31/stopped, RP 0.0.0.0, flags: DC
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    Ethernet0/2, Forward/Dense, 00:17:31/00:00:00
    Ethernet0/1, Forward/Dense, 00:17:31/00:00:00
    Ethernet0/0, Forward/Dense, 00:17:31/00:00:00

(192.168.3.3, 239.1.1.1), 00:00:19/00:02:40, flags: T
  Incoming interface: Ethernet0/1, RPF nbr 192.168.23.3
  Outgoing interface list:
    Ethernet0/0, Prune/Dense, 00:00:18/00:02:41, A
    Ethernet0/2, Forward/Dense, 00:00:19/00:00:00

(192.168.2.2, 239.1.1.1), 00:00:23/00:02:36, flags: T
  Incoming interface: Ethernet0/2, RPF nbr 0.0.0.0
  Outgoing interface list:
    Ethernet0/0, Prune/Dense, 00:00:22/00:02:37
    Ethernet0/1, Forward/Dense, 00:00:23/00:00:00
          
(*, 224.0.1.40), 00:22:42/00:02:26, RP 0.0.0.0, flags: DCL
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    Ethernet0/1, Forward/Dense, 00:22:25/00:00:00
    Ethernet0/0, Forward/Dense, 00:22:42/00:00:00

R3:

(*, 239.1.1.1), 00:17:13/stopped, RP 0.0.0.0, flags: DC
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    Ethernet0/2, Forward/Dense, 00:16:58/00:00:00
    Ethernet0/1, Forward/Dense, 00:17:13/00:00:00
    Ethernet0/0, Forward/Dense, 00:17:13/00:00:00

(192.168.3.3, 239.1.1.1), 00:00:06/00:02:53, flags: T
  Incoming interface: Ethernet0/2, RPF nbr 0.0.0.0
  Outgoing interface list:
    Ethernet0/0, Forward/Dense, 00:00:06/00:00:00
    Ethernet0/1, Prune/Dense, 00:00:05/00:02:54

(192.168.2.2, 239.1.1.1), 00:00:10/00:02:49, flags: T
  Incoming interface: Ethernet0/0, RPF nbr 192.168.23.2
  Outgoing interface list:
    Ethernet0/1, Prune/Dense, 00:00:09/00:02:50, A
    Ethernet0/2, Forward/Dense, 00:00:10/00:00:00
          
(192.168.1.1, 239.1.1.1), 00:04:42/00:00:04, flags: T
  Incoming interface: Ethernet0/1, RPF nbr 192.168.13.1
  Outgoing interface list:
    Ethernet0/0, Forward/Dense, 00:01:42/00:00:00, A
    Ethernet0/2, Forward/Dense, 00:04:42/00:00:00

(*, 224.0.1.40), 00:22:11/00:02:40, RP 0.0.0.0, flags: DCL
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    Ethernet0/1, Forward/Dense, 00:22:08/00:00:00
    Ethernet0/0, Forward/Dense, 00:22:11/00:00:00

Hi Pravin,

Looking at your configs, I don’t see anything wrong. These are nice and clean. I see you don’t advertise 192.168.13.0/24 on R3 but that’s no problem.

From S1, are you able to ping H2 or H3 with unicast?

R1 shows that PIM is active on the interface that connects to S1?

R1#show ip pim interface 

Address          Interface                Ver/   Nbr    Query  DR         DR
                                          Mode   Count  Intvl  Prior
192.168.12.1     GigabitEthernet0/1       v2/D   1      30     1          192.168.12.2
192.168.13.1     GigabitEthernet0/2       v2/D   1      30     1          192.168.13.3
192.168.1.254    GigabitEthernet0/3       v2/D   0      30     1          192.168.1.254

Does this show you anything? (interface that connects to S1):

R1#show ip pim interface GigabitEthernet 0/3 detail | include Multicast packets
  Multicast packets in/out: 17/0

This can’t be too complex. Could you perhaps test unicast connectivity between S1 and H2/H3?

Also, disable routing on S1, H2, and H3 with no ip routing.

And post the output of show ip pim interface and show ip pim neighbors of all your routers?

Rene

Hello!
I have a Hub and spoke network

Hello!
Can you help me with understanding PIM assert on a hub and spoke network and then I have a data flow question that may also be related to how the traffic is forwarded.

Overview of network:
This network is layer2 Ethernet MAN underlay. We send tagged traffic to Verizon and they drop any traffic not tagged with a specific VLAN.

  • All sites tie to the network as either trunk connections from L3 spoke switches with specific VLAN allowed configured or as sub-interface with dot1q on spoke routers.
  • EIGRP is configured for the layer 3 connections between the hub and each spoke.
  • Each spoke has APs that connect back to a WLC at the hub location in local mode. Broadcast and multicast forwarding is enable on the WLC.
  1. Is the Hub automatically going to take the role as the forwarder? I completely understand DR but working for a better understanding of PIM assert on HUb and spoke network.

  2. Does the local mode AP configuration introduce any additional issues with multicast forwarding since a CAPWAP tunnel is is connected from AP to WLC? In other words, is it possible that the AP can act as a second path to and from the spoke networks?

Hello James

First of all, I suggest you take a look at the PIM Assert lesson which describes the operation and functionality of the feature.

PIM assert will only “kick in” if you have more than two multicast routers connected to the same subnet. In your particular topology, it doesn’t matter what your underlay is or if subinterfaces are used, or if tagged traffic is dropped or not. You state that there are layer 3 connections between the hub and each spoke, but it is not clear if they are on the same subnet. If not, then PIM assert will not affect any traffic. If they are, however, you must look at the election mechanism for PIM forwarder:

  1. The router with the lowest administrative distance to the source of the multicast stream will be the elected PIM forwarder. This only happens if you are using two routing protocols or if you used a static route pointing to the source.
  2. If the AD is equal we will compare the unicast routing metric towards the source.
  3. If the AD and metric are both the same we will elect the PIM forwarded based on the highest IP address.

From the topology you describe, criterion 2 will always cause the hub to be the PIM forwarder because it has the lowest unicast metric to any source on the network. So yes, you are correct, the hub will be chosen as PIM forwarder.

Now this is the case for the topology without taking into account the wireless infrastructure and controller. Concerning the mode of the AP, first of all, take a look at the following two lessons that will give you a better idea of how the wireless traffic is managed:

Now when you apply local mode, you are creating a CAPWAP tunnel between the AP and the WLC at the hub. All user and management traffic is transmitted through this tunnel. From the point of view of multicast, this can be considered an additional spoke to the hub router. But because this is most certainly on a different subnet than the rest of the topology (through the tunnel) a PIM forwarder once again does not play a role. ((Take a look at this CAPWAP section of the wireless network architecture lesson.) The enabling of broadcast and multicast forwarding simply means that the WLC will take part in multicast and broadcast allowing such packets to be routed successfully to the subnets required.

I hope this has been helpful!

Laz

Thanks for the information.
I will go through the references you provided.

1 Like

Hello NL team,
I would like to thank you for this great explanation, in fact the PIM assert is another PIM related topic that should be understood.

Related to the design, is it better to align the FHRP (Active) + PIM DR + PIM Forwareder on the same Router ?

Best Regards,

Hello Zouhair

In a network topology where you have employed an FHRP as well as multicast, you will find that multicast traffic will not necessarily conform to the FHRP elected active router. Multicast works independently from the FHRP, so the decision to align the forwarder with the active router should be applied to improve load balancing based upon the expected unicast and multicast traffic patterns.

FHRPs aside, there is no particular advantage of having the same device become the forwarder and the DR so your choice can go either way.

When employing FHRPs with multicast, however, it is useful to employ something called HSRP Aware PIM, for HSRP implementations. This is a feature that allows multicast to become aware of the HSRP topology providing consistent IP multicast forwarding in a redundant network with virtual routing groups enabled. You can find out more about this feature at the following Cisco documentation:

A similar feature is available for VRRP as well.

I hope this has been helpful!

Laz