<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC2629 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2629.xml">
<!ENTITY RFC3552 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3552.xml">
<!ENTITY I-D.narten-iana-considerations-rfc2434bis SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.narten-iana-considerations-rfc2434bis.xml">
]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc strict="yes" ?>
<?rfc toc="yes"?>
<?rfc symrefs="no"?>
<?rfc sortrefs="yes" ?>
<?rfc compact="yes" ?>
<?rfc subcompact="no" ?>
<rfc category="std" docName="draft-ietf-pim-explicit-tracking-09" ipr="trust200902">

<front>

    <title abbrev="Explicit Membership Tracking Function">
      IGMP/MLD-Based Explicit Membership Tracking Function for Multicast Routers
    </title>

    <author fullname="Hitoshi Asaeda" initials="H" surname="Asaeda">
      <organization abbrev="NICT">National Institute of Information and Communications Technology</organization>
      <address>
	<postal>
	  <street>4-2-1 Nukui-Kitamachi</street>
	  <city>Koganei</city> <region>Tokyo</region>
	  <code>184-8795</code>
	  <country>Japan</country>
	</postal>
	<email>asaeda@nict.go.jp</email>
      </address>
    </author>

    <date year="2013" />

    <area>Routing</area>
    <workgroup>PIM Working Group</workgroup>

    <keyword>multicast</keyword>
    <keyword>IGMP</keyword>
    <keyword>MLD</keyword>
    <keyword>explicit tracking</keyword>
    <keyword>fast leave</keyword>

    <abstract>
      <t>This document describes the IGMP/MLD-based explicit membership tracking function for multicast routers and IGMP/MLD proxy devices supporting IGMPv3/MLDv2. The explicit membership tracking function contributes to saving network resources and shortening leave latency.</t>
    </abstract>

</front>

<middle>

<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->

	<section anchor="sec.intro" title="Introduction">

	  <t>The Internet Group Management Protocol (IGMP) version 3 <xref target="refs.IGMPv3" /> for IPv4 and the Multicast Listener Discovery Protocol (MLD) version 2 <xref target="refs.MLDv2" /> for IPv6 are the standard protocols used by member hosts and multicast routers. Lightweight IGMPv3 and Lightweight MLDv2 (or LW-IGMPv3 and LW-MLDv2) <xref target="refs.LW" /> are subsets of the standard IGMPv3 and MLDv2.</t>

	  <t>When a host starts/finishes listening to particular multicast channels, it sends IGMP/MLD State-Change Report messages specifying the corresponding channel information as the join/leave request to its upstream router (i.e., an adjacent multicast router or IGMP/MLD proxy device <xref target="refs.Proxy" />). The "unsolicited" report messages are sent only when the host joins/leaves the channels. Since IGMP/MLD are non-reliable protocols, unsolicited report messages may be lost or may not reach upstream routers. To alleviate this problem, unsolicited report messages are retransmitted a number of times according to the value of the [Robustness Variable] defined in <xref target="refs.IGMPv3" /><xref target="refs.MLDv2" />.</t>

	  <t>Also, a querier router periodically sends IGMP/MLD General Query messages every General Query timer interval (i.e. [Query Interval] value defined in <xref target="refs.IGMPv3" /><xref target="refs.MLDv2" />). Upon receiving the query messages, the member hosts reply with "solicited" report messages. Routers then keep their membership state information up to date. However, this approach still does not guarantee that the membership state is always perfectly synchronized. To minimize the possibility of having outdated membership information, routers may shorten the periodic General Query timer interval. Unfortunately, this increases the number of transmitted solicited report messages and induces network congestion. And the greater the amount of network congestion, the greater the potential for IGMP/MLD report messages being lost and the membership state information being outdated in the router.</t>

	  <t>IGMPv3 <xref target="refs.IGMPv3" />, MLDv2 <xref target="refs.MLDv2" />, and these lightweight protocols <xref target="refs.LW" /> can provide the ability to keep track of the downstream (adjacent) multicast membership state in multicast routers, yet the specifications are not clearly given. This document describes the "IGMP/MLD-based explicit member tracking function" for multicast routers and a way for routers to implement the function. By enabling this explicit tracking function, routers can keep track of the downstream multicast membership state. This function enables the following things:</t>
	  <t><list style='symbols'>
	      <t>Reducing the number of transmitted query and report messages</t>
	      <t>Shortening leave latencies</t>
	      <t>Per-host accounting</t>
	      <t>Maintaining multicast channel characteristics (or statistics)</t>
	  </list></t>
	  <t>where this document mainly focuses on the above first and second bullets in the following sections.</t>

	  <t>Note that the explicit tracking function does not change the reliability of the message transmission. The list of tracked member hosts may be outdated in the router because of host departure from the network without sending State-Change Report messages or loss of such messages due to network congestion. Therefore, a router enabling the function may still need to send periodic IGMPv3/MLDv2 General Query messages and solicit IGMPv3/MLDv2 report messages from downstream member hosts to maintain an up-to-date membership state.</t>

	  <t>The explicit tracking function potentially requires a large amount of memory so that routers keep all membership states. Particularly when a router needs to maintain a large number of member hosts, this resource requirement might be sensitive. Operators may decide to disable this function when their routers have insufficient memory resources, despite the benefits mentioned above.</t>

	  <t>The explicit tracking function does not change message formats used by the standard IGMPv3 <xref target="refs.IGMPv3" /> and MLDv2 <xref target="refs.MLDv2" />, and their lightweight version protocols <xref target="refs.LW" />; nor does it change a multicast data sender's and receiver's behavior.</t>

	</section>

<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->

	<section title="Terminology">

	  <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in <xref target="refs.KEYWORDS">RFC 2119</xref>.</t>

	</section>

<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->

	<section anchor="sec.state" title="Membership State Information">

	  <t>A router enabling the explicit tracking function maintains the "membership state information". When a multicast router receives a Current-State or State-Change Report message, it creates or modifies this membership state information to maintain the membership state up to date.</t>

	    <t>The membership state information consists of the following information:</t>

            <t><list style='hanging'>
	      <t>(S, G, number of receivers, (receiver records))</t>
	    </list></t>
	    <t>where "S" denotes source address, "G" denotes group or multicast address, and each receiver record is of the form:</t>
	    <t><list style='hanging'>
	      <t>(IGMP/MLD membership/listener report sender's address)</t>
	    </list></t>

	    <t>In the state information, each S and G indicates a single IPv4/IPv6 address. S is set to "Null" for Any-Source Multicast (ASM) communication (i.e., (*,G) join reception). In order to simplify the implementation, Lightweight-IGMPv3/MLDv2 <xref target="refs.LW" /> do not keep the state of (S,G) joined with EXCLUDE filter mode; if a router receives an (S,G) join/leave request with EXCLUDE filter mode from the downstream hosts, the router translates the request to a (*,G) join state/leave request and records the state and the receivers' addresses in the maintained membership state information.</t>

	  <t>The membership state information must be identified properly even though a receiver (i.e., IGMP/MLD Report sender) sends the identical report messages multiple times. And the maintained membership state information will be flushed when the router reboots or restarts the multicast routing processes.</t>

	</section>

<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->

	<section anchor="sec.minreport" title="Specific Query Suppression">

	  <t>In accordance with <xref target="refs.IGMPv3" /> and <xref target="refs.MLDv2" />, when a router receives the State-Change Report and needs to confirm whether any hosts are still interested in a channel or not, the router sends the corresponding Group-Specific or Group-and-Source Specific Query messages as defined in Section 6.4.2 of <xref target="refs.IGMPv3" /> and Section 7.4.2 of <xref target="refs.MLDv2" />. The queries sent by actions defined in these sections need to be transmitted [Last Member Query Count] (LMQC) or [Last Listener Query Count] (LLQC) times, once every [Last Member Query Interval] (LMQI) or [Last Listener Query Interval] (LLQI), in order to confirm the sole member.
(The default values for LMQI/LLQI defined in <xref target="refs.IGMPv3" /><xref target="refs.MLDv2" /> are 1 second. The default values for LMQC/LLQC are the [Robustness Variable] value whose default value is 2.)
All member hosts joining the identical channel then reply with their own states after acquiring these query messages. However, transmitting a large number of IGMP/MLD Report messages consumes network resources, and this may pose a particular problem especially when many hosts joining the identical channel send these reports simultaneously.</t>

	  <t>The explicit tracking function provides a method called "specific query suppression" that reduces the number of Group-Specific or Group-and-Source Specific Query messages transmitted from a router. This in turn reduces the number of Current-State Report messages transmitted from member hosts.</t>

	  <t>With the specific query suppression, regardless of the LMQC/LLQC values, if the router receives one or more replies from the downstream member(s), it can stop (i.e., cancel) retransmitting the specific query message(s) for the specified source and/or group. This contributes to saving network resources.</t>

	  <t>If the router is confident that the tracked membership state information is perfectly synchronized with the current (actual) member hosts, the specific query suppression in a "robust link state" may also be implemented with the explicit tracking function. A router enabling the specific query suppression in a robust link state does not send any specific query message(s) and immediately leave the group or sources when the sole member has left according to its membership state information.
The specific query suppression in a robust link state hence does not rely on LMQC/LLQC and LMQI/LLQI values.
This contributes to shortening leave latency described in <xref target="sec.fastleave" />. However, this behavior requires that the router perfectly tracks all member hosts. (See a risk of wrong membership expectation described in <xref target="sec.wrong" />.)</t>

	  <t>Note that the default behavior of the router that supports the explicit tracking function SHOULD disable this specific query suppression, in order to avoid the risk caused by the wrong membership expectation or by the case in which multiple multicast routers exist on a LAN and the querier router is not the forwarder router. The former case is described in <xref target="sec.wrong" />. For the latter case, when the querier suppresses the specific query message transmission, and expects that the State-Change Report sender is not the sole member of the channel, it does not send the specific query. Then the routers (including the forwarder) on the same LAN do not receive a Current-State Report message from the corresponding member hosts. The forwarder in this case may prune the routing path, although there are other member hosts subscribing to the channel on the LAN.</t>

	</section>

<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->

	<section anchor="sec.fastleave" title="Shortening Leave Latency">

	  <t>A router enabling the explicit tracking function can shorten leave latencies by tuning the following values; [Last Member Query Count] (LMQC), [Last Listener Query Count] (LLQC), [Last Member Query Interval] (LMQI), [Last Listener Query Interval] (LLQI), and [Robustness Variable] values.</t>

	  <t>The [Last Member Query Interval] (LMQI) and [Last Listener Query Interval] (LLQI) values defined in the standard specifications <xref target="refs.IGMPv3" /><xref target="refs.MLDv2" /> specify the maximum time allowed for a member host to send a responding Report. The [Last Member Query Count] (LMQC) and [Last Listener Query Count] (LLQC) are the number of Group-Specific Queries or Group-and-Source Specific Queries sent before the router assumes there are no local members. The [Last Member Query Time] (LMQT) and [Last Listener Query Time] (LLQT) values are the total time the router should wait for a report after the Querier has sent the first query.</t>

	  <t>The default values for LMQI/LLQI defined in <xref target="refs.IGMPv3" /><xref target="refs.MLDv2" /> are 1 second, yet, for a router enabling the explicit tracking function, the LMQI/LLQI may be set to 1 second or shorter. As well, the default values for LMQC/LLQC are the [Robustness Variable] value whose default value is 2, yet the LMQC/LLQC may be set to 1 for the router. Smaller LMQC/LLQC values give shorter LMQT/LLQT, which shorten the leave latencies.</t>

	  <t>Furthermore, if operators are confident that their link is fairly robust (e.g., the [Robustness Variable] value is appropriately configured so that the chances of unsolicited messages being lost are sufficiently low), and if the querier router always acts as the forwarder router for all multicast channels in the LAN, they will set smaller LMQC/LLQC and shorter LMQI/LLQI (and hence shorter LMQT/LLQT) with the specific query suppression, or enable the specific query suppression in a robust link state (<xref target="sec.minreport" />) for their routers.</t>

	  <t>Note that setting smaller LMQC/LLQC values or adopting the specific query suppression in a robust link state poses the risk of wrong membership state described in <xref target="sec.wrong" />. Operators setting smaller LMQC/LLQC values must recognize this tradeoff.</t>

	</section>

<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->

	<section anchor="sec.wrong" title="Risk of Wrong Membership State">

	  <t>There are possibilities that a router's membership expectation is inconsistent due to an outdated membership state. For example, (1) a router expects that more than one corresponding member host exists on its LAN, but in fact no member host exists for that multicast channel, or (2) a router expects that no corresponding member host exists on its LAN, but in fact one or more than one member host exists for that multicast channel.</t>

	  <t>The first case may occur in an environment where the sole member host departs the network without sending a State-Change Report message. The router later detects that there is no member host for the corresponding channels when it does not receive a Current-State Report within the timeout of the response for the periodic General Query (and then the group or source timers are expired). However, this situation prolongs leave latency and wastes network resources since the router forwards unneeded traffic for a while.</t>

	  <t>The second case occurs when a router sends a specific query but does not receive a Current-State Report from a downstream host within an LMQT or LLQT period. It recognizes that no member host exists on the LAN and might prune the routing path. The router reestablishes the routing path when it receives the solicited report message for the channels. However, the downstream hosts may loose the data packets until the routing path is reestablished and the data forwarding is restarted.</t>

	  <t>If operators do not believe that their link is fairly robust or that they can configure the [Robustness Variable] value appropriately, they may configure the LMQC/LLQC value to 2 (the default value of the [Robustness Variable] value) or bigger value for their routers. In this case, the routers would enable the explicit tracking function but may want to disable the specific query suppression specified in <xref target="sec.minreport" />. Such configurations will not contribute to saving network resources, but reduce the risk of the incorrect membership expectation.</t>

	</section>

<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->

	<section anchor="sec.concern" title="All-Zero and Unspecified Source Addresses">

	  <t>The IGMPv3 specification <xref target="refs.IGMPv3" /> mentions that an IGMPv3 report is usually sent with a valid IP source address, yet it permits a host to use the 0.0.0.0 source address (since the host has not yet acquired an IP address), and routers must accept a report with this source address.</t>

	  <t>When a router enabling the explicit tracking function receives IGMP report messages with an all-zero source address, it deals with the IGMP report messages correctly as defined in <xref target="refs.IGMPv3" /> and continuously keeps track of the membership state. However, the router SHOULD NOT maintain the host specifying all-zero source address in its membership state information. The router will maintain its membership state information by checking Current-State reports as ordinary routers do.</t>

	  <t>On the other hand, the MLDv2 specification <xref target="refs.MLDv2" /> mentions that routers silently discard a message that is sent with an invalid link-local address or sent with the unspecified address (::), without taking any action, because of security considerations. According to this specification, whether the explicit tracking function is used or not, a router does not deal with a member hosts sending an MLD report message with the unspecified source address.</t>

	</section>

<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->

	<section anchor="sec.interop" title="Compatibility with Older Version Protocols">

	  <t>The explicit tracking function does not work with older versions of IGMP or MLD, IGMPv1 <xref target="refs.IGMPv1" />, IGMPv2 <xref target="refs.IGMPv2" />, or MLDv1 <xref target="refs.MLDv1" />, because a member host using these protocols enables "membership report suppression" by which the host will cancel sending pending membership reports if a similar report is observed from another member on the network.</t>

	  <t>To preserve compatibility with older versions of IGMP/MLD, routers supporting IGMPv3/MLDv2 enable the host compatibility mode defined in <xref target="refs.IGMPv3"></xref><xref target="refs.MLDv2"></xref>. The host compatibility mode of an interface changes the operational protocol version on the LAN whenever an older version query (than the current compatibility mode) is heard or when certain timer conditions occur. The routers can hence support downstream hosts that are not upgraded to the latest versions and run membership report suppression.</t>

	  <t>Therefore, if a multicast router supporting IGMPv3/MLDv2 and enabling the explicit tracking function changes its compatibility mode to the older versions, the router SHOULD disable the explicit tracking function while it acts as the older version router.</t>

	</section>

<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->

	<section title="IANA Considerations">
	  <t>This document has no actions for IANA.</t>
	</section>

<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->

	<section title="Security Considerations">

	  <t>The explicit tracking function potentially requires a large amount of memory so that routers keep all membership states. It gives some impact in the cases where (1) a router attaches to a link or an IGMP/MLD proxy device <xref target="refs.Proxy" /> that has a large number of member hosts, and a router has insufficient memory resources to maintain a large number of member hosts, or (2) a malicious host sends a large number of invalid IGMP/MLD State-Change Report messages without any intent to join the specified channels.</t>

	  <t>For the first case, operators may disable the explicit tracking function, despite the benefits mentioned above. For the second case, some serious threats may be induced. For instance;</t>
	  <t><list style='numbers'>
	      <t>Transmitting a large number of invalid IGMP/MLD report messages consumes network resources.</t>
	      <t>Keeping a large number of invalid membership states on a router consumes the router's memory resources.</t>
	      <t>Dealing with a large number of invalid membership states on a router consumes the router's CPU and memory resources.</t>
	  </list></t>
	  <t>In order to mitigate such threats, a router enabling the explicit tracking function may limit a total amount of membership information the router can store, or may rate-limit State-Change Report messages per host. When the router enables rate-limiting per host, the router MAY ignore the received State-Change Report messages to minimize the processing overhead or prevent DoS attacks. The rate limit is left to the router's implementation.</t>

	</section>

<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->

	<section title="Acknowledgements">
	  <t>Luis M. Contreras, Toerless Eckert, Sergio Figueiredo, Bharat Joshi, Nicolai Leymann, Magnus Nystrom, Stig Venaas, and others provided many constructive and insightful comments.</t>

	</section>

<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->

</middle>

<back>
	<references title="Normative References">

	  <reference anchor="refs.KEYWORDS">
	    <front>
	      <title>Key words for use in RFCs to indicate requirement levels</title>
	      <author initials="S" surname="Bradner" />
	      <date month="March" year="1997" />
	    </front>
	    <seriesInfo name="RFC" value="2119" />
	  </reference>

	  <reference anchor="refs.IGMPv3">
	    <front>
	      <title>Internet Group Management Protocol, Version 3</title>
	      <author initials="B" surname="Cain" />
	      <author initials="S" surname="Deering" />
	      <author initials="I" surname="Kouvelas" />
	      <author initials="B" surname="Fenner" />
	      <author initials="A" surname="Thyagarajan" />
	      <date month="October" year="2002" />
	    </front>
	    <seriesInfo name="RFC" value="3376" />
	  </reference>

	  <reference anchor="refs.MLDv2">
	    <front>
	      <title>Multicast Listener Discovery Version 2 (MLDv2) for IPv6</title>
	      <author initials="R" surname="Vida" />
	      <author initials="L" surname="Costa" />
	      <date month="June" year="2004" />
	    </front>
	    <seriesInfo name="RFC" value="3810" />
	  </reference>

	  <reference anchor="refs.LW">
	    <front>
	      <title>Lightweight Internet Group Management Protocol Version 3 (IGMPv3) and Multicast Listener Discovery Version 2 (MLDv2) Protocols</title>
	      <author initials="H" surname="Liu" />
	      <author initials="W" surname="Cao" />
	      <author initials="H" surname="Asaeda" />
	      <date month="February" year="2010" />
	    </front>
	    <seriesInfo name="RFC" value="5790" />
	  </reference>

	</references>

	<references title="Informative References">

	  <reference anchor="refs.IGMPv1">
	    <front>
	      <title>Host Extensions for IP Multicasting</title>
	      <author initials="S" surname="Deering" />
	      <date month="August" year="1989" />
	    </front>
	    <seriesInfo name="RFC" value="1112" />
	  </reference>

	  <reference anchor="refs.IGMPv2">
	    <front>
	      <title>Internet Group Management Protocol, Version 2</title>
	      <author initials="W" surname="Fenner" />
	      <date month="November" year="1997" />
	    </front>
	    <seriesInfo name="RFC" value="2236" />
	  </reference>

	  <reference anchor="refs.MLDv1">
	    <front>
	      <title>Multicast Listener Discovery (MLD) for IPv6</title>
	      <author initials="S" surname="Deering" />
	      <author initials="W" surname="Fenner" />
	      <author initials="B" surname="Haberman" />
	      <date month="October" year="1999" />
	    </front>
	    <seriesInfo name="RFC" value="2710" />
	  </reference>

	  <reference anchor="refs.Proxy">
	    <front>
	      <title>Internet Group Management Protocol (IGMP) / Multicast Listener Discovery (MLD)-Based Multicast Forwarding ("IGMP/MLD Proxying")</title>
	      <author initials="B" surname="Fenner" />
	      <author initials="H" surname="He" />
	      <author initials="B" surname="Haberman" />
	      <author initials="H" surname="Sandick" />
	      <date month="August" year="2006" />
	    </front>
	    <seriesInfo name="RFC" value="4605" />
	  </reference>

	</references>
</back>

</rfc>
