Protocol Independent Multicast - Sparse Mode (PIM-SM): Protocol Specification (Revised)
obsoleted by
- rfc-7761 — Protocol Independent Multicast - Sparse Mode (PIM-SM): Protocol Specification (Revised)
obsoletes
- rfc-2362 — Protocol Independent Multicast-Sparse Mode (PIM-SM): Protocol Specification
updated by
Extracted elements (33)
PIM-SM uses a three-phase approach—shared RP tree via (*,G) Joins with Register encapsulation, then native (S,G) forwarding to the RP, then optional switchover to source-specific SPTs—to balance rapid receiver-to-source convergence against long-term forwarding efficiency. Register encapsulation is acknowledged as inefficient but provides immediate reachability before native trees are established.
The Assert mechanism resolves duplicate forwarding on multi-access LANs reactively rather than preventively: PIM allows duplicate Joins and detects duplicate data on the LAN, then uses Assert messages to elect a single forwarder. This avoids complex pre-coordination while still converging to correct single-copy delivery.
The Effective_Propagation_Delay and Effective_Override_Interval are computed as the maximum across all neighbors' advertised values, ensuring even the slowest router on a multi-access link can send an override Join before the upstream neighbor stops forwarding. Both options are ignored unless all neighbors on the link advertise support.
The SPTbit and the conditional logic in Update_SPTbit() are designed to prevent temporary black-holes during the RP-tree to SPT transition. Without it, a router might send Prune(S,G,rpt) before upstream (S,G) state has fully propagated, resulting in a window where traffic is neither delivered via the RPT nor the SPT.
RFC 4601 is designed to be interoperable with RFC 2362 (Experimental PIM-SM). The specification diverges from RFC 2362 behavior only where that behavior was clearly incorrect. Routers implemented to RFC 4601 should successfully interoperate with routers implemented to RFC 2362.
DR election MUST be performed on ALL active PIM-SM interfaces. PIM implementations that skip DR election on point-to-point interfaces are non-compliant.
If a router needs to send a Join/Prune or Assert message on an interface on which it has not yet sent a Hello, it MUST immediately send the relevant Hello first, then the Join/Prune or Assert. Neighbors discard Join/Prune and Assert messages from routers from which they have not yet received a Hello.
If conflicting secondary address mappings are received from different PIM neighbors on the same interface, only the most recently received mapping MUST be maintained and an error SHOULD be logged to the administrator in a rate-limited manner.
In IPv6, the encapsulating DR MUST perform Path MTU Discovery and MUST send an ICMP Packet Too Big message if a packet exceeds the effective tunnel MTU. If the effective tunnel MTU falls below 1280 bytes, the DR MUST send Fragmentation Required messages with MTU 1280 and MUST fragment PIM Register messages using an IPv6 fragmentation header between the outer IPv6 header and the PIM Register header.
PIM Hello messages MUST be sent on all active interfaces, including physical point-to-point links, multicast to the ALL-PIM-ROUTERS group address (224.0.0.13 for IPv4, ff02::d for IPv6). Implementations that omit Hello messages on point-to-point interfaces are explicitly non-compliant.
The Address List option MUST be included in all Hello messages if secondary addresses exist; the primary address of the source interface MUST NOT be listed within it. This enables the NBR macro to map MRIB next-hop information to the correct primary address for Join/Prune destinations.
The DR_Priority option SHOULD be included in every Hello message even if no DR Priority is explicitly configured, because priority-based DR election is only enabled when all neighbors on an interface advertise support. The default priority is 1.
The Generation_Identifier (GenID) option SHOULD be included in all Hello messages. When a Hello with a new GenID is received from a neighbor, any old Hello information about that neighbor SHOULD be discarded and superseded, potentially causing a new DR election.
The LAN Prune Delay option SHOULD be included in all Hello messages sent on multi-access LANs, advertising the router's Propagation_Delay and Override_Interval. These values are only applied when all neighbors on the link advertise the option; otherwise, default values are used.
Within one Address List Hello option, all addresses MUST be of the same address family; mixing IPv4 and IPv6 addresses within the same option is not permitted. The address family SHOULD match the IP source and destination of the packet header.
The Rendezvous Point (RP) is the root of the shared (*,G) distribution tree. Receivers send Joins toward the RP, and sources' DRs encapsulate traffic to the RP in PIM Register messages until native forwarding is established. The RP address is discovered via Bootstrap Router (BSR) mechanism, embedded-RP, or static configuration.
The (S,G) Keepalive Timer (KAT) is refreshed by data forwarded using (S,G) state, keeping (S,G) state alive in the absence of explicit Joins. It enables the RP's 'turnaround rules' where (S,G) joins stop register encapsulation and (S,G) prunes subsequently prevent unnecessary traffic from reaching the RP.
The (S,G) SPTbit distinguishes whether forwarding uses the source-specific SPT (TRUE) or the shared RP tree (FALSE). Update_SPTbit() sets it TRUE only when the packet arrives on RPF_interface(S), JoinDesired(S,G) is TRUE, and at least one of: source is directly connected, RPF interfaces differ, no one needs the RPT copy, or RPF'(S,G)==RPF'(*,G).
The Tree Information Base (TIB) organizes state into four categories: (*,*,RP) state for per-RP all-groups trees, (*,G) state for the shared RP tree, (S,G) state for source-specific trees, and (S,G,rpt) state recording source-specific prune information on the RP tree. Implementations typically translate TIB state into an efficient MFIB for actual forwarding.
IANA maintains a PIM Address Family registry for PIM-specific address encoding types used in Encoded Source and Group Address fields. Values align with the Address Family Numbers registry; PIM-specific extensions are assigned from this dedicated registry.
IANA maintains a PIM Hello Options registry for TLV option types in PIM Hello messages. Defined options include Holdtime (type 1), LAN Prune Delay (type 2), DR Priority (type 19), Generation ID (type 20), and Address List (type 24). New option types require IANA assignment.
PIM is susceptible to denial-of-service attacks: forged Join messages cause routers to maintain unnecessary multicast state and attract unwanted traffic; forged Prune messages suppress legitimate traffic. Without cryptographic authentication (e.g., IPsec), there is no protocol-level defense against these state-exhaustion attacks.
PIM link-local messages (Hello, Join/Prune, Assert, Bootstrap) can be forged by on-link attackers to manipulate DR election, inject spurious multicast state, or subvert assert winners, causing traffic black-holes or denial of service. IPsec AH or ESP in authentication mode SHOULD be used with a suitable group security association to protect these messages.
PIM Register and Register-Stop messages are sent as unicast and are vulnerable to forgery by any IP-spoofing attacker. A forged Register-Stop can suppress legitimate multicast traffic; a forged Register can cause the RP to create spurious multicast state. IPsec with AH or ESP SHOULD be configured between each DR and RP pair.
The downstream per-interface (*,G), (S,G), and (S,G,rpt) Join/Prune state machines each have NoInfo, Join/Pruned, and Prune-Pending states with associated Prune-Pending Timer (PPT) and Join/Prune Expiry Timer (ET). The Prune-Pending state allows downstream routers to override a prune before it takes effect.
The per-interface (*,G) Assert state machine mirrors the (S,G) Assert machine but resolves duplicate shared-tree (RP-tree) forwarding. The winner is chosen by metric preference and metric to the RP, then highest IP address. Assert losers update their RPF neighbor to the Assert winner for subsequent Joins.
The per-interface (S,G) Assert state machine has three states: NoInfo, 'I won Assert' (W), and 'I lost Assert' (L). The winner is chosen by preferring the router with (S,G) forwarding state, then lowest metric preference, then lowest metric, then highest IP address. The Assert Timer (AT) governs state expiry.
The per-(S,G) Register state machine at a DR has four states: NoInfo (initial), Join (register tunnel active, encapsulating to RP), Join-Pending (tunnel pruned, Register-Stop Timer running, Null-Register imminent), and Prune (Register-Stop received, tunnel inactive). Transitions are driven by CouldRegister changes, Register-Stop receipt, Register-Stop Timer expiry, and RP changes.
The upstream (S,G,rpt) triggered-message state machine has states RPTNotJoined(G), NotPruned(S,G,rpt), and Pruned(S,G,rpt), with an Override Timer (OT) controlling when Prune(S,G,rpt) override messages are sent in response to upstream peers' Join/Prune messages on multi-access LANs.
Encoded Source and Group Address fields use: Address Family (1 octet), Encoding Type (1 octet), then family-specific flags and address. Source addresses include a Sparse-mode bit (S), WC-bit (W, wildcards source), RPT-bit (R, RPT join), and mask length before the source address. Group addresses include a bidirectional (B) bit and Zone (Z) bit.
The Assert message contains the encoded group address (variable), encoded source address (variable), an R (RPT-bit) flag in bit 31 of the next word, metric preference (31 bits), and metric (32 bits). The R bit distinguishes (*,G) Asserts (R=1) from (S,G) Asserts (R=0); lower preference and metric values win.
The Join/Prune message encodes multiple groups per packet: PIM header, unicast upstream neighbor address (variable), 1 reserved octet, Number of Groups (1 octet), Hold Time (2 octets), then per-group records each with encoded group address, joined source count (2 octets), pruned source count (2 octets), and source lists.
The PIM Register message contains a 4-octet common PIM header followed by a 32-bit flags word with Border bit (B, bit 0) and Null-Register bit (N, bit 1) and 30 reserved bits, followed by the encapsulated IP multicast data packet. The B bit indicates the encapsulating DR is a PIM multicast border router.