PIM Overview
Protocol Independent Multicast (PIM) is a collection of multicast
routing protocols, each optimized for a different environment. There are
two main PIM protocols, PIM Sparse Mode and PIM Dense Mode. A third PIM protocol,
Bi-directional PIM, is less widely used.
Typically, either PIM Sparse Mode or PIM Dense Mode will be used
throughout a multicast domain. However, they may also be used together within a single domain, using Sparse Mode for
some groups and Dense Mode for others. This mixed-mode configuration is known as Sparse-Dense Mode. Similarly, Bi-directional PIM may be used on
its own, or it may be used in conjunction with one or both of PIM Sparse Mode and PIM Dense Mode.
All PIM protocols share a common control message format. PIM control messages are sent as raw IP datagrams (protocol number 103),
either multicast to the link-local ALL PIM ROUTERS multicast group, or unicast to a specific destination.
PIM Sparse Mode (PIM-SM) is a multicast routing protocol designed on
the assumption that recipients for any particular multicast group will be sparsely distributed throughout the
network. In other words, it is assumed that most subnets in the network will not want any given multicast packet.
In order to receive multicast data, routers must explicitly tell their upstream neighbors about their interest
in particular groups and sources. Routers use PIM Join and Prune messages to join and leave multicast
distribution trees.
PIM-SM by default uses shared trees, which are multicast distribution trees rooted
at some selected node (in PIM, this router is called the Rendezvous Point,
or RP) and used by all sources sending to the multicast group. To send to the RP, sources
must encapsulate data in PIM control messages and send it by unicast to the
RP. This is done by the source's Designated Router (DR), which is a router
on the source's local network. A single DR is elected from all PIM routers
on a network, so that unnecessary control messages are not sent.
One of the important requirements of PIM Sparse Mode, and Bi-directional
PIM, is the ability to discover the address of a RP for a multicast group
using a shared tree. Various RP discovery mechanisms are used, including static
configuration, Bootstrap Router, Auto-RP, Anycast RP, and Embedded RP.
PIM-SM also supports the use of source-based trees, in which a separate multicast
distribution tree is built for each source sending data to a multicast group.
Each tree is rooted at a router adjacent to the source, and sources send data
directly to the root of the tree. Source-based trees enable the use of Source-Specific
Multicast (SSM), which allows hosts to specify the source from which they wish to
receive data, as well as the multicast group they wish to join. With SSM, a
host identifies a multicast data stream with a source and group address pair
(S,G), rather than by group address alone (*,G).
PIM-SM may use source-based trees in the following
circumstances.
- For SSM, a last-hop router will join
a source-based tree from the outset.
- To avoid data sent to an RP having to be encapsulated, the RP may
join a source-based tree.
- To optimize the data path, a last-hop router may choose to
switch from the shared tree to a source-based tree.
PIM-SM is a soft-state protocol. That is, all state is timed-out a while
after receiving the control message that instantiated it. To keep the state alive, all PIM Join messages are periodically
retransmitted.
Version 1 of PIM-SM was created in 1995, but was never standardized by
the IETF. It is now considered obsolete, though it is still supported by Cisco and Juniper routers. Version 2 of PIM-SM
was standardized in RFC 2117 (in 1997) and updated by RFC 2362 (in 1998). Version 2 is significantly different from and
incompatible with version 1. However, there were a number of problems with RFC 2362, and a new specification of PIM-SM
version 2 is currently being produced by the IETF. There have been many implementations of PIM-SM and it is widely
used.
PIM Dense Mode (PIM-DM) is a multicast routing protocol designed with the opposite
assumption to PIM-SM, namely that the receivers for any multicast group are
distributed densely throughout the network. That is, it is assumed
that most (or at least many) subnets in the network will want any given multicast
packet. Multicast data is initially sent to all hosts in the network. Routers
that do not have any interested hosts then send PIM Prune
messages to remove themselves from the tree.
When a source first starts sending data, each router on the source's LAN
receives the data and forwards it to all its PIM neighbors and to all links with directly attached receivers for the
data. Each router that receives a forwarded packet also forwards it likewise, but only after checking that the packet
arrived on its upstream interface. If not, the packet is dropped. This mechanism prevents forwarding
loops from occurring. In this way, the data is flooded to all parts of the network.
Some routers will have no need of the data, either for directly connected receivers or for other PIM neighbors. These routers respond to receipt of the data by sending a
PIM Prune message upstream, which instantiates Prune state in the upstream router, causing it to stop
forwarding the data to its downstream neighbor. In turn, this may cause the upstream router to have no need of the data,
triggering it to send a Prune message to its upstream neighbor. This 'broadcast and prune' behavior means that eventually the data is only sent to those parts of the network that require it.
Eventually, the Prune state at each router will time out, and data will
begin to flow back into the parts of the network that were previously pruned. This will trigger further Prune
messages to be sent, and the Prune state will be instantiated once more.
PIM-DM only uses source-based trees. As a result, it does not use RPs, which
makes it simpler than PIM-SM to implement and deploy. It is an efficient protocol
when most receivers are interested in the multicast data, but does not scale
well across larger domains in which most receivers are not interested in the data.
The development of PIM-DM has paralleled that of PIM-SM. Version 1 was
created in 1995, but was never standardized. It is now considered obsolete, though it is still supported by Cisco and
Juniper routers. Version 2 of PIM-DM is currently being standardized by the IETF. As with PIM-SM, version 2 of PIM-DM
is significantly different from and incompatible with version 1. PIM Dense Mode (PIM DM) is less common than PIM-SM, and is mostly used for individual small domains.
Bi-directional PIM (BIDIR-PIM) is a third PIM protocol, based on PIM-SM.
The main way BIDIR-PIM differs from PIM-SM is in the method used to send data from a source to the RP. Whereas in PIM-SM data is sent using either encapsulation or a source-based tree, in BIDIR-PIM the data flows to the RP along the
shared tree, which is bi-directional - data flows in both directions along any given branch.
BIDIR-PIM's major differences from PIM-SM are as follows.
- There are no source-based trees, and in fact no (S,G) state at
all. Therefore there is no option for routers to switch from a shared tree to a source-based tree, and Source-Specific Multicast
is not supported.
- To avoid forwarding loops, for each RP one router on each link
is elected the Designated Forwarder (DF). This is done at RP discovery time using the DF election
message.
- There is no concept of a Designated
Router.
- No encapsulation is used.
- The forwarding rules are very much simpler than in PIM-SM, and
there are no data-driven events in the control plane at all.
The main advantage of BIDIR-PIM is that it scales very well when there are many sources for each group. However, the lack of source-based trees means that
traffic is forced to remain on the possibly inefficient shared tree.
There have been two proposed specifications for Bi-directional PIM. The
first was described in draft-farinacci-bidir-pim, which dates from 1999. The protocol described here is a replacement,
simpler than and with some improvements over the first. It is described in draft-ietf-pim-bidir.
Typically, PIM-SM, PIM-DM or BIDIR-PIM would be used alone throughout a multicast
domain. However it is possible to use a combination of the three by distributing
multicast groups between the different protocols. Each group must operate in either
sparse, dense or bi-directional mode; it is not possible to use a single group
in more than one mode at once. Given such a division, the protocols coexist
largely independent of one another.
The one way in which the protocols interact is that the same PIM Hello
protocol is used by each, and is only run once on each link. The information learned from the Hello message exchange
must be shared among the three routing protocols.
The method used to distribute groups between the three protocols is outside
the scope of the PIM protocols and is a matter of local configuration. Note that it is important that every router in
the domain has the same assignment of groups to protocols. The following techniques are used.
- The Bootstrap Router (BSR) protocol, used for RP discovery, has been extended to add a
"Bi-directional" bit for each group range. This method may be used to assign groups between sparse and
bi-directional modes if using BSR.
- Routers may be configured to use dense mode if the RP discovery
mechanism (whatever that may be) fails to find an available RP for a group, and to use sparse or bi-directional
mode otherwise.
- Router may be manually configured with group ranges for sparse,
dense and bi-directional modes.
Related links:
For more information about Metaswitch's
Multicast IP Routing products and expertise contact
.