| Internet-Draft | Zeroconf Assignment of IPv6 Mcast Addrs | September 2026 |
| Karstens, et al. | Expires 5 March 2027 | [Page] |
This document describes a zero-configuration protocol for dynamically assigning IPv6 multicast addresses that are unique at the link-layer. Applications randomly assign multicast group IDs from a specified range and prevent collisions by using Multicast DNS (mDNS) to publish resource records under a new "eth-addr.arpa" domain. This protocol satisfies all of the criteria listed in RFC 10019.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 5 March 2027.¶
Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) 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.¶
[RFC10019] includes a problem statement and requirements for a zero-configuration method for dynamically assigning multicast addresses. This document describes a process that fulfills these requirements by having applications randomly assign IPv6 multicast group IDs from a specified range and using mDNS [RFC6762] to prevent collisions in both IPv6 and link-layer addresses.¶
Note that DNS-based Service Discovery (DNS-SD) [RFC6763] uses several different DNS resource record types, published using either Unicast or Multicast DNS, to facilitate service discovery. This document uses a single DNS resource record type (PTR), published using Multicast DNS (mDNS), to coordinate IPv6 multicast address assignment in a zero-configuration environment. The DNS resource records in this protocol may be published alongside records for other domain name services, such as DNS-SD, or they may be published alone. mDNS is used rather than a new protocol with the expectation that functionality for address assignment can be achieved using existing mDNS implementations.¶
The protocol described in this document is well-suited for networks that rely on IPv6 multicast and already deploy mDNS. This document makes IANA assignments for use on Ethernet and other protocols based on the IEEE 802 architecture. It may be adapted for use with other link layers, but that is outside the scope of this document.¶
As mentioned in [RFC6762], Section 21, mDNS is an algorithm that assumes cooperating participants. Due to its reliance on mDNS, this assumption applies to the protocol described in this document as well.¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
This section describes how an application dynamically generates an IPv6 multicast address, uses mDNS to coordinate use of that address with other applications on the network, and begins transmitting its multicast stream.¶
Because this protocol is focused specifically on allocating IPv6 multicast addresses, applications MUST send and receive mDNS messages using the IPv6 multicast address for mDNS. In order to be compatible with existing mDNS implementations that require IPv4, applications MAY also send and receive mDNS messages using the IPv4 multicast address for mDNS.¶
mDNS implementations used with this protocol MUST coordinate with all applications using the same mDNS implementation, as well as with other mDNS implementations running on the same host. Such coordination ensures that conflicts arising from independently generated, identical group IDs are detected during the probing phase, allowing the affected applications to select alternate group IDs. Note that coordination between mDNS implementations running on the same host tends to happen naturally if transmitted multicast packets are looped back into the receive pipeline.¶
The process an application uses from initialization to transmitting a multicast stream is divided into a series of steps, outlined below:¶
When an application is preparing to transmit a multicast stream, it SHALL begin by generating three multicast identifiers:¶
Multicast Group ID¶
The first identifier is a multicast group ID randomly selected from the range 0x90000000-0x9FFFFFFF. IANA is REQUESTED to assign this range from the "Dynamic Multicast Group IDs" registry (see IANA Considerations).¶
IPv6 Multicast Address¶
This is a link-scoped IPv6 multicast address, calculated by combining the multicast group ID with the Interface Identifier (IID) of the intended source address for the multicast stream, according to the format given in [RFC4489], Section 3.¶
Multicast Ethernet Address¶
The final address is the corresponding multicast Ethernet address that will be used to transmit the data. This is calculated from the IPv6 multicast address, as described in [RFC2464], Section 7.¶
For example, consider a source address of fe80::a12:34ff:fe56:7890. If the selected group ID is 9abc:def0, then the calculated IPv6 multicast address would be ff32:ff:a12:34ff:fe56:7890:9abc:def0 and the multicast Ethernet address would be 33:33:9A:BC:DE:F0.¶
Once the multicast Ethernet address is determined, the application SHALL use this to assemble a domain name by encoding nibbles from the multicast Ethernet address as a sequence of lower-case hexadecimal digits, separated by dots, in reverse order, and ending with the suffix ".eth-addr.arpa" (a new domain in the .arpa registry).¶
Considering the example in Address Generation, the resulting domain name would be "0.f.e.d.c.b.a.9.3.3.3.3.eth-addr.arpa".¶
Note that this is similar to how DNS resource records used for reverse mapping IPv6 addresses are created (see [RFC3596], Section 2.5). As such, this document reserves the domain "9.3.3.3.3.eth-addr.arpa" as a special-use domain in the "Special-Use Domain Names" registry (see IANA Considerations). The "3.3.3.3" component of this is taken from the 33:33 prefix used for mapping IPv6 multicast addresses to Ethernet multicast addresses and the "9" component indicates a multicast group ID in the range 0x90000000-0x9FFFFFFF.¶
Once the domain name is assembled, the application SHALL construct a unique PTR record using that domain name. The PTRDNAME field of this record SHALL consist of a unique application identifier, in the form of one or more DNS labels, followed by the device's host name (for example, "application.example.local."). Integrating a unique identifier in this manner allows for multiple applications to be on the same host.¶
Note that A/AAAA records may also be published for this same host name (for example, "example.local."), though this is not a requirement for this design.¶
After the PTR record is constructed, the application SHALL use the mDNS probing algorithm described in [RFC6762], Section 8.1 to probe for a PTR record with the same name.¶
Due to the large range of values for group IDs, it is unlikely that two applications would randomly choose the same group ID and begin probing at the same time. However, in that event, the conflict SHALL be resolved according to the procedure in [RFC6762], Section 8.2. The loser of the conflict SHALL return to Address Generation and choose a different group ID.¶
If the probing algorithm started in Probing completes without any conflict, then the application SHALL announce the PTR record according to the procedure in [RFC6762], Section 8.3 and SHALL respond to queries for the PTR record according to [RFC6762], Section 6.¶
The application SHALL start a continuous query for the PTR record according to [RFC6762], Section 5.2. This helps detect a conflict in the event of a network partition and repair (see Collision Detection After Partition Repair). If a conflict is detected at any time, then the application SHALL stop transmitting that multicast stream and return to Address Generation, choosing a new group ID. As before, this new group ID is also retained in persistent storage, overwriting any group ID previously saved for this multicast stream.¶
The host network stack may optionally monitor the network for traffic that uses the same destination multicast Ethernet address, but a different destination multicast IPv6 address. If this is detected, then the application SHALL respond the same as with a collision.¶
Once the PTR record is advertised and the continuous query started, the host MAY then begin transmitting multicast data using the multicast addresses from Address Generation.¶
The application SHALL retain the group ID value in persistent storage and use it the next time the multicast stream is transmitted. This allows the network to quickly settle on a configuration that will never have another collision as long as the network is unchanged.¶
The application SHALL defend the PTR record from probes as described in [RFC6762], Section 6.¶
Veto records are used to address collisions that occur in the network infrastructure (for example, the address table in a switch is discussed in [RFC10019], Section 2).¶
When a network infrastructure component detects a collision it cannot resolve, it triggers a conflict with the application by publishing a veto record. A veto record is a unique PTR record using the string generated for the address as its name and the PTRDNAME field set to the string "veto", formatted as a DNS label. The veto record is published without probing.¶
Applications SHALL respond to the conflict the same as to a collision, eventually resulting in a new group ID being acquired. As before, the application retains its new group ID in persistent storage, ensuring the same conflict is not repeated in the future. As such, it is unnecessary to store vetoes to persistent storage. Veto records may be deleted as soon as the conflict is resolved.¶
The protocol can be extended across multiple subnets if PTR records are distributed between subnets (for example, by using an mDNS reflector or the Discovery Proxy described in [RFC8766]). Note that the stream MUST use a unicast-prefix based IPv6 multicast address ([RFC3306]), as the link-scoped IPv6 multicast address used above is scoped to the local link.¶
The protocol's reliance on cooperating hosts (see Section 8) makes it unsuited for use on the global Internet. [RFC8815] recommends Source-Specific Multicast in this environment.¶
[RFC10019] contains a list of criteria to evaluate potential solutions. The following is an analysis of how this protocol satisfies the requirements listed in that document:¶
PTRDNAME field and by 2) requiring the mDNS implementation(s) on a host to facilitate interaction between those applications.¶
The following is an analysis of how this protocol satisfies the desirable characteristics listed in [RFC10019]:¶
A network partition occurs when one part of a network is temporarily unable to communicate with another part of the network. This may happen, for example, if a switch goes offline. A partition repair happens when communication is fully restored to all parts of the network.¶
Because mDNS is designed to be a low-bandwidth protocol, it can take a signficant amount of time to detect a resource record collision after a network partition is repaired. This is not a concern on networks where all multicast streams are established before any likely partition event because all group IDs will have been selected and stored for future use.¶
It is a greater concern on networks where multicast streams may be established at any time. Deployments on these networks may consider engaging supplemental detection and resolution mechanisms. Specifics of this functionality are open to future enhancement, but are considered out-of-scope for this document.¶
IANA should allocate a block of group IDs from the "Dynamic Multicast Group IDs" registry in the "IPv6 Multicast Address Space" registry group that was created by [RFC10028]. The range of this block should be 0x90000000-0x9FFFFFFF and the description should be "Zero-Configuration Assignment of IPv6 Multicast Addresses Using mDNS".¶
IANA manages two registries that contain entries used for mapping addresses to names. This document introduces "eth-addr.arpa" for use in a similar capacity and so requests that it be added to these registries as well.¶
The domain "eth-addr.arpa" should be registered in the .arpa registry (https://www.iana.org/domains/arpa). The usage should be "For mapping Ethernet addresses to local domain names for Zero-Configuration Assignment of IPv6 Multicast Addresses" and the reference should be [I-D.draft-ietf-pim-ipv6-zeroconf-assignment].¶
The special-use domain "9.3.3.3.3.eth-addr.arpa." should be registered in the "Special-Use Domain Names" registry (https://www.iana.org/assignments/special-use-domain-names). This domain should not be delegated.¶
[RFC6761], Section 5 includes a list of questions that must be answered when reserving a new Special-Use Domain Name. The answers to these questions for the "9.3.3.3.3.eth-addr.arpa" Special-Use Domain, and any names falling within this domain, are as follows:¶
Note to RFC Editor: please remove this entire section before publication, as well as the reference to [RFC7942].¶
This section records the status of known implementations of the protocol defined by this specification at the time of posting of this Internet-Draft, and is based on a proposal described in [RFC7942]. The description of implementations in this section is intended to assist the IETF in its decision processes in progressing drafts to RFCs. Please note that the listing of any individual implementation here does not imply endorsement by the IETF. Furthermore, no effort has been spent to verify the information presented here that was supplied by IETF contributors. This is not intended as, and must not be construed to be, a catalog of available implementations or their features. Readers are advised to note that other implementations may exist.¶
According to [RFC7942], "this will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature. It is up to the individual working groups to use this information as they see fit".¶
A prototype for Linux using Avahi is available at <https://github.com/nkarstens/mdns-zeroconf-mcast/>. The main program in this repository allocates a single IPv6 multicast address from a specified group ID. The repository also contains a README with instructions on how to simulate a network partition.¶
This technology has been implemented in production in Garmin's GPSMAP 9000 series of marine multifunction displays.¶
As with mDNS itself, this protocol only works in environments where all hosts are cooperating. A bad actor could prevent an application from being able to use this protocol to allocate a multicast address. In turn, this would prevent the application from being able to transmit its multicast stream, denying service to the multicast group.¶
Special thanks to the National Marine Electronics Association for their contributions in developing marine industry standards and their support for this work.¶
Thanks also to the members of the PIM working group for their early brainstorming sessions and review of this draft, to Esko Dijk for his review of the draft, and to Gunter Van de Velde for his review and suggestions.¶