--- /dev/null
+
+
+
+
+
+
+Internet Engineering Task Force (IETF) S. Cheshire
+Request for Comments: 6762 M. Krochmal
+Category: Standards Track Apple Inc.
+ISSN: 2070-1721 February 2013
+
+
+ Multicast DNS
+
+Abstract
+
+ As networked devices become smaller, more portable, and more
+ ubiquitous, the ability to operate with less configured
+ infrastructure is increasingly important. In particular, the ability
+ to look up DNS resource record data types (including, but not limited
+ to, host names) in the absence of a conventional managed DNS server
+ is useful.
+
+ Multicast DNS (mDNS) provides the ability to perform DNS-like
+ operations on the local link in the absence of any conventional
+ Unicast DNS server. In addition, Multicast DNS designates a portion
+ of the DNS namespace to be free for local use, without the need to
+ pay any annual fee, and without the need to set up delegations or
+ otherwise configure a conventional DNS server to answer for those
+ names.
+
+ The primary benefits of Multicast DNS names are that (i) they require
+ little or no administration or configuration to set them up, (ii)
+ they work when no infrastructure is present, and (iii) they work
+ during infrastructure failures.
+
+Status of This Memo
+
+ This is an Internet Standards Track document.
+
+ 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). Further information on
+ Internet Standards is available in Section 2 of RFC 5741.
+
+ Information about the current status of this document, any errata,
+ and how to provide feedback on it may be obtained at
+ http://www.rfc-editor.org/info/rfc6762.
+
+
+
+
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 1]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+Copyright Notice
+
+ Copyright (c) 2013 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
+ (http://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 Simplified BSD License text as described in Section 4.e of
+ the Trust Legal Provisions and are provided without warranty as
+ described in the Simplified BSD License.
+
+ This document may contain material from IETF Documents or IETF
+ Contributions published or made publicly available before November
+ 10, 2008. The person(s) controlling the copyright in some of this
+ material may not have granted the IETF Trust the right to allow
+ modifications of such material outside the IETF Standards Process.
+ Without obtaining an adequate license from the person(s) controlling
+ the copyright in such materials, this document may not be modified
+ outside the IETF Standards Process, and derivative works of it may
+ not be created outside the IETF Standards Process, except to format
+ it for publication as an RFC or to translate it into languages other
+ than English.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 2]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+Table of Contents
+
+ 1. Introduction ....................................................4
+ 2. Conventions and Terminology Used in This Document ...............4
+ 3. Multicast DNS Names .............................................5
+ 4. Reverse Address Mapping .........................................7
+ 5. Querying ........................................................8
+ 6. Responding .....................................................13
+ 7. Traffic Reduction ..............................................22
+ 8. Probing and Announcing on Startup ..............................25
+ 9. Conflict Resolution ............................................31
+ 10. Resource Record TTL Values and Cache Coherency ................33
+ 11. Source Address Check ..........................................38
+ 12. Special Characteristics of Multicast DNS Domains ..............40
+ 13. Enabling and Disabling Multicast DNS ..........................41
+ 14. Considerations for Multiple Interfaces ........................42
+ 15. Considerations for Multiple Responders on the Same Machine ....43
+ 16. Multicast DNS Character Set ...................................45
+ 17. Multicast DNS Message Size ....................................46
+ 18. Multicast DNS Message Format ..................................47
+ 19. Summary of Differences between Multicast DNS and Unicast DNS ..51
+ 20. IPv6 Considerations ...........................................52
+ 21. Security Considerations .......................................52
+ 22. IANA Considerations ...........................................53
+ 23. Acknowledgments ...............................................56
+ 24. References ....................................................56
+ Appendix A. Design Rationale for Choice of UDP Port Number ........60
+ Appendix B. Design Rationale for Not Using Hashed Multicast
+ Addresses .............................................61
+ Appendix C. Design Rationale for Maximum Multicast DNS Name
+ Length ................................................62
+ Appendix D. Benefits of Multicast Responses .......................64
+ Appendix E. Design Rationale for Encoding Negative Responses ......65
+ Appendix F. Use of UTF-8 ..........................................66
+ Appendix G. Private DNS Namespaces ................................67
+ Appendix H. Deployment History ....................................67
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 3]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+1. Introduction
+
+ Multicast DNS and its companion technology DNS-Based Service
+ Discovery [RFC6763] were created to provide IP networking with the
+ ease-of-use and autoconfiguration for which AppleTalk was well-known
+ [RFC6760]. When reading this document, familiarity with the concepts
+ of Zero Configuration Networking [Zeroconf] and automatic link-local
+ addressing [RFC3927] [RFC4862] is helpful.
+
+ Multicast DNS borrows heavily from the existing DNS protocol
+ [RFC1034] [RFC1035] [RFC6195], using the existing DNS message
+ structure, name syntax, and resource record types. This document
+ specifies no new operation codes or response codes. This document
+ describes how clients send DNS-like queries via IP multicast, and how
+ a collection of hosts cooperate to collectively answer those queries
+ in a useful manner.
+
+2. Conventions and Terminology Used in This Document
+
+ 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 "Key words for use in
+ RFCs to Indicate Requirement Levels" [RFC2119].
+
+ When this document uses the term "Multicast DNS", it should be taken
+ to mean: "Clients performing DNS-like queries for DNS-like resource
+ records by sending DNS-like UDP query and response messages over IP
+ Multicast to UDP port 5353". The design rationale for selecting UDP
+ port 5353 is discussed in Appendix A.
+
+ This document uses the term "host name" in the strict sense to mean a
+ fully qualified domain name that has an IPv4 or IPv6 address record.
+ It does not use the term "host name" in the commonly used but
+ incorrect sense to mean just the first DNS label of a host's fully
+ qualified domain name.
+
+ A DNS (or mDNS) packet contains an IP Time to Live (TTL) in the IP
+ header, which is effectively a hop-count limit for the packet, to
+ guard against routing loops. Each resource record also contains a
+ TTL, which is the number of seconds for which the resource record may
+ be cached. This document uses the term "IP TTL" to refer to the IP
+ header TTL (hop limit), and the term "RR TTL" or just "TTL" to refer
+ to the resource record TTL (cache lifetime).
+
+ DNS-format messages contain a header, a Question Section, then
+ Answer, Authority, and Additional Record Sections. The Answer,
+ Authority, and Additional Record Sections all hold resource records
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 4]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ in the same format. Where this document describes issues that apply
+ equally to all three sections, it uses the term "Resource Record
+ Sections" to refer collectively to these three sections.
+
+ This document uses the terms "shared" and "unique" when referring to
+ resource record sets [RFC1034]:
+
+ A "shared" resource record set is one where several Multicast DNS
+ responders may have records with the same name, rrtype, and
+ rrclass, and several responders may respond to a particular query.
+
+ A "unique" resource record set is one where all the records with
+ that name, rrtype, and rrclass are conceptually under the control
+ or ownership of a single responder, and it is expected that at
+ most one responder should respond to a query for that name,
+ rrtype, and rrclass. Before claiming ownership of a unique
+ resource record set, a responder MUST probe to verify that no
+ other responder already claims ownership of that set, as described
+ in Section 8.1, "Probing". (For fault-tolerance and other
+ reasons, sometimes it is permissible to have more than one
+ responder answering for a particular "unique" resource record set,
+ but such cooperating responders MUST give answers containing
+ identical rdata for these records. If they do not give answers
+ containing identical rdata, then the probing step will reject the
+ data as being inconsistent with what is already being advertised
+ on the network for those names.)
+
+ Strictly speaking, the terms "shared" and "unique" apply to resource
+ record sets, not to individual resource records. However, it is
+ sometimes convenient to talk of "shared resource records" and "unique
+ resource records". When used this way, the terms should be
+ understood to mean a record that is a member of a "shared" or
+ "unique" resource record set, respectively.
+
+3. Multicast DNS Names
+
+ A host that belongs to an organization or individual who has control
+ over some portion of the DNS namespace can be assigned a globally
+ unique name within that portion of the DNS namespace, such as,
+ "cheshire.example.com.". For those of us who have this luxury, this
+ works very well. However, the majority of home computer users do not
+ have easy access to any portion of the global DNS namespace within
+ which they have the authority to create names. This leaves the
+ majority of home computers effectively anonymous for practical
+ purposes.
+
+
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 5]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ To remedy this problem, this document allows any computer user to
+ elect to give their computers link-local Multicast DNS host names of
+ the form: "single-dns-label.local.". For example, a laptop computer
+ may answer to the name "MyComputer.local.". Any computer user is
+ granted the authority to name their computer this way, provided that
+ the chosen host name is not already in use on that link. Having
+ named their computer this way, the user has the authority to continue
+ utilizing that name until such time as a name conflict occurs on the
+ link that is not resolved in the user's favor. If this happens, the
+ computer (or its human user) MUST cease using the name, and SHOULD
+ attempt to allocate a new unique name for use on that link. These
+ conflicts are expected to be relatively rare for people who choose
+ reasonably imaginative names, but it is still important to have a
+ mechanism in place to handle them when they happen.
+
+ This document specifies that the DNS top-level domain ".local." is a
+ special domain with special semantics, namely that any fully
+ qualified name ending in ".local." is link-local, and names within
+ this domain are meaningful only on the link where they originate.
+ This is analogous to IPv4 addresses in the 169.254/16 prefix or IPv6
+ addresses in the FE80::/10 prefix, which are link-local and
+ meaningful only on the link where they originate.
+
+ Any DNS query for a name ending with ".local." MUST be sent to the
+ mDNS IPv4 link-local multicast address 224.0.0.251 (or its IPv6
+ equivalent FF02::FB). The design rationale for using a fixed
+ multicast address instead of selecting from a range of multicast
+ addresses using a hash function is discussed in Appendix B.
+ Implementers MAY choose to look up such names concurrently via other
+ mechanisms (e.g., Unicast DNS) and coalesce the results in some
+ fashion. Implementers choosing to do this should be aware of the
+ potential for user confusion when a given name can produce different
+ results depending on external network conditions (such as, but not
+ limited to, which name lookup mechanism responds faster).
+
+ It is unimportant whether a name ending with ".local." occurred
+ because the user explicitly typed in a fully qualified domain name
+ ending in ".local.", or because the user entered an unqualified
+ domain name and the host software appended the suffix ".local."
+ because that suffix appears in the user's search list. The ".local."
+ suffix could appear in the search list because the user manually
+ configured it, or because it was received via DHCP [RFC2132] or via
+ any other mechanism for configuring the DNS search list. In this
+ respect the ".local." suffix is treated no differently from any other
+ search domain that might appear in the DNS search list.
+
+
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 6]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ DNS queries for names that do not end with ".local." MAY be sent to
+ the mDNS multicast address, if no other conventional DNS server is
+ available. This can allow hosts on the same link to continue
+ communicating using each other's globally unique DNS names during
+ network outages that disrupt communication with the greater Internet.
+ When resolving global names via local multicast, it is even more
+ important to use DNS Security Extensions (DNSSEC) [RFC4033] or other
+ security mechanisms to ensure that the response is trustworthy.
+ Resolving global names via local multicast is a contentious issue,
+ and this document does not discuss it further, instead concentrating
+ on the issue of resolving local names using DNS messages sent to a
+ multicast address.
+
+ This document recommends a single flat namespace for dot-local host
+ names, (i.e., the names of DNS "A" and "AAAA" records, which map
+ names to IPv4 and IPv6 addresses), but other DNS record types (such
+ as those used by DNS-Based Service Discovery [RFC6763]) may contain
+ as many labels as appropriate for the desired usage, up to a maximum
+ of 255 bytes, plus a terminating zero byte at the end. Name length
+ issues are discussed further in Appendix C.
+
+ Enforcing uniqueness of host names is probably desirable in the
+ common case, but this document does not mandate that. It is
+ permissible for a collection of coordinated hosts to agree to
+ maintain multiple DNS address records with the same name, possibly
+ for load-balancing or fault-tolerance reasons. This document does
+ not take a position on whether that is sensible. It is important
+ that both modes of operation be supported. The Multicast DNS
+ protocol allows hosts to verify and maintain unique names for
+ resource records where that behavior is desired, and it also allows
+ hosts to maintain multiple resource records with a single shared name
+ where that behavior is desired. This consideration applies to all
+ resource records, not just address records (host names). In summary:
+ It is required that the protocol have the ability to detect and
+ handle name conflicts, but it is not required that this ability be
+ used for every record.
+
+4. Reverse Address Mapping
+
+ Like ".local.", the IPv4 and IPv6 reverse mapping domains are also
+ defined to be link-local:
+
+ Any DNS query for a name ending with "254.169.in-addr.arpa." MUST
+ be sent to the mDNS IPv4 link-local multicast address 224.0.0.251
+ or the mDNS IPv6 multicast address FF02::FB. Since names under
+ this domain correspond to IPv4 link-local addresses, it is logical
+ that the local link is the best place to find information
+ pertaining to those names.
+
+
+
+Cheshire & Krochmal Standards Track [Page 7]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ Likewise, any DNS query for a name within the reverse mapping
+ domains for IPv6 link-local addresses ("8.e.f.ip6.arpa.",
+ "9.e.f.ip6.arpa.", "a.e.f.ip6.arpa.", and "b.e.f.ip6.arpa.") MUST
+ be sent to the mDNS IPv6 link-local multicast address FF02::FB or
+ the mDNS IPv4 link-local multicast address 224.0.0.251.
+
+5. Querying
+
+ There are two kinds of Multicast DNS queries: one-shot queries of the
+ kind made by legacy DNS resolvers, and continuous, ongoing Multicast
+ DNS queries made by fully compliant Multicast DNS queriers, which
+ support asynchronous operations including DNS-Based Service Discovery
+ [RFC6763].
+
+ Except in the rare case of a Multicast DNS responder that is
+ advertising only shared resource records and no unique records, a
+ Multicast DNS responder MUST also implement a Multicast DNS querier
+ so that it can first verify the uniqueness of those records before it
+ begins answering queries for them.
+
+5.1. One-Shot Multicast DNS Queries
+
+ The most basic kind of Multicast DNS client may simply send standard
+ DNS queries blindly to 224.0.0.251:5353, without necessarily even
+ being aware of what a multicast address is. This change can
+ typically be implemented with just a few lines of code in an existing
+ DNS resolver library. If a name being queried falls within one of
+ the reserved Multicast DNS domains (see Sections 3 and 4), then,
+ rather than using the configured Unicast DNS server address, the
+ query is instead sent to 224.0.0.251:5353 (or its IPv6 equivalent
+ [FF02::FB]:5353). Typically, the timeout would also be shortened to
+ two or three seconds. It's possible to make a minimal Multicast DNS
+ resolver with only these simple changes. These queries are typically
+ done using a high-numbered ephemeral UDP source port, but regardless
+ of whether they are sent from a dynamic port or from a fixed port,
+ these queries MUST NOT be sent using UDP source port 5353, since
+ using UDP source port 5353 signals the presence of a fully compliant
+ Multicast DNS querier, as described below.
+
+ A simple DNS resolver like this will typically just take the first
+ response it receives. It will not listen for additional UDP
+ responses, but in many instances this may not be a serious problem.
+ If a user types "http://MyPrinter.local." into their web browser, and
+ their simple DNS resolver just takes the first response it receives,
+ and the user gets to see the status and configuration web page for
+ their printer, then the protocol has met the user's needs in this
+ case.
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 8]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ While a basic DNS resolver like this may be adequate for simple host
+ name lookup, it may not get ideal behavior in other cases.
+ Additional refinements to create a fully compliant Multicast DNS
+ querier are described below.
+
+5.2. Continuous Multicast DNS Querying
+
+ In one-shot queries, the underlying assumption is that the
+ transaction begins when the application issues a query, and ends when
+ the first response is received. There is another type of query
+ operation that is more asynchronous, in which having received one
+ response is not necessarily an indication that there will be no more
+ relevant responses, and the querying operation continues until no
+ further responses are required. Determining when no further
+ responses are required depends on the type of operation being
+ performed. If the operation is looking up the IPv4 and IPv6
+ addresses of another host, then no further responses are required
+ once a successful connection has been made to one of those IPv4 or
+ IPv6 addresses. If the operation is browsing to present the user
+ with a list of DNS-SD services found on the network [RFC6763], then
+ no further responses are required once the user indicates this to the
+ user-interface software, e.g., by closing the network browsing window
+ that was displaying the list of discovered services.
+
+ Imagine some hypothetical software that allows users to discover
+ network printers. The user wishes to discover all printers on the
+ local network, not only the printer that is quickest to respond.
+ When the user is actively looking for a network printer to use, they
+ open a network browsing window that displays the list of discovered
+ printers. It would be convenient for the user if they could rely on
+ this list of network printers to stay up to date as network printers
+ come and go, rather than displaying out-of-date stale information,
+ and requiring the user explicitly to click a "refresh" button any
+ time they want to see accurate information (which, from the moment it
+ is displayed, is itself already beginning to become out-of-date and
+ stale). If we are to display a continuously updated live list like
+ this, we need to be able to do it efficiently, without naive constant
+ polling, which would be an unreasonable burden on the network. It is
+ not expected that all users will be browsing to discover new printers
+ all the time, but when a user is browsing to discover service
+ instances for an extended period, we want to be able to support that
+ operation efficiently.
+
+ Therefore, when retransmitting Multicast DNS queries to implement
+ this kind of continuous monitoring, the interval between the first
+ two queries MUST be at least one second, the intervals between
+ successive queries MUST increase by at least a factor of two, and the
+ querier MUST implement Known-Answer Suppression, as described below
+
+
+
+Cheshire & Krochmal Standards Track [Page 9]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ in Section 7.1. The Known-Answer Suppression mechanism tells
+ responders which answers are already known to the querier, thereby
+ allowing responders to avoid wasting network capacity with pointless
+ repeated transmission of those answers. A querier retransmits its
+ question because it wishes to receive answers it may have missed the
+ first time, not because it wants additional duplicate copies of
+ answers it already received. Failure to implement Known-Answer
+ Suppression can result in unacceptable levels of network traffic.
+ When the interval between queries reaches or exceeds 60 minutes, a
+ querier MAY cap the interval to a maximum of 60 minutes, and perform
+ subsequent queries at a steady-state rate of one query per hour. To
+ avoid accidental synchronization when, for some reason, multiple
+ clients begin querying at exactly the same moment (e.g., because of
+ some common external trigger event), a Multicast DNS querier SHOULD
+ also delay the first query of the series by a randomly chosen amount
+ in the range 20-120 ms.
+
+ When a Multicast DNS querier receives an answer, the answer contains
+ a TTL value that indicates for how many seconds this answer is valid.
+ After this interval has passed, the answer will no longer be valid
+ and SHOULD be deleted from the cache. Before the record expiry time
+ is reached, a Multicast DNS querier that has local clients with an
+ active interest in the state of that record (e.g., a network browsing
+ window displaying a list of discovered services to the user) SHOULD
+ reissue its query to determine whether the record is still valid.
+
+ To perform this cache maintenance, a Multicast DNS querier should
+ plan to retransmit its query after at least 50% of the record
+ lifetime has elapsed. This document recommends the following
+ specific strategy.
+
+ The querier should plan to issue a query at 80% of the record
+ lifetime, and then if no answer is received, at 85%, 90%, and 95%.
+ If an answer is received, then the remaining TTL is reset to the
+ value given in the answer, and this process repeats for as long as
+ the Multicast DNS querier has an ongoing interest in the record. If
+ no answer is received after four queries, the record is deleted when
+ it reaches 100% of its lifetime. A Multicast DNS querier MUST NOT
+ perform this cache maintenance for records for which it has no local
+ clients with an active interest. If the expiry of a particular
+ record from the cache would result in no net effect to any client
+ software running on the querier device, and no visible effect to the
+ human user, then there is no reason for the Multicast DNS querier to
+ waste network capacity checking whether the record remains valid.
+
+
+
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 10]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ To avoid the case where multiple Multicast DNS queriers on a network
+ all issue their queries simultaneously, a random variation of 2% of
+ the record TTL should be added, so that queries are scheduled to be
+ performed at 80-82%, 85-87%, 90-92%, and then 95-97% of the TTL.
+
+ An additional efficiency optimization SHOULD be performed when a
+ Multicast DNS response is received containing a unique answer (as
+ indicated by the cache-flush bit being set, described in Section
+ 10.2, "Announcements to Flush Outdated Cache Entries"). In this
+ case, there is no need for the querier to continue issuing a stream
+ of queries with exponentially increasing intervals, since the receipt
+ of a unique answer is a good indication that no other answers will be
+ forthcoming. In this case, the Multicast DNS querier SHOULD plan to
+ issue its next query for this record at 80-82% of the record's TTL,
+ as described above.
+
+ A compliant Multicast DNS querier, which implements the rules
+ specified in this document, MUST send its Multicast DNS queries from
+ UDP source port 5353 (the well-known port assigned to mDNS), and MUST
+ listen for Multicast DNS replies sent to UDP destination port 5353 at
+ the mDNS link-local multicast address (224.0.0.251 and/or its IPv6
+ equivalent FF02::FB).
+
+5.3. Multiple Questions per Query
+
+ Multicast DNS allows a querier to place multiple questions in the
+ Question Section of a single Multicast DNS query message.
+
+ The semantics of a Multicast DNS query message containing multiple
+ questions is identical to a series of individual DNS query messages
+ containing one question each. Combining multiple questions into a
+ single message is purely an efficiency optimization and has no other
+ semantic significance.
+
+5.4. Questions Requesting Unicast Responses
+
+ Sending Multicast DNS responses via multicast has the benefit that
+ all the other hosts on the network get to see those responses,
+ enabling them to keep their caches up to date and detect conflicting
+ responses.
+
+ However, there are situations where all the other hosts on the
+ network don't need to see every response. Some examples are a laptop
+ computer waking from sleep, the Ethernet cable being connected to a
+ running machine, or a previously inactive interface being activated
+ through a configuration change. At the instant of wake-up or link
+ activation, the machine is a brand new participant on a new network.
+ Its Multicast DNS cache for that interface is empty, and it has no
+
+
+
+Cheshire & Krochmal Standards Track [Page 11]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ knowledge of its peers on that link. It may have a significant
+ number of questions that it wants answered right away, to discover
+ information about its new surroundings and present that information
+ to the user. As a new participant on the network, it has no idea
+ whether the exact same questions may have been asked and answered
+ just seconds ago. In this case, triggering a large sudden flood of
+ multicast responses may impose an unreasonable burden on the network.
+
+ To avoid large floods of potentially unnecessary responses in these
+ cases, Multicast DNS defines the top bit in the class field of a DNS
+ question as the unicast-response bit. When this bit is set in a
+ question, it indicates that the querier is willing to accept unicast
+ replies in response to this specific query, as well as the usual
+ multicast responses. These questions requesting unicast responses
+ are referred to as "QU" questions, to distinguish them from the more
+ usual questions requesting multicast responses ("QM" questions). A
+ Multicast DNS querier sending its initial batch of questions
+ immediately on wake from sleep or interface activation SHOULD set the
+ unicast-response bit in those questions.
+
+ When a question is retransmitted (as described in Section 5.2), the
+ unicast-response bit SHOULD NOT be set in subsequent retransmissions
+ of that question. Subsequent retransmissions SHOULD be usual "QM"
+ questions. After the first question has received its responses, the
+ querier should have a large Known-Answer list (Section 7.1) so that
+ subsequent queries should elicit few, if any, further responses.
+ Reverting to multicast responses as soon as possible is important
+ because of the benefits that multicast responses provide (see
+ Appendix D). In addition, the unicast-response bit SHOULD be set
+ only for questions that are active and ready to be sent the moment of
+ wake from sleep or interface activation. New questions created by
+ local clients afterwards should be treated as normal "QM" questions
+ and SHOULD NOT have the unicast-response bit set on the first
+ question of the series.
+
+ When receiving a question with the unicast-response bit set, a
+ responder SHOULD usually respond with a unicast packet directed back
+ to the querier. However, if the responder has not multicast that
+ record recently (within one quarter of its TTL), then the responder
+ SHOULD instead multicast the response so as to keep all the peer
+ caches up to date, and to permit passive conflict detection. In the
+ case of answering a probe question (Section 8.1) with the unicast-
+ response bit set, the responder should always generate the requested
+ unicast response, but it may also send a multicast announcement if
+ the time since the last multicast announcement of that record is more
+ than a quarter of its TTL.
+
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 12]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ Unicast replies are subject to all the same packet generation rules
+ as multicast replies, including the cache-flush bit (Section 10.2)
+ and (except when defending a unique name against a probe from another
+ host) randomized delays to reduce network collisions (Section 6).
+
+5.5. Direct Unicast Queries to Port 5353
+
+ In specialized applications there may be rare situations where it
+ makes sense for a Multicast DNS querier to send its query via unicast
+ to a specific machine. When a Multicast DNS responder receives a
+ query via direct unicast, it SHOULD respond as it would for "QU"
+ questions, as described above in Section 5.4. Since it is possible
+ for a unicast query to be received from a machine outside the local
+ link, responders SHOULD check that the source address in the query
+ packet matches the local subnet for that link (or, in the case of
+ IPv6, the source address has an on-link prefix) and silently ignore
+ the packet if not.
+
+ There may be specialized situations, outside the scope of this
+ document, where it is intended and desirable to create a responder
+ that does answer queries originating outside the local link. Such a
+ responder would need to ensure that these non-local queries are
+ always answered via unicast back to the querier, since an answer sent
+ via link-local multicast would not reach a querier outside the local
+ link.
+
+6. Responding
+
+ When a Multicast DNS responder constructs and sends a Multicast DNS
+ response message, the Resource Record Sections of that message must
+ contain only records for which that responder is explicitly
+ authoritative. These answers may be generated because the record
+ answers a question received in a Multicast DNS query message, or at
+ certain other times that the responder determines than an unsolicited
+ announcement is warranted. A Multicast DNS responder MUST NOT place
+ records from its cache, which have been learned from other responders
+ on the network, in the Resource Record Sections of outgoing response
+ messages. Only an authoritative source for a given record is allowed
+ to issue responses containing that record.
+
+ The determination of whether a given record answers a given question
+ is made using the standard DNS rules: the record name must match the
+ question name, the record rrtype must match the question qtype unless
+ the qtype is "ANY" (255) or the rrtype is "CNAME" (5), and the record
+ rrclass must match the question qclass unless the qclass is "ANY"
+ (255). As with Unicast DNS, generally only DNS class 1 ("Internet")
+ is used, but should client software use classes other than 1, the
+ matching rules described above MUST be used.
+
+
+
+Cheshire & Krochmal Standards Track [Page 13]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ A Multicast DNS responder MUST only respond when it has a positive,
+ non-null response to send, or it authoritatively knows that a
+ particular record does not exist. For unique records, where the host
+ has already established sole ownership of the name, it MUST return
+ negative answers to queries for records that it knows not to exist.
+ For example, a host with no IPv6 address, that has claimed sole
+ ownership of the name "host.local." for all rrtypes, MUST respond to
+ AAAA queries for "host.local." by sending a negative answer
+ indicating that no AAAA records exist for that name. See Section
+ 6.1, "Negative Responses". For shared records, which are owned by no
+ single host, the nonexistence of a given record is ascertained by the
+ failure of any machine to respond to the Multicast DNS query, not by
+ any explicit negative response. For shared records, NXDOMAIN and
+ other error responses MUST NOT be sent.
+
+ Multicast DNS responses MUST NOT contain any questions in the
+ Question Section. Any questions in the Question Section of a
+ received Multicast DNS response MUST be silently ignored. Multicast
+ DNS queriers receiving Multicast DNS responses do not care what
+ question elicited the response; they care only that the information
+ in the response is true and accurate.
+
+ A Multicast DNS responder on Ethernet [IEEE.802.3] and similar shared
+ multiple access networks SHOULD have the capability of delaying its
+ responses by up to 500 ms, as described below.
+
+ If a large number of Multicast DNS responders were all to respond
+ immediately to a particular query, a collision would be virtually
+ guaranteed. By imposing a small random delay, the number of
+ collisions is dramatically reduced. On a full-sized Ethernet using
+ the maximum cable lengths allowed and the maximum number of repeaters
+ allowed, an Ethernet frame is vulnerable to collisions during the
+ transmission of its first 256 bits. On 10 Mb/s Ethernet, this
+ equates to a vulnerable time window of 25.6 microseconds. On higher-
+ speed variants of Ethernet, the vulnerable time window is shorter.
+
+ In the case where a Multicast DNS responder has good reason to
+ believe that it will be the only responder on the link that will send
+ a response (i.e., because it is able to answer every question in the
+ query message, and for all of those answer records it has previously
+ verified that the name, rrtype, and rrclass are unique on the link),
+ it SHOULD NOT impose any random delay before responding, and SHOULD
+ normally generate its response within at most 10 ms. In particular,
+ this applies to responding to probe queries with the unicast-response
+ bit set. Since receiving a probe query gives a clear indication that
+ some other responder is planning to start using this name in the very
+ near future, answering such probe queries to defend a unique record
+ is a high priority and needs to be done without delay. A probe query
+
+
+
+Cheshire & Krochmal Standards Track [Page 14]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ can be distinguished from a normal query by the fact that a probe
+ query contains a proposed record in the Authority Section that
+ answers the question in the Question Section (for more details, see
+ Section 8.2, "Simultaneous Probe Tiebreaking").
+
+ Responding without delay is appropriate for records like the address
+ record for a particular host name, when the host name has been
+ previously verified unique. Responding without delay is *not*
+ appropriate for things like looking up PTR records used for DNS-Based
+ Service Discovery [RFC6763], where a large number of responses may be
+ anticipated.
+
+ In any case where there may be multiple responses, such as queries
+ where the answer is a member of a shared resource record set, each
+ responder SHOULD delay its response by a random amount of time
+ selected with uniform random distribution in the range 20-120 ms.
+ The reason for requiring that the delay be at least 20 ms is to
+ accommodate the situation where two or more query packets are sent
+ back-to-back, because in that case we want a responder with answers
+ to more than one of those queries to have the opportunity to
+ aggregate all of its answers into a single response message.
+
+ In the case where the query has the TC (truncated) bit set,
+ indicating that subsequent Known-Answer packets will follow,
+ responders SHOULD delay their responses by a random amount of time
+ selected with uniform random distribution in the range 400-500 ms, to
+ allow enough time for all the Known-Answer packets to arrive, as
+ described in Section 7.2, "Multipacket Known-Answer Suppression".
+
+ The source UDP port in all Multicast DNS responses MUST be 5353 (the
+ well-known port assigned to mDNS). Multicast DNS implementations
+ MUST silently ignore any Multicast DNS responses they receive where
+ the source UDP port is not 5353.
+
+ The destination UDP port in all Multicast DNS responses MUST be 5353,
+ and the destination address MUST be the mDNS IPv4 link-local
+ multicast address 224.0.0.251 or its IPv6 equivalent FF02::FB, except
+ when generating a reply to a query that explicitly requested a
+ unicast response:
+
+ * via the unicast-response bit,
+ * by virtue of being a legacy query (Section 6.7), or
+ * by virtue of being a direct unicast query.
+
+ Except for these three specific cases, responses MUST NOT be sent via
+ unicast, because then the "Passive Observation of Failures"
+ mechanisms described in Section 10.5 would not work correctly. Other
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 15]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ benefits of sending responses via multicast are discussed in Appendix
+ D. A Multicast DNS querier MUST only accept unicast responses if
+ they answer a recently sent query (e.g., sent within the last two
+ seconds) that explicitly requested unicast responses. A Multicast
+ DNS querier MUST silently ignore all other unicast responses.
+
+ To protect the network against excessive packet flooding due to
+ software bugs or malicious attack, a Multicast DNS responder MUST NOT
+ (except in the one special case of answering probe queries) multicast
+ a record on a given interface until at least one second has elapsed
+ since the last time that record was multicast on that particular
+ interface. A legitimate querier on the network should have seen the
+ previous transmission and cached it. A querier that did not receive
+ and cache the previous transmission will retry its request and
+ receive a subsequent response. In the special case of answering
+ probe queries, because of the limited time before the probing host
+ will make its decision about whether or not to use the name, a
+ Multicast DNS responder MUST respond quickly. In this special case
+ only, when responding via multicast to a probe, a Multicast DNS
+ responder is only required to delay its transmission as necessary to
+ ensure an interval of at least 250 ms since the last time the record
+ was multicast on that interface.
+
+6.1. Negative Responses
+
+ In the early design of Multicast DNS it was assumed that explicit
+ negative responses would never be needed. A host can assert the
+ existence of the set of records that it claims to exist, and the
+ union of all such sets on a link is the set of Multicast DNS records
+ that exist on that link. Asserting the nonexistence of every record
+ in the complement of that set -- i.e., all possible Multicast DNS
+ records that could exist on this link but do not at this moment --
+ was felt to be impractical and unnecessary. The nonexistence of a
+ record would be ascertained by a querier querying for it and failing
+ to receive a response from any of the hosts currently attached to the
+ link.
+
+ However, operational experience showed that explicit negative
+ responses can sometimes be valuable. One such example is when a
+ querier is querying for a AAAA record, and the host name in question
+ has no associated IPv6 addresses. In this case, the responding host
+ knows it currently has exclusive ownership of that name, and it knows
+ that it currently does not have any IPv6 addresses, so an explicit
+ negative response is preferable to the querier having to retransmit
+ its query multiple times, and eventually give up with a timeout,
+ before it can conclude that a given AAAA record does not exist.
+
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 16]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ Any time a responder receives a query for a name for which it has
+ verified exclusive ownership, for a type for which that name has no
+ records, the responder MUST (except as allowed in (a) below) respond
+ asserting the nonexistence of that record using a DNS NSEC record
+ [RFC4034]. In the case of Multicast DNS the NSEC record is not being
+ used for its usual DNSSEC [RFC4033] security properties, but simply
+ as a way of expressing which records do or do not exist with a given
+ name.
+
+ On receipt of a question for a particular name, rrtype, and rrclass,
+ for which a responder does have one or more unique answers, the
+ responder MAY also include an NSEC record in the Additional Record
+ Section indicating the nonexistence of other rrtypes for that name
+ and rrclass.
+
+ Implementers working with devices with sufficient memory and CPU
+ resources MAY choose to implement code to handle the full generality
+ of the DNS NSEC record [RFC4034], including bitmaps up to 65,536 bits
+ long. To facilitate use by devices with limited memory and CPU
+ resources, Multicast DNS queriers are only REQUIRED to be able to
+ parse a restricted form of the DNS NSEC record. All compliant
+ Multicast DNS implementations MUST at least correctly generate and
+ parse the restricted DNS NSEC record format described below:
+
+ o The 'Next Domain Name' field contains the record's own name.
+ When used with name compression, this means that the 'Next
+ Domain Name' field always takes exactly two bytes in the
+ message.
+
+ o The Type Bit Map block number is 0.
+
+ o The Type Bit Map block length byte is a value in the range 1-32.
+
+ o The Type Bit Map data is 1-32 bytes, as indicated by length
+ byte.
+
+ Because this restricted form of the DNS NSEC record is limited to
+ Type Bit Map block number zero, it cannot express the existence of
+ rrtypes above 255. Consequently, if a Multicast DNS responder were
+ to have records with rrtypes above 255, it MUST NOT generate these
+ restricted-form NSEC records for those names, since to do so would
+ imply that the name has no records with rrtypes above 255, which
+ would be false. In such cases a Multicast DNS responder MUST either
+ (a) emit no NSEC record for that name, or (b) emit a full NSEC record
+ containing the appropriate Type Bit Map block(s) with the correct
+ bits set for all the record types that exist. In practice this is
+ not a significant limitation, since rrtypes above 255 are not
+ currently in widespread use.
+
+
+
+Cheshire & Krochmal Standards Track [Page 17]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ If a Multicast DNS implementation receives an NSEC record where the
+ 'Next Domain Name' field is not the record's own name, then the
+ implementation SHOULD ignore the 'Next Domain Name' field and process
+ the remainder of the NSEC record as usual. In Multicast DNS the
+ 'Next Domain Name' field is not currently used, but it could be used
+ in a future version of this protocol, which is why a Multicast DNS
+ implementation MUST NOT reject or ignore an NSEC record it receives
+ just because it finds an unexpected value in the 'Next Domain Name'
+ field.
+
+ If a Multicast DNS implementation receives an NSEC record containing
+ more than one Type Bit Map, or where the Type Bit Map block number is
+ not zero, or where the block length is not in the range 1-32, then
+ the Multicast DNS implementation MAY silently ignore the entire NSEC
+ record. A Multicast DNS implementation MUST NOT ignore an entire
+ message just because that message contains one or more NSEC record(s)
+ that the Multicast DNS implementation cannot parse. This provision
+ is to allow future enhancements to the protocol to be introduced in a
+ backwards-compatible way that does not break compatibility with older
+ Multicast DNS implementations.
+
+ To help differentiate these synthesized NSEC records (generated
+ programmatically on-the-fly) from conventional Unicast DNS NSEC
+ records (which actually exist in a signed DNS zone), the synthesized
+ Multicast DNS NSEC records MUST NOT have the NSEC bit set in the Type
+ Bit Map, whereas conventional Unicast DNS NSEC records do have the
+ NSEC bit set.
+
+ The TTL of the NSEC record indicates the intended lifetime of the
+ negative cache entry. In general, the TTL given for an NSEC record
+ SHOULD be the same as the TTL that the record would have had, had it
+ existed. For example, the TTL for address records in Multicast DNS
+ is typically 120 seconds (see Section 10), so the negative cache
+ lifetime for an address record that does not exist should also be 120
+ seconds.
+
+ A responder MUST only generate negative responses to queries for
+ which it has legitimate ownership of the name, rrtype, and rrclass in
+ question, and can legitimately assert that no record with that name,
+ rrtype, and rrclass exists. A responder can assert that a specified
+ rrtype does not exist for one of its names if it knows a priori that
+ it has exclusive ownership of that name (e.g., names of reverse
+ address mapping PTR records, which are derived from IP addresses,
+ which should be unique on the local link) or if it previously claimed
+ unique ownership of that name using probe queries for rrtype "ANY".
+ (If it were to use probe queries for a specific rrtype, then it would
+ only own the name for that rrtype, and could not assert that other
+ rrtypes do not exist.)
+
+
+
+Cheshire & Krochmal Standards Track [Page 18]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ The design rationale for this mechanism for encoding negative
+ responses is discussed further in Appendix E.
+
+6.2. Responding to Address Queries
+
+ When a Multicast DNS responder sends a Multicast DNS response message
+ containing its own address records, it MUST include all addresses
+ that are valid on the interface on which it is sending the message,
+ and MUST NOT include addresses that are not valid on that interface
+ (such as addresses that may be configured on the host's other
+ interfaces). For example, if an interface has both an IPv6 link-
+ local and an IPv6 routable address, both should be included in the
+ response message so that queriers receive both and can make their own
+ choice about which to use. This allows a querier that only has an
+ IPv6 link-local address to connect to the link-local address, and a
+ different querier that has an IPv6 routable address to connect to the
+ IPv6 routable address instead.
+
+ When a Multicast DNS responder places an IPv4 or IPv6 address record
+ (rrtype "A" or "AAAA") into a response message, it SHOULD also place
+ any records of the other address type with the same name into the
+ additional section, if there is space in the message. This is to
+ provide fate sharing, so that all a device's addresses are delivered
+ atomically in a single message, to reduce the risk that packet loss
+ could cause a querier to receive only the IPv4 addresses and not the
+ IPv6 addresses, or vice versa.
+
+ In the event that a device has only IPv4 addresses but no IPv6
+ addresses, or vice versa, then the appropriate NSEC record SHOULD be
+ placed into the additional section, so that queriers can know with
+ certainty that the device has no addresses of that kind.
+
+ Some Multicast DNS responders treat a physical interface with both
+ IPv4 and IPv6 address as a single interface with two addresses.
+ Other Multicast DNS responders may treat this case as logically two
+ interfaces (one with one or more IPv4 addresses, and the other with
+ one or more IPv6 addresses), but responders that operate this way
+ MUST NOT put the corresponding automatic NSEC records in replies they
+ send (i.e., a negative IPv4 assertion in their IPv6 responses, and a
+ negative IPv6 assertion in their IPv4 responses) because this would
+ cause incorrect operation in responders on the network that work the
+ former way.
+
+6.3. Responding to Multiquestion Queries
+
+ Multicast DNS responders MUST correctly handle DNS query messages
+ containing more than one question, by answering any or all of the
+ questions to which they have answers. Unlike single-question
+
+
+
+Cheshire & Krochmal Standards Track [Page 19]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ queries, where responding without delay is allowed in appropriate
+ cases, for query messages containing more than one question, all
+ (non-defensive) answers SHOULD be randomly delayed in the range
+ 20-120 ms, or 400-500 ms if the TC (truncated) bit is set. This is
+ because when a query message contains more than one question, a
+ Multicast DNS responder cannot generally be certain that other
+ responders will not also be simultaneously generating answers to
+ other questions in that query message. (Answers defending a name, in
+ response to a probe for that name, are not subject to this delay rule
+ and are still sent immediately.)
+
+6.4. Response Aggregation
+
+ When possible, a responder SHOULD, for the sake of network
+ efficiency, aggregate as many responses as possible into a single
+ Multicast DNS response message. For example, when a responder has
+ several responses it plans to send, each delayed by a different
+ interval, then earlier responses SHOULD be delayed by up to an
+ additional 500 ms if that will permit them to be aggregated with
+ other responses scheduled to go out a little later.
+
+6.5. Wildcard Queries (qtype "ANY" and qclass "ANY")
+
+ When responding to queries using qtype "ANY" (255) and/or qclass
+ "ANY" (255), a Multicast DNS responder MUST respond with *ALL* of its
+ records that match the query. This is subtly different from how
+ qtype "ANY" and qclass "ANY" work in Unicast DNS.
+
+ A common misconception is that a Unicast DNS query for qtype "ANY"
+ will elicit a response containing all matching records. This is
+ incorrect. If there are any records that match the query, the
+ response is required only to contain at least one of them, not
+ necessarily all of them.
+
+ This somewhat surprising behavior is commonly seen with caching
+ (i.e., "recursive") name servers. If a caching server receives a
+ qtype "ANY" query for which it has at least one valid answer, it is
+ allowed to return only those matching answers it happens to have
+ already in its cache, and it is not required to reconsult the
+ authoritative name server to check if there are any more records that
+ also match the qtype "ANY" query.
+
+ For example, one might imagine that a query for qtype "ANY" for name
+ "host.example.com" would return both the IPv4 (A) and the IPv6 (AAAA)
+ address records for that host. In reality, what happens is that it
+ depends on the history of what queries have been previously received
+ by intervening caching servers. If a caching server has no records
+ for "host.example.com", then it will consult another server (usually
+
+
+
+Cheshire & Krochmal Standards Track [Page 20]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ the authoritative name server for the name in question), and, in that
+ case, it will typically return all IPv4 and IPv6 address records.
+ However, if some other host has recently done a query for qtype "A"
+ for name "host.example.com", so that the caching server already has
+ IPv4 address records for "host.example.com" in its cache but no IPv6
+ address records, then it will return only the IPv4 address records it
+ already has cached, and no IPv6 address records.
+
+ Multicast DNS does not share this property that qtype "ANY" and
+ qclass "ANY" queries return some undefined subset of the matching
+ records. When responding to queries using qtype "ANY" (255) and/or
+ qclass "ANY" (255), a Multicast DNS responder MUST respond with *ALL*
+ of its records that match the query.
+
+6.6. Cooperating Multicast DNS Responders
+
+ If a Multicast DNS responder ("A") observes some other Multicast DNS
+ responder ("B") send a Multicast DNS response message containing a
+ resource record with the same name, rrtype, and rrclass as one of A's
+ resource records, but *different* rdata, then:
+
+ o If A's resource record is intended to be a shared resource
+ record, then this is no conflict, and no action is required.
+
+ o If A's resource record is intended to be a member of a unique
+ resource record set owned solely by that responder, then this is
+ a conflict and MUST be handled as described in Section 9,
+ "Conflict Resolution".
+
+ If a Multicast DNS responder ("A") observes some other Multicast DNS
+ responder ("B") send a Multicast DNS response message containing a
+ resource record with the same name, rrtype, and rrclass as one of A's
+ resource records, and *identical* rdata, then:
+
+ o If the TTL of B's resource record given in the message is at
+ least half the true TTL from A's point of view, then no action
+ is required.
+
+ o If the TTL of B's resource record given in the message is less
+ than half the true TTL from A's point of view, then A MUST mark
+ its record to be announced via multicast. Queriers receiving
+ the record from B would use the TTL given by B and, hence, may
+ delete the record sooner than A expects. By sending its own
+ multicast response correcting the TTL, A ensures that the record
+ will be retained for the desired time.
+
+
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 21]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ These rules allow multiple Multicast DNS responders to offer the same
+ data on the network (perhaps for fault-tolerance reasons) without
+ conflicting with each other.
+
+6.7. Legacy Unicast Responses
+
+ If the source UDP port in a received Multicast DNS query is not port
+ 5353, this indicates that the querier originating the query is a
+ simple resolver such as described in Section 5.1, "One-Shot Multicast
+ DNS Queries", which does not fully implement all of Multicast DNS.
+ In this case, the Multicast DNS responder MUST send a UDP response
+ directly back to the querier, via unicast, to the query packet's
+ source IP address and port. This unicast response MUST be a
+ conventional unicast response as would be generated by a conventional
+ Unicast DNS server; for example, it MUST repeat the query ID and the
+ question given in the query message. In addition, the cache-flush
+ bit described in Section 10.2, "Announcements to Flush Outdated Cache
+ Entries", MUST NOT be set in legacy unicast responses.
+
+ The resource record TTL given in a legacy unicast response SHOULD NOT
+ be greater than ten seconds, even if the true TTL of the Multicast
+ DNS resource record is higher. This is because Multicast DNS
+ responders that fully participate in the protocol use the cache
+ coherency mechanisms described in Section 10, "Resource Record TTL
+ Values and Cache Coherency", to update and invalidate stale data.
+ Were unicast responses sent to legacy resolvers to use the same high
+ TTLs, these legacy resolvers, which do not implement these cache
+ coherency mechanisms, could retain stale cached resource record data
+ long after it is no longer valid.
+
+7. Traffic Reduction
+
+ A variety of techniques are used to reduce the amount of traffic on
+ the network.
+
+7.1. Known-Answer Suppression
+
+ When a Multicast DNS querier sends a query to which it already knows
+ some answers, it populates the Answer Section of the DNS query
+ message with those answers.
+
+ Generally, this applies only to Shared records, not Unique records,
+ since if a Multicast DNS querier already has at least one Unique
+ record in its cache then it should not be expecting further different
+ answers to this question, since the Unique record(s) it already has
+ comprise the complete answer, so it has no reason to be sending the
+ query at all. In contrast, having some Shared records in its cache
+ does not necessarily imply that a Multicast DNS querier will not
+
+
+
+Cheshire & Krochmal Standards Track [Page 22]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ receive further answers to this query, and it is in this case that it
+ is beneficial to use the Known-Answer list to suppress repeated
+ sending of redundant answers that the querier already knows.
+
+ A Multicast DNS responder MUST NOT answer a Multicast DNS query if
+ the answer it would give is already included in the Answer Section
+ with an RR TTL at least half the correct value. If the RR TTL of the
+ answer as given in the Answer Section is less than half of the true
+ RR TTL as known by the Multicast DNS responder, the responder MUST
+ send an answer so as to update the querier's cache before the record
+ becomes in danger of expiration.
+
+ Because a Multicast DNS responder will respond if the remaining TTL
+ given in the Known-Answer list is less than half the true TTL, it is
+ superfluous for the querier to include such records in the Known-
+ Answer list. Therefore, a Multicast DNS querier SHOULD NOT include
+ records in the Known-Answer list whose remaining TTL is less than
+ half of their original TTL. Doing so would simply consume space in
+ the message without achieving the goal of suppressing responses and
+ would, therefore, be a pointless waste of network capacity.
+
+ A Multicast DNS querier MUST NOT cache resource records observed in
+ the Known-Answer Section of other Multicast DNS queries. The Answer
+ Section of Multicast DNS queries is not authoritative. By placing
+ information in the Answer Section of a Multicast DNS query, the
+ querier is stating that it *believes* the information to be true. It
+ is not asserting that the information *is* true. Some of those
+ records may have come from other hosts that are no longer on the
+ network. Propagating that stale information to other Multicast DNS
+ queriers on the network would not be helpful.
+
+7.2. Multipacket Known-Answer Suppression
+
+ Sometimes a Multicast DNS querier will already have too many answers
+ to fit in the Known-Answer Section of its query packets. In this
+ case, it should issue a Multicast DNS query containing a question and
+ as many Known-Answer records as will fit. It MUST then set the TC
+ (Truncated) bit in the header before sending the query. It MUST
+ immediately follow the packet with another query packet containing no
+ questions and as many more Known-Answer records as will fit. If
+ there are still too many records remaining to fit in the packet, it
+ again sets the TC bit and continues until all the Known-Answer
+ records have been sent.
+
+ A Multicast DNS responder seeing a Multicast DNS query with the TC
+ bit set defers its response for a time period randomly selected in
+ the interval 400-500 ms. This gives the Multicast DNS querier time
+ to send additional Known-Answer packets before the responder
+
+
+
+Cheshire & Krochmal Standards Track [Page 23]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ responds. If the responder sees any of its answers listed in the
+ Known-Answer lists of subsequent packets from the querying host, it
+ MUST delete that answer from the list of answers it is planning to
+ give (provided that no other host on the network has also issued a
+ query for that record and is waiting to receive an answer).
+
+ If the responder receives additional Known-Answer packets with the TC
+ bit set, it SHOULD extend the delay as necessary to ensure a pause of
+ 400-500 ms after the last such packet before it sends its answer.
+ This opens the potential risk that a continuous stream of Known-
+ Answer packets could, theoretically, prevent a responder from
+ answering indefinitely. In practice, answers are never actually
+ delayed significantly, and should a situation arise where significant
+ delays did happen, that would be a scenario where the network is so
+ overloaded that it would be desirable to err on the side of caution.
+ The consequence of delaying an answer may be that it takes a user
+ longer than usual to discover all the services on the local network;
+ in contrast, the consequence of incorrectly answering before all the
+ Known-Answer packets have been received would be wasted capacity
+ sending unnecessary answers on an already overloaded network. In
+ this (rare) situation, sacrificing speed to preserve reliable network
+ operation is the right trade-off.
+
+7.3. Duplicate Question Suppression
+
+ If a host is planning to transmit (or retransmit) a query, and it
+ sees another host on the network send a query containing the same
+ "QM" question, and the Known-Answer Section of that query does not
+ contain any records that this host would not also put in its own
+ Known-Answer Section, then this host SHOULD treat its own query as
+ having been sent. When multiple queriers on the network are querying
+ for the same resource records, there is no need for them to all be
+ repeatedly asking the same question.
+
+7.4. Duplicate Answer Suppression
+
+ If a host is planning to send an answer, and it sees another host on
+ the network send a response message containing the same answer
+ record, and the TTL in that record is not less than the TTL this host
+ would have given, then this host SHOULD treat its own answer as
+ having been sent, and not also send an identical answer itself. When
+ multiple responders on the network have the same data, there is no
+ need for all of them to respond.
+
+
+
+
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 24]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ The opportunity for duplicate answer suppression occurs when a host
+ has received a query, and is delaying its response for some pseudo-
+ random interval up to 500 ms, as described elsewhere in this
+ document, and then, before the host sends its response, it sees some
+ other host on the network send a response message containing the same
+ answer record.
+
+ This feature is particularly useful when Multicast DNS Proxy Servers
+ are in use, where there could be more than one proxy on the network
+ giving Multicast DNS answers on behalf of some other host (e.g.,
+ because that other host is currently asleep and is not itself
+ responding to queries).
+
+8. Probing and Announcing on Startup
+
+ Typically a Multicast DNS responder should have, at the very least,
+ address records for all of its active interfaces. Creating and
+ advertising an HINFO record on each interface as well can be useful
+ to network administrators.
+
+ Whenever a Multicast DNS responder starts up, wakes up from sleep,
+ receives an indication of a network interface "Link Change" event, or
+ has any other reason to believe that its network connectivity may
+ have changed in some relevant way, it MUST perform the two startup
+ steps below: Probing (Section 8.1) and Announcing (Section 8.3).
+
+8.1. Probing
+
+ The first startup step is that, for all those resource records that a
+ Multicast DNS responder desires to be unique on the local link, it
+ MUST send a Multicast DNS query asking for those resource records, to
+ see if any of them are already in use. The primary example of this
+ is a host's address records, which map its unique host name to its
+ unique IPv4 and/or IPv6 addresses. All probe queries SHOULD be done
+ using the desired resource record name and class (usually class 1,
+ "Internet"), and query type "ANY" (255), to elicit answers for all
+ types of records with that name. This allows a single question to be
+ used in place of several questions, which is more efficient on the
+ network. It also allows a host to verify exclusive ownership of a
+ name for all rrtypes, which is desirable in most cases. It would be
+ confusing, for example, if one host owned the "A" record for
+ "myhost.local.", but a different host owned the "AAAA" record for
+ that name.
+
+
+
+
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 25]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ The ability to place more than one question in a Multicast DNS query
+ is useful here, because it can allow a host to use a single message
+ to probe for all of its resource records instead of needing a
+ separate message for each. For example, a host can simultaneously
+ probe for uniqueness of its "A" record and all its SRV records
+ [RFC6763] in the same query message.
+
+ When ready to send its Multicast DNS probe packet(s) the host should
+ first wait for a short random delay time, uniformly distributed in
+ the range 0-250 ms. This random delay is to guard against the case
+ where several devices are powered on simultaneously, or several
+ devices are connected to an Ethernet hub, which is then powered on,
+ or some other external event happens that might cause a group of
+ hosts to all send synchronized probes.
+
+ 250 ms after the first query, the host should send a second; then,
+ 250 ms after that, a third. If, by 250 ms after the third probe, no
+ conflicting Multicast DNS responses have been received, the host may
+ move to the next step, announcing. (Note that probing is the one
+ exception from the normal rule that there should be at least one
+ second between repetitions of the same question, and the interval
+ between subsequent repetitions should at least double.)
+
+ When sending probe queries, a host MUST NOT consult its cache for
+ potential answers. Only conflicting Multicast DNS responses received
+ "live" from the network are considered valid for the purposes of
+ determining whether probing has succeeded or failed.
+
+ In order to allow services to announce their presence without
+ unreasonable delay, the time window for probing is intentionally set
+ quite short. As a result of this, from the time the first probe
+ packet is sent, another device on the network using that name has
+ just 750 ms to respond to defend its name. On networks that are
+ slow, or busy, or both, it is possible for round-trip latency to
+ account for a few hundred milliseconds, and software delays in slow
+ devices can add additional delay. Hence, it is important that when a
+ device receives a probe query for a name that it is currently using,
+ it SHOULD generate its response to defend that name immediately and
+ send it as quickly as possible. The usual rules about random delays
+ before responding, to avoid sudden bursts of simultaneous answers
+ from different hosts, do not apply here since normally at most one
+ host should ever respond to a given probe question. Even when a
+ single DNS query message contains multiple probe questions, it would
+ be unusual for that message to elicit a defensive response from more
+ than one other host. Because of the mDNS multicast rate-limiting
+
+
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 26]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ rules, the probes SHOULD be sent as "QU" questions with the unicast-
+ response bit set, to allow a defending host to respond immediately
+ via unicast, instead of potentially having to wait before replying
+ via multicast.
+
+ During probing, from the time the first probe packet is sent until
+ 250 ms after the third probe, if any conflicting Multicast DNS
+ response is received, then the probing host MUST defer to the
+ existing host, and SHOULD choose new names for some or all of its
+ resource records as appropriate. Apparently conflicting Multicast
+ DNS responses received *before* the first probe packet is sent MUST
+ be silently ignored (see discussion of stale probe packets in Section
+ 8.2, "Simultaneous Probe Tiebreaking", below). In the case of a host
+ probing using query type "ANY" as recommended above, any answer
+ containing a record with that name, of any type, MUST be considered a
+ conflicting response and handled accordingly.
+
+ If fifteen conflicts occur within any ten-second period, then the
+ host MUST wait at least five seconds before each successive
+ additional probe attempt. This is to help ensure that, in the event
+ of software bugs or other unanticipated problems, errant hosts do not
+ flood the network with a continuous stream of multicast traffic. For
+ very simple devices, a valid way to comply with this requirement is
+ to always wait five seconds after any failed probe attempt before
+ trying again.
+
+ If a responder knows by other means that its unique resource record
+ set name, rrtype, and rrclass cannot already be in use by any other
+ responder on the network, then it SHOULD skip the probing step for
+ that resource record set. For example, when creating the reverse
+ address mapping PTR records, the host can reasonably assume that no
+ other host will be trying to create those same PTR records, since
+ that would imply that the two hosts were trying to use the same IP
+ address, and if that were the case, the two hosts would be suffering
+ communication problems beyond the scope of what Multicast DNS is
+ designed to solve. Similarly, if a responder is acting as a proxy,
+ taking over from another Multicast DNS responder that has already
+ verified the uniqueness of the record, then the proxy SHOULD NOT
+ repeat the probing step for those records.
+
+8.2. Simultaneous Probe Tiebreaking
+
+ The astute reader will observe that there is a race condition
+ inherent in the previous description. If two hosts are probing for
+ the same name simultaneously, neither will receive any response to
+ the probe, and the hosts could incorrectly conclude that they may
+ both proceed to use the name. To break this symmetry, each host
+ populates the query message's Authority Section with the record or
+
+
+
+Cheshire & Krochmal Standards Track [Page 27]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ records with the rdata that it would be proposing to use, should its
+ probing be successful. The Authority Section is being used here in a
+ way analogous to the way it is used as the "Update Section" in a DNS
+ Update message [RFC2136] [RFC3007].
+
+ When a host is probing for a group of related records with the same
+ name (e.g., the SRV and TXT record describing a DNS-SD service), only
+ a single question need be placed in the Question Section, since query
+ type "ANY" (255) is used, which will elicit answers for all records
+ with that name. However, for tiebreaking to work correctly in all
+ cases, the Authority Section must contain *all* the records and
+ proposed rdata being probed for uniqueness.
+
+ When a host that is probing for a record sees another host issue a
+ query for the same record, it consults the Authority Section of that
+ query. If it finds any resource record(s) there which answers the
+ query, then it compares the data of that (those) resource record(s)
+ with its own tentative data. We consider first the simple case of a
+ host probing for a single record, receiving a simultaneous probe from
+ another host also probing for a single record. The two records are
+ compared and the lexicographically later data wins. This means that
+ if the host finds that its own data is lexicographically later, it
+ simply ignores the other host's probe. If the host finds that its
+ own data is lexicographically earlier, then it defers to the winning
+ host by waiting one second, and then begins probing for this record
+ again. The logic for waiting one second and then trying again is to
+ guard against stale probe packets on the network (possibly even stale
+ probe packets sent moments ago by this host itself, before some
+ configuration change, which may be echoed back after a short delay by
+ some Ethernet switches and some 802.11 base stations). If the
+ winning simultaneous probe was from a real other host on the network,
+ then after one second it will have completed its probing, and will
+ answer subsequent probes. If the apparently winning simultaneous
+ probe was in fact just an old stale packet on the network (maybe from
+ the host itself), then when it retries its probing in one second, its
+ probes will go unanswered, and it will successfully claim the name.
+
+ The determination of "lexicographically later" is performed by first
+ comparing the record class (excluding the cache-flush bit described
+ in Section 10.2), then the record type, then raw comparison of the
+ binary content of the rdata without regard for meaning or structure.
+ If the record classes differ, then the numerically greater class is
+ considered "lexicographically later". Otherwise, if the record types
+ differ, then the numerically greater type is considered
+ "lexicographically later". If the rrtype and rrclass both match,
+ then the rdata is compared.
+
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 28]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ In the case of resource records containing rdata that is subject to
+ name compression [RFC1035], the names MUST be uncompressed before
+ comparison. (The details of how a particular name is compressed is
+ an artifact of how and where the record is written into the DNS
+ message; it is not an intrinsic property of the resource record
+ itself.)
+
+ The bytes of the raw uncompressed rdata are compared in turn,
+ interpreting the bytes as eight-bit UNSIGNED values, until a byte is
+ found whose value is greater than that of its counterpart (in which
+ case, the rdata whose byte has the greater value is deemed
+ lexicographically later) or one of the resource records runs out of
+ rdata (in which case, the resource record which still has remaining
+ data first is deemed lexicographically later). The following is an
+ example of a conflict:
+
+ MyPrinter.local. A 169.254.99.200
+ MyPrinter.local. A 169.254.200.50
+
+ In this case, 169.254.200.50 is lexicographically later (the third
+ byte, with value 200, is greater than its counterpart with value 99),
+ so it is deemed the winner.
+
+ Note that it is vital that the bytes are interpreted as UNSIGNED
+ values in the range 0-255, or the wrong outcome may result. In the
+ example above, if the byte with value 200 had been incorrectly
+ interpreted as a signed eight-bit value, then it would be interpreted
+ as value -56, and the wrong address record would be deemed the
+ winner.
+
+8.2.1. Simultaneous Probe Tiebreaking for Multiple Records
+
+ When a host is probing for a set of records with the same name, or a
+ message is received containing multiple tiebreaker records answering
+ a given probe question in the Question Section, the host's records
+ and the tiebreaker records from the message are each sorted into
+ order, and then compared pairwise, using the same comparison
+ technique described above, until a difference is found.
+
+ The records are sorted using the same lexicographical order as
+ described above, that is, if the record classes differ, the record
+ with the lower class number comes first. If the classes are the same
+ but the rrtypes differ, the record with the lower rrtype number comes
+ first. If the class and rrtype match, then the rdata is compared
+ bytewise until a difference is found. For example, in the common
+ case of advertising DNS-SD services with a TXT record and an SRV
+ record, the TXT record comes first (the rrtype value for TXT is 16)
+ and the SRV record comes second (the rrtype value for SRV is 33).
+
+
+
+Cheshire & Krochmal Standards Track [Page 29]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ When comparing the records, if the first records match perfectly,
+ then the second records are compared, and so on. If either list of
+ records runs out of records before any difference is found, then the
+ list with records remaining is deemed to have won the tiebreak. If
+ both lists run out of records at the same time without any difference
+ being found, then this indicates that two devices are advertising
+ identical sets of records, as is sometimes done for fault tolerance,
+ and there is, in fact, no conflict.
+
+8.3. Announcing
+
+ The second startup step is that the Multicast DNS responder MUST send
+ an unsolicited Multicast DNS response containing, in the Answer
+ Section, all of its newly registered resource records (both shared
+ records, and unique records that have completed the probing step).
+ If there are too many resource records to fit in a single packet,
+ multiple packets should be used.
+
+ In the case of shared records (e.g., the PTR records used by DNS-
+ Based Service Discovery [RFC6763]), the records are simply placed as
+ is into the Answer Section of the DNS response.
+
+ In the case of records that have been verified to be unique in the
+ previous step, they are placed into the Answer Section of the DNS
+ response with the most significant bit of the rrclass set to one.
+ The most significant bit of the rrclass for a record in the Answer
+ Section of a response message is the Multicast DNS cache-flush bit
+ and is discussed in more detail below in Section 10.2, "Announcements
+ to Flush Outdated Cache Entries".
+
+ The Multicast DNS responder MUST send at least two unsolicited
+ responses, one second apart. To provide increased robustness against
+ packet loss, a responder MAY send up to eight unsolicited responses,
+ provided that the interval between unsolicited responses increases by
+ at least a factor of two with every response sent.
+
+ A Multicast DNS responder MUST NOT send announcements in the absence
+ of information that its network connectivity may have changed in some
+ relevant way. In particular, a Multicast DNS responder MUST NOT send
+ regular periodic announcements as a matter of course.
+
+ Whenever a Multicast DNS responder receives any Multicast DNS
+ response (solicited or otherwise) containing a conflicting resource
+ record, the conflict MUST be resolved as described in Section 9,
+ "Conflict Resolution".
+
+
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 30]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+8.4. Updating
+
+ At any time, if the rdata of any of a host's Multicast DNS records
+ changes, the host MUST repeat the Announcing step described above to
+ update neighboring caches. For example, if any of a host's IP
+ addresses change, it MUST re-announce those address records. The
+ host does not need to repeat the Probing step because it has already
+ established unique ownership of that name.
+
+ In the case of shared records, a host MUST send a "goodbye"
+ announcement with RR TTL zero (see Section 10.1, "Goodbye Packets")
+ for the old rdata, to cause it to be deleted from peer caches, before
+ announcing the new rdata. In the case of unique records, a host
+ SHOULD omit the "goodbye" announcement, since the cache-flush bit on
+ the newly announced records will cause old rdata to be flushed from
+ peer caches anyway.
+
+ A host may update the contents of any of its records at any time,
+ though a host SHOULD NOT update records more frequently than ten
+ times per minute. Frequent rapid updates impose a burden on the
+ network. If a host has information to disseminate which changes more
+ frequently than ten times per minute, then it may be more appropriate
+ to design a protocol for that specific purpose.
+
+9. Conflict Resolution
+
+ A conflict occurs when a Multicast DNS responder has a unique record
+ for which it is currently authoritative, and it receives a Multicast
+ DNS response message containing a record with the same name, rrtype
+ and rrclass, but inconsistent rdata. What may be considered
+ inconsistent is context sensitive, except that resource records with
+ identical rdata are never considered inconsistent, even if they
+ originate from different hosts. This is to permit use of proxies and
+ other fault-tolerance mechanisms that may cause more than one
+ responder to be capable of issuing identical answers on the network.
+
+ A common example of a resource record type that is intended to be
+ unique, not shared between hosts, is the address record that maps a
+ host's name to its IP address. Should a host witness another host
+ announce an address record with the same name but a different IP
+ address, then that is considered inconsistent, and that address
+ record is considered to be in conflict.
+
+ Whenever a Multicast DNS responder receives any Multicast DNS
+ response (solicited or otherwise) containing a conflicting resource
+ record in any of the Resource Record Sections, the Multicast DNS
+ responder MUST immediately reset its conflicted unique record to
+ probing state, and go through the startup steps described above in
+
+
+
+Cheshire & Krochmal Standards Track [Page 31]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ Section 8, "Probing and Announcing on Startup". The protocol used in
+ the Probing phase will determine a winner and a loser, and the loser
+ MUST cease using the name, and reconfigure.
+
+ It is very important that any host receiving a resource record that
+ conflicts with one of its own MUST take action as described above.
+ In the case of two hosts using the same host name, where one has been
+ configured to require a unique host name and the other has not, the
+ one that has not been configured to require a unique host name will
+ not perceive any conflict, and will not take any action. By
+ reverting to Probing state, the host that desires a unique host name
+ will go through the necessary steps to ensure that a unique host name
+ is obtained.
+
+ The recommended course of action after probing and failing is as
+ follows:
+
+ 1. Programmatically change the resource record name in an attempt
+ to find a new name that is unique. This could be done by
+ adding some further identifying information (e.g., the model
+ name of the hardware) if it is not already present in the name,
+ or appending the digit "2" to the name, or incrementing a
+ number at the end of the name if one is already present.
+
+ 2. Probe again, and repeat as necessary until a unique name is
+ found.
+
+ 3. Once an available unique name has been determined, by probing
+ without receiving any conflicting response, record this newly
+ chosen name in persistent storage so that the device will use
+ the same name the next time it is power-cycled.
+
+ 4. Display a message to the user or operator informing them of the
+ name change. For example:
+
+ The name "Bob's Music" is in use by another music server on
+ the network. Your music collection has been renamed to
+ "Bob's Music (2)". If you want to change this name, use
+ [describe appropriate menu item or preference dialog here].
+
+ The details of how the user or operator is informed of the new
+ name depends on context. A desktop computer with a screen
+ might put up a dialog box. A headless server in the closet may
+ write a message to a log file, or use whatever mechanism
+ (email, SNMP trap, etc.) it uses to inform the administrator of
+ error conditions. On the other hand, a headless server in the
+ closet may not inform the user at all -- if the user cares,
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 32]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ they will notice the name has changed, and connect to the
+ server in the usual way (e.g., via web browser) to configure a
+ new name.
+
+ 5. After one minute of probing, if the Multicast DNS responder has
+ been unable to find any unused name, it should log an error
+ message to inform the user or operator of this fact. This
+ situation should never occur in normal operation. The only
+ situations that would cause this to happen would be either a
+ deliberate denial-of-service attack, or some kind of very
+ obscure hardware or software bug that acts like a deliberate
+ denial-of-service attack.
+
+ These considerations apply to address records (i.e., host names) and
+ to all resource records where uniqueness (or maintenance of some
+ other defined constraint) is desired.
+
+10. Resource Record TTL Values and Cache Coherency
+
+ As a general rule, the recommended TTL value for Multicast DNS
+ resource records with a host name as the resource record's name
+ (e.g., A, AAAA, HINFO) or a host name contained within the resource
+ record's rdata (e.g., SRV, reverse mapping PTR record) SHOULD be 120
+ seconds.
+
+ The recommended TTL value for other Multicast DNS resource records is
+ 75 minutes.
+
+ A querier with an active outstanding query will issue a query message
+ when one or more of the resource records in its cache are 80% of the
+ way to expiry. If the TTL on those records is 75 minutes, this
+ ongoing cache maintenance process yields a steady-state query rate of
+ one query every 60 minutes.
+
+ Any distributed cache needs a cache coherency protocol. If Multicast
+ DNS resource records follow the recommendation and have a TTL of 75
+ minutes, that means that stale data could persist in the system for a
+ little over an hour. Making the default RR TTL significantly lower
+ would reduce the lifetime of stale data, but would produce too much
+ extra traffic on the network. Various techniques are available to
+ minimize the impact of such stale data, outlined in the five
+ subsections below.
+
+10.1. Goodbye Packets
+
+ In the case where a host knows that certain resource record data is
+ about to become invalid (for example, when the host is undergoing a
+ clean shutdown), the host SHOULD send an unsolicited Multicast DNS
+
+
+
+Cheshire & Krochmal Standards Track [Page 33]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ response packet, giving the same resource record name, rrtype,
+ rrclass, and rdata, but an RR TTL of zero. This has the effect of
+ updating the TTL stored in neighboring hosts' cache entries to zero,
+ causing that cache entry to be promptly deleted.
+
+ Queriers receiving a Multicast DNS response with a TTL of zero SHOULD
+ NOT immediately delete the record from the cache, but instead record
+ a TTL of 1 and then delete the record one second later. In the case
+ of multiple Multicast DNS responders on the network described in
+ Section 6.6 above, if one of the responders shuts down and
+ incorrectly sends goodbye packets for its records, it gives the other
+ cooperating responders one second to send out their own response to
+ "rescue" the records before they expire and are deleted.
+
+10.2. Announcements to Flush Outdated Cache Entries
+
+ Whenever a host has a resource record with new data, or with what
+ might potentially be new data (e.g., after rebooting, waking from
+ sleep, connecting to a new network link, or changing IP address), the
+ host needs to inform peers of that new data. In cases where the host
+ has not been continuously connected and participating on the network
+ link, it MUST first probe to re-verify uniqueness of its unique
+ records, as described above in Section 8.1, "Probing".
+
+ Having completed the Probing step, if necessary, the host MUST then
+ send a series of unsolicited announcements to update cache entries in
+ its neighbor hosts. In these unsolicited announcements, if the
+ record is one that has been verified unique, the host sets the most
+ significant bit of the rrclass field of the resource record. This
+ bit, the cache-flush bit, tells neighboring hosts that this is not a
+ shared record type. Instead of merging this new record additively
+ into the cache in addition to any previous records with the same
+ name, rrtype, and rrclass, all old records with that name, rrtype,
+ and rrclass that were received more than one second ago are declared
+ invalid, and marked to expire from the cache in one second.
+
+ The semantics of the cache-flush bit are as follows: normally when a
+ resource record appears in a Resource Record Section of the DNS
+ response it means, "This is an assertion that this information is
+ true". When a resource record appears in a Resource Record Section
+ of the DNS response with the cache-flush bit set, it means, "This is
+ an assertion that this information is the truth and the whole truth,
+ and anything you may have heard more than a second ago regarding
+ records of this name/rrtype/rrclass is no longer true".
+
+ To accommodate the case where the set of records from one host
+ constituting a single unique RRSet is too large to fit in a single
+ packet, only cache records that are more than one second old are
+
+
+
+Cheshire & Krochmal Standards Track [Page 34]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ flushed. This allows the announcing host to generate a quick burst
+ of packets back-to-back on the wire containing all the members of the
+ RRSet. When receiving records with the cache-flush bit set, all
+ records older than one second are marked to be deleted one second in
+ the future. One second after the end of the little packet burst, any
+ records not represented within that packet burst will then be expired
+ from all peer caches.
+
+ Any time a host sends a response packet containing some members of a
+ unique RRSet, it MUST send the entire RRSet, preferably in a single
+ packet, or if the entire RRSet will not fit in a single packet, in a
+ quick burst of packets sent as close together as possible. The host
+ MUST set the cache-flush bit on all members of the unique RRSet.
+
+ Another reason for waiting one second before deleting stale records
+ from the cache is to accommodate bridged networks. For example, a
+ host's address record announcement on a wireless interface may be
+ bridged onto a wired Ethernet and may cause that same host's Ethernet
+ address records to be flushed from peer caches. The one-second delay
+ gives the host the chance to see its own announcement arrive on the
+ wired Ethernet, and immediately re-announce its Ethernet interface's
+ address records so that both sets remain valid and live in peer
+ caches.
+
+ These rules, about when to set the cache-flush bit and about sending
+ the entire rrset, apply regardless of *why* the response message is
+ being generated. They apply to startup announcements as described in
+ Section 8.3, "Announcing", and to responses generated as a result of
+ receiving query messages.
+
+ The cache-flush bit is only set in records in the Resource Record
+ Sections of Multicast DNS responses sent to UDP port 5353.
+
+ The cache-flush bit MUST NOT be set in any resource records in a
+ response message sent in legacy unicast responses to UDP ports other
+ than 5353.
+
+ The cache-flush bit MUST NOT be set in any resource records in the
+ Known-Answer list of any query message.
+
+ The cache-flush bit MUST NOT ever be set in any shared resource
+ record. To do so would cause all the other shared versions of this
+ resource record with different rdata from different responders to be
+ immediately deleted from all the caches on the network.
+
+
+
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 35]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ The cache-flush bit does *not* apply to questions listed in the
+ Question Section of a Multicast DNS message. The top bit of the
+ rrclass field in questions is used for an entirely different purpose
+ (see Section 5.4, "Questions Requesting Unicast Responses").
+
+ Note that the cache-flush bit is NOT part of the resource record
+ class. The cache-flush bit is the most significant bit of the second
+ 16-bit word of a resource record in a Resource Record Section of a
+ Multicast DNS message (the field conventionally referred to as the
+ rrclass field), and the actual resource record class is the least
+ significant fifteen bits of this field. There is no Multicast DNS
+ resource record class 0x8001. The value 0x8001 in the rrclass field
+ of a resource record in a Multicast DNS response message indicates a
+ resource record with class 1, with the cache-flush bit set. When
+ receiving a resource record with the cache-flush bit set,
+ implementations should take care to mask off that bit before storing
+ the resource record in memory, or otherwise ensure that it is given
+ the correct semantic interpretation.
+
+ The reuse of the top bit of the rrclass field only applies to
+ conventional resource record types that are subject to caching, not
+ to pseudo-RRs like OPT [RFC2671], TSIG [RFC2845], TKEY [RFC2930],
+ SIG0 [RFC2931], etc., that pertain only to a particular transport
+ level message and not to any actual DNS data. Since pseudo-RRs
+ should never go into the Multicast DNS cache, the concept of a cache-
+ flush bit for these types is not applicable. In particular, the
+ rrclass field of an OPT record encodes the sender's UDP payload size,
+ and should be interpreted as a sixteen-bit length value in the range
+ 0-65535, not a one-bit flag and a fifteen-bit length.
+
+10.3. Cache Flush on Topology change
+
+ If the hardware on a given host is able to indicate physical changes
+ of connectivity, then when the hardware indicates such a change, the
+ host should take this information into account in its Multicast DNS
+ cache management strategy. For example, a host may choose to
+ immediately flush all cache records received on a particular
+ interface when that cable is disconnected. Alternatively, a host may
+ choose to adjust the remaining TTL on all those records to a few
+ seconds so that if the cable is not reconnected quickly, those
+ records will expire from the cache.
+
+ Likewise, when a host reboots, wakes from sleep, or undergoes some
+ other similar discontinuous state change, the cache management
+ strategy should take that information into account.
+
+
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 36]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+10.4. Cache Flush on Failure Indication
+
+ Sometimes a cache record can be determined to be stale when a client
+ attempts to use the rdata it contains, and the client finds that
+ rdata to be incorrect.
+
+ For example, the rdata in an address record can be determined to be
+ incorrect if attempts to contact that host fail, either because (for
+ an IPv4 address on a local subnet) ARP requests for that address go
+ unanswered, because (for an IPv6 address with an on-link prefix) ND
+ requests for that address go unanswered, or because (for an address
+ on a remote network) a router returns an ICMP "Host Unreachable"
+ error.
+
+ The rdata in an SRV record can be determined to be incorrect if
+ attempts to communicate with the indicated service at the host and
+ port number indicated are not successful.
+
+ The rdata in a DNS-SD PTR record can be determined to be incorrect if
+ attempts to look up the SRV record it references are not successful.
+
+ The software implementing the Multicast DNS resource record cache
+ should provide a mechanism so that clients detecting stale rdata can
+ inform the cache.
+
+ When the cache receives this hint that it should reconfirm some
+ record, it MUST issue two or more queries for the resource record in
+ dispute. If no response is received within ten seconds, then, even
+ though its TTL may indicate that it is not yet due to expire, that
+ record SHOULD be promptly flushed from the cache.
+
+ The end result of this is that if a printer suffers a sudden power
+ failure or other abrupt disconnection from the network, its name may
+ continue to appear in DNS-SD browser lists displayed on users'
+ screens. Eventually, that entry will expire from the cache
+ naturally, but if a user tries to access the printer before that
+ happens, the failure to successfully contact the printer will trigger
+ the more hasty demise of its cache entries. This is a sensible
+ trade-off between good user experience and good network efficiency.
+ If we were to insist that printers should disappear from the printer
+ list within 30 seconds of becoming unavailable, for all failure
+ modes, the only way to achieve this would be for the client to poll
+ the printer at least every 30 seconds, or for the printer to announce
+ its presence at least every 30 seconds, both of which would be an
+ unreasonable burden on most networks.
+
+
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 37]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+10.5. Passive Observation Of Failures (POOF)
+
+ A host observes the multicast queries issued by the other hosts on
+ the network. One of the major benefits of also sending responses
+ using multicast is that it allows all hosts to see the responses (or
+ lack thereof) to those queries.
+
+ If a host sees queries, for which a record in its cache would be
+ expected to be given as an answer in a multicast response, but no
+ such answer is seen, then the host may take this as an indication
+ that the record may no longer be valid.
+
+ After seeing two or more of these queries, and seeing no multicast
+ response containing the expected answer within ten seconds, then even
+ though its TTL may indicate that it is not yet due to expire, that
+ record SHOULD be flushed from the cache. The host SHOULD NOT perform
+ its own queries to reconfirm that the record is truly gone. If every
+ host on a large network were to do this, it would cause a lot of
+ unnecessary multicast traffic. If host A sends multicast queries
+ that remain unanswered, then there is no reason to suppose that host
+ B or any other host is likely to be any more successful.
+
+ The previous section, "Cache Flush on Failure Indication", describes
+ a situation where a user trying to print discovers that the printer
+ is no longer available. By implementing the passive observation
+ described here, when one user fails to contact the printer, all hosts
+ on the network observe that failure and update their caches
+ accordingly.
+
+11. Source Address Check
+
+ All Multicast DNS responses (including responses sent via unicast)
+ SHOULD be sent with IP TTL set to 255. This is recommended to
+ provide backwards-compatibility with older Multicast DNS queriers
+ (implementing a draft version of this document, posted in February
+ 2004) that check the IP TTL on reception to determine whether the
+ packet originated on the local link. These older queriers discard
+ all packets with TTLs other than 255.
+
+ A host sending Multicast DNS queries to a link-local destination
+ address (including the 224.0.0.251 and FF02::FB link-local multicast
+ addresses) MUST only accept responses to that query that originate
+ from the local link, and silently discard any other response packets.
+ Without this check, it could be possible for remote rogue hosts to
+ send spoof answer packets (perhaps unicast to the victim host), which
+ the receiving machine could misinterpret as having originated on the
+ local link.
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 38]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ The test for whether a response originated on the local link is done
+ in two ways:
+
+ * All responses received with a destination address in the IP
+ header that is the mDNS IPv4 link-local multicast address
+ 224.0.0.251 or the mDNS IPv6 link-local multicast address
+ FF02::FB are necessarily deemed to have originated on the local
+ link, regardless of source IP address. This is essential to
+ allow devices to work correctly and reliably in unusual
+ configurations, such as multiple logical IP subnets overlayed on
+ a single link, or in cases of severe misconfiguration, where
+ devices are physically connected to the same link, but are
+ currently misconfigured with completely unrelated IP addresses
+ and subnet masks.
+
+ * For responses received with a unicast destination address in the
+ IP header, the source IP address in the packet is checked to see
+ if it is an address on a local subnet. An IPv4 source address
+ is determined to be on a local subnet if, for (one of) the
+ address(es) configured on the interface receiving the packet, (I
+ & M) == (P & M), where I and M are the interface address and
+ subnet mask respectively, P is the source IP address from the
+ packet, '&' represents the bitwise logical 'and' operation, and
+ '==' represents a bitwise equality test. An IPv6 source address
+ is determined to be on the local link if, for any of the on-link
+ IPv6 prefixes on the interface receiving the packet (learned via
+ IPv6 router advertisements or otherwise configured on the host),
+ the first 'n' bits of the IPv6 source address match the first
+ 'n' bits of the prefix address, where 'n' is the length of the
+ prefix being considered.
+
+ Since queriers will ignore responses apparently originating outside
+ the local subnet, a responder SHOULD avoid generating responses that
+ it can reasonably predict will be ignored. This applies particularly
+ in the case of overlayed subnets. If a responder receives a query
+ addressed to the mDNS IPv4 link-local multicast address 224.0.0.251,
+ from a source address not apparently on the same subnet as the
+ responder (or, in the case of IPv6, from a source IPv6 address for
+ which the responder does not have any address with the same prefix on
+ that interface), then even if the query indicates that a unicast
+ response is preferred (see Section 5.4, "Questions Requesting Unicast
+ Responses"), the responder SHOULD elect to respond by multicast
+ anyway, since it can reasonably predict that a unicast response with
+ an apparently non-local source address will probably be ignored.
+
+
+
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 39]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+12. Special Characteristics of Multicast DNS Domains
+
+ Unlike conventional DNS names, names that end in ".local." have only
+ local significance. The same is true of names within the IPv4 link-
+ local reverse mapping domain "254.169.in-addr.arpa." and the IPv6
+ link-local reverse mapping domains "8.e.f.ip6.arpa.",
+ "9.e.f.ip6.arpa.", "a.e.f.ip6.arpa.", and "b.e.f.ip6.arpa.".
+
+ These names function primarily as protocol identifiers, rather than
+ as user-visible identifiers. Even though they may occasionally be
+ visible to end users, that is not their primary purpose. As such,
+ these names should be treated as opaque identifiers. In particular,
+ the string "local" should not be translated or localized into
+ different languages, much as the name "localhost" is not translated
+ or localized into different languages.
+
+ Conventional Unicast DNS seeks to provide a single unified namespace,
+ where a given DNS query yields the same answer no matter where on the
+ planet it is performed or to which recursive DNS server the query is
+ sent. In contrast, each IP link has its own private ".local.",
+ "254.169.in-addr.arpa." and IPv6 link-local reverse mapping
+ namespaces, and the answer to any query for a name within those
+ domains depends on where that query is asked. (This characteristic
+ is not unique to Multicast DNS. Although the original concept of DNS
+ was a single global namespace, in recent years, split views,
+ firewalls, intranets, DNS geolocation, and the like have increasingly
+ meant that the answer to a given DNS query has become dependent on
+ the location of the querier.)
+
+ The IPv4 name server address for a Multicast DNS domain is
+ 224.0.0.251. The IPv6 name server address for a Multicast DNS domain
+ is FF02::FB. These are multicast addresses; therefore, they identify
+ not a single host but a collection of hosts, working in cooperation
+ to maintain some reasonable facsimile of a competently managed DNS
+ zone. Conceptually, a Multicast DNS domain is a single DNS zone;
+ however, its server is implemented as a distributed process running
+ on a cluster of loosely cooperating CPUs rather than as a single
+ process running on a single CPU.
+
+ Multicast DNS domains are not delegated from their parent domain via
+ use of NS (Name Server) records, and there is also no concept of
+ delegation of subdomains within a Multicast DNS domain. Just because
+ a particular host on the network may answer queries for a particular
+ record type with the name "example.local." does not imply anything
+ about whether that host will answer for the name
+ "child.example.local.", or indeed for other record types with the
+ name "example.local.".
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 40]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ There are no NS records anywhere in Multicast DNS domains. Instead,
+ the Multicast DNS domains are reserved by IANA, and there is
+ effectively an implicit delegation of all Multicast DNS domains to
+ the 224.0.0.251:5353 and [FF02::FB]:5353 multicast groups, by virtue
+ of client software implementing the protocol rules specified in this
+ document.
+
+ Multicast DNS zones have no SOA (Start of Authority) record. A
+ conventional DNS zone's SOA record contains information such as the
+ email address of the zone administrator and the monotonically
+ increasing serial number of the last zone modification. There is no
+ single human administrator for any given Multicast DNS zone, so there
+ is no email address. Because the hosts managing any given Multicast
+ DNS zone are only loosely coordinated, there is no readily available
+ monotonically increasing serial number to determine whether or not
+ the zone contents have changed. A host holding part of the shared
+ zone could crash or be disconnected from the network at any time
+ without informing the other hosts. There is no reliable way to
+ provide a zone serial number that would, whenever such a crash or
+ disconnection occurred, immediately change to indicate that the
+ contents of the shared zone had changed.
+
+ Zone transfers are not possible for any Multicast DNS zone.
+
+13. Enabling and Disabling Multicast DNS
+
+ The option to fail-over to Multicast DNS for names not ending in
+ ".local." SHOULD be a user-configured option, and SHOULD be disabled
+ by default because of the possible security issues related to
+ unintended local resolution of apparently global names. Enabling
+ Multicast DNS for names not ending in ".local." may be appropriate on
+ a secure isolated network, or on some future network were machines
+ exclusively use DNSSEC for all DNS queries, and have Multicast DNS
+ responders capable of generating the appropriate cryptographic DNSSEC
+ signatures, thereby guarding against spoofing.
+
+ The option to look up unqualified (relative) names by appending
+ ".local." (or not) is controlled by whether ".local." appears (or
+ not) in the client's DNS search list.
+
+ No special control is needed for enabling and disabling Multicast DNS
+ for names explicitly ending with ".local." as entered by the user.
+ The user doesn't need a way to disable Multicast DNS for names ending
+ with ".local.", because if the user doesn't want to use Multicast
+ DNS, they can achieve this by simply not using those names. If a
+ user *does* enter a name ending in ".local.", then we can safely
+ assume the user's intention was probably that it should work. Having
+ user configuration options that can be (intentionally or
+
+
+
+Cheshire & Krochmal Standards Track [Page 41]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ unintentionally) set so that local names don't work is just one more
+ way of frustrating the user's ability to perform the tasks they want,
+ perpetuating the view that, "IP networking is too complicated to
+ configure and too hard to use".
+
+14. Considerations for Multiple Interfaces
+
+ A host SHOULD defend its dot-local host name on all active interfaces
+ on which it is answering Multicast DNS queries.
+
+ In the event of a name conflict on *any* interface, a host should
+ configure a new host name, if it wishes to maintain uniqueness of its
+ host name.
+
+ A host may choose to use the same name (or set of names) for all of
+ its address records on all interfaces, or it may choose to manage its
+ Multicast DNS interfaces independently, potentially answering to a
+ different name (or set of names) on different interfaces.
+
+ Except in the case of proxying and other similar specialized uses,
+ addresses in IPv4 or IPv6 address records in Multicast DNS responses
+ MUST be valid for use on the interface on which the response is being
+ sent.
+
+ Just as the same link-local IP address may validly be in use
+ simultaneously on different links by different hosts, the same link-
+ local host name may validly be in use simultaneously on different
+ links, and this is not an error. A multihomed host with connections
+ to two different links may be able to communicate with two different
+ hosts that are validly using the same name. While this kind of name
+ duplication should be rare, it means that a host that wants to fully
+ support this case needs network programming APIs that allow
+ applications to specify on what interface to perform a link-local
+ Multicast DNS query, and to discover on what interface a Multicast
+ DNS response was received.
+
+ There is one other special precaution that multihomed hosts need to
+ take. It's common with today's laptop computers to have an Ethernet
+ connection and an 802.11 [IEEE.802.11] wireless connection active at
+ the same time. What the software on the laptop computer can't easily
+ tell is whether the wireless connection is in fact bridged onto the
+ same network segment as its Ethernet connection. If the two networks
+ are bridged together, then packets the host sends on one interface
+ will arrive on the other interface a few milliseconds later, and care
+ must be taken to ensure that this bridging does not cause problems:
+
+
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 42]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ When the host announces its host name (i.e., its address records) on
+ its wireless interface, those announcement records are sent with the
+ cache-flush bit set, so when they arrive on the Ethernet segment,
+ they will cause all the peers on the Ethernet to flush the host's
+ Ethernet address records from their caches. The Multicast DNS
+ protocol has a safeguard to protect against this situation: when
+ records are received with the cache-flush bit set, other records are
+ not deleted from peer caches immediately, but are marked for deletion
+ in one second. When the host sees its own wireless address records
+ arrive on its Ethernet interface, with the cache-flush bit set, this
+ one-second grace period gives the host time to respond and re-
+ announce its Ethernet address records, to reinstate those records in
+ peer caches before they are deleted.
+
+ As described, this solves one problem, but creates another, because
+ when those Ethernet announcement records arrive back on the wireless
+ interface, the host would again respond defensively to reinstate its
+ wireless records, and this process would continue forever,
+ continuously flooding the network with traffic. The Multicast DNS
+ protocol has a second safeguard, to solve this problem: the cache-
+ flush bit does not apply to records received very recently, within
+ the last second. This means that when the host sees its own Ethernet
+ address records arrive on its wireless interface, with the cache-
+ flush bit set, it knows there's no need to re-announce its wireless
+ address records again because it already sent them less than a second
+ ago, and this makes them immune from deletion from peer caches. (See
+ Section 10.2.)
+
+15. Considerations for Multiple Responders on the Same Machine
+
+ It is possible to have more than one Multicast DNS responder and/or
+ querier implementation coexist on the same machine, but there are
+ some known issues.
+
+15.1. Receiving Unicast Responses
+
+ In most operating systems, incoming *multicast* packets can be
+ delivered to *all* open sockets bound to the right port number,
+ provided that the clients take the appropriate steps to allow this.
+ For this reason, all Multicast DNS implementations SHOULD use the
+ SO_REUSEPORT and/or SO_REUSEADDR options (or equivalent as
+ appropriate for the operating system in question) so they will all be
+ able to bind to UDP port 5353 and receive incoming multicast packets
+ addressed to that port. However, unlike multicast packets, incoming
+ unicast UDP packets are typically delivered only to the first socket
+ to bind to that port. This means that "QU" responses and other
+ packets sent via unicast will be received only by the first Multicast
+ DNS responder and/or querier on a system. This limitation can be
+
+
+
+Cheshire & Krochmal Standards Track [Page 43]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ partially mitigated if Multicast DNS implementations detect when they
+ are not the first to bind to port 5353, and in that case they do not
+ request "QU" responses. One way to detect if there is another
+ Multicast DNS implementation already running is to attempt binding to
+ port 5353 without using SO_REUSEPORT and/or SO_REUSEADDR, and if that
+ fails it indicates that some other socket is already bound to this
+ port.
+
+15.2. Multipacket Known-Answer lists
+
+ When a Multicast DNS querier issues a query with too many Known
+ Answers to fit into a single packet, it divides the Known-Answer list
+ into two or more packets. Multicast DNS responders associate the
+ initial truncated query with its continuation packets by examining
+ the source IP address in each packet. Since two independent
+ Multicast DNS queriers running on the same machine will be sending
+ packets with the same source IP address, from an outside perspective
+ they appear to be a single entity. If both queriers happened to send
+ the same multipacket query at the same time, with different Known-
+ Answer lists, then they could each end up suppressing answers that
+ the other needs.
+
+15.3. Efficiency
+
+ If different clients on a machine were each to have their own
+ independent Multicast DNS implementation, they would lose certain
+ efficiency benefits. Apart from the unnecessary code duplication,
+ memory usage, and CPU load, the clients wouldn't get the benefit of a
+ shared system-wide cache, and they would not be able to aggregate
+ separate queries into single packets to reduce network traffic.
+
+15.4. Recommendation
+
+ Because of these issues, this document encourages implementers to
+ design systems with a single Multicast DNS implementation that
+ provides Multicast DNS services shared by all clients on that
+ machine, much as most operating systems today have a single TCP
+ implementation, which is shared between all clients on that machine.
+ Due to engineering constraints, there may be situations where
+ embedding a "user-level" Multicast DNS implementation in the client
+ application software is the most expedient solution, and while this
+ will usually work in practice, implementers should be aware of the
+ issues outlined in this section.
+
+
+
+
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 44]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+16. Multicast DNS Character Set
+
+ Historically, Unicast DNS has been used with a very restricted set of
+ characters. Indeed, conventional DNS is usually limited to just
+ twenty-six letters, ten digits and the hyphen character, not even
+ allowing spaces or other punctuation. Attempts to remedy this for
+ Unicast DNS have been badly constrained by the perceived need to
+ accommodate old buggy legacy DNS implementations. In reality, the
+ DNS specification itself actually imposes no limits on what
+ characters may be used in names, and good DNS implementations handle
+ any arbitrary eight-bit data without trouble. "Clarifications to the
+ DNS Specification" [RFC2181] directly discusses the subject of
+ allowable character set in Section 11 ("Name syntax"), and explicitly
+ states that DNS names may contain arbitrary eight-bit data. However,
+ the old rules for ARPANET host names back in the 1980s required host
+ names to be just letters, digits, and hyphens [RFC1034], and since
+ the predominant use of DNS is to store host address records, many
+ have assumed that the DNS protocol itself suffers from the same
+ limitation. It might be accurate to say that there could be
+ hypothetical bad implementations that do not handle eight-bit data
+ correctly, but it would not be accurate to say that the protocol
+ doesn't allow names containing eight-bit data.
+
+ Multicast DNS is a new protocol and doesn't (yet) have old buggy
+ legacy implementations to constrain the design choices. Accordingly,
+ it adopts the simple obvious elegant solution: all names in Multicast
+ DNS MUST be encoded as precomposed UTF-8 [RFC3629] "Net-Unicode"
+ [RFC5198] text.
+
+ Some users of 16-bit Unicode have taken to stuffing a "zero-width
+ nonbreaking space" character (U+FEFF) at the start of each UTF-16
+ file, as a hint to identify whether the data is big-endian or little-
+ endian, and calling it a "Byte Order Mark" (BOM). Since there is
+ only one possible byte order for UTF-8 data, a BOM is neither
+ necessary nor permitted. Multicast DNS names MUST NOT contain a
+ "Byte Order Mark". Any occurrence of the Unicode character U+FEFF at
+ the start or anywhere else in a Multicast DNS name MUST be
+ interpreted as being an actual intended part of the name,
+ representing (just as for any other legal unicode value) an actual
+ literal instance of that character (in this case a zero-width non-
+ breaking space character).
+
+ For names that are restricted to US-ASCII [RFC0020] letters, digits,
+ and hyphens, the UTF-8 encoding is identical to the US-ASCII
+ encoding, so this is entirely compatible with existing host names.
+ For characters outside the US-ASCII range, UTF-8 encoding is used.
+
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 45]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ Multicast DNS implementations MUST NOT use any other encodings apart
+ from precomposed UTF-8 (US-ASCII being considered a compatible subset
+ of UTF-8). The reasons for selecting UTF-8 instead of Punycode
+ [RFC3492] are discussed further in Appendix F.
+
+ The simple rules for case-insensitivity in Unicast DNS [RFC1034]
+ [RFC1035] also apply in Multicast DNS; that is to say, in name
+ comparisons, the lowercase letters "a" to "z" (0x61 to 0x7A) match
+ their uppercase equivalents "A" to "Z" (0x41 to 0x5A). Hence, if a
+ querier issues a query for an address record with the name
+ "myprinter.local.", then a responder having an address record with
+ the name "MyPrinter.local." should issue a response. No other
+ automatic equivalences should be assumed. In particular, all UTF-8
+ multibyte characters (codes 0x80 and higher) are compared by simple
+ binary comparison of the raw byte values. Accented characters are
+ *not* defined to be automatically equivalent to their unaccented
+ counterparts. Where automatic equivalences are desired, this may be
+ achieved through the use of programmatically generated CNAME records.
+ For example, if a responder has an address record for an accented
+ name Y, and a querier issues a query for a name X, where X is the
+ same as Y with all the accents removed, then the responder may issue
+ a response containing two resource records: a CNAME record "X CNAME
+ Y", asserting that the requested name X (unaccented) is an alias for
+ the true (accented) name Y, followed by the address record for Y.
+
+17. Multicast DNS Message Size
+
+ The 1987 DNS specification [RFC1035] restricts DNS messages carried
+ by UDP to no more than 512 bytes (not counting the IP or UDP
+ headers). For UDP packets carried over the wide-area Internet in
+ 1987, this was appropriate. For link-local multicast packets on
+ today's networks, there is no reason to retain this restriction.
+ Given that the packets are by definition link-local, there are no
+ Path MTU issues to consider.
+
+ Multicast DNS messages carried by UDP may be up to the IP MTU of the
+ physical interface, less the space required for the IP header (20
+ bytes for IPv4; 40 bytes for IPv6) and the UDP header (8 bytes).
+
+ In the case of a single Multicast DNS resource record that is too
+ large to fit in a single MTU-sized multicast response packet, a
+ Multicast DNS responder SHOULD send the resource record alone, in a
+ single IP datagram, using multiple IP fragments. Resource records
+ this large SHOULD be avoided, except in the very rare cases where
+ they really are the appropriate solution to the problem at hand.
+ Implementers should be aware that many simple devices do not
+ reassemble fragmented IP datagrams, so large resource records SHOULD
+ NOT be used except in specialized cases where the implementer knows
+
+
+
+Cheshire & Krochmal Standards Track [Page 46]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ that all receivers implement reassembly, or where the large resource
+ record contains optional data which is not essential for correct
+ operation of the client.
+
+ A Multicast DNS packet larger than the interface MTU, which is sent
+ using fragments, MUST NOT contain more than one resource record.
+
+ Even when fragmentation is used, a Multicast DNS packet, including IP
+ and UDP headers, MUST NOT exceed 9000 bytes.
+
+ Note that 9000 bytes is also the maximum payload size of an Ethernet
+ "Jumbo" packet [Jumbo]. However, in practice Ethernet "Jumbo"
+ packets are not widely used, so it is advantageous to keep packets
+ under 1500 bytes whenever possible. Even on hosts that normally
+ handle Ethernet "Jumbo" packets and IP fragment reassembly, it is
+ becoming more common for these hosts to implement power-saving modes
+ where the main CPU goes to sleep and hands off packet reception tasks
+ to a more limited processor in the network interface hardware, which
+ may not support Ethernet "Jumbo" packets or IP fragment reassembly.
+
+18. Multicast DNS Message Format
+
+ This section describes specific rules pertaining to the allowable
+ values for the header fields of a Multicast DNS message, and other
+ message format considerations.
+
+18.1. ID (Query Identifier)
+
+ Multicast DNS implementations SHOULD listen for unsolicited responses
+ issued by hosts booting up (or waking up from sleep or otherwise
+ joining the network). Since these unsolicited responses may contain
+ a useful answer to a question for which the querier is currently
+ awaiting an answer, Multicast DNS implementations SHOULD examine all
+ received Multicast DNS response messages for useful answers, without
+ regard to the contents of the ID field or the Question Section. In
+ Multicast DNS, knowing which particular query message (if any) is
+ responsible for eliciting a particular response message is less
+ interesting than knowing whether the response message contains useful
+ information.
+
+ Multicast DNS implementations MAY cache data from any or all
+ Multicast DNS response messages they receive, for possible future
+ use, provided of course that normal TTL aging is performed on these
+ cached resource records.
+
+ In multicast query messages, the Query Identifier SHOULD be set to
+ zero on transmission.
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 47]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ In multicast responses, including unsolicited multicast responses,
+ the Query Identifier MUST be set to zero on transmission, and MUST be
+ ignored on reception.
+
+ In legacy unicast response messages generated specifically in
+ response to a particular (unicast or multicast) query, the Query
+ Identifier MUST match the ID from the query message.
+
+18.2. QR (Query/Response) Bit
+
+ In query messages the QR bit MUST be zero.
+ In response messages the QR bit MUST be one.
+
+18.3. OPCODE
+
+ In both multicast query and multicast response messages, the OPCODE
+ MUST be zero on transmission (only standard queries are currently
+ supported over multicast). Multicast DNS messages received with an
+ OPCODE other than zero MUST be silently ignored.
+
+18.4. AA (Authoritative Answer) Bit
+
+ In query messages, the Authoritative Answer bit MUST be zero on
+ transmission, and MUST be ignored on reception.
+
+ In response messages for Multicast domains, the Authoritative Answer
+ bit MUST be set to one (not setting this bit would imply there's some
+ other place where "better" information may be found) and MUST be
+ ignored on reception.
+
+18.5. TC (Truncated) Bit
+
+ In query messages, if the TC bit is set, it means that additional
+ Known-Answer records may be following shortly. A responder SHOULD
+ record this fact, and wait for those additional Known-Answer records,
+ before deciding whether to respond. If the TC bit is clear, it means
+ that the querying host has no additional Known Answers.
+
+ In multicast response messages, the TC bit MUST be zero on
+ transmission, and MUST be ignored on reception.
+
+ In legacy unicast response messages, the TC bit has the same meaning
+ as in conventional Unicast DNS: it means that the response was too
+ large to fit in a single packet, so the querier SHOULD reissue its
+ query using TCP in order to receive the larger response.
+
+
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 48]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+18.6. RD (Recursion Desired) Bit
+
+ In both multicast query and multicast response messages, the
+ Recursion Desired bit SHOULD be zero on transmission, and MUST be
+ ignored on reception.
+
+18.7. RA (Recursion Available) Bit
+
+ In both multicast query and multicast response messages, the
+ Recursion Available bit MUST be zero on transmission, and MUST be
+ ignored on reception.
+
+18.8. Z (Zero) Bit
+
+ In both query and response messages, the Zero bit MUST be zero on
+ transmission, and MUST be ignored on reception.
+
+18.9. AD (Authentic Data) Bit
+
+ In both multicast query and multicast response messages, the
+ Authentic Data bit [RFC2535] MUST be zero on transmission, and MUST
+ be ignored on reception.
+
+18.10. CD (Checking Disabled) Bit
+
+ In both multicast query and multicast response messages, the Checking
+ Disabled bit [RFC2535] MUST be zero on transmission, and MUST be
+ ignored on reception.
+
+18.11. RCODE (Response Code)
+
+ In both multicast query and multicast response messages, the Response
+ Code MUST be zero on transmission. Multicast DNS messages received
+ with non-zero Response Codes MUST be silently ignored.
+
+18.12. Repurposing of Top Bit of qclass in Question Section
+
+ In the Question Section of a Multicast DNS query, the top bit of the
+ qclass field is used to indicate that unicast responses are preferred
+ for this particular question. (See Section 5.4.)
+
+18.13. Repurposing of Top Bit of rrclass in Resource Record Sections
+
+ In the Resource Record Sections of a Multicast DNS response, the top
+ bit of the rrclass field is used to indicate that the record is a
+ member of a unique RRSet, and the entire RRSet has been sent together
+ (in the same packet, or in consecutive packets if there are too many
+ records to fit in a single packet). (See Section 10.2.)
+
+
+
+Cheshire & Krochmal Standards Track [Page 49]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+18.14. Name Compression
+
+ When generating Multicast DNS messages, implementations SHOULD use
+ name compression wherever possible to compress the names of resource
+ records, by replacing some or all of the resource record name with a
+ compact two-byte reference to an appearance of that data somewhere
+ earlier in the message [RFC1035].
+
+ This applies not only to Multicast DNS responses, but also to
+ queries. When a query contains more than one question, successive
+ questions in the same message often contain similar names, and
+ consequently name compression SHOULD be used, to save bytes. In
+ addition, queries may also contain Known Answers in the Answer
+ Section, or probe tiebreaking data in the Authority Section, and
+ these names SHOULD similarly be compressed for network efficiency.
+
+ In addition to compressing the *names* of resource records, names
+ that appear within the *rdata* of the following rrtypes SHOULD also
+ be compressed in all Multicast DNS messages:
+
+ NS, CNAME, PTR, DNAME, SOA, MX, AFSDB, RT, KX, RP, PX, SRV, NSEC
+
+ Until future IETF Standards Action [RFC5226] specifying that names in
+ the rdata of other types should be compressed, names that appear
+ within the rdata of any type not listed above MUST NOT be compressed.
+
+ Implementations receiving Multicast DNS messages MUST correctly
+ decode compressed names appearing in the Question Section, and
+ compressed names of resource records appearing in other sections.
+
+ In addition, implementations MUST correctly decode compressed names
+ appearing within the *rdata* of the rrtypes listed above. Where
+ possible, implementations SHOULD also correctly decode compressed
+ names appearing within the *rdata* of other rrtypes known to the
+ implementers at the time of implementation, because such forward-
+ thinking planning helps facilitate the deployment of future
+ implementations that may have reason to compress those rrtypes. It
+ is possible that no future IETF Standards Action [RFC5226] will be
+ created that mandates or permits the compression of rdata in new
+ types, but having implementations designed such that they are capable
+ of decompressing all known types helps keep future options open.
+
+ One specific difference between Unicast DNS and Multicast DNS is that
+ Unicast DNS does not allow name compression for the target host in an
+ SRV record, because Unicast DNS implementations before the first SRV
+ specification in 1996 [RFC2052] may not decode these compressed
+
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 50]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ records properly. Since all Multicast DNS implementations were
+ created after 1996, all Multicast DNS implementations are REQUIRED to
+ decode compressed SRV records correctly.
+
+ In legacy unicast responses generated to answer legacy queries, name
+ compression MUST NOT be performed on SRV records.
+
+19. Summary of Differences between Multicast DNS and Unicast DNS
+
+ Multicast DNS shares, as much as possible, the familiar APIs, naming
+ syntax, resource record types, etc., of Unicast DNS. There are, of
+ course, necessary differences by virtue of it using multicast, and by
+ virtue of it operating in a community of cooperating peers, rather
+ than a precisely defined hierarchy controlled by a strict chain of
+ formal delegations from the root. These differences are summarized
+ below:
+
+ Multicast DNS...
+ * uses multicast
+ * uses UDP port 5353 instead of port 53
+ * operates in well-defined parts of the DNS namespace
+ * has no SOA (Start of Authority) records
+ * uses UTF-8, and only UTF-8, to encode resource record names
+ * allows names up to 255 bytes plus a terminating zero byte
+ * allows name compression in rdata for SRV and other record types
+ * allows larger UDP packets
+ * allows more than one question in a query message
+ * defines consistent results for qtype "ANY" and qclass "ANY" queries
+ * uses the Answer Section of a query to list Known Answers
+ * uses the TC bit in a query to indicate additional Known Answers
+ * uses the Authority Section of a query for probe tiebreaking
+ * ignores the Query ID field (except for generating legacy responses)
+ * doesn't require the question to be repeated in the response message
+ * uses unsolicited responses to announce new records
+ * uses NSEC records to signal nonexistence of records
+ * defines a unicast-response bit in the rrclass of query questions
+ * defines a cache-flush bit in the rrclass of response records
+ * uses DNS RR TTL 0 to indicate that a record has been deleted
+ * recommends AAAA records in the additional section when responding
+ to rrtype "A" queries, and vice versa
+ * monitors queries to perform Duplicate Question Suppression
+ * monitors responses to perform Duplicate Answer Suppression...
+ * ... and Ongoing Conflict Detection
+ * ... and Opportunistic Caching
+
+
+
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 51]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+20. IPv6 Considerations
+
+ An IPv4-only host and an IPv6-only host behave as "ships that pass in
+ the night". Even if they are on the same Ethernet, neither is aware
+ of the other's traffic. For this reason, each physical link may have
+ *two* unrelated ".local." zones, one for IPv4 and one for IPv6.
+ Since for practical purposes, a group of IPv4-only hosts and a group
+ of IPv6-only hosts on the same Ethernet act as if they were on two
+ entirely separate Ethernet segments, it is unsurprising that their
+ use of the ".local." zone should occur exactly as it would if they
+ really were on two entirely separate Ethernet segments.
+
+ A dual-stack (v4/v6) host can participate in both ".local." zones,
+ and should register its name(s) and perform its lookups both using
+ IPv4 and IPv6. This enables it to reach, and be reached by, both
+ IPv4-only and IPv6-only hosts. In effect, this acts like a
+ multihomed host, with one connection to the logical "IPv4 Ethernet
+ segment", and a connection to the logical "IPv6 Ethernet segment".
+ When such a host generates NSEC records, if it is using the same host
+ name for its IPv4 addresses and its IPv6 addresses on that network
+ interface, its NSEC records should indicate that the host name has
+ both A and AAAA records.
+
+21. Security Considerations
+
+ The algorithm for detecting and resolving name conflicts is, by its
+ very nature, an algorithm that assumes cooperating participants. Its
+ purpose is to allow a group of hosts to arrive at a mutually disjoint
+ set of host names and other DNS resource record names, in the absence
+ of any central authority to coordinate this or mediate disputes. In
+ the absence of any higher authority to resolve disputes, the only
+ alternative is that the participants must work together cooperatively
+ to arrive at a resolution.
+
+ In an environment where the participants are mutually antagonistic
+ and unwilling to cooperate, other mechanisms are appropriate, like
+ manually configured DNS.
+
+ In an environment where there is a group of cooperating participants,
+ but clients cannot be sure that there are no antagonistic hosts on
+ the same physical link, the cooperating participants need to use
+ IPsec signatures and/or DNSSEC [RFC4033] signatures so that they can
+ distinguish Multicast DNS messages from trusted participants (which
+ they process as usual) from Multicast DNS messages from untrusted
+ participants (which they silently discard).
+
+
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 52]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ If DNS queries for *global* DNS names are sent to the mDNS multicast
+ address (during network outages which disrupt communication with the
+ greater Internet) it is *especially* important to use DNSSEC, because
+ the user may have the impression that he or she is communicating with
+ some authentic host, when in fact he or she is really communicating
+ with some local host that is merely masquerading as that name. This
+ is less critical for names ending with ".local.", because the user
+ should be aware that those names have only local significance and no
+ global authority is implied.
+
+ Most computer users neglect to type the trailing dot at the end of a
+ fully qualified domain name, making it a relative domain name (e.g.,
+ "www.example.com"). In the event of network outage, attempts to
+ positively resolve the name as entered will fail, resulting in
+ application of the search list, including ".local.", if present. A
+ malicious host could masquerade as "www.example.com." by answering
+ the resulting Multicast DNS query for "www.example.com.local.". To
+ avoid this, a host MUST NOT append the search suffix ".local.", if
+ present, to any relative (partially qualified) host name containing
+ two or more labels. Appending ".local." to single-label relative
+ host names is acceptable, since the user should have no expectation
+ that a single-label host name will resolve as is. However, users who
+ have both "example.com" and "local" in their search lists should be
+ aware that if they type "www" into their web browser, it may not be
+ immediately clear to them whether the page that appears is
+ "www.example.com" or "www.local".
+
+ Multicast DNS uses UDP port 5353. On operating systems where only
+ privileged processes are allowed to use ports below 1024, no such
+ privilege is required to use port 5353.
+
+22. IANA Considerations
+
+ IANA has allocated the UDP port 5353 for the Multicast DNS protocol
+ described in this document [SN].
+
+ IANA has allocated the IPv4 link-local multicast address 224.0.0.251
+ for the use described in this document [MC4].
+
+ IANA has allocated the IPv6 multicast address set FF0X::FB (where "X"
+ indicates any hexadecimal digit from '1' to 'F') for the use
+ described in this document [MC6]. Only address FF02::FB (link-local
+ scope) is currently in use by deployed software, but it is possible
+ that in the future implementers may experiment with Multicast DNS
+ using larger-scoped addresses, such as FF05::FB (site-local scope)
+ [RFC4291].
+
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 53]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ IANA has implemented the following DNS records:
+
+ MDNS.MCAST.NET. IN A 224.0.0.251
+ 251.0.0.224.IN-ADDR.ARPA. IN PTR MDNS.MCAST.NET.
+
+ Entries for the AAAA and corresponding PTR records have not been made
+ as there is not yet an RFC providing direction for the management of
+ the IP6.ARPA domain relating to the IPv6 multicast address space.
+
+ The reuse of the top bit of the rrclass field in the Question and
+ Resource Record Sections means that Multicast DNS can only carry DNS
+ records with classes in the range 0-32767. Classes in the range
+ 32768 to 65535 are incompatible with Multicast DNS. IANA has noted
+ this fact, and if IANA receives a request to allocate a DNS class
+ value above 32767, IANA will make sure the requester is aware of this
+ implication before proceeding. This does not mean that allocations
+ of DNS class values above 32767 should be denied, only that they
+ should not be allowed until the requester has indicated that they are
+ aware of how this allocation will interact with Multicast DNS.
+ However, to date, only three DNS classes have been assigned by IANA
+ (1, 3, and 4), and only one (1, "Internet") is actually in widespread
+ use, so this issue is likely to remain a purely theoretical one.
+
+ IANA has recorded the list of domains below as being Special-Use
+ Domain Names [RFC6761]:
+
+ .local.
+ .254.169.in-addr.arpa.
+ .8.e.f.ip6.arpa.
+ .9.e.f.ip6.arpa.
+ .a.e.f.ip6.arpa.
+ .b.e.f.ip6.arpa.
+
+22.1. Domain Name Reservation Considerations
+
+ The six domains listed above, and any names falling within those
+ domains (e.g., "MyPrinter.local.", "34.12.254.169.in-addr.arpa.",
+ "Ink-Jet._pdl-datastream._tcp.local.") are special [RFC6761] in the
+ following ways:
+
+ 1. Users may use these names as they would other DNS names,
+ entering them anywhere that they would otherwise enter a
+ conventional DNS name, or a dotted decimal IPv4 address, or a
+ literal IPv6 address.
+
+ Since there is no central authority responsible for assigning
+ dot-local names, and all devices on the local network are
+ equally entitled to claim any dot-local name, users SHOULD be
+
+
+
+Cheshire & Krochmal Standards Track [Page 54]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ aware of this and SHOULD exercise appropriate caution. In an
+ untrusted or unfamiliar network environment, users SHOULD be
+ aware that using a name like "www.local" may not actually
+ connect them to the web site they expected, and could easily
+ connect them to a different web page, or even a fake or spoof
+ of their intended web site, designed to trick them into
+ revealing confidential information. As always with networking,
+ end-to-end cryptographic security can be a useful tool. For
+ example, when connecting with ssh, the ssh host key
+ verification process will inform the user if it detects that
+ the identity of the entity they are communicating with has
+ changed since the last time they connected to that name.
+
+ 2. Application software may use these names as they would other
+ similar DNS names, and is not required to recognize the names
+ and treat them specially. Due to the relative ease of spoofing
+ dot-local names, end-to-end cryptographic security remains
+ important when communicating across a local network, just as it
+ is when communicating across the global Internet.
+
+ 3. Name resolution APIs and libraries SHOULD recognize these names
+ as special and SHOULD NOT send queries for these names to their
+ configured (unicast) caching DNS server(s). This is to avoid
+ unnecessary load on the root name servers and other name
+ servers, caused by queries for which those name servers do not
+ have useful non-negative answers to give, and will not ever
+ have useful non-negative answers to give.
+
+ 4. Caching DNS servers SHOULD recognize these names as special and
+ SHOULD NOT attempt to look up NS records for them, or otherwise
+ query authoritative DNS servers in an attempt to resolve these
+ names. Instead, caching DNS servers SHOULD generate immediate
+ NXDOMAIN responses for all such queries they may receive (from
+ misbehaving name resolver libraries). This is to avoid
+ unnecessary load on the root name servers and other name
+ servers.
+
+ 5. Authoritative DNS servers SHOULD NOT by default be configurable
+ to answer queries for these names, and, like caching DNS
+ servers, SHOULD generate immediate NXDOMAIN responses for all
+ such queries they may receive. DNS server software MAY provide
+ a configuration option to override this default, for testing
+ purposes or other specialized uses.
+
+ 6. DNS server operators SHOULD NOT attempt to configure
+ authoritative DNS servers to act as authoritative for any of
+ these names. Configuring an authoritative DNS server to act as
+ authoritative for any of these names may not, in many cases,
+
+
+
+Cheshire & Krochmal Standards Track [Page 55]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ yield the expected result. Since name resolver libraries and
+ caching DNS servers SHOULD NOT send queries for those names
+ (see 3 and 4 above), such queries SHOULD be suppressed before
+ they even reach the authoritative DNS server in question, and
+ consequently it will not even get an opportunity to answer
+ them.
+
+ 7. DNS Registrars MUST NOT allow any of these names to be
+ registered in the normal way to any person or entity. These
+ names are reserved protocol identifiers with special meaning
+ and fall outside the set of names available for allocation by
+ registrars. Attempting to allocate one of these names as if it
+ were a normal domain name will probably not work as desired,
+ for reasons 3, 4, and 6 above.
+
+23. Acknowledgments
+
+ The concepts described in this document have been explored,
+ developed, and implemented with help from Ran Atkinson, Richard
+ Brown, Freek Dijkstra, Erik Guttman, Kyle McKay, Pasi Sarolahti,
+ Pekka Savola, Robby Simpson, Mark Townsley, Paul Vixie, Bill
+ Woodcock, and others. Special thanks go to Bob Bradley, Josh
+ Graessley, Scott Herscher, Rory McGuire, Roger Pantos, and Kiren
+ Sekar for their significant contributions. Special thanks also to
+ Kerry Lynn for converting the document to xml2rfc form in May 2010,
+ and to Area Director Ralph Droms for shepherding the document through
+ its final steps.
+
+24. References
+
+24.1. Normative References
+
+ [MC4] IANA, "IPv4 Multicast Address Space Registry",
+ <http://www.iana.org/assignments/multicast-addresses/>.
+
+ [MC6] IANA, "IPv6 Multicast Address Space Registry",
+ <http://www.iana.org/assignments/
+ ipv6-multicast-addresses/>.
+
+ [RFC0020] Cerf, V., "ASCII format for network interchange", RFC 20,
+ October 1969.
+
+ [RFC1034] Mockapetris, P., "Domain names - concepts and facilities",
+ STD 13, RFC 1034, November 1987.
+
+ [RFC1035] Mockapetris, P., "Domain names - implementation and
+ specification", STD 13, RFC 1035, November 1987.
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 56]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
+ Requirement Levels", BCP 14, RFC 2119, March 1997.
+
+ [RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO
+ 10646", STD 63, RFC 3629, November 2003.
+
+ [RFC4034] Arends, R., Austein, R., Larson, M., Massey, D., and S.
+ Rose, "Resource Records for the DNS Security Extensions",
+ RFC 4034, March 2005.
+
+ [RFC5198] Klensin, J. and M. Padlipsky, "Unicode Format for Network
+ Interchange", RFC 5198, March 2008.
+
+ [RFC6195] Eastlake 3rd, D., "Domain Name System (DNS) IANA
+ Considerations", BCP 42, RFC 6195, March 2011.
+
+ [RFC6761] Cheshire, S. and M. Krochmal, "Special-Use Domain Names",
+ RFC 6761, February 2013.
+
+ [SN] IANA, "Service Name and Transport Protocol Port Number
+ Registry", <http://www.iana.org/assignments/
+ service-names-port-numbers/>.
+
+24.2. Informative References
+
+ [B4W] "Bonjour for Windows",
+ <http://en.wikipedia.org/wiki/Bonjour_(software)>.
+
+ [BJ] Apple Bonjour Open Source Software,
+ <http://developer.apple.com/bonjour/>.
+
+ [IEEE.802.3]
+ "Information technology - Telecommunications and
+ information exchange between systems - Local and
+ metropolitan area networks - Specific requirements - Part
+ 3: Carrier Sense Multiple Access with Collision Detection
+ (CMSA/CD) Access Method and Physical Layer
+ Specifications", IEEE Std 802.3-2008, December 2008,
+ <http://standards.ieee.org/getieee802/802.3.html>.
+
+ [IEEE.802.11]
+ "Information technology - Telecommunications and
+ information exchange between systems - Local and
+ metropolitan area networks - Specific requirements - Part
+ 11: Wireless LAN Medium Access Control (MAC) and Physical
+ Layer (PHY) Specifications", IEEE Std 802.11-2007, June
+ 2007, <http://standards.ieee.org/getieee802/802.11.html>.
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 57]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ [Jumbo] "Ethernet Jumbo Frames", November 2009,
+ <http://www.ethernetalliance.org/library/whitepaper/
+ ethernet-jumbo-frames/>.
+
+ [NIAS] Cheshire, S. "Discovering Named Instances of Abstract
+ Services using DNS", Work in Progress, July 2001.
+
+ [NSD] "NsdManager | Android Developer", June 2012,
+ <http://developer.android.com/reference/
+ android/net/nsd/NsdManager.html>.
+
+ [RFC2052] Gulbrandsen, A. and P. Vixie, "A DNS RR for specifying the
+ location of services (DNS SRV)", RFC 2052, October 1996.
+
+ [RFC2132] Alexander, S. and R. Droms, "DHCP Options and BOOTP Vendor
+ Extensions", RFC 2132, March 1997.
+
+ [RFC2136] Vixie, P., Ed., Thomson, S., Rekhter, Y., and J. Bound,
+ "Dynamic Updates in the Domain Name System (DNS UPDATE)",
+ RFC 2136, April 1997.
+
+ [RFC2181] Elz, R. and R. Bush, "Clarifications to the DNS
+ Specification", RFC 2181, July 1997.
+
+ [RFC2535] Eastlake 3rd, D., "Domain Name System Security
+ Extensions", RFC 2535, March 1999.
+
+ [RFC2671] Vixie, P., "Extension Mechanisms for DNS (EDNS0)", RFC
+ 2671, August 1999.
+
+ [RFC2845] Vixie, P., Gudmundsson, O., Eastlake 3rd, D., and B.
+ Wellington, "Secret Key Transaction Authentication for DNS
+ (TSIG)", RFC 2845, May 2000.
+
+ [RFC2930] Eastlake 3rd, D., "Secret Key Establishment for DNS (TKEY
+ RR)", RFC 2930, September 2000.
+
+ [RFC2931] Eastlake 3rd, D., "DNS Request and Transaction Signatures
+ ( SIG(0)s )", RFC 2931, September 2000.
+
+ [RFC3007] Wellington, B., "Secure Domain Name System (DNS) Dynamic
+ Update", RFC 3007, November 2000.
+
+ [RFC3492] Costello, A., "Punycode: A Bootstring encoding of Unicode
+ for Internationalized Domain Names in Applications
+ (IDNA)", RFC 3492, March 2003.
+
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 58]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ [RFC3927] Cheshire, S., Aboba, B., and E. Guttman, "Dynamic
+ Configuration of IPv4 Link-Local Addresses", RFC 3927, May
+ 2005.
+
+ [RFC4033] Arends, R., Austein, R., Larson, M., Massey, D., and S.
+ Rose, "DNS Security Introduction and Requirements", RFC
+ 4033, March 2005.
+
+ [RFC4291] Hinden, R. and S. Deering, "IP Version 6 Addressing
+ Architecture", RFC 4291, February 2006.
+
+ [RFC4795] Aboba, B., Thaler, D., and L. Esibov, "Link-local
+ Multicast Name Resolution (LLMNR)", RFC 4795, January
+ 2007.
+
+ [RFC4861] Narten, T., Nordmark, E., Simpson, W., and H. Soliman,
+ "Neighbor Discovery for IP version 6 (IPv6)", RFC 4861,
+ September 2007.
+
+ [RFC4862] Thomson, S., Narten, T., and T. Jinmei, "IPv6 Stateless
+ Address Autoconfiguration", RFC 4862, September 2007.
+
+ [RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an
+ IANA Considerations Section in RFCs", BCP 26, RFC 5226,
+ May 2008.
+
+ [RFC5890] Klensin, J., "Internationalized Domain Names for
+ Applications (IDNA): Definitions and Document Framework",
+ RFC 5890, August 2010.
+
+ [RFC6281] Cheshire, S., Zhu, Z., Wakikawa, R., and L. Zhang,
+ "Understanding Apple's Back to My Mac (BTMM) Service", RFC
+ 6281, June 2011.
+
+ [RFC6760] Cheshire, S. and M. Krochmal, "Requirements for a Protocol
+ to Replace the AppleTalk Name Binding Protocol (NBP)", RFC
+ 6760, February 2013.
+
+ [RFC6763] Cheshire, S. and M. Krochmal, "DNS-Based Service
+ Discovery", RFC 6763, February 2013.
+
+ [Zeroconf] Cheshire, S. and D. Steinberg, "Zero Configuration
+ Networking: The Definitive Guide", O'Reilly Media, Inc.,
+ ISBN 0-596-10100-7, December 2005.
+
+
+
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 59]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+Appendix A. Design Rationale for Choice of UDP Port Number
+
+ Arguments were made for and against using UDP port 53, the standard
+ Unicast DNS port. Some of the arguments are given below. The
+ arguments for using a different port were greater in number and more
+ compelling, so that option was ultimately selected. The UDP port
+ "5353" was selected for its mnemonic similarity to "53".
+
+ Arguments for using UDP port 53:
+
+ * This is "just DNS", so it should be the same port.
+
+ * There is less work to be done updating old resolver libraries to do
+ simple Multicast DNS queries. Only the destination address need be
+ changed. In some cases, this can be achieved without any code
+ changes, just by adding the address 224.0.0.251 to a configuration
+ file.
+
+ Arguments for using a different port (UDP port 5353):
+
+ * This is not "just DNS". This is a DNS-like protocol, but
+ different.
+
+ * Changing resolver library code to use a different port number is
+ not hard. In some cases, this can be achieved without any code
+ changes, just by adding the address 224.0.0.251:5353 to a
+ configuration file.
+
+ * Using the same port number makes it hard to run a Multicast DNS
+ responder and a conventional Unicast DNS server on the same
+ machine. If a conventional Unicast DNS server wishes to implement
+ Multicast DNS as well, it can still do that, by opening two
+ sockets. Having two different port numbers allows this
+ flexibility.
+
+ * Some VPN software hijacks all outgoing traffic to port 53 and
+ redirects it to a special DNS server set up to serve those VPN
+ clients while they are connected to the corporate network. It is
+ questionable whether this is the right thing to do, but it is
+ common, and redirecting link-local multicast DNS packets to a
+ remote server rarely produces any useful results. It does mean,
+ for example, that a user of such VPN software becomes unable to
+ access their local network printer sitting on their desk right next
+ to their computer. Using a different UDP port helps avoid this
+ particular problem.
+
+
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 60]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ * On many operating systems, unprivileged software may not send or
+ receive packets on low-numbered ports. This means that any
+ software sending or receiving Multicast DNS packets on port 53
+ would have to run as "root", which is an undesirable security risk.
+ Using a higher-numbered UDP port avoids this restriction.
+
+Appendix B. Design Rationale for Not Using Hashed Multicast Addresses
+
+ Some discovery protocols use a range of multicast addresses, and
+ determine the address to be used by a hash function of the name being
+ sought. Queries are sent via multicast to the address as indicated
+ by the hash function, and responses are returned to the querier via
+ unicast. Particularly in IPv6, where multicast addresses are
+ extremely plentiful, this approach is frequently advocated. For
+ example, IPv6 Neighbor Discovery [RFC4861] sends Neighbor
+ Solicitation messages to the "solicited-node multicast address",
+ which is computed as a function of the solicited IPv6 address.
+
+ There are some disadvantages to using hashed multicast addresses like
+ this in a service discovery protocol:
+
+ * When a host has a large number of records with different names, the
+ host may have to join a large number of multicast groups. Each
+ time a host joins or leaves a multicast group, this results in
+ Internet Group Management Protocol (IGMP) or Multicast Listener
+ Discovery (MLD) traffic on the network announcing this fact.
+ Joining a large number of multicast groups can place undue burden
+ on the Ethernet hardware, which typically supports a limited number
+ of multicast addresses efficiently. When this number is exceeded,
+ the Ethernet hardware may have to resort to receiving all
+ multicasts and passing them up to the host networking code for
+ filtering in software, thereby defeating much of the point of using
+ a multicast address range in the first place. Finally, many IPv6
+ stacks have a fixed limit IPV6_MAX_MEMBERSHIPS, and the code simply
+ fails with an error if a client attempts to exceed this limit.
+ Common values for IPV6_MAX_MEMBERSHIPS are 20 or 31.
+
+ * Multiple questions cannot be placed in one packet if they don't all
+ hash to the same multicast address.
+
+ * Duplicate Question Suppression doesn't work if queriers are not
+ seeing each other's queries.
+
+ * Duplicate Answer Suppression doesn't work if responders are not
+ seeing each other's responses.
+
+ * Opportunistic Caching doesn't work.
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 61]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ * Ongoing Conflict Detection doesn't work.
+
+Appendix C. Design Rationale for Maximum Multicast DNS Name Length
+
+ Multicast DNS names may be up to 255 bytes long (in the on-the-wire
+ message format), not counting the terminating zero byte at the end.
+
+ "Domain Names - Implementation and Specification" [RFC1035] says:
+
+ Various objects and parameters in the DNS have size limits. They
+ are listed below. Some could be easily changed, others are more
+ fundamental.
+
+ labels 63 octets or less
+
+ names 255 octets or less
+
+ ...
+
+ the total length of a domain name (i.e., label octets and label
+ length octets) is restricted to 255 octets or less.
+
+ This text does not state whether this 255-byte limit includes the
+ terminating zero at the end of every name.
+
+ Several factors lead us to conclude that the 255-byte limit does
+ *not* include the terminating zero:
+
+ o It is common in software engineering to have size limits that are a
+ power of two, or a multiple of a power of two, for efficiency. For
+ example, an integer on a modern processor is typically 2, 4, or 8
+ bytes, not 3 or 5 bytes. The number 255 is not a power of two, nor
+ is it to most people a particularly noteworthy number. It is
+ noteworthy to computer scientists for only one reason -- because it
+ is exactly one *less* than a power of two. When a size limit is
+ exactly one less than a power of two, that suggests strongly that
+ the one extra byte is being reserved for some specific reason -- in
+ this case reserved, perhaps, to leave room for a terminating zero
+ at the end.
+
+ o In the case of DNS label lengths, the stated limit is 63 bytes. As
+ with the total name length, this limit is exactly one less than a
+ power of two. This label length limit also excludes the label
+ length byte at the start of every label. Including that extra
+ byte, a 63-byte label takes 64 bytes of space in memory or in a DNS
+ message.
+
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 62]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ o It is common in software engineering for the semantic "length" of
+ an object to be one less than the number of bytes it takes to store
+ that object. For example, in C, strlen("foo") is 3, but
+ sizeof("foo") (which includes the terminating zero byte at the end)
+ is 4.
+
+ o The text describing the total length of a domain name mentions
+ explicitly that label length and data octets are included, but does
+ not mention the terminating zero at the end. The zero byte at the
+ end of a domain name is not a label length. Indeed, the value zero
+ is chosen as the terminating marker precisely because it is not a
+ legal length byte value -- DNS prohibits empty labels. For
+ example, a name like "bad..name." is not a valid domain name
+ because it contains a zero-length label in the middle, which cannot
+ be expressed in a DNS message, because software parsing the message
+ would misinterpret a zero label-length byte as being a zero "end of
+ name" marker instead.
+
+ Finally, "Clarifications to the DNS Specification" [RFC2181] offers
+ additional confirmation that, in the context of DNS specifications,
+ the stated "length" of a domain name does not include the terminating
+ zero byte at the end. That document refers to the root name, which
+ is typically written as "." and is represented in a DNS message by a
+ single lone zero byte (i.e., zero bytes of data plus a terminating
+ zero), as the "zero length full name":
+
+ The zero length full name is defined as representing the root of
+ the DNS tree, and is typically written and displayed as ".".
+
+ This wording supports the interpretation that, in a DNS context, when
+ talking about lengths of names, the terminating zero byte at the end
+ is not counted. If the root name (".") is considered to be zero
+ length, then to be consistent, the length (for example) of "org" has
+ to be 4 and the length of "ietf.org" has to be 9, as shown below:
+
+ ------
+ | 0x00 | length = 0
+ ------
+
+ ------------------ ------
+ | 0x03 | o | r | g | | 0x00 | length = 4
+ ------------------ ------
+
+ ----------------------------------------- ------
+ | 0x04 | i | e | t | f | 0x03 | o | r | g | | 0x00 | length = 9
+ ----------------------------------------- ------
+
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 63]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ This means that the maximum length of a domain name, as represented
+ in a Multicast DNS message, up to but not including the final
+ terminating zero, must not exceed 255 bytes.
+
+ However, many Unicast DNS implementers have read these RFCs
+ differently, and argue that the 255-byte limit does include the
+ terminating zero, and that the "Clarifications to the DNS
+ Specification" [RFC2181] statement that "." is the "zero length full
+ name" was simply a mistake.
+
+ Hence, implementers should be aware that other Unicast DNS
+ implementations may limit the maximum domain name to 254 bytes plus a
+ terminating zero, depending on how that implementer interpreted the
+ DNS specifications.
+
+ Compliant Multicast DNS implementations MUST support names up to 255
+ bytes plus a terminating zero, i.e., 256 bytes total.
+
+Appendix D. Benefits of Multicast Responses
+
+ Some people have argued that sending responses via multicast is
+ inefficient on the network. In fact, using multicast responses can
+ result in a net lowering of overall multicast traffic for a variety
+ of reasons, and provides other benefits too:
+
+ * Opportunistic Caching. One multicast response can update the
+ caches on all machines on the network. If another machine later
+ wants to issue the same query, and it already has the answer in its
+ cache, it may not need to even transmit that multicast query on the
+ network at all.
+
+ * Duplicate Query Suppression. When more than one machine has the
+ same ongoing long-lived query running, every machine does not have
+ to transmit its own independent query. When one machine transmits
+ a query, all the other hosts see the answers, so they can suppress
+ their own queries.
+
+ * Passive Observation Of Failures (POOF). When a host sees a
+ multicast query, but does not see the corresponding multicast
+ response, it can use this information to promptly delete stale data
+ from its cache. To achieve the same level of user-interface
+ quality and responsiveness without multicast responses would
+ require lower cache lifetimes and more frequent network polling,
+ resulting in a higher packet rate.
+
+ * Passive Conflict Detection. Just because a name has been
+ previously verified to be unique does not guarantee it will
+ continue to be so indefinitely. By allowing all Multicast DNS
+
+
+
+Cheshire & Krochmal Standards Track [Page 64]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ responders to constantly monitor their peers' responses, conflicts
+ arising out of network topology changes can be promptly detected
+ and resolved. If responses were not sent via multicast, some other
+ conflict detection mechanism would be needed, imposing its own
+ additional burden on the network.
+
+ * Use on devices with constrained memory resources: When using
+ delayed responses to reduce network collisions, responders need to
+ maintain a list recording to whom each answer should be sent. The
+ option of multicast responses allows responders with limited
+ storage, which cannot store an arbitrarily long list of response
+ addresses, to choose to fail-over to a single multicast response in
+ place of multiple unicast responses, when appropriate.
+
+ * Overlayed Subnets. In the case of overlayed subnets, multicast
+ responses allow a receiver to know with certainty that a response
+ originated on the local link, even when its source address may
+ apparently suggest otherwise.
+
+ * Robustness in the face of misconfiguration: Link-local multicast
+ transcends virtually every conceivable network misconfiguration.
+ Even if you have a collection of devices where every device's IP
+ address, subnet mask, default gateway, and DNS server address are
+ all wrong, packets sent by any of those devices addressed to a
+ link-local multicast destination address will still be delivered to
+ all peers on the local link. This can be extremely helpful when
+ diagnosing and rectifying network problems, since it facilitates a
+ direct communication channel between client and server that works
+ without reliance on ARP, IP routing tables, etc. Being able to
+ discover what IP address a device has (or thinks it has) is
+ frequently a very valuable first step in diagnosing why it is
+ unable to communicate on the local network.
+
+Appendix E. Design Rationale for Encoding Negative Responses
+
+ Alternative methods of asserting nonexistence were considered, such
+ as using an NXDOMAIN response, or emitting a resource record with
+ zero-length rdata.
+
+ Using an NXDOMAIN response does not work well with Multicast DNS. A
+ Unicast DNS NXDOMAIN response applies to the entire message, but for
+ efficiency Multicast DNS allows (and encourages) multiple responses
+ in a single message. If the error code in the header were NXDOMAIN,
+ it would not be clear to which name(s) that error code applied.
+
+ Asserting nonexistence by emitting a resource record with zero-length
+ rdata would mean that there would be no way to differentiate between
+ a record that doesn't exist, and a record that does exist, with zero-
+
+
+
+Cheshire & Krochmal Standards Track [Page 65]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ length rdata. By analogy, most file systems today allow empty files,
+ so a file that exists with zero bytes of data is not considered
+ equivalent to a filename that does not exist.
+
+ A benefit of asserting nonexistence through NSEC records instead of
+ through NXDOMAIN responses is that NSEC records can be added to the
+ Additional Section of a DNS response to offer additional information
+ beyond what the querier explicitly requested. For example, in
+ response to an SRV query, a responder should include A record(s)
+ giving its IPv4 addresses in the Additional Section, and an NSEC
+ record indicating which other types it does or does not have for this
+ name. If the responder is running on a host that does not support
+ IPv6 (or does support IPv6 but currently has no IPv6 address on that
+ interface) then this NSEC record in the Additional Section will
+ indicate this absence of AAAA records. In effect, the responder is
+ saying, "Here's my SRV record, and here are my IPv4 addresses, and
+ no, I don't have any IPv6 addresses, so don't waste your time
+ asking". Without this information in the Additional Section, it
+ would take the querier an additional round-trip to perform an
+ additional query to ascertain that the target host has no AAAA
+ records. (Arguably Unicast DNS could also benefit from this ability
+ to express nonexistence in the Additional Section, but that is
+ outside the scope of this document.)
+
+Appendix F. Use of UTF-8
+
+ After many years of debate, as a result of the perceived need to
+ accommodate certain DNS implementations that apparently couldn't
+ handle any character that's not a letter, digit, or hyphen (and
+ apparently never would be updated to remedy this limitation), the
+ Unicast DNS community settled on an extremely baroque encoding called
+ "Punycode" [RFC3492]. Punycode is a remarkably ingenious encoding
+ solution, but it is complicated, hard to understand, and hard to
+ implement, using sophisticated techniques including insertion unsort
+ coding, generalized variable-length integers, and bias adaptation.
+ The resulting encoding is remarkably compact given the constraints,
+ but it's still not as good as simple straightforward UTF-8, and it's
+ hard even to predict whether a given input string will encode to a
+ Punycode string that fits within DNS's 63-byte limit, except by
+ simply trying the encoding and seeing whether it fits. Indeed, the
+ encoded size depends not only on the input characters, but on the
+ order they appear, so the same set of characters may or may not
+ encode to a legal Punycode string that fits within DNS's 63-byte
+ limit, depending on the order the characters appear. This is
+ extremely hard to present in a user interface that explains to users
+ why one name is allowed, but another name containing the exact same
+ characters is not. Neither Punycode nor any other of the "ASCII-
+ Compatible Encodings" [RFC5890] proposed for Unicast DNS may be used
+
+
+
+Cheshire & Krochmal Standards Track [Page 66]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ in Multicast DNS messages. Any text being represented internally in
+ some other representation must be converted to canonical precomposed
+ UTF-8 before being placed in any Multicast DNS message.
+
+Appendix G. Private DNS Namespaces
+
+ The special treatment of names ending in ".local." has been
+ implemented in Macintosh computers since the days of Mac OS 9, and
+ continues today in Mac OS X and iOS. There are also implementations
+ for Microsoft Windows [B4W], Linux, and other platforms.
+
+ Some network operators setting up private internal networks
+ ("intranets") have used unregistered top-level domains, and some may
+ have used the ".local" top-level domain. Using ".local" as a private
+ top-level domain conflicts with Multicast DNS and may cause problems
+ for users. Clients can be configured to send both Multicast and
+ Unicast DNS queries in parallel for these names, and this does allow
+ names to be looked up both ways, but this results in additional
+ network traffic and additional delays in name resolution, as well as
+ potentially creating user confusion when it is not clear whether any
+ given result was received via link-local multicast from a peer on the
+ same link, or from the configured unicast name server. Because of
+ this, we recommend against using ".local" as a private Unicast DNS
+ top-level domain. We do not recommend use of unregistered top-level
+ domains at all, but should network operators decide to do this, the
+ following top-level domains have been used on private internal
+ networks without the problems caused by trying to reuse ".local." for
+ this purpose:
+
+ .intranet.
+ .internal.
+ .private.
+ .corp.
+ .home.
+ .lan.
+
+Appendix H. Deployment History
+
+ In July 1997, in an email to the net-thinkers@thumper.vmeng.com
+ mailing list, Stuart Cheshire first proposed the idea of running the
+ AppleTalk Name Binding Protocol [RFC6760] over IP. As a result of
+ this and related IETF discussions, the IETF Zeroconf working group
+ was chartered September 1999. After various working group
+ discussions and other informal IETF discussions, several Internet-
+ Drafts were written that were loosely related to the general themes
+ of DNS and multicast, but did not address the service discovery
+ aspect of NBP.
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 67]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ In April 2000, Stuart Cheshire registered IPv4 multicast address
+ 224.0.0.251 with IANA [MC4] and began writing code to test and
+ develop the idea of performing NBP-like service discovery using
+ Multicast DNS, which was documented in a group of three Internet-
+ Drafts:
+
+ o "Requirements for a Protocol to Replace the AppleTalk Name Binding
+ Protocol (NBP)" [RFC6760] is an overview explaining the AppleTalk
+ Name Binding Protocol, because many in the IETF community had
+ little first-hand experience using AppleTalk, and confusion in the
+ IETF community about what AppleTalk NBP did was causing confusion
+ about what would be required in an IP-based replacement.
+
+ o "Discovering Named Instances of Abstract Services using DNS" [NIAS]
+ proposed a way to perform NBP-like service discovery using DNS-
+ compatible names and record types.
+
+ o "Multicast DNS" (this document) specifies a way to transport those
+ DNS-compatible queries and responses using IP multicast, for zero-
+ configuration environments where no conventional Unicast DNS server
+ was available.
+
+ In 2001, an update to Mac OS 9 added resolver library support for
+ host name lookup using Multicast DNS. If the user typed a name such
+ as "MyPrinter.local." into any piece of networking software that used
+ the standard Mac OS 9 name lookup APIs, then those name lookup APIs
+ would recognize the name as a dot-local name and query for it by
+ sending simple one-shot Multicast DNS queries to 224.0.0.251:5353.
+ This enabled the user to, for example, enter the name
+ "MyPrinter.local." into their web browser in order to view a
+ printer's status and configuration web page, or enter the name
+ "MyPrinter.local." into the printer setup utility to create a print
+ queue for printing documents on that printer.
+
+ Multicast DNS responder software, with full service discovery, first
+ began shipping to end users in volume with the launch of Mac OS X
+ 10.2 "Jaguar" in August 2002, and network printer makers (who had
+ historically supported AppleTalk in their network printers and were
+ receptive to IP-based technologies that could offer them similar
+ ease-of-use) started adopting Multicast DNS shortly thereafter.
+
+ In September 2002, Apple released the source code for the
+ mDNSResponder daemon as Open Source under Apple's standard Apple
+ Public Source License (APSL).
+
+ Multicast DNS responder software became available for Microsoft
+ Windows users in June 2004 with the launch of Apple's "Rendezvous for
+ Windows" (now "Bonjour for Windows"), both in executable form (a
+
+
+
+Cheshire & Krochmal Standards Track [Page 68]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+ downloadable installer for end users) and as Open Source (one of the
+ supported platforms within Apple's body of cross-platform code in the
+ publicly accessible mDNSResponder CVS source code repository) [BJ].
+
+ In August 2006, Apple re-licensed the cross-platform mDNSResponder
+ source code under the Apache License, Version 2.0.
+
+ In addition to desktop and laptop computers running Mac OS X and
+ Microsoft Windows, Multicast DNS is now implemented in a wide range
+ of hardware devices, such as Apple's "AirPort" wireless base
+ stations, iPhone and iPad, and in home gateways from other vendors,
+ network printers, network cameras, TiVo DVRs, etc.
+
+ The Open Source community has produced many independent
+ implementations of Multicast DNS, some in C like Apple's
+ mDNSResponder daemon, and others in a variety of different languages
+ including Java, Python, Perl, and C#/Mono.
+
+ In January 2007, the IETF published the Informational RFC "Link-Local
+ Multicast Name Resolution (LLMNR)" [RFC4795], which is substantially
+ similar to Multicast DNS, but incompatible in some small but
+ important ways. In particular, the LLMNR design explicitly excluded
+ support for service discovery, which made it an unsuitable candidate
+ for a protocol to replace AppleTalk NBP [RFC6760].
+
+ While the original focus of Multicast DNS and DNS-Based Service
+ Discovery was for zero-configuration environments without a
+ conventional Unicast DNS server, DNS-Based Service Discovery also
+ works using Unicast DNS servers, using DNS Update [RFC2136] [RFC3007]
+ to create service discovery records and standard DNS queries to query
+ for them. Apple's Back to My Mac service, launched with Mac OS X
+ 10.5 "Leopard" in October 2007, uses DNS-Based Service Discovery over
+ Unicast DNS [RFC6281].
+
+ In June 2012, Google's Android operating system added native support
+ for DNS-SD and Multicast DNS with the android.net.nsd.NsdManager
+ class in Android 4.1 "Jelly Bean" (API Level 16) [NSD].
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 69]
+\f
+RFC 6762 Multicast DNS February 2013
+
+
+Authors' Addresses
+
+ Stuart Cheshire
+ Apple Inc.
+ 1 Infinite Loop
+ Cupertino, CA 95014
+ USA
+
+ Phone: +1 408 974 3207
+ EMail: cheshire@apple.com
+
+
+ Marc Krochmal
+ Apple Inc.
+ 1 Infinite Loop
+ Cupertino, CA 95014
+ USA
+
+ Phone: +1 408 974 4368
+ EMail: marc@apple.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Cheshire & Krochmal Standards Track [Page 70]
+\f