<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="info" docName="draft-ietf-pim-zeroconf-mcast-addr-alloc-ps-13" number="10019" updates="" obsoletes="" ipr="trust200902" submissionType="IETF" consensus="true" tocInclude="true" tocDepth="3" symRefs="true" sortRefs="true" xml:lang="en" prepTime="2026-07-31T02:26:58" indexInclude="true" scripts="Common,Latin">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-pim-zeroconf-mcast-addr-alloc-ps-13" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc10019" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="Zeroconf Multicast Addr Alloc Problem Statement">Zeroconf Multicast Address Allocation Problem Statement and Requirements</title>
    <seriesInfo name="RFC" value="10019" stream="IETF"/>
    <author fullname="Nate Karstens" initials="N." surname="Karstens">
      <organization abbrev="Garmin" showOnFrontPage="true">Garmin International, Inc.</organization>
      <address>
        <postal>
          <street>1200 E. 151st St.</street>
          <city>Olathe</city>
          <region>KS</region>
          <code>66062-3426</code>
          <country>United States of America</country>
        </postal>
        <email>nate.karstens@gmail.com</email>
      </address>
    </author>
    <author fullname="Dino Farinacci" initials="D." surname="Farinacci">
      <organization showOnFrontPage="true">lispers.net</organization>
      <address>
        <postal>
          <city>San Jose</city>
          <region>CA</region>
          <country>United States of America</country>
        </postal>
        <email>farinacci@gmail.com</email>
      </address>
    </author>
    <author fullname="Mike McBride" initials="M." surname="McBride">
      <organization showOnFrontPage="true">Futurewei</organization>
      <address>
        <postal>
          <country>United States of America</country>
        </postal>
        <email>michael.mcbride@futurewei.com</email>
      </address>
    </author>
    <date month="07" year="2026"/>
    <area>RTG</area>
    <workgroup>pim</workgroup>
    <keyword>snooping</keyword>
    <keyword>peer-to-peer</keyword>
    <keyword>collision</keyword>
    <keyword>decentralized</keyword>
    <keyword>dynamic</keyword>
    <keyword>zero-configuration</keyword>
    <abstract pn="section-abstract">
      <t indent="0" pn="section-abstract-1">This document surveys current problems with existing protocols for automatically assigning multicast IP addresses in zero-configuration (zeroconf) networking environments. It addresses key challenges, such as link-layer address collisions, hardware limitations, multicast snooping inefficiencies, and the need to avoid manual configuration. Based on these challenges, it derives requirements for a lightweight, decentralized solution for dynamically allocating unique multicast group addresses without central coordination.</t>
      <t indent="0" pn="section-abstract-2">The document presents explicit requirements covering discovery, allocation, conflict detection and resolution, and lease management. It also evaluates considerations specific to IPv6 and IPv4 multicast address ranges, and identifies approaches that are unsuited for zeroconf deployment. This foundation serves as a reference for developing future solutions for multicast address allocation that operate autonomously within local networks.</t>
    </abstract>
    <boilerplate>
      <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.1">
        <name slugifiedName="name-status-of-this-memo">Status of This Memo</name>
        <t indent="0" pn="section-boilerplate.1-1">
            This document is not an Internet Standards Track specification; it is
            published for informational purposes.  
        </t>
        <t indent="0" pn="section-boilerplate.1-2">
            This document is a product of the Internet Engineering Task Force
            (IETF).  It represents the consensus of the IETF community.  It has
            received public review and has been approved for publication by the
            Internet Engineering Steering Group (IESG).  Not all documents
            approved by the IESG are candidates for any level of Internet
            Standard; see Section 2 of RFC 7841. 
        </t>
        <t indent="0" pn="section-boilerplate.1-3">
            Information about the current status of this document, any
            errata, and how to provide feedback on it may be obtained at
            <eref target="https://www.rfc-editor.org/info/rfc10019" brackets="none"/>.
        </t>
      </section>
      <section anchor="copyright" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.2">
        <name slugifiedName="name-copyright-notice">Copyright Notice</name>
        <t indent="0" pn="section-boilerplate.2-1">
            Copyright (c) 2026 IETF Trust and the persons identified as the
            document authors. All rights reserved.
        </t>
        <t indent="0" pn="section-boilerplate.2-2">
            This document is subject to BCP 78 and the IETF Trust's Legal
            Provisions Relating to IETF Documents
            (<eref target="https://trustee.ietf.org/license-info" brackets="none"/>) in effect on the date of
            publication of this document. Please review these documents
            carefully, as they describe your rights and restrictions with
            respect to this document. Code Components extracted from this
            document must include Revised BSD License text as described in
            Section 4.e of the Trust Legal Provisions and are provided without
            warranty as described in the Revised BSD License.
        </t>
      </section>
    </boilerplate>
    <toc>
      <section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" pn="section-toc.1">
        <name slugifiedName="name-table-of-contents">Table of Contents</name>
        <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1">
          <li pn="section-toc.1-1.1">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.1"><xref derivedContent="1" format="counter" sectionFormat="of" target="section-1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-introduction">Introduction</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.1.2">
              <li pn="section-toc.1-1.1.2.1">
                <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.2.1.1"><xref derivedContent="1.1" format="counter" sectionFormat="of" target="section-1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-requirements-language">Requirements Language</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.2">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.2.1"><xref derivedContent="2" format="counter" sectionFormat="of" target="section-2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-link-layer-address-collisio">Link-Layer Address Collisions</xref></t>
          </li>
          <li pn="section-toc.1-1.3">
            <t indent="0" pn="section-toc.1-1.3.1"><xref derivedContent="3" format="counter" sectionFormat="of" target="section-3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-solution-requirements">Solution Requirements</xref></t>
          </li>
          <li pn="section-toc.1-1.4">
            <t indent="0" pn="section-toc.1-1.4.1"><xref derivedContent="4" format="counter" sectionFormat="of" target="section-4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-ipv6-considerations">IPv6 Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.5">
            <t indent="0" pn="section-toc.1-1.5.1"><xref derivedContent="5" format="counter" sectionFormat="of" target="section-5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-ipv4-considerations">IPv4 Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.6">
            <t indent="0" pn="section-toc.1-1.6.1"><xref derivedContent="6" format="counter" sectionFormat="of" target="section-6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-security-considerations">Security Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.7">
            <t indent="0" pn="section-toc.1-1.7.1"><xref derivedContent="7" format="counter" sectionFormat="of" target="section-7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-iana-considerations">IANA Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.8">
            <t indent="0" pn="section-toc.1-1.8.1"><xref derivedContent="8" format="counter" sectionFormat="of" target="section-8"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-references">References</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.8.2">
              <li pn="section-toc.1-1.8.2.1">
                <t indent="0" pn="section-toc.1-1.8.2.1.1"><xref derivedContent="8.1" format="counter" sectionFormat="of" target="section-8.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
              </li>
              <li pn="section-toc.1-1.8.2.2">
                <t indent="0" pn="section-toc.1-1.8.2.2.1"><xref derivedContent="8.2" format="counter" sectionFormat="of" target="section-8.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.9">
            <t indent="0" pn="section-toc.1-1.9.1"><xref derivedContent="Appendix A" format="default" sectionFormat="of" target="section-appendix.a"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-excluded-solutions">Excluded Solutions</xref></t>
          </li>
          <li pn="section-toc.1-1.10">
            <t indent="0" pn="section-toc.1-1.10.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent="" format="title" sectionFormat="of" target="name-acknowledgement">Acknowledgement</xref></t>
          </li>
          <li pn="section-toc.1-1.11">
            <t indent="0" pn="section-toc.1-1.11.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.c"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-addresses">Authors' Addresses</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section numbered="true" removeInRFC="false" toc="include" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t indent="0" pn="section-1-1">Multicast communication is commonly used in networks that need to distribute data from one sender to multiple receivers efficiently. In some environments, such as small or isolated networks, multicast operate without centralized servers or manual configuration. These are referred to as zero-configuration (zeroconf) multicast networks.</t>
      <t indent="0" pn="section-1-2">One example of such an environment is marine networks, which typically include a mix of sensors, controls, and displays. These networks vary in complexity depending on the size and design of the vessel. Devices may range from low-cost temperature or fluid sensors to high-bandwidth sources such as radar, sonar, or video feeds. Many marine networks are built on a single subnet and rely on Layer 2 Ethernet switches to connect devices.</t>
      <t indent="0" pn="section-1-3">In these networks, multicast is the most efficient method for distributing sensor data to multiple displays. However, challenges arise when high-bandwidth multicast streams overload links to low-bandwidth devices. Cost-effective switches often do not support source-specific multicast (SSM) because their address table only maps destination Media Access Control (MAC) addresses. Instead, each multicast stream is assigned a unique destination multicast IP address, and IGMP/MLD snooping <xref target="RFC4541" format="default" sectionFormat="of" derivedContent="RFC4541"/> is used to control multicast delivery. This method introduces limitations, especially in environments where switch hardware lacks advanced multicast filtering capabilities.</t>
      <t indent="0" pn="section-1-4">While marine networks illustrate these issues well, the challenges they face are not unique. Many other zeroconf multicast environments, such as industrial automation, small-scale audio-visual (AV) systems, or ad hoc sensor networks, share similar constraints.</t>
      <t indent="0" pn="section-1-5">The Multicast Address Dynamic Client Allocation Protocol (MADCAP) <xref target="RFC2730" format="default" sectionFormat="of" derivedContent="RFC2730"/> is a method for multicast IP address allocation, but its server-based model does not suit a zeroconf environment. <xref target="RFC3306" format="default" sectionFormat="of" derivedContent="RFC3306"/> and <xref target="RFC4489" format="default" sectionFormat="of" derivedContent="RFC4489"/> both discuss similar approaches to host-based multicast IPv6 address allocation, but neither adequately prevents link-layer address collisions. Although <xref target="RFC3307" format="default" sectionFormat="of" derivedContent="RFC3307"/> establishes a framework to avoid multicast address collisions at both IPv6 and link layers, additional refinement is needed to put this into practice (see <xref target="ipv6-considerations" format="default" sectionFormat="of" derivedContent="Section 4"/>).</t>
      <t indent="0" pn="section-1-6">This document outlines the problem space for zeroconf multicast address allocation, describes the key limitations of current protocols, details sources of link-layer address collisions, and defines a set of requirements for decentralized, zero-configuration multicast address allocation solutions. Multicast applications deployed in a zeroconf environment can use these solutions to dynamically allocate multicast group addresses. The manner in which a multicast group address is used after allocation is outside the scope of this document.</t>
      <t indent="0" pn="section-1-7">The organization of IPv6 multicast and immense volume of possible multicast addresses makes IPv6 well-suited for zeroconf multicast networks. However, IPv4 is still considered by this document for networks where transitioning to IPv6 remains impractical.</t>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-1.1">
        <name slugifiedName="name-requirements-language">Requirements Language</name>
        <t indent="0" pn="section-1.1-1">
    The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
    "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
    described in BCP 14 <xref target="RFC2119" format="default" sectionFormat="of" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" sectionFormat="of" derivedContent="RFC8174"/> 
    when, and only when, they appear in all capitals, as shown here.
        </t>
        <t indent="0" pn="section-1.1-2">The requirements language is used in <xref target="solution-requirements" format="default" sectionFormat="of" derivedContent="Section 3"/> and applies to implementations conformant to the listed requirements.</t>
      </section>
    </section>
    <section numbered="true" removeInRFC="false" toc="include" pn="section-2">
      <name slugifiedName="name-link-layer-address-collisio">Link-Layer Address Collisions</name>
      <t indent="0" pn="section-2-1">Link-layer address collisions are a key concern in multicast networks, particularly when devices rely on zero-configuration operation. Collisions occur when two or more multicast groups are assigned the same link-layer (MAC) address, leading to performance or forwarding issues. This section outlines three scenarios where such collisions can cause problems.</t>
      <t indent="0" pn="section-2-2">First, many host network interfaces allow filtering of multicast traffic directly in hardware. When an application joins a multicast group, the host network stack typically programs the hardware to accept only traffic for that group. However, if two groups share the same link-layer address, the network interface cannot distinguish them. The network stack is then forced to process unwanted traffic in software, reducing performance and increasing CPU usage.</t>
      <t indent="0" pn="section-2-3">Second, link-layer address collisions reduce the benefit of using multicast snooping switches on a network. <xref target="RFC4541" sectionFormat="of" section="4" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4541#section-4" derivedContent="RFC4541"/> indicates some switches forward multicast traffic based solely on the link-layer address, without considering the network-layer group (see the results for Q2 and Q3). Although the survey is outdated, switches with these limitations still exist in some of the target deployments. In such cases, if two multicast streams share the same MAC address, traffic may be sent to devices that did not request it. This is especially problematic when low-bandwidth links are overwhelmed by high-bandwidth streams. Additional concerns related to the overlap of IPv6 and link-layer addresses are discussed in <xref target="RFC4541" sectionFormat="of" section="3" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4541#section-3" derivedContent="RFC4541"/>.</t>
      <t indent="0" pn="section-2-4">Third, the internal design of some switches can also contribute to collisions. For example, certain switch implementations use a hash table with fixed buckets to store forwarding entries based on MAC addresses (see <xref target="US6690667B1" format="default" sectionFormat="of" derivedContent="US6690667B1"/>). If multiple addresses hash to the same location and the bucket fills up, additional entries may be dropped or rejected, resulting in forwarding failures.</t>
      <t indent="0" pn="section-2-5">These examples highlight why a collision-resistant multicast address allocation mechanism is essential in zeroconf environments. The success of this approach depends on the capabilities of the hardware (such as the number of addresses supported by the filters in host network interfaces and the size of the tables maintained in switches/routers) and on the number of multicast groups that are subscribed to by a particular receiver. When the number of entries in the filter tables exceeds availability, a typical fallback mechanism is to bypass the filter entirely and flood traffic to the receiver. This subsequently incurs a per-packet cost for any software-based filtering that is needed.</t>
    </section>
    <section anchor="solution-requirements" numbered="true" removeInRFC="false" toc="include" pn="section-3">
      <name slugifiedName="name-solution-requirements">Solution Requirements</name>
      <t indent="0" pn="section-3-1">A solution intended for decentralized, zero-configuration multicast IP address assignment is expected to operate in dynamic, infrastructure-free environments. To be effective in such contexts, the solution needs to exhibit the following characteristics:</t>
      <ol type="[REQ-%d]" spacing="normal" indent="9" start="1" pn="section-3-2">
        <li pn="section-3-2.1" derivedCounter="[REQ-1]">Unique Address Assignment: Use of the solution <bcp14>SHALL</bcp14> result in a unique address being assigned to the multicast group at both the network and link layers.</li>
        <li pn="section-3-2.2" derivedCounter="[REQ-2]">Resilience to Single Points of Failure: The solution <bcp14>SHALL</bcp14> be designed to minimize introduction of a single point of failure, ensuring that operation continues even if individual devices or links become unavailable.</li>
        <li pn="section-3-2.3" derivedCounter="[REQ-3]">Zero User Configuration: It <bcp14>SHALL</bcp14> operate without requiring user or administrator configuration, allowing seamless deployment in unmanaged networks.</li>
        <li pn="section-3-2.4" derivedCounter="[REQ-4]">Coexistence with Multicast Address Allocation Solutions: The design <bcp14>SHALL</bcp14> allow coexistence with other multicast IP address allocation solutions, including both manual assignment and existing dynamic protocols.</li>
        <li pn="section-3-2.5" derivedCounter="[REQ-5]">Single-Subnet Operation: It <bcp14>SHALL</bcp14> support operation within a single IP subnet, which is typical in link-local or isolated network environments.</li>
        <li pn="section-3-2.6" derivedCounter="[REQ-6]">No External Connectivity: The solution <bcp14>SHALL NOT</bcp14> require Internet access or connectivity to external infrastructure.</li>
        <li pn="section-3-2.7" derivedCounter="[REQ-7]">Supports Multiple Host Applications: It <bcp14>SHALL</bcp14> support multiple applications on the same host, each independently allocating multicast addresses and transmitting to those addresses.</li>
        <li anchor="collision_det" pn="section-3-2.8" derivedCounter="[REQ-8]">Collision Detection and Resolution: The solution <bcp14>SHALL</bcp14> include mechanisms to detect and resolve multicast address collisions at both the network and link layers.</li>
      </ol>
      <t indent="0" pn="section-3-3">Note: In rare cases, collisions may arise after a temporary network partition, when different parts of the network allocate the same multicast address independently. Upon reconnection, such collisions <bcp14>SHALL</bcp14> be detectable and resolved gracefully by ensuring that conflicting streams are migrated to unique addresses.</t>
      <t indent="0" pn="section-3-4">In addition to the above, the following characteristics are considered desirable, but are left as recommendations to allow for flexibility in solution design:</t>
      <ol type="[CONS-%d]" indent="10" spacing="normal" start="1" pn="section-3-5">
        <li pn="section-3-5.1" derivedCounter="[CONS-1]">Multi-Subnet Support: Operation across multiple subnets is beneficial in more complex or routed environments and <bcp14>SHOULD</bcp14> be supported.</li>
        <li pn="section-3-5.2" derivedCounter="[CONS-2]">Standards Compatibility: The solution <bcp14>SHOULD</bcp14> aim to minimize the need for changes to existing protocols or standards that affect backwards compatibility or deployment in existing networks.</li>
        <li pn="section-3-5.3" derivedCounter="[CONS-3]">Cross-Platform Availability: It <bcp14>SHOULD</bcp14> use capabilities that are widely available across host platforms and operating systems.</li>
        <li pn="section-3-5.4" derivedCounter="[CONS-4]">Minimal Dependency on Manufacturing Data: It <bcp14>SHOULD</bcp14> avoid reliance on preloaded configuration or device-specific manufacturing data.</li>
        <li pn="section-3-5.5" derivedCounter="[CONS-5]">Low Overhead: The solution <bcp14>SHOULD</bcp14> minimize the volume and frequency of network traffic generated during normal operation.</li>
        <li pn="section-3-5.6" derivedCounter="[CONS-6]">Advertisement: The solution <bcp14>SHOULD</bcp14> describe a mechanism for advertising and discovering multicast addresses allocated for an application.</li>
        <li pn="section-3-5.7" derivedCounter="[CONS-7]">Network Topology: To allow compatibility with a variety of networks, the solution <bcp14>SHOULD</bcp14> work independently of the dynamics of the underlying topology and adjacencies.</li>
      </ol>
    </section>
    <section anchor="ipv6-considerations" numbered="true" removeInRFC="false" toc="include" pn="section-4">
      <name slugifiedName="name-ipv6-considerations">IPv6 Considerations</name>
      <t indent="0" pn="section-4-1">The rules for IPv6 multicast addresses, described in <xref target="RFC3307" format="default" sectionFormat="of" derivedContent="RFC3307"/>, are comprehensive and well-organized. These rules must be followed by any solution allocating IPv6 multicast addresses, including solutions that meet the requirements defined in this document. However, some aspects of the organization of <xref target="RFC3307" format="default" sectionFormat="of" derivedContent="RFC3307"/> need to be improved to ensure that a zeroconf multicast address assignment solution can coexist with other IPv6 multicast address assignment protocols.</t>
      <t indent="0" pn="section-4-2">For example, <xref target="RFC3307" sectionFormat="of" section="2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc3307#section-2" derivedContent="RFC3307"/> explains that the last 32 bits of an IPv6 multicast address, called the group ID, are mapped directly to the Ethernet MAC address. Different parts of the group ID range are assigned based on how the address is allocated. <xref target="RFC3307" sectionFormat="of" section="4.3" format="default" derivedLink="https://rfc-editor.org/rfc/rfc3307#section-4.3" derivedContent="RFC3307"/> describes two ways to assign group IDs dynamically: one where a server assigns addresses, and another where hosts assign addresses themselves. However, both methods use the same group ID range, which creates a risk of address collisions if both are used at the same time.</t>
      <t indent="0" pn="section-4-3">An additional concern is that the group IDs used for this dynamic range overlap with the range used for Solicited-Node multicast addresses, a special type of multicast used by IPv6 for neighbor discovery (see <xref target="RFC4291" sectionFormat="of" section="2.7.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4291#section-2.7.1" derivedContent="RFC4291"/>). This overlap increases the risk of unintentional conflicts with link-layer addresses.</t>
      <t indent="0" pn="section-4-4">Note that <xref target="RFC3307" format="default" sectionFormat="of" derivedContent="RFC3307"/> focuses on 48-bit addresses on Ethernet, but similar issues would be seen on any medium that generates link-layer multicast addresses by truncating an IPv6 multicast address.</t>
    </section>
    <section numbered="true" removeInRFC="false" toc="include" pn="section-5">
      <name slugifiedName="name-ipv4-considerations">IPv4 Considerations</name>
      <t indent="0" pn="section-5-1">In IPv4, multicast addresses can sometimes cause conflicts at the data link layer. For example, as explained in <xref target="RFC1112" sectionFormat="of" section="6.4" format="default" derivedLink="https://rfc-editor.org/rfc/rfc1112#section-6.4" derivedContent="RFC1112"/>, this happens with Ethernet because only the lower 23 bits of an IPv4 multicast address are used to generate the Ethernet multicast address. Since an IPv4 multicast address is 32 bits and starts with a fixed 4-bit prefix (leaving 28 bits), this means up to 2<sup>(28-23)</sup> = 32 different multicast IP addresses can map to the same Ethernet address. As a result, devices may receive multicast traffic they didn't ask for.</t>
      <t indent="0" pn="section-5-2">The address allocation guidelines in <xref target="RFC5771" format="default" sectionFormat="of" derivedContent="RFC5771"/> did not account for this type of collision when they were created. Because of this limitation, the recommended approach for new designs that need dynamic multicast IP address assignment is to use IPv6 instead of IPv4.</t>
      <t indent="0" pn="section-5-3">However, if using IPv4 is necessary, then multicast addresses <bcp14>SHOULD</bcp14> be chosen carefully from within the Administratively Scoped Block (239.0.0.0/8). Additionally, solutions for zeroconf multicast address allocation <bcp14>SHOULD</bcp14> try to avoid using addresses that may already be in use by other applications on the same network, to minimize the risk of conflicts.</t>
      <t indent="0" pn="section-5-4">Zeroconf coexistence with other IPv4 multicast address allocation solutions may not be possible; in that case, it may be necessary to require manual configuration or to limit the solutions that are deployed.</t>
    </section>
    <section numbered="true" removeInRFC="false" toc="include" pn="section-6">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t indent="0" pn="section-6-1">Zeroconf multicast address allocation mechanisms are vulnerable to accidental or malicious address collisions, which may lead to denial of service or misdirection of traffic. Solutions derived from these requirements <bcp14>SHALL</bcp14> include measures for collision detection and conflict resolution <xref target="collision_det" format="none" sectionFormat="of" derivedContent="">[REQ-8]</xref>, and <bcp14>SHOULD</bcp14> include measures to prevent unauthorized address use. Specific security mechanisms are outside the scope of this document.</t>
    </section>
    <section numbered="true" removeInRFC="false" toc="include" pn="section-7">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <t indent="0" pn="section-7-1">This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references pn="section-8">
      <name slugifiedName="name-references">References</name>
      <references pn="section-8.1">
        <name slugifiedName="name-normative-references">Normative References</name>
        <reference anchor="RFC1112" target="https://www.rfc-editor.org/info/rfc1112" quoteTitle="true" derivedAnchor="RFC1112">
          <front>
            <title>Host extensions for IP multicasting</title>
            <author fullname="S.E. Deering" initials="S.E." surname="Deering"/>
            <date month="August" year="1989"/>
            <abstract>
              <t indent="0">This memo specifies the extensions required of a host implementation of the Internet Protocol (IP) to support multicasting. Recommended procedure for IP multicasting in the Internet. This RFC obsoletes RFCs 998 and 1054. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="5"/>
          <seriesInfo name="RFC" value="1112"/>
          <seriesInfo name="DOI" value="10.17487/RFC1112"/>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" quoteTitle="true" derivedAnchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t indent="0">In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC2464" target="https://www.rfc-editor.org/info/rfc2464" quoteTitle="true" derivedAnchor="RFC2464">
          <front>
            <title>Transmission of IPv6 Packets over Ethernet Networks</title>
            <author fullname="M. Crawford" initials="M." surname="Crawford"/>
            <date month="December" year="1998"/>
            <abstract>
              <t indent="0">This document specifies the frame format for transmission of IPv6 packets and the method of forming IPv6 link-local addresses and statelessly autoconfigured addresses on Ethernet networks. It also specifies the content of the Source/Target Link-layer Address option used in Router Solicitation, Router Advertisement, Neighbor Solicitation, Neighbor Advertisement and Redirect messages when those messages are transmitted on an Ethernet. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2464"/>
          <seriesInfo name="DOI" value="10.17487/RFC2464"/>
        </reference>
        <reference anchor="RFC3307" target="https://www.rfc-editor.org/info/rfc3307" quoteTitle="true" derivedAnchor="RFC3307">
          <front>
            <title>Allocation Guidelines for IPv6 Multicast Addresses</title>
            <author initials="B." surname="Haberman" fullname="B. Haberman">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2002" month="August"/>
          </front>
          <seriesInfo name="RFC" value="3307"/>
          <seriesInfo name="DOI" value="10.17487/RFC3307"/>
        </reference>
        <reference anchor="RFC4291" target="https://www.rfc-editor.org/info/rfc4291" quoteTitle="true" derivedAnchor="RFC4291">
          <front>
            <title>IP Version 6 Addressing Architecture</title>
            <author fullname="R. Hinden" initials="R." surname="Hinden"/>
            <author fullname="S. Deering" initials="S." surname="Deering"/>
            <date month="February" year="2006"/>
            <abstract>
              <t indent="0">This specification defines the addressing architecture of the IP Version 6 (IPv6) protocol. The document includes the IPv6 addressing model, text representations of IPv6 addresses, definition of IPv6 unicast addresses, anycast addresses, and multicast addresses, and an IPv6 node's required addresses.</t>
              <t indent="0">This document obsoletes RFC 3513, "IP Version 6 Addressing Architecture". [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4291"/>
          <seriesInfo name="DOI" value="10.17487/RFC4291"/>
        </reference>
        <reference anchor="RFC4541" target="https://www.rfc-editor.org/info/rfc4541" quoteTitle="true" derivedAnchor="RFC4541">
          <front>
            <title>Considerations for Internet Group Management Protocol (IGMP) and Multicast Listener Discovery (MLD) Snooping Switches</title>
            <author fullname="M. Christensen" initials="M." surname="Christensen"/>
            <author fullname="K. Kimball" initials="K." surname="Kimball"/>
            <author fullname="F. Solensky" initials="F." surname="Solensky"/>
            <date month="May" year="2006"/>
            <abstract>
              <t indent="0">This memo describes the recommendations for Internet Group Management Protocol (IGMP) and Multicast Listener Discovery (MLD) snooping switches. These are based on best current practices for IGMPv2, with further considerations for IGMPv3- and MLDv2-snooping. Additional areas of relevance, such as link layer topology changes and Ethernet-specific encapsulation issues, are also considered. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4541"/>
          <seriesInfo name="DOI" value="10.17487/RFC4541"/>
        </reference>
        <reference anchor="RFC5771" target="https://www.rfc-editor.org/info/rfc5771" quoteTitle="true" derivedAnchor="RFC5771">
          <front>
            <title>IANA Guidelines for IPv4 Multicast Address Assignments</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="L. Vegoda" initials="L." surname="Vegoda"/>
            <author fullname="D. Meyer" initials="D." surname="Meyer"/>
            <date month="March" year="2010"/>
            <abstract>
              <t indent="0">This document provides guidance for the Internet Assigned Numbers Authority (IANA) in assigning IPv4 multicast addresses. It obsoletes RFC 3171 and RFC 3138 and updates RFC 2780. This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="51"/>
          <seriesInfo name="RFC" value="5771"/>
          <seriesInfo name="DOI" value="10.17487/RFC5771"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" quoteTitle="true" derivedAnchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t indent="0">RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references pn="section-8.2">
        <name slugifiedName="name-informative-references">Informative References</name>
        <reference anchor="RFC2730" target="https://www.rfc-editor.org/info/rfc2730" quoteTitle="true" derivedAnchor="RFC2730">
          <front>
            <title>Multicast Address Dynamic Client Allocation Protocol (MADCAP)</title>
            <author fullname="S. Hanna" initials="S." surname="Hanna"/>
            <author fullname="B. Patel" initials="B." surname="Patel"/>
            <author fullname="M. Shah" initials="M." surname="Shah"/>
            <date month="December" year="1999"/>
            <abstract>
              <t indent="0">This document defines a protocol, Multicast Address Dynamic Client Allocation Protocol (MADCAP), that allows hosts to request multicast addresses from multicast address allocation servers. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2730"/>
          <seriesInfo name="DOI" value="10.17487/RFC2730"/>
        </reference>
        <reference anchor="RFC3306" target="https://www.rfc-editor.org/info/rfc3306" quoteTitle="true" derivedAnchor="RFC3306">
          <front>
            <title>Unicast-Prefix-based IPv6 Multicast Addresses</title>
            <author initials="B." surname="Haberman" fullname="B. Haberman">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="D." surname="Thaler" fullname="D. Thaler">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2002" month="August"/>
          </front>
          <seriesInfo name="RFC" value="3306"/>
          <seriesInfo name="DOI" value="10.17487/RFC3306"/>
        </reference>
        <reference anchor="RFC4489" target="https://www.rfc-editor.org/info/rfc4489" quoteTitle="true" derivedAnchor="RFC4489">
          <front>
            <title>A Method for Generating Link-Scoped IPv6 Multicast Addresses</title>
            <author fullname="J-S. Park" surname="J-S. Park"/>
            <author fullname="M-K. Shin" surname="M-K. Shin"/>
            <author fullname="H-J. Kim" surname="H-J. Kim"/>
            <date month="April" year="2006"/>
            <abstract>
              <t indent="0">This document specifies an extension to the multicast addressing architecture of the IPv6 protocol. The extension allows the use of Interface Identifiers (IIDs) to allocate multicast addresses. When a link-local unicast address is configured at each interface of a node, an IID is uniquely determined. After that, each node can generate its unique multicast addresses automatically without conflicts. The alternative method for creating link-local multicast addresses proposed in this document is better than known methods like unicast-prefix-based IPv6 multicast addresses. This memo updates RFC 3306. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4489"/>
          <seriesInfo name="DOI" value="10.17487/RFC4489"/>
        </reference>
        <reference anchor="US6690667B1" target="https://patents.google.com/patent/US6690667B1/en" quoteTitle="true" derivedAnchor="US6690667B1">
          <front>
            <title>Switch with adaptive address lookup hashing scheme</title>
            <author surname="Warren" fullname="Dean Warren">
              <organization showOnFrontPage="true">Intel Corp</organization>
            </author>
            <date day="10" month="February" year="2004"/>
          </front>
          <refcontent>United States Patent 6690667B1</refcontent>
        </reference>
      </references>
    </references>
    <section numbered="true" removeInRFC="false" toc="include" pn="section-appendix.a">
      <name slugifiedName="name-excluded-solutions">Excluded Solutions</name>
      <t indent="0" pn="section-appendix.a-1">The way multicast IP addresses are mapped to link-layer multicast addresses is already defined in existing standards, such as <xref target="RFC1112" format="default" sectionFormat="of" derivedContent="RFC1112"/> for IPv4 over Ethernet and <xref target="RFC2464" format="default" sectionFormat="of" derivedContent="RFC2464"/> for IPv6 over Ethernet. These standards specify a fixed prefix used in creating the Ethernet multicast address. Changing this prefix would open the door to new solutions, but those are not being considered here for practical reasons.</t>
      <t indent="0" pn="section-appendix.a-2">One idea is to reduce the size of the fixed prefix, which would leave more bits available for the group ID. This would make address collisions less likely. Another idea is to create a new protocol that dynamically maps multicast IP addresses to link-layer addresses, similar to how DHCP assigns IP addresses. This protocol could work locally on a subnet, and routers could adjust the mapping for incoming multicast traffic at the network edge.</t>
      <t indent="0" pn="section-appendix.a-3">However, these ideas would require significant changes to how network devices handle multicast traffic. Since existing hardware and operating systems are built around the current standards, it's unlikely that such changes would be widely supported anytime soon.</t>
      <t indent="0" pn="section-appendix.a-4">Another potential solution for IPv4 was to assign 32 separate, non-overlapping address ranges to avoid collisions altogether (e.g., assign 224.0.0.254, 224.128.0.254, 225.0.0.254, etc.). However, this was rejected because <xref target="RFC5771" format="default" sectionFormat="of" derivedContent="RFC5771"/> discourages new allocations, given how limited the IPv4 multicast address space already is.</t>
    </section>
    <section numbered="false" removeInRFC="false" toc="include" pn="section-appendix.b">
      <name slugifiedName="name-acknowledgement">Acknowledgement</name>
      <t indent="0" pn="section-appendix.b-1">Special thanks to the National Marine Electronics Association for their contributions in developing marine industry standards and their support for this research.</t>
      <t indent="0" pn="section-appendix.b-2">Thanks also to the members of the PIM Working Group for their early brainstorming sessions and review of this document, and to <contact fullname="Gunter van de Velde"/> for his review and suggestions.</t>
    </section>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.c">
      <name slugifiedName="name-authors-addresses">Authors' Addresses</name>
      <author fullname="Nate Karstens" initials="N." surname="Karstens">
        <organization abbrev="Garmin" showOnFrontPage="true">Garmin International, Inc.</organization>
        <address>
          <postal>
            <street>1200 E. 151st St.</street>
            <city>Olathe</city>
            <region>KS</region>
            <code>66062-3426</code>
            <country>United States of America</country>
          </postal>
          <email>nate.karstens@gmail.com</email>
        </address>
      </author>
      <author fullname="Dino Farinacci" initials="D." surname="Farinacci">
        <organization showOnFrontPage="true">lispers.net</organization>
        <address>
          <postal>
            <city>San Jose</city>
            <region>CA</region>
            <country>United States of America</country>
          </postal>
          <email>farinacci@gmail.com</email>
        </address>
      </author>
      <author fullname="Mike McBride" initials="M." surname="McBride">
        <organization showOnFrontPage="true">Futurewei</organization>
        <address>
          <postal>
            <country>United States of America</country>
          </postal>
          <email>michael.mcbride@futurewei.com</email>
        </address>
      </author>
    </section>
  </back>
</rfc>
