From 25681df85706bbdc5d6ad011537b7b4f7d05cae5 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 3 Oct 2006 19:53:56 +0000 Subject: add updated specs to svn git-svn-id: file:///home/lennart/svn/public/avahi/trunk@1330 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe --- specs/draft-cheshire-dnsext-dns-sd-04.txt | 2205 ++++++++++++++++ specs/draft-cheshire-dnsext-multicastdns-06.txt | 3074 +++++++++++++++++++++++ 2 files changed, 5279 insertions(+) create mode 100644 specs/draft-cheshire-dnsext-dns-sd-04.txt create mode 100644 specs/draft-cheshire-dnsext-multicastdns-06.txt diff --git a/specs/draft-cheshire-dnsext-dns-sd-04.txt b/specs/draft-cheshire-dnsext-dns-sd-04.txt new file mode 100644 index 0000000..3179028 --- /dev/null +++ b/specs/draft-cheshire-dnsext-dns-sd-04.txt @@ -0,0 +1,2205 @@ +Document: draft-cheshire-dnsext-dns-sd-04.txt Stuart Cheshire +Internet-Draft Marc Krochmal +Category: Standards Track Apple Computer, Inc. +Expires 10th February 2007 10th August 2006 + + DNS-Based Service Discovery + + + +Status of this Memo + + By submitting this Internet-Draft, each author represents that any + applicable patent or other IPR claims of which he or she is aware + have been or will be disclosed, and any of which he or she becomes + aware will be disclosed, in accordance with Section 6 of BCP 79. + For the purposes of this document, the term "BCP 79" refers + exclusively to RFC 3979, "Intellectual Property Rights in IETF + Technology", published March 2005. + + Internet-Drafts are working documents of the Internet Engineering + Task Force (IETF), its areas, and its working groups. Note that + other groups may also distribute working documents as Internet- + Drafts. + + Internet-Drafts are draft documents valid for a maximum of six months + and may be updated, replaced, or obsoleted by other documents at any + time. It is inappropriate to use Internet-Drafts as reference + material or to cite them other than as "work in progress." + + The list of current Internet-Drafts can be accessed at + http://www.ietf.org/1id-abstracts.html + + The list of Internet-Draft Shadow Directories can be accessed at + http://www.ietf.org/shadow.html + + +Abstract + + This document describes a convention for naming and structuring DNS + resource records. Given a type of service that a client is looking + for, and a domain in which the client is looking for that service, + this convention allows clients to discover a list of named instances + of that desired service, using only standard DNS queries. In short, + this is referred to as DNS-based Service Discovery, or DNS-SD. + + + + + + + + + + + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 1] + +Internet Draft DNS-Based Service Discovery 10th August 2006 + + +Table of Contents + + 1. Introduction...................................................3 + 2. Conventions and Terminology Used in this Document..............4 + 3. Design Goals...................................................4 + 4. Service Instance Enumeration...................................5 + 4.1 Structured Instance Names......................................5 + 4.2 User Interface Presentation....................................7 + 4.3 Internal Handling of Names.....................................7 + 4.4 What You See Is What You Get...................................8 + 4.5 Ordering of Service Instance Name Components...................9 + 5. Service Name Resolution.......................................11 + 6. Data Syntax for DNS-SD TXT Records............................12 + 6.1 General Format Rules for DNS TXT Records......................12 + 6.2 DNS TXT Record Format Rules for use in DNS-SD.................13 + 6.3 DNS-SD TXT Record Size........................................14 + 6.4 Rules for Names in DNS-SD Name/Value Pairs....................14 + 6.5 Rules for Values in DNS-SD Name/Value Pairs...................16 + 6.6 Example TXT Record............................................17 + 6.7 Version Tag...................................................17 + 7. Application Protocol Names....................................18 + 7.1 Selective Instance Enumeration................................19 + 7.2 Service Name Length Limits....................................20 + 8. Flagship Naming...............................................22 + 9. Service Type Enumeration......................................23 + 10. Populating the DNS with Information...........................24 + 11. Relationship to Multicast DNS.................................24 + 12. Discovery of Browsing and Registration Domains................25 + 13. DNS Additional Record Generation..............................26 + 14. Comparison with Alternative Service Discovery Protocols.......27 + 15. Real Examples.................................................29 + 16. User Interface Considerations.................................30 + 16.1 Service Advertising User-Interface Considerations.............30 + 16.2 Client Browsing User-Interface Considerations.................31 + 17. IPv6 Considerations...........................................34 + 18. Security Considerations.......................................34 + 19. IANA Considerations...........................................34 + 20. Acknowledgments...............................................35 + 21. Deployment History............................................35 + 22. Copyright Notice..............................................36 + 23. Normative References..........................................37 + 24. Informative References........................................37 + 25. Authors' Addresses............................................38 + + + + + + + + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 2] + +Internet Draft DNS-Based Service Discovery 10th August 2006 + + +1. Introduction + + This document describes a convention for naming and structuring DNS + resource records. Given a type of service that a client is looking + for, and a domain in which the client is looking for that service, + this convention allows clients to discover a list of named instances + of a that desired service, using only standard DNS queries. In short, + this is referred to as DNS-based Service Discovery, or DNS-SD. + + This document proposes no change to the structure of DNS messages, + and no new operation codes, response codes, resource record types, + or any other new DNS protocol values. This document simply proposes + a convention for how existing resource record types can be named and + structured to facilitate service discovery. + + This proposal is entirely compatible with today's existing unicast + DNS server and client software. + + Note that the DNS-SD service does NOT have to be provided by the same + DNS server hardware that is currently providing an organization's + conventional host name lookup service (the service we traditionally + think of when we say "DNS"). By delegating the "_tcp" subdomain, + all the workload related to DNS-SD can be offloaded to a different + machine. This flexibility, to handle DNS-SD on the main DNS server, + or not, at the network administrator's discretion, is one of the + things that makes DNS-SD so compelling. + + Even when the DNS-SD functions are delegated to a different machine, + the benefits of using DNS remain: It is mature technology, well + understood, with multiple independent implementations from different + vendors, a wide selection of books published on the subject, and an + established workforce experienced in its operation. In contrast, + adopting some other service discovery technology would require every + site in the world to install, learn, configure, operate and maintain + some entirely new and unfamiliar server software. Faced with these + obstacles, it seems unlikely that any other service discovery + technology could hope to compete with the ubiquitous deployment + that DNS already enjoys. + + This proposal is also compatible with (but not dependent on) the + proposal outlined in "Multicast DNS" [mDNS]. + + + + + + + + + + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 3] + +Internet Draft DNS-Based Service Discovery 10th August 2006 + + +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" [RFC 2119]. + + +3. Design Goals + + A good service discovery protocol needs to have many properties, + three of which are mentioned below: + + (i) The ability to query for services of a certain type in a certain + logical domain and receive in response a list of named instances + (network browsing, or "Service Instance Enumeration"). + + (ii) Given a particular named instance, the ability to efficiently + resolve that instance name to the required information a client needs + to actually use the service, i.e. IP address and port number, at the + very least (Service Name Resolution). + + (iii) Instance names should be relatively persistent. If a user + selects their default printer from a list of available choices today, + then tomorrow they should still be able to print on that printer -- + even if the IP address and/or port number where the service resides + have changed -- without the user (or their software) having to repeat + the network browsing step a second time. + + In addition, if it is to become successful, a service discovery + protocol should be so simple to implement that virtually any + device capable of implementing IP should not have any trouble + implementing the service discovery software as well. + + These goals are discussed in more detail in the remainder of this + document. A more thorough treatment of service discovery requirements + may be found in "Requirements for a Protocol to Replace AppleTalk + NBP" [NBP]. That document draws upon examples from two decades of + operational experience with AppleTalk Name Binding Protocol to + develop a list of universal requirements which are broadly + applicable to any potential service discovery protocol. + + + + + + + + + + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 4] + +Internet Draft DNS-Based Service Discovery 10th August 2006 + + +4. Service Instance Enumeration + + DNS SRV records [RFC 2782] are useful for locating instances of a + particular type of service when all the instances are effectively + indistinguishable and provide the same service to the client. + + For example, SRV records with the (hypothetical) name + "_http._tcp.example.com." would allow a client to discover a list of + all servers implementing the "_http._tcp" service (i.e. Web servers) + for the "example.com." domain. The unstated assumption is that all + these servers offer an identical set of Web pages, and it doesn't + matter to the client which of the servers it uses, as long as it + selects one at random according to the weight and priority rules + laid out in RFC 2782. + + Instances of other kinds of service are less easily interchangeable. + If a word processing application were to look up the (hypothetical) + SRV record "_ipp._tcp.example.com." to find the list of IPP printers + at Example Co., then picking one at random and printing on it would + probably not be what the user wanted. + + The remainder of this section describes how SRV records may be used + in a slightly different way to allow a user to discover the names + of all available instances of a given type of service, in order to + select the particular instance the user desires. + + +4.1 Structured Instance Names + + This document borrows the logical service naming syntax and semantics + from DNS SRV records, but adds one level of indirection. Instead of + requesting records of type "SRV" with name "_ipp._tcp.example.com.", + the client requests records of type "PTR" (pointer from one name to + another in the DNS namespace). + + In effect, if one thinks of the domain name "_ipp._tcp.example.com." + as being analogous to an absolute path to a directory in a file + system then the PTR lookup is akin to performing a listing of that + directory to find all the files it contains. (Remember that domain + names are expressed in reverse order compared to path names: An + absolute path name is read from left to right, beginning with a + leading slash on the left, and then the top level directory, then + the next level directory, and so on. A fully-qualified domain name is + read from right to left, beginning with the dot on the right -- the + root label -- and then the top level domain to the left of that, and + the second level domain to the left of that, and so on. If the fully- + qualified domain name "_ipp._tcp.example.com." were expressed as a + file system path name, it would be "/com/example/_tcp/_ipp".) + + + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 5] + +Internet Draft DNS-Based Service Discovery 10th August 2006 + + + The result of this PTR lookup for the name "." is a + list of zero or more PTR records giving Service Instance Names of the + form: + + Service Instance Name = . . + + The portion of the Service Instance Name is a single DNS + label, containing arbitrary precomposed UTF-8-encoded text [RFC + 3629]. It is a user-friendly name, meaning that it is allowed to + contain any characters, without restriction, including spaces, upper + case, lower case, punctuation -- including dots -- accented + characters, non-roman text, and anything else that may be represented + using UTF-8. DNS recommends guidelines for allowable characters for + host names [RFC 1033][RFC 1034][RFC 1035], but Service Instance Names + are not host names. Service Instance Names are not intended to ever + be typed in by a normal user; the user selects a Service Instance + Name by selecting it from a list of choices presented on the screen. + + Note that just because this protocol supports arbitrary UTF-8-encoded + names doesn't mean that any particular user or administrator is + obliged to make use of that capability. Any user is free, if they + wish, to continue naming their services using only letters, digits + and hyphens, with no spaces, capital letters, or other punctuation. + + DNS labels are currently limited to 63 octets in length. UTF-8 + encoding can require up to four octets per Unicode character, which + means that in the worst case, the portion of a name could + be limited to fifteen Unicode characters. However, the Unicode + characters with longer UTF-8 encodings tend to be the more obscure + ones, and tend to be the ones that convey greater meaning per + character. + + Note that any character in the commonly-used 16-bit Unicode space + can be encoded with no more than three octets of UTF-8 encoding. This + means that an Instance name can contain up to 21 Kanji characters, + which is a sufficiently expressive name for most purposes. + + The portion of the Service Instance Name consists of a pair + of DNS labels, following the established convention for SRV records + [RFC 2782], namely: the first label of the pair is the Application + Protocol Name, and the second label is either "_tcp" or "_udp", + depending on the transport protocol used by the application. + More details are given in Section 7, "Application Protocol Names". + + The portion of the Service Instance Name specifies the DNS + subdomain within which the service names are registered. It may be + "local", meaning "link-local Multicast DNS" [mDNS], or it may be + a conventional unicast DNS domain name, such as "apple.com.", + "cs.stanford.edu.", or "eng.us.ibm.com." Because service names are + not host names, they are not constrained by the usual rules for host + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 6] + +Internet Draft DNS-Based Service Discovery 10th August 2006 + + + names [RFC 1033][RFC 1034][RFC 1035], and rich-text service + subdomains are allowed and encouraged, for example: + + Building 2, 1st Floor.apple.com. + Building 2, 2nd Floor.apple.com. + Building 2, 3rd Floor.apple.com. + Building 2, 4th Floor.apple.com. + + In addition, because Service Instance Names are not constrained by + the limitations of host names, this document recommends that they + be stored in the DNS, and communicated over the wire, encoded as + straightforward canonical precomposed UTF-8, Unicode Normalization + Form C [UAX15]. In cases where the DNS server returns an NXDOMAIN + error for the name in question, client software MAY choose to retry + the query using "Punycode" [RFC 3492] encoding, if possible. + + +4.2 User Interface Presentation + + The names resulting from the PTR lookup are presented to the user in + a list for the user to select one (or more). Typically only the first + label is shown (the user-friendly portion of the name). In + the common case, the and are already known to the + user, these having been provided by the user in the first place, by + the act of indicating the service being sought, and the domain in + which to look for it. Note: The software handling the response + should be careful not to make invalid assumptions though, since it + *is* possible, though rare, for a service enumeration in one domain + to return the names of services in a different domain. Similarly, + when using subtypes (see "Selective Instance Enumeration") the + of the discovered instance my not be exactly the same as + the that was requested. + + Having chosen the desired named instance, the Service Instance + Name may then be used immediately, or saved away in some persistent + user-preference data structure for future use, depending on what is + appropriate for the application in question. + + +4.3 Internal Handling of Names + + If the , and portions are internally + concatenated together into a single string, then care must be taken + with the portion, since it is allowed to contain any + characters, including dots. + + Any dots in the portion should be escaped by preceding + them with a backslash ("." becomes "\."). Likewise, any backslashes + in the portion should also be escaped by preceding them + with a backslash ("\" becomes "\\"). Having done this, the three + components of the name may be safely concatenated. The backslash- + + +Expires 10th February 2007 Cheshire & Krochmal [Page 7] + +Internet Draft DNS-Based Service Discovery 10th August 2006 + + + escaping allows literal dots in the name (escaped) to be + distinguished from label-separator dots (not escaped). + + The resulting concatenated string may be safely passed to standard + DNS APIs like res_query(), which will interpret the string correctly + provided it has been escaped correctly, as described here. + + +4.4 What You See Is What You Get + + Some service discovery protocols decouple the true service identifier + from the name presented to the user. The true service identifier used + by the protocol is an opaque unique id, often represented using a + long string of hexadecimal digits, and should never be seen by the + typical user. The name presented to the user is merely one of the + ephemeral attributes attached to this opaque identifier. + + The problem with this approach is that it decouples user perception + from reality: + + * What happens if there are two service instances, with different + unique ids, but they have inadvertently been given the same + user-visible name? If two instances appear in an on-screen list + with the same name, how does the user know which is which? + + * Suppose a printer breaks down, and the user replaces it with + another printer of the same make and model, and configures the + new printer with the exact same name as the one being replaced: + "Stuart's Printer". Now, when the user tries to print, the + on-screen print dialog tells them that their selected default + printer is "Stuart's Printer". When they browse the network to see + what is there, they see a printer called "Stuart's Printer", yet + when the user tries to print, they are told that the printer + "Stuart's Printer" can't be found. The hidden internal unique id + that the software is trying to find on the network doesn't match + the hidden internal unique id of the new printer, even though its + apparent "name" and its logical purpose for being there are the + same. To remedy this, the user typically has to delete the print + queue they have created, and then create a new (apparently + identical) queue for the new printer, so that the new queue will + contain the right hidden internal unique id. Having all this hidden + information that the user can't see makes for a confusing and + frustrating user experience, and exposing long ugly hexadecimal + strings to the user and forcing them to understand what they mean + is even worse. + + * Suppose an existing printer is moved to a new department, and given + a new name and a new function. Changing the user-visible name of + that piece of hardware doesn't change its hidden internal unique + id. Users who had previously created print queues for that printer + will still be accessing the same hardware by its unique id, even + + +Expires 10th February 2007 Cheshire & Krochmal [Page 8] + +Internet Draft DNS-Based Service Discovery 10th August 2006 + + + though the logical service that used to be offered by that hardware + has ceased to exist. + + To solve these problems requires the user or administrator to be + aware of the supposedly hidden unique id, and to set its value + correctly as hardware is moved around, repurposed, or replaced, + thereby contradicting the notion that it is a hidden identifier that + human users never need to deal with. Requiring the user to understand + this expert behind-the-scenes knowledge of what is *really* going on + is just one more burden placed on the user when they are trying to + diagnose why their computers and network devices are not working as + expected. + + These anomalies and counter-intuitive behaviors can be eliminated by + maintaining a tight bidirectional one-to-one mapping between what + the user sees on the screen and what is really happening "behind + the curtain". If something is configured incorrectly, then that is + apparent in the familiar day-to-day user interface that everyone + understands, not in some little-known rarely-used "expert" interface. + + In summary: The user-visible name is the primary identifier for a + service. If the user-visible name is changed, then conceptually + the service being offered is a different logical service -- even + though the hardware offering the service stayed the same. If the + user-visible name doesn't change, then conceptually the service being + offered is the same logical service -- even if the hardware offering + the service is new hardware brought in to replace some old equipment. + + There are certainly arguments on both sides of this debate. + Nonetheless, the designers of any service discovery protocol have + to make a choice between between having the primary identifiers be + hidden, or having them be visible, and these are the reasons that + we chose to make them visible. We're not claiming that there are no + disadvantages of having primary identifiers be visible. We considered + both alternatives, and we believe that the few disadvantages + of visible identifiers are far outweighed by the many problems + caused by use of hidden identifiers. + + +4.5 Ordering of Service Instance Name Components + + There have been questions about why services are named using DNS + Service Instance Names of the form: + + Service Instance Name = . . + + instead of: + + Service Instance Name = . . + + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 9] + +Internet Draft DNS-Based Service Discovery 10th August 2006 + + + There are three reasons why it is beneficial to name service + instances with the parent domain as the most-significant (rightmost) + part of the name, then the abstract service type as the next-most + significant, and then the specific instance name as the + least-significant (leftmost) part of the name: + + +4.5.1. Semantic Structure + + The facility being provided by browsing ("Service Instance + Enumeration") is effectively enumerating the leaves of a tree + structure. A given domain offers zero or more services. For each + of those service types, there may be zero or more instances of + that service. + + The user knows what type of service they are seeking. (If they are + running an FTP client, they are looking for FTP servers. If they have + a document to print, they are looking for entities that speak some + known printing protocol.) The user knows in which organizational or + geographical domain they wish to search. (The user does not want a + single flat list of every single printer on the planet, even if such + a thing were possible.) What the user does not know in advance is + whether the service they seek is offered in the given domain, or if + so, how many instances are offered, and the names of those instances. + Hence having the instance names be the leaves of the tree is + consistent with this semantic model. + + Having the service types be the terminal leaves of the tree would + imply that the user knows the domain name, and already knows the + name of the service instance, but doesn't have any idea what the + service does. We would argue that this is a less useful model. + + +4.5.2. Network Efficiency + + When a DNS response contains multiple answers, name compression works + more effectively if all the names contain a common suffix. If many + answers in the packet have the same and , then each + occurrence of a Service Instance Name can be expressed using only + the part followed by a two-byte compression pointer + referencing a previous appearance of ".". This + efficiency would not be possible if the component appeared + first in each name. + + +4.5.3. Operational Flexibility + + This name structure allows subdomains to be delegated along logical + service boundaries. For example, the network administrator at Example + Co. could choose to delegate the "_tcp.example.com." subdomain to a + different machine, so that the machine handling service discovery + + +Expires 10th February 2007 Cheshire & Krochmal [Page 10] + +Internet Draft DNS-Based Service Discovery 10th August 2006 + + + doesn't have to be the same as the machine handling other day-to-day + DNS operations. (It *can* be the same machine if the administrator so + chooses, but the point is that the administrator is free to make that + choice.) Furthermore, if the network administrator wishes to delegate + all information related to IPP printers to a machine dedicated to + that specific task, this is easily done by delegating the + "_ipp._tcp.example.com." subdomain to the desired machine. It is + also convenient to set security policies on a per-zone/per-subdomain + basis. For example, the administrator may choose to enable DNS + Dynamic Update [RFC 2136] [RFC 3007] for printers registering + in the "_ipp._tcp.example.com." subdomain, but not for other + zones/subdomains. This easy flexibility would not exist if the + component appeared first in each name. + + +5. Service Name Resolution + + Given a particular Service Instance Name, when a client needs to + contact that service, it sends a DNS query for the SRV record of + that name. + + The result of the DNS query is a SRV record giving the port number + and target host where the service may be found. + + The use of SRV records is very important. There are only 65535 TCP + port numbers available. These port numbers are being allocated + one-per-application-protocol at an alarming rate. Some protocols + like the X Window System have a block of 64 TCP ports allocated + (6000-6063). If we start allocating blocks of 64 TCP ports at a time, + we will run out even faster. Using a different TCP port for each + different instance of a given service on a given machine is entirely + sensible, but allocating large static ranges, as was done for X, is a + very inefficient way to manage a limited resource. On any given host, + most TCP ports are reserved for services that will never run on that + particular host. This is very poor utilization of the limited port + space. Using SRV records allows each host to allocate its available + port numbers dynamically to those services running on that host that + need them, and then advertise the allocated port numbers via SRV + records. Allocating the available listening port numbers locally + on a per-host basis as needed allows much better utilization of the + available port space than today's centralized global allocation. + + In some environments there may be no compelling reason to assign + managed names to every host, since every available service is + accessible by name anyway, as a first-class entity in its own right. + However, the DNS packet format and record format still require a host + name to link the target host referenced in the SRV record to the + address records giving the IPv4 and/or IPv6 addresses for that + hardware. In the case where no natural host name is available, the + SRV record may give its own name as the name of the target host, and + then the requisite address records may be attached to that same name. + + +Expires 10th February 2007 Cheshire & Krochmal [Page 11] + +Internet Draft DNS-Based Service Discovery 10th August 2006 + + + It is perfectly permissible for a single name in the DNS hierarchy + to have multiple records of different type attached. (The only + restriction being that a given name may not have both a CNAME record + and other records at the same time.) + + In the event that more than one SRV is returned, clients MUST + correctly interpret the priority and weight fields -- i.e. Lower + numbered priority servers should be used in preference to higher + numbered priority servers, and servers with equal priority should be + selected randomly in proportion to their relative weights. However, + in the overwhelmingly common case, a single advertised DNS-SD service + instance is described by exactly one SRV record, and in this common + case the priority and weight fields of the SRV record SHOULD both be + set to zero. + + +6. Data Syntax for DNS-SD TXT Records + + Some services discovered via Service Instance Enumeration may need + more than just an IP address and port number to properly identify the + service. For example, printing via the LPR protocol often specifies a + queue name. This queue name is typically short and cryptic, and need + not be shown to the user. It should be regarded the same way as the + IP address and port number -- it is one component of the addressing + information required to identify a specific instance of a service + being offered by some piece of hardware. Similarly, a file server may + have multiple volumes, each identified by its own volume name. A Web + server typically has multiple pages, each identified by its own URL. + In these cases, the necessary additional data is stored in a TXT + record with the same name as the SRV record. The specific nature of + that additional data, and how it is to be used, is service-dependent, + but the overall syntax of the data in the TXT record is standardized, + as described below. Every DNS-SD service MUST have a TXT record in + addition to its SRV record, with same name, even if the service has + no additional data to store and the TXT record contains no more than + a single zero byte. + + +6.1 General Format Rules for DNS TXT Records + + A DNS TXT record can be up to 65535 (0xFFFF) bytes long. The total + length is indicated by the length given in the resource record header + in the DNS message. There is no way to tell directly from the data + alone how long it is (e.g. there is no length count at the start, or + terminating NULL byte at the end). (Note that when using Multicast + DNS [mDNS] the maximum packet size is 9000 bytes, which imposes an + upper limit on the size of TXT records of about 8800 bytes.) + + The format of the data within a DNS TXT record is one or more + strings, packed together in memory without any intervening gaps + or padding bytes for word alignment. + + +Expires 10th February 2007 Cheshire & Krochmal [Page 12] + +Internet Draft DNS-Based Service Discovery 10th August 2006 + + + The format of each constituent string within the DNS TXT record is a + single length byte, followed by 0-255 bytes of text data. + + These format rules are defined in Section 3.3.14 of RFC 1035, and are + not specific to DNS-SD. DNS-SD simply specifies a usage convention + for what data should be stored in those constituent strings. + + An empty TXT record containing zero strings is disallowed by RFC + 1035. DNS-SD implementations MUST NOT emit empty TXT records. + DNS-SD implementations receiving empty TXT records MUST treat them + as equivalent to a one-byte TXT record containing a single zero byte + (i.e. a single empty string). + + +6.2 DNS TXT Record Format Rules for use in DNS-SD + + DNS-SD uses DNS TXT records to store arbitrary name/value pairs + conveying additional information about the named service. Each + name/value pair is encoded as its own constituent string within the + DNS TXT record, in the form "name=value". Everything up to the first + '=' character is the name. Everything after the first '=' character + to the end of the string (including subsequent '=' characters, if + any) is the value. Specific rules governing names and values are + given below. Each author defining a DNS-SD profile for discovering + instances of a particular type of service should define the base set + of name/value attributes that are valid for that type of service. + + Using this standardized name/value syntax within the TXT record makes + it easier for these base definitions to be expanded later by defining + additional named attributes. If an implementation sees unknown + attribute names in a service TXT record, it MUST silently ignore + them. + + The TCP (or UDP) port number of the service, and target host name, + are given in the SRV record. This information -- target host name and + port number -- MUST NOT be duplicated using name/value attributes in + the TXT record. + + The intention of DNS-SD TXT records is to convey a small amount of + useful additional information about a service. Ideally it SHOULD NOT + be necessary for a client to retrieve this additional information + before it can usefully establish a connection to the service. For a + well-designed TCP-based application protocol, it should be possible, + knowing only the host name and port number, to open a connection + to that listening process, and then perform version- or feature- + negotiation to determine the capabilities of the service instance. + For example, when connecting to an AppleShare server over TCP, the + client enters into a protocol exchange with the server to determine + which version of the AppleShare protocol the server implements, and + which optional features or capabilities (if any) are available. For a + well-designed application protocol, clients should be able to connect + + +Expires 10th February 2007 Cheshire & Krochmal [Page 13] + +Internet Draft DNS-Based Service Discovery 10th August 2006 + + + and use the service even if there is no information at all in the TXT + record. In this case, the information in the TXT record should be + viewed as a performance optimization -- when a client discovers many + instances of a service, the TXT record allows the client to know some + rudimentary information about each instance without having to open a + TCP connection to each one and interrogate every service instance + separately. Extreme care should be taken when doing this to ensure + that the information in the TXT record is in agreement with the + information retrieved by a client connecting over TCP. + + There are legacy protocols which provide no feature negotiation + capability, and in these cases it may be useful to convey necessary + information in the TXT record. For example, when printing using the + old Unix LPR (port 515) protocol, the LPR service provides no way + for the client to determine whether a particular printer accepts + PostScript, or what version of PostScript, etc. In this case it is + appropriate to embed this information in the TXT record, because the + alternative is worse -- passing around written instructions to the + users, arcane manual configuration of "/etc/printcap" files, etc. + + +6.3 DNS-SD TXT Record Size + + The total size of a typical DNS-SD TXT record is intended to be small + -- 200 bytes or less. + + In cases where more data is justified (e.g. LPR printing), keeping + the total size under 400 bytes should allow it to fit in a single + standard 512-byte DNS message. (This standard DNS message size is + defined in RFC 1035.) + + In extreme cases where even this is not enough, keeping the size of + the TXT record under 1300 bytes should allow it to fit in a single + 1500-byte Ethernet packet. + + Using TXT records larger than 1300 bytes is NOT RECOMMENDED at this + time. + + +6.4 Rules for Names in DNS-SD Name/Value Pairs + + The "Name" MUST be at least one character. Strings beginning with an + '=' character (i.e. the name is missing) SHOULD be silently ignored. + + The characters of "Name" MUST be printable US-ASCII values + (0x20-0x7E), excluding '=' (0x3D). + + Spaces in the name are significant, whether leading, trailing, or in + the middle -- so don't include any spaces unless you really intend + that! + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 14] + +Internet Draft DNS-Based Service Discovery 10th August 2006 + + + Case is ignored when interpreting a name, so "papersize=A4", + "PAPERSIZE=A4" and "Papersize=A4" are all identical. + + If there is no '=', then it is a boolean attribute, and is simply + identified as being present, with no value. + + A given attribute name may appear at most once in a TXT record. + The reason for this simplifying rule is to facilitate the creation + of client libraries that parse the TXT record into an internal data + structure, such as a hash table or dictionary object that maps from + names to values, and then make that abstraction available to client + code. The rule that a given attribute name may not appear more than + once simplifies these abstractions because they aren't required to + support the case of returning more than one value for a given key. + + If a client receives a TXT record containing the same attribute name + more than once, then the client MUST silently ignore all but the + first occurrence of that attribute. For client implementations that + process a DNS-SD TXT record from start to end, placing name/value + pairs into a hash table, using the name as the hash table key, this + means that if the implementation attempts to add a new name/value + pair into the table and finds an entry with the same name already + present, then the new entry being added should be silently discarded + instead. For client implementations that retrieve name/value pairs by + searching the TXT record for the requested name, they should search + the TXT record from the start, and simply return the first matching + name they find. + + When examining a TXT record for a given named attribute, there are + therefore four broad categories of results which may be returned: + + * Attribute not present (Absent) + + * Attribute present, with no value + (e.g. "Anon Allowed" -- server allows anonymous connections) + + * Attribute present, with empty value (e.g. "Installed PlugIns=" -- + server supports plugins, but none are presently installed) + + * Attribute present, with non-empty value + (e.g. "Installed PlugIns=JPEG,MPEG2,MPEG4") + + Each author defining a DNS-SD profile for discovering instances of a + particular type of service should define the interpretation of these + different kinds of result. For example, for some keys, there may be + a natural true/false boolean interpretation: + + * Present implies 'true' + * Absent implies 'false' + + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 15] + +Internet Draft DNS-Based Service Discovery 10th August 2006 + + + For other keys it may be sensible to define other semantics, such as + value/no-value/unknown: + + * Present with value implies that value. + E.g. "Color=4" for a four-color ink-jet printer, + or "Color=6" for a six-color ink-jet printer. + + * Present with empty value implies 'false'. E.g. Not a color printer. + + * Absent implies 'Unknown'. E.g. A print server connected to some + unknown printer where the print server doesn't actually know if the + printer does color or not -- which gives a very bad user experience + and should be avoided wherever possible. + + (Note that this is a hypothetical example, not an example of actual + name/value keys used by DNS-SD network printers.) + + As a general rule, attribute names that contain no dots are defined + as part of the open-standard definition written by the person or + group defining the DNS-SD profile for discovering that particular + service type. Vendor-specific extensions should be given names of the + form "keyname.company.com=value", using a domain name legitimately + registered to the person or organization creating the vendor-specific + key. This reduces the risk of accidental conflict if different + organizations each define their own vendor-specific keys. + + +6.5 Rules for Values in DNS-SD Name/Value Pairs + + If there is an '=', then everything after the first '=' to the end + of the string is the value. The value can contain any eight-bit + values including '='. Leading or trailing spaces are part of the + value, so don't put them there unless you intend them to be there. + Any quotation marks around the value are part of the value, so don't + put them there unless you intend them to be part of the value. + + The value is opaque binary data. Often the value for a particular + attribute will be US-ASCII (or UTF-8) text, but it is legal for a + value to be any binary data. For example, if the value of a key is an + IPv4 address, that address should simply be stored as four bytes of + binary data, not as a variable-length 7-15 byte ASCII string giving + the address represented in textual dotted decimal notation. + + Generic debugging tools should generally display all attribute values + as a hex dump, with accompanying text alongside displaying the UTF-8 + interpretation of those bytes, except for attributes where the + debugging tool has embedded knowledge that the value is some other + kind of data. + + Authors defining DNS-SD profiles SHOULD NOT convert binary attribute + data types into printable text (e.g. using hexadecimal, Base-64 or UU + + +Expires 10th February 2007 Cheshire & Krochmal [Page 16] + +Internet Draft DNS-Based Service Discovery 10th August 2006 + + + encoding) merely for the sake of making the data be printable text + when seen in a generic debugging tool. Doing this simply bloats the + size of the TXT record, without actually making the data any more + understandable to someone looking at it in a generic debugging tool. + + +6.6 Example TXT Record + + The TXT record below contains three syntactically valid name/value + pairs. (The meaning of these name/value pairs, if any, would depend + on the definitions pertaining to the service in question that is + using them.) + + --------------------------------------------------------------- + | 0x0A | name=value | 0x08 | paper=A4 | 0x0E | DNS-SD Is Cool | + --------------------------------------------------------------- + + +6.7 Version Tag + + It is recommended that authors defining DNS-SD profiles include an + attribute of the form "txtvers=xxx" in their definition, and require + it to be the first name/value pair in the TXT record. This + information in the TXT record can be useful to help clients maintain + backwards compatibility with older implementations if it becomes + necessary to change or update the specification over time. Even if + the profile author doesn't anticipate the need for any future + incompatible changes, having a version number in the specification + provides useful insurance should incompatible changes become + unavoidable. Clients SHOULD ignore TXT records with a txtvers number + higher (or lower) than the version(s) they know how to interpret. + + Note that the version number in the txtvers tag describes the version + of the TXT record specification being used to create this TXT record, + not the version of the application protocol that will be used if the + client subsequently decides to contact that service. Ideally, every + DNS-SD TXT record specification starts at txtvers=1 and stays that + way forever. Improvements can be made by defining new keys that older + clients silently ignore. The only reason to increment the version + number is if the old specification is subsequently found to be so + horribly broken that there's no way to do a compatible forward + revision, so the txtvers number has to be incremented to tell all the + old clients they should just not even try to understand this new TXT + record. + + If there is a need to indicate which version number(s) of the + application protocol the service implements, the recommended key + name for this is "protovers". + + + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 17] + +Internet Draft DNS-Based Service Discovery 10th August 2006 + + +7. Application Protocol Names + + The portion of a Service Instance Name consists of a pair + of DNS labels, following the established convention for SRV records + [RFC 2782], namely: the first label of the pair is an underscore + character followed by the Application Protocol Name, and the second + label is either "_tcp" or "_udp". + + Application Protocol Names may be no more than fourteen characters + (not counting the mandatory underscore), conforming to normal DNS + host name rules: Only lower-case letters, digits, and hyphens; must + begin and end with lower-case letter or digit. + + Wise selection of an Application Protocol Name is very important, + and the choice is not always as obvious as it may appear. + + In some cases, the Application Protocol Name merely names and refers + to the on-the-wire message format and semantics being used. FTP is + "ftp", IPP printing is "ipp", and so on. + + However, it is common to "borrow" an existing protocol and repurpose + it for a new task. This is entirely sensible and sound engineering + practice, but that doesn't mean that the new protocol is providing + the same semantic service as the old one, even if it borrows the same + message formats. For example, the local network music playing + protocol implemented by iTunes on Macintosh and Windows is little + more than "HTTP GET" commands. However, that does *not* mean that it + is sensible or useful to try to access one of these music servers by + connecting to it with a standard web browser. Consequently, the + DNS-SD service advertised (and browsed for) by iTunes is "_daap._tcp" + (Digital Audio Access Protocol), not "_http._tcp". Advertising + "_http._tcp" service would cause iTunes servers to show up in + conventional Web browsers (Safari, Camino, OmniWeb, Opera, Netscape, + Internet Explorer, etc.) which is little use since it offers no pages + containing human-readable content. Similarly, browsing for + "_http._tcp" service would cause iTunes to find generic web servers, + such as the embedded web servers in devices like printers, which is + little use since printers generally don't have much music to offer. + + Similarly, NFS is built on top of SUN RPC, but that doesn't mean it + makes sense for an NFS server to advertise that it provides "SUN RPC" + service. Likewise, Microsoft SMB file service is built on top of + Netbios running over IP, but that doesn't mean it makes sense for + an SMB file server to advertise that it provides "Netbios-over-IP" + service. The DNS-SD name of a service needs to encapsulate both the + "what" (semantics) and the "how" (protocol implementation) of the + service, since knowledge of both is necessary for a client to + usefully use the service. Merely advertising that a service was + built on top of SUN RPC is no use if the client has no idea what + the service actually does. + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 18] + +Internet Draft DNS-Based Service Discovery 10th August 2006 + + + Another common mistake is to assume that the service type advertised + by iTunes should be "_daap._http._tcp." This is also incorrect. + Similarly, a protocol designer implementing a network service that + happens to use Simple Object Access Protocol [SOAP] should not feel + compelled to have "_soap" appear somewhere in the Application + Protocol Name. Part of the confusion here is that the presence of + "_tcp" or "_udp" in the portion of a Service Instance Name + has led people to assume that the structure of a service name has to + reflect the internal structure of how the protocol was implemented. + This is not correct. All that is required is that the service be + identified by a unique Application Protocol Name. Making the + Application Protocol Name at least marginally descriptive of + what the service does is desirable, though not essential. + + The "_tcp" or "_udp" should be regarded as little more than + boilerplate text, and care should be taken not to attach too much + importance to it. Some might argue that the "_tcp" or "_udp" should + not be there at all, but this format is defined by RFC 2782, and + that's not going to change. In addition, the presence of "_tcp" has + the useful side-effect that it provides a convenient delegation point + to hand off responsibility for service discovery to a different DNS + server, if so desired. + + +7.1. Selective Instance Enumeration + + This document does not attempt to define an arbitrary query language + for service discovery, nor do we believe one is necessary. + + However, there are some circumstances where narrowing the list of + results may be useful. A hypothetical Web browser client that is able + to retrieve HTML documents via HTTP and display them may also be able + to retrieve HTML documents via FTP and display them, but only in the + case of FTP servers that allow anonymous login. For that Web browser, + discovering all FTP servers on the network is not useful. The Web + browser only wants to discover FTP servers that it is able to talk + to. In this case, a subtype of "_ftp._tcp" could be defined. Instead + of issuing a query for "_ftp._tcp.", the Web browser issues a + query for "_anon._sub._ftp._tcp.", where "_anon" is a defined + subtype of "_ftp._tcp". The response to this query only includes the + names of SRV records for FTP servers that are willing to allow + anonymous login. + + Note that the FTP server's Service Instance Name is unchanged -- it + is still something of the form "The Server._ftp._tcp.example.com." + The subdomain in which FTP server SRV records are registered defines + the namespace within which FTP server names are unique. Additional + subtypes (e.g. "_anon") of the basic service type (e.g. "_ftp._tcp") + serve to narrow the list of results, not to create more namespace. + + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 19] + +Internet Draft DNS-Based Service Discovery 10th August 2006 + + + Subtypes are appropriate when it is desirable for different kinds + of clients to be able to browse for services at two levels of + granularity. In the example above, we hypothesize two classes of + ftp client: clients that can provide username and password when + connecting, and clients that can only do anonymous login. The set of + ftp servers on the network is the same in both cases; the difference + is that the more capable client wants to discover all of them, + whereas the more limited client only wants to find the subset of + those ftp servers that it can talk to. Subtypes are only appropriate + in two-level scenarios such as this one, where some clients want to + find the full set of services of a given type, and at the same time + other clients only want to find some subset. Generally speaking, if + there is no client that wants to find the entire set, then it's + neither necessary nor desirable to use the subtype mechanism. If all + clients are browsing for some particular subtype, and no client + exists that browses for the parent type, then an Application Protocol + Name representing the logical service should be defined, and software + should simply advertise and browse for that particular service type + directly. In particular, just because a particular network service + happens to be implemented in terms of some other underlying protocol, + like HTTP, Sun RPC, or SOAP, doesn't mean that it's sensible for that + service to be defined as a subtype of "_http", "_sunrpc", or "_soap". + That would only be useful if there were some class of client for + which it is sensible to say, "I want to discover a service on the + network, and I don't care what it does, as long as it does it using + the SOAP XML RPC mechanism." + + As with the TXT record name/value pairs, the list of possible + subtypes, if any, are defined and specified separately for each basic + service type. Note that the example given here using "_ftp" is a + hypothetical one. The "_ftp" service type does not (currently) have + any subtypes defined. Subtypes are currently a little-used feature + of DNS-SD, and experience will show whether or not they ultimately + prove to have broad applicability. + + +7.2 Service Name Length Limits + + As described above, application protocol names are allowed to be up + to fourteen characters long. The reason for this limit is to leave + as many bytes of the domain name as possible available for use + by both the network administrator (choosing service domain names) + and the end user (choosing instance names). + + A domain name may be up to 255 bytes long, including the final + terminating root label at the end. Domain names used by DNS-SD + take the following forms: + + .._tcp... + ._sub.._tcp... + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 20] + +Internet Draft DNS-Based Service Discovery 10th August 2006 + + + The first example shows a service instance name, i.e. the name of the + service's SRV and TXT records. The second shows a subtype browsing + name, i.e. the name of a PTR record pointing to service instance + names (see "Selective Instance Enumeration"). + + The instance name may be up to 63 bytes. Including the + length byte used by the DNS format when the name is stored in a + packet, that makes 64 bytes. + + When using subtypes, the subtype identifier is allowed to be up to + 63 bytes, plus the length byte, making 64. Including the "_sub" + and its length byte, this makes 69 bytes. + + The application protocol name may be up to 14 bytes, plus the + underscore and length byte, making 16. Including the "_udp" or "_tcp" + and its length byte, this makes 21 bytes. + + Typically, DNS-SD service records are placed into subdomains of their + own beneath a company's existing domain name. Since these subdomains + are intended to be accessed through graphical user interfaces, not + typed on a command-line they are frequently long and descriptive. + Including the length byte, the user-visible service domain may be up + to 64 bytes. + + The terminating root label at the end counts as one byte. + + Of our available 255 bytes, we have now accounted for 69+21+64+1 = + 155 bytes. This leaves 100 bytes to accommodate the organization's + existing domain name . When used with Multicast DNS, + is "local", which easily fits. When used with parent + domains of 100 bytes or less, the full functionality of DNS-SD is + available without restriction. When used with parent domains longer + than 100 bytes, the protocol risks exceeding the maximum possible + length of domain names, causing failures. In this case, careful + choice of short names can help avoid overflows. + If the and are too long, then service + instances with long instance names will not be discoverable or + resolvable, and applications making use of long subtype names + may fail. + + Because of this constraint, we choose to limit Application Protocol + Names to 14 characters or less. Allowing more characters would not + add to the expressive power of the protocol, and would needlessly + lower the limit on the maximum length that may be + safely used. + + + + + + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 21] + +Internet Draft DNS-Based Service Discovery 10th August 2006 + + +8. Flagship Naming + + In some cases, there may be several network protocols available + which all perform roughly the same logical function. For example, + the printing world has the LPR protocol, and the Internet Printing + Protocol (IPP), both of which cause printed sheets to be emitted + from printers in much the same way. In addition, many printer vendors + send their own proprietary page description language (PDL) data + over a TCP connection to TCP port 9100, herein referred to as the + "pdl-datastream" protocol. In an ideal world we would have only one + network printing protocol, and it would be sufficiently good that no + one felt a compelling need to invent a different one. However, in + practice, multiple legacy protocols do exist, and a service discovery + protocol has to accommodate that. + + Many printers implement all three printing protocols: LPR, IPP, and + pdl-datastream. For the benefit of clients that may speak only one of + those protocols, all three are advertised. + + However, some clients may implement two, or all three of those + printing protocols. When a client looks for all three service types + on the network, it will find three distinct services -- an LPR + service, an IPP service, and a pdl-datastream service -- all of which + cause printed sheets to be emitted from the same physical printer. + + In the case of multiple protocols like this that all perform + effectively the same function, the client should suppress duplicate + names and display each name only once. When the user prints to a + given named printer, the printing client is responsible for choosing + the protocol which will best achieve the desired effect, without, for + example, requiring the user to make a manual choice between LPR and + IPP. + + As described so far, this all works very well. However, consider some + future printer that only supports IPP printing, and some other future + printer that only supports pdl-datastream printing. The name spaces + for different service types are intentionally disjoint -- it is + acceptable and desirable to be able to have both a file server called + "Sales Department" and a printer called "Sales Department". However, + it is not desirable, in the common case, to have two different + printers both called "Sales Department", just because those printers + are implementing different protocols. + + To help guard against this, when there are two or more network + protocols which perform roughly the same logical function, one of + the protocols is declared the "flagship" of the fleet of related + protocols. Typically the flagship protocol is the oldest and/or + best-known protocol of the set. + + If a device does not implement the flagship protocol, then it instead + creates a placeholder SRV record (priority=0, weight=0, port=0, + + +Expires 10th February 2007 Cheshire & Krochmal [Page 22] + +Internet Draft DNS-Based Service Discovery 10th August 2006 + + + target host = hostname of device) with that name. If, when it + attempts to create this SRV record, it finds that a record with the + same name already exists, then it knows that this name is already + taken by some entity implementing at least one of the protocols from + the class, and it must choose another. If no SRV record already + exists, then the act of creating it stakes a claim to that name so + that future devices in the same class will detect a conflict when + they try to use it. The SRV record needs to contain the target host + name in order for the conflict detection rules to operate. If two + different devices were to create placeholder SRV records both using a + null target host name (just the root label), then the two SRV records + would be seen to be in agreement so no conflict would be registered. + + By defining a common well-known flagship protocol for the class, + future devices that may not even know about each other's protocols + establish a common ground where they can coordinate to verify + uniqueness of names. + + No PTR record is created advertising the presence of empty flagship + SRV records, since they do not represent a real service being + advertised. + + +9. Service Type Enumeration + + In general, clients are not interested in finding *every* service on + the network, just the services that the client knows how to talk to. + (Software designers may *think* there's some value to finding *every* + service on the network, but that's just wooly thinking.) + + However, for problem diagnosis and network management tools, it may + be useful for network administrators to find the list of advertised + service types on the network, even if those service names are just + opaque identifiers and not particularly informative in isolation. + + For this reason, a special meta-query is defined. A DNS query for + PTR records with the name "_services._dns-sd._udp." yields + a list of PTR records, where the rdata of each PTR record is the + name of a service type. A subsequent query for PTR records with + one of those names yields a list of instances of that service type. + + + + + + + + + + + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 23] + +Internet Draft DNS-Based Service Discovery 10th August 2006 + + +10. Populating the DNS with Information + + How the SRV and PTR records that describe services and allow them to + be enumerated make their way into the DNS is outside the scope of + this document. However, it can happen easily in any of a number of + ways, for example: + + On some networks, the administrator might manually enter the records + into the name server's configuration file. + + A network monitoring tool could output a standard zone file to be + read into a conventional DNS server. For example, a tool that can + find Apple LaserWriters using AppleTalk NBP could find the list + of printers, communicate with each one to find its IP address, + PostScript version, installed options, etc., and then write out a + DNS zone file describing those printers and their capabilities using + DNS resource records. That information would then be available to + DNS-SD clients that don't implement AppleTalk NBP, and don't want to. + + Future IP printers could use Dynamic DNS Update [RFC 2136] to + automatically register their own SRV and PTR records with the DNS + server. + + A printer manager device which has knowledge of printers on the + network through some other management protocol could also use Dynamic + DNS Update [RFC 2136]. + + Alternatively, a printer manager device could implement enough of + the DNS protocol that it is able to answer DNS queries directly, + and Example Co.'s main DNS server could delegate the + _ipp._tcp.example.com subdomain to the printer manager device. + + Zeroconf printers answer Multicast DNS queries on the local link + for appropriate PTR and SRV names ending with ".local." [mDNS] + + +11. Relationship to Multicast DNS + + DNS-Based Service Discovery is only peripherally related to Multicast + DNS, in that the standard unicast DNS queries used by DNS-SD may also + be performed using multicast when appropriate, which is particularly + beneficial in Zeroconf environments [ZC]. + + + + + + + + + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 24] + +Internet Draft DNS-Based Service Discovery 10th August 2006 + + +12. Discovery of Browsing and Registration Domains (Domain Enumeration) + + One of the main reasons for DNS-Based Service Discovery is so that + when a visiting client (e.g. a laptop computer) arrives at a new + network, it can discover what services are available on that network + without manual configuration. This logic that applies to discovering + services without manual configuration also applies to discovering the + domains in which services are registered without requiring manual + configuration. + + This discovery is performed recursively, using Unicast or Multicast + DNS. Five special RR names are reserved for this purpose: + + b._dns-sd._udp.. + db._dns-sd._udp.. + r._dns-sd._udp.. + dr._dns-sd._udp.. + lb._dns-sd._udp.. + + By performing PTR queries for these names, a client can learn, + respectively: + + o A list of domains recommended for browsing + + o A single recommended default domain for browsing + + o A list of domains recommended for registering services using + Dynamic Update + + o A single recommended default domain for registering services. + + o The final query shown yields the "legacy browsing" domain. + Sophisticated client applications that care to present choices + of domain to the user, use the answers learned from the previous + four queries to discover those domains to present. In contrast, + many current applications browse without specifying an explicit + domain, allowing the operating system to automatically select an + appropriate domain on their behalf. It is for this class of + application that the "legacy browsing" query is provided, to allow + the network administrator to communicate to the client operating + systems which domain should be used for these applications. + + These domains are purely advisory. The client or user is free to + browse and/or register services in any domains. The purpose of these + special queries is to allow software to create a user-interface that + displays a useful list of suggested choices to the user, from which + they may make a suitable selection, or ignore the offered suggestions + and manually enter their own choice. + + + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 25] + +Internet Draft DNS-Based Service Discovery 10th August 2006 + + + The part of the name may be "local" (meaning "perform the + query using link-local multicast) or it may be learned through some + other mechanism, such as the DHCP "Domain" option (option code 15) + [RFC 2132] or the DHCP "Domain Search" option (option code 119) + [RFC 3397]. + + The part of the name may also be derived from the host's IP + address. The host takes its IP address, and calculates the logical + AND of that address and its subnet mask, to derive the 'base' address + of the subnet. It then constructs the conventional DNS "reverse + mapping" name corresponding to that base address, and uses that + as the part of the name for the queries described above. + For example, if a host has address 192.168.12.34, with subnet mask + 255.255.0.0, then the 'base' address of the subnet is 192.168.0.0, + and to discover the recommended legacy browsing domain for devices + on this subnet, the host issues a DNS PTR query for the name + "lb._dns-sd._udp.0.0.168.192.in-addr.arpa." + + Sophisticated clients may perform domain enumeration queries both in + "local" and in one or more unicast domains, and then present the user + with an aggregate result, combining the information received from all + sources. + + +13. DNS Additional Record Generation + + DNS has an efficiency feature whereby a DNS server may place + additional records in the Additional Section of the DNS Message. + These additional records are typically records that the client did + not explicitly request, but the server has reasonable grounds to + expect that the client might request them shortly. + + This section recommends which additional records should be generated + to improve network efficiency for both unicast and multicast DNS-SD + responses. + + +13.1 PTR Records + + When including a PTR record in a response packet, the + server/responder SHOULD include the following additional records: + + o The SRV record(s) named in the PTR rdata. + o The TXT record(s) named in the PTR rdata. + o All address records (type "A" and "AAAA") named in the SRV rdata. + + + + + + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 26] + +Internet Draft DNS-Based Service Discovery 10th August 2006 + + +13.2 SRV Records + + When including an SVR record in a response packet, the + server/responder SHOULD include the following additional records: + + o All address records (type "A" and "AAAA") named in the SRV rdata. + + +13.3 TXT Records + + When including a TXT record in a response packet, no additional + records are required. + + +13.4 Other Record Types + + In response to address queries, or other record types, no additional + records are required by this document. + + +14. Comparison with Alternative Service Discovery Protocols + + Over the years there have been many proposed ways to do network + service discovery with IP, but none achieved ubiquity in the + marketplace. Certainly none has achieved anything close to the + ubiquity of today's deployment of DNS servers, clients, and other + infrastructure. + + The advantage of using DNS as the basis for service discovery is + that it makes use of those existing servers, clients, protocols, + infrastructure, and expertise. Existing network analyzer tools + already know how to decode and display DNS packets for network + debugging. + + For ad-hoc networks such as Zeroconf environments, peer-to-peer + multicast protocols are appropriate. The Zeroconf host profile [ZCHP] + requires the use of a DNS-like protocol over IP Multicast for host + name resolution in the absence of DNS servers. Given that Zeroconf + hosts will have to implement this Multicast-based DNS-like protocol + anyway, it makes sense for them to also perform service discovery + using that same Multicast-based DNS-like software, instead of also + having to implement an entirely different service discovery protocol. + + In larger networks, a high volume of enterprise-wide IP multicast + traffic may not be desirable, so any credible service discovery + protocol intended for larger networks has to provide some facility to + aggregate registrations and lookups at a central server (or servers) + instead of working exclusively using multicast. This requires some + service discovery aggregation server software to be written, + debugged, deployed, and maintained. This also requires some service + discovery registration protocol to be implemented and deployed for + + +Expires 10th February 2007 Cheshire & Krochmal [Page 27] + +Internet Draft DNS-Based Service Discovery 10th August 2006 + + + clients to register with the central aggregation server. Virtually + every company with an IP network already runs a DNS server, and DNS + already has a dynamic registration protocol [RFC 2136]. Given that + virtually every company already has to operate and maintain a DNS + server anyway, it makes sense to take advantage of this instead of + also having to learn, operate and maintain a different service + registration server. It should be stressed again that using the + same software and protocols doesn't necessarily mean using the same + physical piece of hardware. The DNS-SD service discovery functions + do not have to be provided by the same piece of hardware that + is currently providing the company's DNS name service. The + "_tcp." subdomain may be delegated to a different piece of + hardware. However, even when the DNS-SD service is being provided + by a different piece of hardware, it is still the same familiar DNS + server software that is running, with the same configuration file + syntax, the same log file format, and so forth. + + Service discovery needs to be able to provide appropriate security. + DNS already has existing mechanisms for security [RFC 2535]. + + In summary: + + Service discovery requires a central aggregation server. + DNS already has one: It's called a DNS server. + + Service discovery requires a service registration protocol. + DNS already has one: It's called DNS Dynamic Update. + + Service discovery requires a query protocol + DNS already has one: It's called DNS. + + Service discovery requires security mechanisms. + DNS already has security mechanisms: DNSSEC. + + Service discovery requires a multicast mode for ad-hoc networks. + Zeroconf environments already require a multicast-based DNS-like + name lookup protocol for mapping host names to addresses, so it + makes sense to let one multicast-based protocol do both jobs. + + It makes more sense to use the existing software that every network + needs already, instead of deploying an entire parallel system just + for service discovery. + + + + + + + + + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 28] + +Internet Draft DNS-Based Service Discovery 10th August 2006 + + +15. Real Examples + + The following examples were prepared using standard unmodified + nslookup and standard unmodified BIND running on GNU/Linux. + + Note: In real products, this information is obtained and presented to + the user using graphical network browser software, not command-line + tools, but if you wish you can try these examples for yourself as you + read along, using the command-line tools already available on your + own Unix machine. + +15.1 Question: What FTP servers are being advertised from dns-sd.org? + + nslookup -q=ptr _ftp._tcp.dns-sd.org. + _ftp._tcp.dns-sd.org + name = Apple\032QuickTime\032Files._ftp._tcp.dns-sd.org + _ftp._tcp.dns-sd.org + name = Microsoft\032Developer\032Files._ftp._tcp.dns-sd.org + _ftp._tcp.dns-sd.org + name = Registered\032Users'\032Only._ftp._tcp.dns-sd.org + + Answer: There are three, called "Apple QuickTime Files", + "Microsoft Developer Files" and "Registered Users' Only". + + Note that nslookup escapes spaces as "\032" for display purposes, + but a graphical DNS-SD browser does not. + +15.2 Question: What FTP servers allow anonymous access? + + nslookup -q=ptr _anon._sub._ftp._tcp.dns-sd.org + _anon._sub._ftp._tcp.dns-sd.org + name = Apple\032QuickTime\032Files._ftp._tcp.dns-sd.org + _anon._sub._ftp._tcp.dns-sd.org + name = Microsoft\032Developer\032Files._ftp._tcp.dns-sd.org + + Answer: Only "Apple QuickTime Files" and "Microsoft Developer Files" + allow anonymous access. + +15.3 Question: How do I access "Apple QuickTime Files"? + + nslookup -q=any "Apple\032QuickTime\032Files._ftp._tcp.dns-sd.org." + Apple\032QuickTime\032Files._ftp._tcp.dns-sd.org + text = "path=/quicktime" + Apple\032QuickTime\032Files._ftp._tcp.dns-sd.org + priority = 0, weight = 0, port= 21 host = ftp.apple.com + ftp.apple.com internet address = 17.254.0.27 + ftp.apple.com internet address = 17.254.0.31 + ftp.apple.com internet address = 17.254.0.26 + + Answer: You need to connect to ftp.apple.com, port 21, path + "/quicktime". The addresses for ftp.apple.com are also given. + + +Expires 10th February 2007 Cheshire & Krochmal [Page 29] + +Internet Draft DNS-Based Service Discovery 10th August 2006 + + +16. User Interface Considerations + + DNS-Based Service Discovery was designed by first giving careful + consideration to what constitutes a good user experience for service + discovery, and then designing a protocol with the features necessary + to enable that good user experience. This section covers two issues + in particular: Choice of factory-default names (and automatic + renaming behavior) for devices advertising services, and the + "continuous live update" user-experience model for clients + browsing to discover services. + + +16.1 Service Advertising User-Interface Considerations + + When a DNS-SD service is advertised using Multicast DNS [mDNS], + automatic name conflict and resolution will occur if there is already + another service of the same type advertising with the same name. + As described in the Multicast DNS specification [mDNS], upon a + conflict, the service should: + + 1. Automatically select a new name (typically by appending + or incrementing a digit at the end of the name), + 2. try advertising with the new name, and + 3. upon success, record the new name in persistent storage. + + This renaming behavior is very important, because it is the key + to providing user-friendly service names in the out-of-the-box + factory-default configuration. Some product developers may not + have realized this, because there are some products today where + the factory-default name is distinctly unfriendly, containing + random-looking strings of characters, like the device's Ethernet + address in hexadecimal. This is unnecessary, and undesirable, because + the point of the user-visible name is that it should be friendly and + useful to human users. If the name is not unique on the local network + the protocol will rememdy this as necessary. It is ironic that many + of the devices with this mistake are network printers, given that + these same printers also simultaneously support AppleTalk-over- + Ethernet, with nice user-friendly default names (and automatic + conflict detection and renaming). Examples of good factory-default + names are as follows: + + Brother 5070N + Canon W2200 [ Apologies to makers of ] + HP LaserJet 4600 [ DNS-SD/mDNS printers ] + Lexmark W840 [ not listed. Email ] + Okidata C5300 [ the authors and we'll ] + Ricoh Aficio CL7100 [ add you to the list. ] + Xerox Phaser 6200DX + + + + + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 30] + +Internet Draft DNS-Based Service Discovery 10th August 2006 + + + To complete the case for why adding long ugly serial numbers to + the end of names is neither necessary nor desirable, consider + the cases where the user has (a) only one network printer, + (b) two network printers, and (c) many network printers. + + (a) In the case where the user has only one network printer, a simple + name like (to use a vendor-neutral example) "Printer" is more + user-friendly than an ugly name like "Printer 0001E68C74FB". + Appending ugly hexadecimal goop to the end of the name to make + sure the name is unique is irrelevant to a user who only has one + printer anyway. + + (b) In the case where the user gets a second network printer, + having it detect that the name "Printer" is already in use + and automatically instead name itself "Printer (2)" provides a + good user experience. For the users, remembering that the old + printer is "Printer" and the new one is "Printer (2)" is easy + and intuitive. Seeing two printers called "Printer 0001E68C74FB" + and "Printer 00306EC3FD1C" is a lot less helpful. + + (c) In the case of a network with ten network printers, seeing a + list of ten names all of the form "Printer xxxxxxxxxxxx" has + effectively taken what was supposed to be a list of user-friendly + rich-text names (supporting mixed case, spaces, punctuation, + non-Roman characters and other symbols) and turned it into + just about the worst user-interface imaginable: a list of + incomprehensible random-looking strings of letters and digits. + In a network with a lot of printers, it would be desirable for + the people setting up the printers to take a moment to give each + one a descriptive name, but in the event they don't, presenting + the users with a list of sequentially-numbered printers is a much + more desirable default user experience than showing a list of raw + Ethernet addresses. + + +16.2 Client Browsing User-Interface Considerations + + Of particular concern in the design of DNS-SD was the dynamic nature + of service discovery in a changing network environment. Other service + discovery protocols have been designed with an implicit unstated + assumption that the usage model is: + + (a) client calls the service discovery code + (b) client gets list of discovered services + as of a particular instant in time, and then + (c) client displays list for user to select from + + Superficially this usage model seems reasonable, but the problem is + that it's too optimistic. It only considers the success case, where + the user successfully finds the service they're looking for. In the + + +Expires 10th February 2007 Cheshire & Krochmal [Page 31] + +Internet Draft DNS-Based Service Discovery 10th August 2006 + + + case where the user is looking for (say) a particular printer, and + that printer's not turned on or not connected, the user first has + to attempt to remedy the problem, and then has to click a "refresh" + button to retry the service discovery (or, worse, dismiss the + browsing window entirely, and open a new one to initiate a new + network search attempt) to find out whether they were successful. + Because nothing happens instantaneously in networking, and packets + can be lost, necessitating some number of retransmissions, a service + discovery search typically takes a few seconds. A fairly typical user + experience model is: + + (a) display an empty window, + (b) display some animation like a searchlight + sweeping back and forth for ten seconds, and then + (c) at the end of the ten-second search, display + a static list showing what was discovered. + + Every time the user clicks the "refresh" button they have to endure + another ten-second wait, and every time the discovered list is + finally shown at the end of the ten-second wait, the moment it's + displayed on the screen it's already beginning to get stale and + out-of-date. + + The service discovery user experience that the DNS-SD designers had + in mind has some rather different properties: + + 1. Displaying a list of discovered services should be effectively + instantaneous -- i.e. typically 1/10 second, not 10 seconds. + + 2. The list of discovered services should not be getting stale + and out-of-date from the moment it's displayed. The list + should be 'live' and should continue to update as new services + are discovered. Because of the delays, packet losses, and + retransmissions inherent in networking, it is to be expected + that sometimes, after the initial list is displayed showing + the majority of discovered services, a few remaining stragglers + may continue to trickle in during the subsequent few seconds. + Even after this initial stable list has been built and displayed, + the list should remain 'live' and should continue to update. + At any future time, be it minutes, hours, or even days later, + if a new service of the desired type is discovered, it should be + displayed in the list automatically, without the user having to + click a "refresh" button or take any other explicit action to + update the display. + + 3. With users getting to be in the habit of leaving service discovery + windows open, and coming to expect to be able to rely on them + to show a continuous 'live' view of current network reality, + this creates a new requirement for us: deletion of stale services. + When a service discovery list shows just a static snapshot at a + moment in time, then the situation is simple: either a service was + + +Expires 10th February 2007 Cheshire & Krochmal [Page 32] + +Internet Draft DNS-Based Service Discovery 10th August 2006 + + + discovered and appears in the list, or it was not, and does not. + However, when our list is live and updates continuously with the + discovery of new services, then this implies the corollary: when + a service goes away, it needs to *disappear* from the service + discovery list. Otherwise, the result would be unacceptable: the + service discovery list would simply grow monotonically over time, + and would require a periodic "refresh" (or complete dismissal and + recreation) to clear out old stale data. + + 4. With users getting to be in the habit of leaving service discovery + windows open, these windows need to update not only in response + to services coming and going, but also in response to changes + in configuration and connectivity of the client machine itself. + For example, if a user opens a service discovery window when no + Ethernet cable is connected to the client machine, and the window + appears empty with no discovered services, then when the user + connects the cable the window should automatically populate with + discovered services without requiring any explicit user action. + If the user disconnects the Ethernet cable, all the services + discovered via that network interface should automatically + disappear. If the user switches from one 802.11 wireless base + station to another, the service discovery window should + automatically update to remove all the services discovered + via the old wireless base station, and add all the services + discovered via the new one. + + If these requirements seem to be setting an arbitrary and + unreasonably high standard for service discovery, bear in mind that + while it may have seemed that way to some, back in the 1990s when + these ideas were first proposed, in the years since then Apple and + other companies have shipped multiple implementations of DNS-SD/mDNS + that meet and exceed these requirements. In the years since Apple + shipped Mac OS X 10.2 Jaguar with the Open Source mDNSResponder + daemon, this service discovery "live browsing" paradigm has been + adopted and implemented in a wide range of Apple and third-party + applications, including printer discovery, Safari discovery of + devices with embedded web servers (for status and configuration), + iTunes music sharing, iPhoto photo sharing, the iChat Bonjour buddy + list, SubEthaEdit multi-user document editing, etc. + + With so many different applications demonstrating that the "live + browsing" paradigm is clearly achievable, these four requirements + should not be regarded as idealistic unattainable goals, but + instead as the bare minimum baseline functionality that any + credible service discovery protocol needs to achieve. + + + + + + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 33] + +Internet Draft DNS-Based Service Discovery 10th August 2006 + + +17. IPv6 Considerations + + IPv6 has no significant differences, except that the address of the + SRV record's target host is given by the appropriate IPv6 address + records instead of the IPv4 "A" record. + + +18. Security Considerations + + DNSSEC [RFC 2535] should be used where the authenticity of + information is important. Since DNS-SD is just a naming and usage + convention for records in the existing DNS system, it has no specific + additional security requirements over and above those that already + apply to DNS queries and DNS updates. + + +19. IANA Considerations + + This protocol builds on DNS SRV records [RFC 2782], and similarly + requires IANA to assign unique application protocol names. + Unfortunately, the "IANA Considerations" section of RFC 2782 says + simply, "The IANA has assigned RR type value 33 to the SRV RR. + No other IANA services are required by this document." + Due to this oversight, IANA is currently prevented from carrying + out the necessary function of assigning these unique identifiers. + + This document proposes the following IANA allocation policy for + unique application protocol names: + + Allowable names: + * Must be no more than fourteen characters long + * Must consist only of: + - lower-case letters 'a' - 'z' + - digits '0' - '9' + - the hyphen character '-' + * Must begin and end with a lower-case letter or digit. + * Must not already be assigned to some other protocol in the + existing IANA "list of assigned application protocol names + and port numbers" [ports]. + + These identifiers are allocated on a First Come First Served basis. + In the event of abuse (e.g. automated mass registrations, etc.), + the policy may be changed without notice to Expert Review [RFC 2434]. + + The textual nature of service/protocol names means that there are + almost infinitely many more of them available than the finite set of + 65535 possible port numbers. This means that developers can produce + experimental implementations using unregistered service names with + little chance of accidental collision, providing service names are + chosen with appropriate care. However, this document strongly + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 34] + +Internet Draft DNS-Based Service Discovery 10th August 2006 + + + advocates that on or before the date a product ships, developers + should properly register their service names. + + Some developers have expressed concern that publicly registering + their service names (and port numbers today) with IANA before a + product ships may give away clues about that product to competitors. + For this reason, IANA should consider allowing service name + applications to remain secret for some period of time, much as US + patent applications remain secret for two years after the date of + filing. + + This proposed IANA allocation policy is not in force until this + document is published as an RFC. In the meantime, unique application + protocol names may be registered according to the instructions at + . As of August 2006, there + are roughly 300 application protocols in currently shipping products + that have been so registered as using DNS-SD for service discovery. + + +20. Acknowledgments + + The concepts described in this document have been explored, developed + and implemented with help from Richard Brown, Erik Guttman, Paul + Vixie, and Bill Woodcock. + + Special thanks go to Bob Bradley, Josh Graessley, Scott Herscher, + Roger Pantos and Kiren Sekar for their significant contributions. + + +21. Deployment History + + The first implementations of DNS-Based Service Discovery and + Multicast DNS were initially developed during the late 1990s, + but the event that put them into the media spotlight was Steve Jobs + demonstrating it live on stage in his keynote presentation opening + Apple's annual Worldwide Developers Conference in May 2002, and + announcing Apple's adoption of the technology throughout its hardware + and software product line. Three months later, in August 2002, Apple + shipped Mac OS X 10.2 Jaguar, and millions of end-users got their + first exposure to Zero Configuration Networking with DNS-SD/mDNS + in applications like Safari, iChat, and printer setup. A month later, + in September 2002, Apple released the entire source code for the + mDNS Responder daemon under its Darwin Open Source project, with + code not just for Mac OS X, but also for a range of other platforms + including Windows, VxWorks, Linux, Solaris, FreeBSD, etc. + + Many hardware makers were quick to see the benefits of Zero + Configuration Networking. Printer makers especially were enthusiastic + early adopters, and within a year every major printer manufacturer + was shipping DNS-SD/mDNS-enabled network printers. If you've bought + any network printer at all in the last few years, it was probably one + + +Expires 10th February 2007 Cheshire & Krochmal [Page 35] + +Internet Draft DNS-Based Service Discovery 10th August 2006 + + + that supports DNS-SD/mDNS, even if you didn't know that at the time. + For Mac OS X users, telling if you have DNS-SD/mDNS printers on your + network is easy because they automatically appear in the "Bonjour" + submenu in the "Print" dialog of every Mac application. Microsoft + Windows users can get a similar experience by installing Bonjour for + Windows (takes about 90 seconds, no restart required) and running the + Bonjour for Windows Printer Setup Wizard [B4W]. + + The Open Source community has produced several independent + implementations of DNS-Based Service Discovery and 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. + + +22. Copyright Notice + + Copyright (C) The Internet Society (2006). + + This document is subject to the rights, licenses and restrictions + contained in BCP 78, and except as set forth therein, the authors + retain all their rights. For the purposes of this document, + the term "BCP 78" refers exclusively to RFC 3978, "IETF Rights + in Contributions", published March 2005. + + This document and the information contained herein are provided on an + "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS + OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET + ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, + INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE + INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED + WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + + + + + + + + + + + + + + + + + + + + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 36] + +Internet Draft DNS-Based Service Discovery 10th August 2006 + + +23. Normative References + + [ports] IANA list of assigned application protocol names and port + numbers + + [RFC 1033] Lottor, M., "Domain Administrators Operations Guide", + RFC 1033, November 1987. + + [RFC 1034] Mockapetris, P., "Domain Names - Concepts and + Facilities", STD 13, RFC 1034, November 1987. + + [RFC 1035] Mockapetris, P., "Domain Names - Implementation and + Specifications", STD 13, RFC 1035, November 1987. + + [RFC 2119] Bradner, S., "Key words for use in RFCs to Indicate + Requirement Levels", RFC 2119, March 1997. + + [RFC 2782] Gulbrandsen, A., et al., "A DNS RR for specifying the + location of services (DNS SRV)", RFC 2782, February 2000. + + [RFC 3629] Yergeau, F., "UTF-8, a transformation format of ISO + 10646", RFC 3629, November 2003. + + [UAX15] "Unicode Normalization Forms" + http://www.unicode.org/reports/tr15/ + + +24. Informative References + + [B4W] Bonjour for Windows + + [mDNS] Cheshire, S., and M. Krochmal, "Multicast DNS", + Internet-Draft (work in progress), + draft-cheshire-dnsext-multicastdns-06.txt, August 2006. + + [NBP] Cheshire, S., and M. Krochmal, + "Requirements for a Protocol to Replace AppleTalk NBP", + Internet-Draft (work in progress), + draft-cheshire-dnsext-nbp-05.txt, August 2006. + + [RFC 2132] Alexander, S., and Droms, R., "DHCP Options and BOOTP + Vendor Extensions", RFC 2132, March 1997. + + [RFC 2136] Vixie, P., et al., "Dynamic Updates in the Domain Name + System (DNS UPDATE)", RFC 2136, April 1997. + + [RFC 2434] Narten, T., and H. Alvestrand, "Guidelines for Writing + an IANA Considerations Section in RFCs", RFC 2434, + October 1998. + + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 37] + +Internet Draft DNS-Based Service Discovery 10th August 2006 + + + [RFC 2535] Eastlake, D., "Domain Name System Security Extensions", + RFC 2535, March 1999. + + [RFC 3007] Wellington, B., et al., "Secure Domain Name System (DNS) + Dynamic Update", RFC 3007, November 2000. + + [RFC 3397] Aboba, B., and Cheshire, S., "Dynamic Host Configuration + Protocol (DHCP) Domain Search Option", RFC 3397, November + 2002. + + [SOAP] Nilo Mitra, "SOAP Version 1.2 Part 0: Primer", + W3C Proposed Recommendation, 24 June 2003 + http://www.w3.org/TR/2003/REC-soap12-part0-20030624 + + [ZC] Williams, A., "Requirements for Automatic Configuration + of IP Hosts", Internet-Draft (work in progress), + draft-ietf-zeroconf-reqts-12.txt, September 2002. + + [ZCHP] Guttman, E., "Zeroconf Host Profile Applicability + Statement", Internet-Draft (work in progress), + draft-ietf-zeroconf-host-prof-01.txt, July 2001. + + +25. Authors' Addresses + + Stuart Cheshire + Apple Computer, Inc. + 1 Infinite Loop + Cupertino + California 95014 + USA + + Phone: +1 408 974 3207 + EMail: rfc [at] stuartcheshire [dot] org + + + Marc Krochmal + Apple Computer, Inc. + 1 Infinite Loop + Cupertino + California 95014 + USA + + Phone: +1 408 974 4368 + EMail: marc [at] apple [dot] com + + + + + + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 38] diff --git a/specs/draft-cheshire-dnsext-multicastdns-06.txt b/specs/draft-cheshire-dnsext-multicastdns-06.txt new file mode 100644 index 0000000..1dbe8b6 --- /dev/null +++ b/specs/draft-cheshire-dnsext-multicastdns-06.txt @@ -0,0 +1,3074 @@ +Document: draft-cheshire-dnsext-multicastdns-06.txt Stuart Cheshire +Internet-Draft Marc Krochmal +Category: Standards Track Apple Computer, Inc. +Expires 10th February 2007 10th August 2006 + + Multicast DNS + + + +Status of this Memo + + By submitting this Internet-Draft, each author represents that any + applicable patent or other IPR claims of which he or she is aware + have been or will be disclosed, and any of which he or she becomes + aware will be disclosed, in accordance with Section 6 of BCP 79. + For the purposes of this document, the term "BCP 79" refers + exclusively to RFC 3979, "Intellectual Property Rights in IETF + Technology", published March 2005. + + Internet-Drafts are working documents of the Internet Engineering + Task Force (IETF), its areas, and its working groups. Note that + other groups may also distribute working documents as Internet- + Drafts. + + Internet-Drafts are draft documents valid for a maximum of six months + and may be updated, replaced, or obsoleted by other documents at any + time. It is inappropriate to use Internet-Drafts as reference + material or to cite them other than as "work in progress." + + The list of current Internet-Drafts can be accessed at + http://www.ietf.org/1id-abstracts.html + + The list of Internet-Draft Shadow Directories can be accessed at + http://www.ietf.org/shadow.html + +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 becoming essential. + + Multicast DNS (mDNS) provides the ability to do DNS-like operations + on the local link in the absence of any conventional unicast DNS + server. In addition, mDNS 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 mDNS 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. + + +Expires 10th February 2007 Cheshire & Krochmal [Page 1] + +Internet Draft Multicast DNS 10th August 2006 + + +Table of Contents + + 1. Introduction....................................................3 + 2. Conventions and Terminology Used in this Document...............3 + 3. Multicast DNS Names.............................................4 + 4. Source Address Check............................................8 + 5. Reverse Address Mapping.........................................9 + 6. Querying.......................................................10 + 7. Duplicate Suppression..........................................15 + 8. Responding.....................................................17 + 9. Probing and Announcing on Startup..............................20 + 10. Conflict Resolution............................................26 + 11. Resource Record TTL Values and Cache Coherency.................28 + 12. Special Characteristics of Multicast DNS Domains...............33 + 13. Multicast DNS for Service Discovery............................34 + 14. Enabling and Disabling Multicast DNS...........................34 + 15. Considerations for Multiple Interfaces.........................35 + 16. Considerations for Multiple Responders on the Same Machine.....36 + 17. Multicast DNS and Power Management.............................38 + 18. Multicast DNS Character Set....................................39 + 19. Multicast DNS Message Size.....................................41 + 20. Multicast DNS Message Format...................................42 + 21. Choice of UDP Port Number......................................45 + 22. Summary of Differences Between Multicast DNS and Unicast DNS...46 + 23. Benefits of Multicast Responses................................47 + 24. IPv6 Considerations............................................48 + 25. Security Considerations........................................49 + 26. IANA Considerations............................................50 + 27. Acknowledgments................................................50 + 28. Deployment History.............................................50 + 29. Copyright Notice...............................................51 + 30. Normative References...........................................51 + 31. Informative References.........................................52 + 32. Authors' Addresses.............................................53 + + + + + + + + + + + + + + + + + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 2] + +Internet Draft Multicast DNS 10th August 2006 + + +1. Introduction + + When reading this document, familiarity with the concepts of Zero + Configuration Networking [ZC] and automatic link-local addressing + [RFC 2462] [RFC 3927] is helpful. + + This document proposes no change to the structure of DNS messages, + and no new operation codes, response codes, or resource record types. + This document simply discusses what needs to happen if DNS clients + start sending DNS queries to a multicast address, and how a + collection of hosts can cooperate to collectively answer those + queries in a useful manner. + + There has been discussion of how much burden Multicast DNS might + impose on a network. It should be remembered that whenever IPv4 hosts + communicate, they broadcast ARP packets on the network on a regular + basis, and this is not disastrous. The approximate amount of + multicast traffic generated by hosts making conventional use of + Multicast DNS is anticipated to be roughly the same order of + magnitude as the amount of broadcast ARP traffic those hosts already + generate. + + New applications making new use of Multicast DNS capabilities for + unconventional purposes may generate more traffic. If some of those + new applications are "chatty", then work will be needed to help them + become less chatty. When performing any analysis, it is important + to make a distinction between the application behavior and the + underlying protocol behavior. If a chatty application uses UDP, + that doesn't mean that UDP is chatty, or that IP is chatty, or that + Ethernet is chatty. What it means is that the application is chatty. + The same applies to any future applications that may decide to layer + increasing portions of their functionality over Multicast DNS. + + +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" [RFC 2119]. + + This document uses the term "host name" in the strict sense to mean + a fully qualified domain name that has an 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 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. + + +Expires 10th February 2007 Cheshire & Krochmal [Page 3] + +Internet Draft Multicast DNS 10th August 2006 + + + In any place where there may be potential confusion between these two + types of TTL, the term "IP TTL" is used to refer to the IP header TTL + (hop limit), and the term "RR TTL" is used to refer to the Resource + Record TTL (cache lifetime). + + 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 packets over IP + Multicast to UDP port 5353." + + This document uses the terms "shared" and "unique" when referring to + resource record sets. + + A "shared" resource record set is one where several Multicast DNS + responders may have records with that 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 9.1 "Probing". + For fault-tolerance and other reasons it is permitted sometimes 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 or the + answers will be perceived to be in conflict with each other. + + Strictly speaking the terms "shared" and "unique" apply to resource + record sets, not to individual resource records, but 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 + + This document proposes that the DNS top-level domain ".local." be + designated 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, 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 multicast address (224.0.0.251 or its IPv6 equivalent + FF02::FB). + + +Expires 10th February 2007 Cheshire & Krochmal [Page 4] + +Internet Draft Multicast DNS 10th August 2006 + + + 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 in a DHCP option, or via + any other valid mechanism for configuring the DNS search list. In + this respect the ".local." suffix is treated no differently to any + other search domain that might appear in the DNS search list. + + 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 which disrupt communication with the greater + Internet. When resolving global names via local multicast, it is even + more important to use DNSSEC 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 in detail, instead concentrating on the issue of resolving local + names using DNS packets sent to a multicast address. + + 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, for example, + "cheshire.apple.com." For those of us who have this luxury, this + works very well. However, the majority of home customers do not have + easy access to any portion of the global DNS namespace within which + they have the authority to create names as they wish. This leaves the + majority of home computers effectively anonymous for practical + purposes. + + 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 "cheshire.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 using + that name until such time as a name conflict occurs on the link which + is not resolved in the user's favour. If this happens, the computer + (or its human user) SHOULD cease using the name, and may choose to + 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. + + The point made in the previous paragraph is very important and bears + repeating. It is easy for those of us in the IETF community who run + our own name servers at home to forget that the majority of computer + + +Expires 10th February 2007 Cheshire & Krochmal [Page 5] + +Internet Draft Multicast DNS 10th August 2006 + + + users do not run their own name server and have no easy way to create + their own host names. When these users wish to transfer files between + two laptop computers, they are frequently reduced to typing in + dotted-decimal IP addresses because they simply have no other way for + one host to refer to the other by name. This is a sorry state of + affairs. What is worse, most users don't even bother trying to use + dotted-decimal IP addresses. Most users still move data between + machines by burning it onto CD-R, copying it onto a USB "keychain" + flash drive, or similar removable media. + + In a world of gigabit Ethernet and ubiquitous wireless networking it + is a sad indictment of the networking community that most users still + prefer sneakernet. + + Allowing ad-hoc allocation of single-label names in a single flat + ".local." namespace may seem to invite chaos. However, operational + experience with AppleTalk NBP names [NBP], which on any given link + are also effectively single-label names in a flat namespace, shows + that in practice name collisions happen extremely rarely and are not + a problem. Groups of computer users from disparate organizations + bring Macintosh laptop computers to events such as IETF Meetings, the + Mac Hack conference, the Apple World Wide Developer Conference, etc., + and complaints at these events about users suffering conflicts and + being forced to rename their machines have never been an issue. + + This document advocates a single flat namespace for dot-local host + names, (i.e. the names of DNS address records), but other DNS record + types (such as those used by DNS Service Discovery [DNS-SD]) may + contain as many labels as appropriate for the desired usage, subject + to the 255-byte name length limit specified below in Section 3.3 + "Maximum Multicast DNS Name Length". + + Enforcing uniqueness of host names (i.e. the names of DNS address + records mapping names to IP addresses) 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 are 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. + + + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 6] + +Internet Draft Multicast DNS 10th August 2006 + + +3.1 Governing Standards Body + + Note that this use of the ".local." suffix falls under IETF/IANA + jurisdiction, not ICANN jurisdiction. DNS is an IETF network + protocol, governed by protocol rules defined by the IETF. These IETF + protocol rules dictate character set, maximum name length, packet + format, etc. ICANN determines additional rules that apply when the + IETF's DNS protocol is used on the public Internet. In contrast, + private uses of the DNS protocol on isolated private networks are not + governed by ICANN. Since this proposed change is a change to the core + DNS protocol rules, it affects everyone, not just those machines + using the ICANN-governed Internet. Hence this change falls into the + category of an IETF protocol rule, not an ICANN usage rule. + + This allocation of responsibility is formally established in + "Memorandum of Understanding Concerning the Technical Work of the + Internet Assigned Numbers Authority" [RFC 2860]. Exception (a) of + clause 4.3 states that the IETF has the authority to instruct IANA + to reserve pseudo-TLDs as required for protocol design purposes. + For example, "Reserved Top Level DNS Names" [RFC 2606] defines + the following pseudo-TLDs: + + .test + .example + .invalid + .localhost + + +3.2 Private DNS Namespaces + + Note also that 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. There are also implementations for + Linux and other platforms [dotlocal]. Operators setting up private + internal networks ("intranets") are advised that their lives may be + easier if they avoid using the suffix ".local." in names in their + private internal DNS server. Alternative possibilities include: + + .intranet + .internal + .private + .corp + .home + .lan + + Another alternative naming scheme, advocated by Professor D. J. + Bernstein, is to use a numerical suffix, such as ".6." [djbdl]. + + + + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 7] + +Internet Draft Multicast DNS 10th August 2006 + + +3.3 Maximum Multicast DNS Name Length + + RFC 1034 says: + + "the total number of octets that represent a domain name (i.e., + the sum of all label octets and label lengths) is limited to 255." + + This text implies that the final root label at the end of every name + is included in this count (a name can't be represented without it), + but the text does not explicitly state that. Implementations of + Multicast DNS MUST include the label length byte of the final root + label at the end of every name when enforcing the rule that no name + may be longer than 255 bytes. For example, the length of the name + "apple.com." is considered to be 11, which is the number of bytes it + takes to represent that name in a packet without using name + compression: + + ------------------------------------------------------ + | 0x05 | a | p | p | l | e | 0x03 | c | o | m | 0x00 | + ------------------------------------------------------ + + +4. 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 clients that check + the IP TTL on reception to determine whether the packet originated + on the local link. These older clients 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 link-local multicast address) + 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. + + The test for whether a response originated on the local link + is done in two ways: + + * All responses sent to the link-local multicast address 224.0.0.251 + 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. + + +Expires 10th February 2007 Cheshire & Krochmal [Page 8] + +Internet Draft Multicast DNS 10th August 2006 + + + * For responses sent to a unicast destination address, the source IP + address in the packet is checked to see if it is an address on a + local subnet. An 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. + + Since queriers will ignore responses apparently originating outside + the local subnet, responders 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 link-local multicast address 224.0.0.251, from a + source address not apparently on the same subnet as the responder, + then even if the query indicates that a unicast response is preferred + (see Section 6.5, "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. + + +5. 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 multicast address 224.0.0.251. 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. + + 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 IPv6 + mDNS link-local multicast address FF02::FB. + + + + + + + + + + + + + + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 9] + +Internet Draft Multicast DNS 10th August 2006 + + +6. Querying + + There are three kinds of Multicast DNS Queries, one-shot queries of + the kind made by today's conventional DNS clients, one-shot queries + accumulating multiple responses made by multicast-aware DNS clients, + and continuous ongoing Multicast DNS Queries used by IP network + browser software. + + A Multicast DNS Responder that is offering records that are intended + to be unique on the local link 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. + + +6.1 One-Shot Multicast DNS Queries + + An unsophisticated DNS client may simply send its DNS queries blindly + to 224.0.0.251:5353, without necessarily even being aware what a + multicast address is. This change can typically be implemented with + just a few lines of code in an existing DNS resolver library. Any + time the name being queried for falls within one of the reserved + mDNS domains (see Section 12 "Special Characteristics of Multicast + DNS Domains") the query is sent to 224.0.0.251:5353 instead of the + configured unicast DNS server address that would otherwise be used. + Typically the timeout would also be shortened to two or three + seconds, but it's possible to make a minimal mDNS client with no + other changes apart from these. + + A simple DNS client 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://cheshire.local." into their Web browser and + gets to see the page they were hoping for, then the protocol has met + the user's needs in this case. + + While an unsophisticated DNS client like this is perfectly adequate + for simple hostname lookup, it may not get ideal behavior in + other cases. Additional refinements that may be adopted by more + sophisticated clients are described below. + + +6.2 One-Shot Queries, Accumulating Multiple Responses + + A more sophisticated DNS client should understand that Multicast DNS + is not exactly the same as unicast DNS, and should modify its + behavior in some simple ways. + + As described above, there are some cases, such as looking up the + address associated with a unique host name, where a single response + is sufficient, and moreover may be all that is expected. However, + there are other DNS queries where more than one response is + + +Expires 10th February 2007 Cheshire & Krochmal [Page 10] + +Internet Draft Multicast DNS 10th August 2006 + + + possible, and for these queries a more sophisticated Multicast DNS + client should include the ability to wait for an appropriate period + of time to collect multiple responses. + + A naive DNS client retransmits its query only so long as it has + received no response. A more sophisticated Multicast DNS client is + aware that having received one response is not necessarily an + indication that it might not receive others, and has the ability to + retransmit its query an appropriate number of times at appropriate + intervals until it is satisfied with the collection of responses it + has gathered. + + A more sophisticated Multicast DNS client that is retransmitting + a query for which it has already received some responses, MUST + implement Known Answer Suppression, as described below in Section 7.1 + "Known Answer Suppression". This indicates to responders who have + already replied that their responses have been received, and they + don't need to send them again in response to this repeated query. In + addition, when retransmitting queries, the interval between the first + two queries SHOULD be one second, and the intervals between + subsequent queries SHOULD double. + + +6.3 Continuous Multicast DNS Querying + + In One-Shot Queries, with either a single or multiple responses, + the underlying assumption is that the transaction begins when the + application issues a query, and ends when all the desired responses + have been received. There is another type of operation which is more + akin to continuous monitoring. + + iTunes users are accustomed to seeing a list of shared network music + libraries in the sidebar of the iTunes window. There is no "refresh" + button for the user to click because the list is always accurate, + always reflecting the currently available libraries. When a new + library becomes available it promptly appears in the list, and when + a library becomes unavailable it promptly disappears. It is vitally + important that this responsive user interface be achieved without + naive polling that would place an unreasonable burden on the network. + + Therefore, when retransmitting mDNS queries to implement this kind + of continuous monitoring, the interval between the first two queries + SHOULD be one second, the intervals between the subsequent queries + SHOULD double, and the querier MUST implement Known Answer + Suppression, as described below in Section 7.1. 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 + + +Expires 10th February 2007 Cheshire & Krochmal [Page 11] + +Internet Draft Multicast DNS 10th August 2006 + + + query of the series by a randomly-chosen amount in the range + 20-120ms. + + 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 this time is reached, + a Multicast DNS Querier which has 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 re-issue its query + to determine whether the record is still valid. + + To perform this cache maintenance, a Multicast DNS Querier should + plan to re-query for records 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 after four queries no answer is received, 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 + 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 bandwidth checking whether the record remains valid. + + 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. + + +6.4 Multiple Questions per Query + + Multicast DNS allows a querier to place multiple questions in the + Question Section of a single Multicast DNS query packet. + + The semantics of a Multicast DNS query packet containing multiple + questions is identical to a series of individual DNS query packets + containing one question each. Combining multiple questions into a + single packet is purely an efficiency optimization, and has no other + semantic significance. + + + + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 12] + +Internet Draft Multicast DNS 10th August 2006 + + +6.5 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, and + can 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, or 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 + 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 + responses instead of 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 "QU" bit in those questions. + + When a question is retransmitted (as described in Section 6.3 + "Continuous Multicast DNS Querying") the "QU" 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 (see "Known Answer Suppression" below) 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 + "Benefits of Multicast Responses" below). In addition, the "QU" 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 + issued by clients afterwards should be treated as normal "QM" + questions and SHOULD NOT have the "QU" 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. If the responder has not multicast that record + + +Expires 10th February 2007 Cheshire & Krochmal [Page 13] + +Internet Draft Multicast DNS 10th August 2006 + + + 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 with the "unicast response" bit set, the + responder should always generate the requested unicast response, but + may also send a multicast announcement too if the time since the last + multicast announcement of that record is more than a quarter of its + TTL. + + Except when defending a unique name against a probe from another host + unicast replies are subject to all the same packet generation rules + as multicast replies, including the cache flush bit (see Section + 11.3, "Announcements to Flush Outdated Cache Entries") and randomized + delays to reduce network collisions (see Section 8, "Responding"). + + +6.6 Delaying Initial Query + + If a query is issued for which there already exist one or more + records in the local cache, and those record(s) were received with + the cache flush bit set (see Section 11.3, "Announcements to Flush + Outdated Cache Entries"), indicating that they form a unique RRSet, + then the host SHOULD delay its initial query by imposing a random + delay from 500-1000ms. This is to avoid the situation where a group + of hosts are synchronized by some external event and all perform + the same query simultaneously. This means that when the first host + (selected randomly by this algorithm) transmits its query, all the + other hosts that were about to transmit the same query can suppress + their superfluous queries, as described in "Duplicate Question + Suppression" below. + + +6.7 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 a + "QU" query, as described above in Section 6.5 "Questions Requesting + Unicast Responses". 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, 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. + + +Expires 10th February 2007 Cheshire & Krochmal [Page 14] + +Internet Draft Multicast DNS 10th August 2006 + + +7. Duplicate Suppression + + A variety of techniques are used to reduce the amount of redundant + 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 message with + those answers. + + A Multicast DNS Responder SHOULD 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 their original TTL. Doing so would simply consume space in the + packet without achieving the goal of suppressing responses, and would + therefore be a pointless waste of network bandwidth. + + 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 Multi-Packet 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 then + 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. + + +Expires 10th February 2007 Cheshire & Krochmal [Page 15] + +Internet Draft Multicast DNS 10th August 2006 + + + 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-500ms. This gives the Multicast DNS Querier time to + send additional Known Answer packets before the Responder responds. + If the Responder sees any of its answers listed in the Known Answer + lists of subsequent packets from the querying host, it SHOULD delete + that answer from the list of answers it is planning to give, provided + that no other host on the network is also waiting to receive the same + answer record. + + 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-500ms 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 wasting bandwidth + 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 send a query, and it sees another host on + the network send a query containing the same question, and the Known + Answer Section of that query does not contain any records which 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 + clients 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 packet 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. When multiple responders on the network have the same data, + there is no need for all of them to respond. + + This feature is particularly useful when multiple Sleep Proxy Servers + are deployed (see Section 17, "Multicast DNS and Power Management"). + + +Expires 10th February 2007 Cheshire & Krochmal [Page 16] + +Internet Draft Multicast DNS 10th August 2006 + + + In the future it is possible that every general-purpose OS (Mac, + Windows, Linux, etc.) will implement Sleep Proxy Service as a matter + of course. In this case there could be a large number of Sleep Proxy + Servers on any given network, which is good for reliability and + fault-tolerance, but would be bad for the network if every Sleep + Proxy Server were to answer every query. + +8. Responding + + When a Multicast DNS Responder constructs and sends a Multicast DNS + response packet, the Answer Section of that packet 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 packet, 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 Answer Section of outgoing response packets. 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 done 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"), and the record rrclass must match the + question qclass (unless the qclass is "ANY"). + + A Multicast DNS Responder MUST only respond when it has a positive + non-null response to send. Error responses must never be sent. The + non-existence of any name in a Multicast DNS Domain is ascertained by + the failure of any machine to respond to the Multicast DNS query, not + by NXDOMAIN errors. + + 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 [IEEE802] and similar shared + multiple access networks SHOULD have the capability of delaying its + responses by up to 500ms, as determined by the rules 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 10Mb/s Ethernet, this equates + to a vulnerable time window of 25.6us. On higher-speed variants of + Ethernet, the vulnerable time window is shorter. + +Expires 10th February 2007 Cheshire & Krochmal [Page 17] + +Internet Draft Multicast DNS 10th August 2006 + + + In the case where a Multicast DNS Responder has good reason to + believe that it will be the only responder on the link with a + positive non-null response (i.e. because it is able to answer every + question in the query packet, 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 10ms. + 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 + immediately, without delay. A probe query can be distinguished from + a normal query by the fact that a probe query contains a proposed + record in the Authority Section which answers the question in the + Question Section (for more details, see Section 9.1, "Probing"). + + Responding immediately 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 immediately without delay + is *not* appropriate for things like looking up PTR records used for + DNS Service Discovery [DNS-SD], 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-120ms. + The reason for requiring that the delay be at least 20ms 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 packet. + + 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-500ms, + to allow enough time for all the known answer packets to arrive, + as described in Section 7.2 "Multi-Packet Known Answer Suppression". + + Except when a unicast response has been explicitly requested via the + "unicast response" bit, Multicast DNS Responses MUST be sent to UDP + port 5353 (the well-known port assigned to mDNS) on the 224.0.0.251 + multicast address (or its IPv6 equivalent FF02::FB). Operating in a + Zeroconf environment requires constant vigilance. Just because a name + has been previously verified unique does not mean it will continue + to be so indefinitely. By allowing all Multicast DNS Responders to + constantly monitor their peers' responses, conflicts arising out + of network topology changes can be promptly detected and resolved. + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 18] + +Internet Draft Multicast DNS 10th August 2006 + + + Sending all responses by multicast also facilitates opportunistic + caching by other hosts on the network. + + 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 client on the network should have seen the + previous transmission and cached it. A client 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 250ms since the last time the record was + multicast on that interface. + + +8.2 Multi-Question Queries + + Multicast DNS Responders MUST correctly handle DNS query packets + containing more than one question, by answering any or all of the + questions to which they have answers. Any (non-defensive) answers + generated in response to query packets containing more than one + question SHOULD be randomly delayed in the range 20-120ms, or + 400-500ms if the TC (truncated) bit is set, as described above. + (Answers defending a name, in response to a probe for that name, + are not subject to this delay rule and are still sent immediately.) + + +8.2 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 packet. 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 500ms if that will permit them to be aggregated with + other responses scheduled to go out a little later. + + + + + + + + + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 19] + +Internet Draft Multicast DNS 10th August 2006 + + +8.3 Legacy Unicast Responses + + If the source UDP port in a received Multicast DNS Query is not port + 5353, this indicates that the client originating the query is a + simple client that does not fully implement all of Multicast DNS. + In this case, the Multicast DNS Responder MUST send a UDP response + directly back to the client, 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 packet. + + 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 11 "Resource Record TTL + Values and Cache Coherency" to update and invalidate stale data. Were + unicast responses sent to legacy clients to use the same high TTLs, + these legacy clients, which do not implement these cache coherency + mechanisms, could retain stale cached resource record data long after + it is no longer valid. + + Having sent this unicast response, if the Responder has not sent this + record in any multicast response recently, it SHOULD schedule the + record to be sent via multicast as well, to facilitate passive + conflict detection. "Recently" in this context means "if the time + since the record was last sent via multicast is less than one quarter + of the record's TTL". + + Note that while legacy queries usually contain exactly one question, + they are permitted to contain multiple questions, and responders + listening for multicast queries on 224.0.0.251:5353 MUST be prepared + to handle this correctly, responding by generating a unicast response + containing the list of question(s) they are answering in the Question + Section, and the records answering those question(s) in the Answer + Section. + + +9. 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 an Ethernet "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. + + +Expires 10th February 2007 Cheshire & Krochmal [Page 20] + +Internet Draft Multicast DNS 10th August 2006 + + +9.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 + its address record which maps its unique host name to its unique IP + address. All Probe Queries SHOULD be done using the desired resource + record name and query type T_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, 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 HINFO record for that name. + + 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 packet + for all of its resource records instead of needing a separate packet + for each. For example, a host can simultaneously probe for uniqueness + of its "A" record and all its SRV records [DNS-SD] in the same query + packet. + + When ready to send its mDNS probe packet(s) the host should first + wait for a short random delay time, uniformly distributed in the + range 0-250ms. This random delay is to guard against the case where a + group of devices are powered on simultaneously, or a group of 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. + + 250ms after the first query the host should send a second, then + 250ms after that a third. If, by 250ms after the third probe, no + conflicting Multicast DNS responses have been received, the host may + move to the next step, announcing. (Note that this 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 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 750ms 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 + + +Expires 10th February 2007 Cheshire & Krochmal [Page 21] + +Internet Draft Multicast DNS 10th August 2006 + + + can add additional delay. For this reason, it is important that when + a device receives a probe query for a name that it is currently using + for unique records, 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 + at most one host should ever respond to a given probe question. Even + when a single DNS query packet contains multiple probe questions, + it would be unusual for that packet to elicit a defensive response + from more than one other host. Because of the mDNS multicast rate + limiting rules, the first two 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. At the present time, this + document recommends that the third probe SHOULD be sent as a standard + "QM" question, for backwards compatibility with the small number of + old devices still in use that don't implement unicast responses. + + If, at any time during probing, from the beginning of the initial + random 0-250ms delay onward, any conflicting Multicast DNS responses + are received, then the probing host MUST defer to the existing host, + and MUST choose new names for some or all of its resource records + as appropriate, to avoid conflict with pre-existing hosts on the + network. In the case of a host probing using query type T_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 failures 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, with absolute certainty, that + its unique resource record set name, rrtype and rrclass cannot + already be in use by any other responder on the network, then it + MAY 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. + + + + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 22] + +Internet Draft Multicast DNS 10th August 2006 + + +9.2 Simultaneous Probe Tie-Breaking + + 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 packets's Authority Section with the record or + 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 packet [RFC 2136]. + + 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 T_ANY (255) is used, which will elicit answers for all records + with that name. However, for tie-breaking 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 treats this exactly as if + it had received a positive answer to its query, and concludes that it + may not use the desired name. + + The determination of "lexicographically later" is performed by first + comparing the record class, 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. + + In the case of resource records containing rdata that is subject to + name compression, 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.) + + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 23] + +Internet Draft Multicast DNS 10th August 2006 + + + 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: + + cheshire.local. A 169.254.99.200 + cheshire.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. + + +9.2.1 Simultaneous Probe Tie-Breaking for Multiple Records + + When a host is probing for a set of records with the same name, or a + packet is received containing multiple tie-breaker records answering + a given probe question in the Question Section, the host's records + and the tie-breaker records from the packet 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 for TXT is 16) and the SRV + record comes second (the rrtype for SRV is 33). + + 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 tie-break. 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. + +Expires 10th February 2007 Cheshire & Krochmal [Page 24] + +Internet Draft Multicast DNS 10th August 2006 + + +9.3 Announcing + + The second startup step is that the Multicast DNS Responder MUST send + a gratuitous Multicast DNS Response containing, in the Answer + Section, all of its 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 + Service Discovery [DNS-SD]), 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 packet is the mDNS "cache flush" bit and is + discussed in more detail below in Section 11.3 "Announcements to + Flush Outdated Cache Entries". + + The Multicast DNS Responder MUST send at least two gratuitous + responses, one second apart. A Responder MAY send up to eight + gratuitous Responses, provided that the interval between gratuitous + responses doubles 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. It is not + uncommon for protocol designers to encounter some problem which they + decide to solve using regular periodic announcements, but this is + generally not a wise protocol design choice. In the small scale + periodic announcements may seem to remedy the short-term problem, + but they do not scale well if the protocol becomes successful. + If every host on the network implements the protocol -- if multiple + applications on every host on the network are implementing the + protocol -- then even a low periodic rate of just one announcement + per minute per application per host can add up to multiple packets + per second in total. While gigabit Ethernet may be able to carry + a million packets per second, other network technologies cannot. + For example, while IEEE 802.11g wireless has a nominal data rate of + up to 54Mb/sec, multicasting just 100 packets per second can consume + the entire available bandwidth, leaving nothing for anything else. + + With the increasing popularity of hand-held devices, unnecessary + continuous packet transmission can have bad implications for battery + life. It's worth pointing out the precedent that TCP was also + designed with this "no regular periodic idle packets" philosophy. + Standard TCP sends packets only when it has data to send or + acknowledge. If neither client nor server sends any bytes, then the + + +Expires 10th February 2007 Cheshire & Krochmal [Page 25] + +Internet Draft Multicast DNS 10th August 2006 + + + TCP code will send no packets, and a TCP connection can remain active + in this state indefinitely, with no packets being exchanged for + hours, days, weeks or months. + + Whenever a Multicast DNS Responder receives any Multicast DNS + response (gratuitous or otherwise) containing a conflicting resource + record, the conflict MUST be resolved as described below in "Conflict + Resolution". + + +9.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. + + In the case of shared records, a host MUST send a "goodbye" + announcement with TTL zero (see Section 11.2 "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. + + +10. Conflict Resolution + + A conflict occurs when a Multicast DNS Responder has a unique record + for which it is authoritative, and it receives a Multicast DNS + response packet 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. + + +Expires 10th February 2007 Cheshire & Krochmal [Page 26] + +Internet Draft Multicast DNS 10th August 2006 + + + Whenever a Multicast DNS Responder receives any Multicast DNS + response (gratuitous or otherwise) containing a conflicting resource + record in the Answer Section, the Multicast DNS Responder MUST + immediately reset its conflicted unique record to probing state, and + go through the startup steps described above in Section 9. "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 is obtained. + + The recommended course of action after probing and failing is as + follows: + + o 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, appending the + digit "2" to the name, or incrementing a number at the end of the + name if one is already present. + + o Probe again, and repeat until a unique name is found. + + o Record this newly chosen name in persistent storage so that the + device will use the same name the next time it is power-cycled. + + o 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 iTunes music + server on the network. Your music has been renamed to + "Bob's Music (G4 Cube)". If you want to change this name, + use [describe appropriate menu item or preference dialog]. + + o If after one minute of probing the Multicast DNS Responder has been + unable to find any unused name, it should display a message to the + user or operator informing them 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. + + How the user or operator is informed depends on context. A desktop + computer with a screen might put up a dialog box. A headless server + + +Expires 10th February 2007 Cheshire & Krochmal [Page 27] + +Internet Draft Multicast DNS 10th August 2006 + + + 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 other error conditions. On the other hand a headless + server in the closet may not inform the user at all -- if the user + cares, 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. + + The examples in this section focus on address records (i.e. host + names), but the same considerations apply to all resource records + where uniqueness (or maintenance of some other defined constraint) + is desired. + + +11. 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, etc.) or contained within the resource record's + rdata (e.g. SRV, reverse mapping PTR record, etc.) is 120 seconds. + + The recommended TTL value for other Multicast DNS resource records + is 75 minutes. + + A client with an active outstanding query will issue a query packet + when one or more of the resource record(s) in its cache is (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 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. + + +11.1 Cooperating Multicast DNS Responders + + If a Multicast DNS Responder ("A") observes some other Multicast DNS + Responder ("B") send a Multicast DNS Response packet 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 + + +Expires 10th February 2007 Cheshire & Krochmal [Page 28] + +Internet Draft Multicast DNS 10th August 2006 + + + is a conflict and MUST be handled as described in Section 10 + "Conflict Resolution". + + If a Multicast DNS Responder ("A") observes some other Multicast DNS + Responder ("B") send a Multicast DNS Response packet 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 packet 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 packet is less than + half the true TTL from A's point of view, then A MUST mark its + record to be announced via multicast. Clients 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. + + 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. + + +11.2 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 a gratuitous announcement mDNS + 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. + + Clients 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 11.1 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. + + +11.3 Announcements to Flush Outdated Cache Entries + + Whenever a host has a resource record with potentially new data (e.g. + after rebooting, waking from sleep, connecting to a new network link, + changing IP address, etc.), the host MUST send a series of gratuitous + announcements to update cache entries in its neighbor hosts. In + + +Expires 10th February 2007 Cheshire & Krochmal [Page 29] + +Internet Draft Multicast DNS 10th August 2006 + + + these gratuitous announcements, if the record is one that is intended + to be 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, type and class 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 the Answer Section of the DNS Response, it + means, "This is an assertion that this information is true." When a + resource record appears in the Answer 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 valid". + + 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 + 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 SHOULD 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 + SHOULD set the cache flush bit on all members of the unique RRSet. + In the event that for some reason the host chooses not to send the + entire unique RRSet in a single packet or a rapid packet burst, + it MUST NOT set the cache flush bit on any of those records. + + The 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 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 apply regardless of *why* the response packet is being + generated. They apply to startup announcements as described in + + +Expires 10th February 2007 Cheshire & Krochmal [Page 30] + +Internet Draft Multicast DNS 10th August 2006 + + + Section 9.3 "Announcing", and to responses generated as a result + of receiving query packets. + + The "cache flush" bit is only set in records in the Answer Section of + Multicast DNS responses sent to UDP port 5353. The "cache flush" bit + MUST NOT be set in any resource records in a response packet 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 packet. + + 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. + + The "cache flush" bit does apply to questions listed in the Question + Section of a Multicast DNS packet. The top bit of the rrclass field + in questions is used for an entirely different purpose (see Section + 6.5, "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 the Answer Section of + an mDNS packet (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 mDNS resource record class + 0x8001. The value 0x8001 in the rrclass field of a resource record in + an mDNS response packet 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. + + +11.4 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 mDNS 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, or wakes from sleep, or undergoes some + other similar discontinuous state change, the cache management + strategy should take that information into account. + + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 31] + +Internet Draft Multicast DNS 10th August 2006 + + +11.5 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 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 + ARP/ND requests for that address go unanswered (for an address on a + local subnet) or because a router returns an ICMP "Host Unreachable" + error (for an address on a remote subnet). + + 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. + + In any such case, the software implementing the mDNS 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 + question. If no response is received in a reasonable amount of time, + 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. + + +11.6 Passive Observation of Failures + + 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. + + +Expires 10th February 2007 Cheshire & Krochmal [Page 32] + +Internet Draft Multicast DNS 10th August 2006 + + + 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 a reasonable amount of + time, then even though its TTL may indicate that it is not yet due to + expire, that record MAY be flushed from the cache. The host SHOULD + NOT perform its own queries to re-confirm 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. + + +12. Special Characteristics of Multicast DNS Domains + + Unlike conventional DNS names, names that end in ".local." or + "254.169.in-addr.arpa." have only local significance. The same is + true of names within the IPv6 Link-Local reverse mapping domains. + + 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, and the like have increasingly meant that the answer to a + given DNS query has become dependent on the location of the querier.) + + Multicast DNS Domains are not delegated from their parent domain via + use of NS records. There are no NS records anywhere in Multicast DNS + Domains. Instead, all Multicast DNS Domains are delegated to the IP + addresses 224.0.0.251 and FF02::FB by virtue of the individual + organizations producing DNS client software deciding how to handle + those names. It would be extremely valuable for the industry if this + special handling were ratified and recorded by IANA, since otherwise + the special handling provided by each vendor is likely to be + inconsistent. + + +Expires 10th February 2007 Cheshire & Krochmal [Page 33] + +Internet Draft Multicast DNS 10th August 2006 + + + The IPv4 name server for a Multicast DNS Domain is 224.0.0.251. The + IPv6 name server 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. + + No delegation is performed within Multicast DNS Domains. Because the + cluster of loosely coordinated CPUs is cooperating to administer a + single zone, delegation is neither necessary nor desirable. 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." + + Multicast DNS Zones have no SOA 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. Multicast DNS for Service Discovery + + This document does not describe using Multicast DNS for network + browsing or service discovery. However, the mechanisms this document + describes are compatible with (and support) the browsing and service + discovery mechanisms proposed in "DNS-Based Service Discovery" + [DNS-SD]. + + +14. 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. + + +Expires 10th February 2007 Cheshire & Krochmal [Page 34] + +Internet Draft Multicast DNS 10th August 2006 + + + The option to lookup 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 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." This in turn perpetuates the + continued use of protocols like AppleTalk. If we want to retire + AppleTalk, NetBIOS, etc., we need to offer users equivalent IP + functionality that they can rely on to, "always work, like + AppleTalk." A little Multicast DNS traffic may be a burden on the + network, but it is an insignificant burden compared to continued + widespread use of AppleTalk. + + +15. Considerations for Multiple Interfaces + + A host SHOULD defend its host name (FQDN) 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 for all of its address records + on all interfaces, or it may choose to manage its Multicast DNS host + name(s) independently on each interface, potentially answering to + different names on different interfaces. + + When answering a Multicast DNS query, a multi-homed host with a + link-local address (or addresses) SHOULD take care to ensure that + any address going out in a Multicast DNS response is valid for use + on the interface on which the response is going out. + + 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 multi-homed 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 + +Expires 10th February 2007 Cheshire & Krochmal [Page 35] + +Internet Draft Multicast DNS 10th August 2006 + + + link-local Multicast DNS query, and to discover on what interface a + Multicast DNS response was received. + + There is one other special precaution that multi-homed hosts need to + take. It's common with today's laptop computers to have an Ethernet + connection and an 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: + + 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 mDNS 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 mDNS 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. + +16. 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. + +16.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 + +Expires 10th February 2007 Cheshire & Krochmal [Page 36] + +Internet Draft Multicast DNS 10th August 2006 + + + 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, 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 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. + + +16.2 Multi-Packet 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 + multi-packet query at the same time, with different known answer + lists, then they could each end up suppressing answers that the other + needs. + + +16.3 Efficiency + + If different clients on a machine were to each have their own + separate 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. + + +16.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. Due to engineering constraints, there may be situations + where embedding a Multicast DNS implementation in the client is the + most expedient solution, and while this will work in practice, + implementers should be aware of the issues outlined in this section. + + +Expires 10th February 2007 Cheshire & Krochmal [Page 37] + +Internet Draft Multicast DNS 10th August 2006 + +17. Multicast DNS and Power Management + + Many modern network devices have the ability to go into a low-power + mode where only a small part of the Ethernet hardware remains + powered, and the device can be woken up by sending a specially + formatted Ethernet frame which the device's power-management hardware + recognizes. + + To make use of this in conjunction with Multicast DNS, we propose a + network power management service called Sleep Proxy Service. A device + that wishes to enter low-power mode first uses DNS-SD to determine if + Sleep Proxy Service is available on the local network. In some + networks there may be more than one piece of hardware implementing + Sleep Proxy Service, for fault-tolerance reasons. + + If the device finds the network has Sleep Proxy Service, the device + transmits two or more gratuitous mDNS announcements setting the TTL + of its relevant resource records to zero, to delete them from + neighboring caches. The relevant resource records include address + records and SRV records, and other resource records as may apply to a + particular device. The device then communicates all of its remaining + active records, plus the names, rrtypes and rrclasses of the deleted + records, to the Sleep Proxy Service(s), along with a copy of the + specific "magic packet" required to wake the device up. + + When a Sleep Proxy Service sees an mDNS query for one of the + device's active records (e.g. a DNS-SD PTR record), it answers on + behalf of the device without waking it up. When a Sleep Proxy Service + sees an mDNS query for one of the device's deleted resource + records, it deduces that some client on the network needs to make an + active connection to the device, and sends the specified "magic + packet" to wake the device up. The device then wakes up, reactivates + its deleted resource records, and re-announces them to the network. + The client waiting to connect sees the announcements, learns the + current IP address and port number of the desired service on the + device, and proceeds to connect to it. + + The connecting client does not need to be aware of how Sleep Proxy + Service works. Only devices that implement low power mode and wish to + make use of Sleep Proxy Service need to be aware of how that protocol + works. + + The reason that a device using a Sleep Proxy Service should send more + than one goodbye packet is to ensure deletion of the resource records + from all peer caches. If resource records were to inadvertently + remain in some peer caches, then those peers may not issue any query + packets for those records when attempting to access the sleeping + device, so the Sleep Proxy Service would not receive any queries for + the device's SRV and/or address records, and the necessary wake-up + message would not be triggered. + + The full specification of mDNS / DNS-SD Sleep Proxy Service + is described in another document [not yet published]. + +Expires 10th February 2007 Cheshire & Krochmal [Page 38] + +Internet Draft Multicast DNS 10th August 2006 + + +18. Multicast DNS Character Set + + Unicast DNS has been plagued by the lack of any support for non-US + characters. Indeed, conventional DNS is usually limited to just + letters, digits and hyphens, with no spaces or other punctuation. + Attempts to remedy this for unicast DNS have been badly constrained + by the need to accommodate old buggy legacy DNS implementations. + In reality, the DNS specification actually imposes no limits on what + characters may be used in names, and good DNS implementations handle + any arbitrary eight-bit data without trouble. However, the old rules + for ARPANET host names back in the 1980s required names to be just + letters, digits, and hyphens [RFC 1034], 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 would be + more accurate to say that certain bad implementations may not handle + eight-bit data correctly, not that the protocol doesn't support it. + + 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 are encoded using precomposed UTF-8 [RFC 3629]. The characters + SHOULD conform to Unicode Normalization Form C (NFC) [UAX15]: Use + precomposed characters instead of combining sequences where possible, + e.g. use U+00C4 ("Latin capital letter A with diaeresis") instead of + U+0041 U+0308 ("Latin capital letter A", "combining diaeresis"). + + Some users of 16-bit Unicode have taken to stuffing a "zero-width + non-breaking 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 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. + + Multicast DNS implementations MUST NOT use any other encodings apart + from precomposed UTF-8 (US-ASCII being considered a compatible subset + of UTF-8). + + This point bears repeating: After many years of debate, as a + result of the need to accommodate certain DNS implementations that + apparently couldn't handle any character that's not a letter, digit + or hyphen (and apparently never will be updated to remedy this + + +Expires 10th February 2007 Cheshire & Krochmal [Page 39] + +Internet Draft Multicast DNS 10th August 2006 + + + limitation) the unicast DNS community settled on an extremely baroque + encoding called "Punycode" [RFC 3492]. 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" proposed for Unicast DNS + may be used in Multicast DNS packets. Any text being represented + internally in some other representation MUST be converted to + canonical precomposed UTF-8 before being placed in any Multicast DNS + packet. + + The simple rules for case-insensitivity in Unicast DNS also apply in + Multicast DNS; that is to say, in name comparisons, the lower-case + letters "a" to "z" (0x61 to 0x7A) match their upper-case equivalents + "A" to "Z" (0x41 to 0x5A). Hence, if a client issues a query for an + address record with the name "cheshire.local", then a responder + having an address record with the name "Cheshire.local" should + issue a response. No other automatic equivalences should be assumed. + In particular all UTF-8 multi-byte 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 client 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. + + + + + + + + + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 40] + +Internet Draft Multicast DNS 10th August 2006 + + +19. Multicast DNS Message Size + + RFC 1035 restricts DNS Messages carried by UDP to no more than 512 + bytes (not counting the IP or UDP headers) [RFC 1035]. 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 mDNS Resource Record which 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, sent 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 + re-assemble fragmented IP datagrams, so large Resource Records + SHOULD NOT be used except in specialized cases where the implementer + knows that all receivers implement reassembly. + + 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. + + + + + + + + + + + + + + + + + + + + + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 41] + +Internet Draft Multicast DNS 10th August 2006 + + +20. Multicast DNS Message Format + + This section describes specific restrictions on the allowable + values for the header fields of a Multicast DNS message. + + +20.1 ID (Query Identifier) + + Multicast DNS clients SHOULD listen for gratuitous responses + issued by hosts booting up (or waking up from sleep or otherwise + joining the network). Since these gratuitous responses may contain a + useful answer to a question for which the client is currently + awaiting an answer, Multicast DNS clients 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 clients MAY cache 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 ID SHOULD be set to zero on + transmission. + + In multicast responses, including gratuitous multicast responses, the + Query ID MUST be set to zero on transmission, and MUST be ignored on + reception. + + In unicast response messages generated specifically in response to a + particular (unicast or multicast) query, the Query ID MUST match the + ID from the query message. + + +20.2 QR (Query/Response) Bit + + In query messages, MUST be zero. + In response messages, MUST be one. + + +20.3 OPCODE + + In both multicast query and multicast response messages, MUST be zero + (only standard queries are currently supported over multicast, unless + other queries are allowed by future IETF Standards Action). + + + + + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 42] + +Internet Draft Multicast DNS 10th August 2006 + + +20.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 implies there's some + other place where "better" information may be found) and MUST be + ignored on reception. + + +20.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 MAY choose + to 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 client SHOULD re-issue its + query using TCP in order to receive the larger response. + + +20.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. + + +20.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. + + +20.8 Z (Zero) Bit + + In both query and response messages, the Zero bit MUST be zero on + transmission, and MUST be ignored on reception. + + + + + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 43] + +Internet Draft Multicast DNS 10th August 2006 + + +20.9 AD (Authentic Data) Bit [RFC 2535] + + In query messages the Authentic Data bit MUST be zero on + transmission, and MUST be ignored on reception. + + In response messages, the Authentic Data bit MAY be set. Resolvers + receiving response messages with the AD bit set MUST NOT trust the AD + bit unless they trust the source of the message and either have a + secure path to it or use DNS transaction security. + + +20.10 CD (Checking Disabled) Bit [RFC 2535] + + In query messages, a resolver willing to do cryptography SHOULD set + the Checking Disabled bit to permit it to impose its own policies. + + In response messages, the Checking Disabled bit MUST be zero on + transmission, and MUST be ignored on reception. + + +20.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. + + +20.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. + + +20.13 Repurposing of top bit of rrclass in Answer Section + + In the Answer Section 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). + + + + + + + + + + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 44] + +Internet Draft Multicast DNS 10th August 2006 + + +21. Choice of UDP Port Number + + Arguments were made for and against using Multicast on UDP port 53. + The final decision was to use UDP port 5353. Some of the arguments + for and against are given below. + + +21.1 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 clients to do simple + mDNS 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. + + +21.2 Arguments for using a different port (UDP port 5353): + + * This is not "just DNS". This is a DNS-like protocol, but different. + + * Changing client code to use a different port number is not hard. + + * Using the same port number makes it hard to run an mDNS Responder + and a conventional unicast DNS server on the same machine. If a + conventional unicast DNS server wishes to implement mDNS as well, + it can still do that, by opening two sockets. Having two different + port numbers is important to allow 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 the user becomes unable to access their local + network printer sitting on their desk right next to their computer. + Using a different UDP port eliminates this particular problem. + + * On many operating systems, unprivileged clients may not send or + receive packets on low-numbered ports. This means that any client + sending or receiving mDNS packets on port 53 would have to run + as "root", which is an undesirable security risk. Using a higher- + numbered UDP port eliminates this particular problem. + + + + + + + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 45] + +Internet Draft Multicast DNS 10th August 2006 + + +22. Summary of Differences Between Multicast DNS and Unicast DNS + + The value of Multicast DNS is that it 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 authoritarian + hierarchy controlled by a strict chain of formal delegations from the + top. These differences are listed below: + + Multicast DNS... + * uses multicast + * uses UDP port 5353 instead of port 53 + * operates in well-defined parts of the DNS namespace + * uses UTF-8, and only UTF-8, to encode resource record names + * defines a clear limit on the maximum legal domain name (255 bytes) + * allows larger UDP packets + * allows more than one question in a query packet + * 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 tie-breaking + * ignores the Query ID field (except for generating legacy responses) + * doesn't require the question to be repeated in the response packet + * uses gratuitous responses to announce new records to the peer group + * defines a "unicast response" bit in the rrclass of query questions + * defines a "cache flush" bit in the rrclass of response answers + * uses DNS TTL 0 to indicate that a record has been deleted + * monitors queries to perform Duplicate Question Suppression + * monitors responses to perform Duplicate Answer Suppression... + * ... and Ongoing Conflict Detection + * ... and Opportunistic Caching + + + + + + + + + + + + + + + + + + + + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 46] + +Internet Draft Multicast DNS 10th August 2006 + +23. Benefits of Multicast Responses + + Some people have argued that sending responses via multicast is + inefficient on the network. In fact using multicast responses results + in a net lowering of overall multicast traffic, for a variety of + reasons, in addition to other benefits. + + * One multicast response can update the cache on all machines on the + network. If another machine later wants to issue the same query, it + already has the answer in its cache, so it may not need to even + transmit that multicast query on the network at all. + + * 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. + + * When a host sees a multicast query, but does not see the corres- + ponding 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 significantly higher packet rate. + + * Multicast responses allow passive conflict detection. Without this + ability, some other conflict detection mechanism would be needed, + imposing its own additional burden on the network. + + * When using delayed responses to reduce network collisions, clients + need to maintain a list recording to whom each answer should be + sent. The option of multicast responses allows clients 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. + + * 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. + + * 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. + +Expires 10th February 2007 Cheshire & Krochmal [Page 47] + +Internet Draft Multicast DNS 10th August 2006 + + +24. 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 + multi-homed host, with one connection to the logical "IPv4 Ethernet + segment", and a connection to the logical "IPv6 Ethernet segment". + + +24.1 IPv6 Multicast Addresses by Hashing + + 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. + + There are some problems with this: + + * When a host has a large number of records with different names, the + host may have to join a large number of multicast groups. This 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 + software for filtering, thereby defeating the point of using a + multicast address range in the first place. + + * 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. + + * Ongoing Conflict Detection doesn't work. + +Expires 10th February 2007 Cheshire & Krochmal [Page 48] + +Internet Draft Multicast DNS 10th August 2006 + + +25. 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 administered DNS. + + In an environment where there is a group of cooperating participants, + but there may be other antagonistic participants on the same physical + link, the cooperating participants need to use IPSEC signatures + and/or DNSSEC [RFC 2535] signatures so that they can distinguish mDNS + messages from trusted participants (which they process as usual) from + mDNS messages from untrusted participants (which they silently + discard). + + When 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. + + + + + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 49] + +Internet Draft Multicast DNS 10th August 2006 + + +26. IANA Considerations + + IANA has allocated the IPv4 link-local multicast address 224.0.0.251 + for the use described in this document. + + IANA has allocated the IPv6 multicast address set FF0X::FB for the + use described in this document. Only address FF02::FB (Link-Local + Scope) is currently in use by deployed software, but it is possible + that in future implementers may experiment with Multicast DNS using + larger-scoped addresses, such as FF05::FB (Site-Local Scope). + + When this document is published, IANA should designate a list of + domains which are deemed to have only link-local significance, as + described in Section 12 of this document ("Special Characteristics of + Multicast DNS Domains"). + + The re-use of the top bit of the rrclass field in the Question and + Answer 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. However, since 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, this + limitation is likely to remain a purely theoretical one. + + No other IANA services are required by this document. + + +27. Acknowledgments + + The concepts described in this document have been explored, developed + and implemented with help from Freek Dijkstra, Erik Guttman, Paul + Vixie, Bill Woodcock, and others. + + Special thanks go to Bob Bradley, Josh Graessley, Scott Herscher, + Roger Pantos and Kiren Sekar for their significant contributions. + + +28. Deployment History + + Multicast DNS client software first became available to the public + in Mac OS 9 in 2001. Multicast DNS Responder software first began + shipping to end users in large volumes (i.e. millions) with the + launch of Mac OS X 10.2 Jaguar in August 2002, and became available + for Microsoft Windows users with the launch of Apple's "Rendezvous + for Windows" (now "Bonjour for Windows") in June 2004. + + Apple released the source code for the mDNSResponder daemon as Open + Source in September 2002, first under Apple's standard Apple Public + Source License, and then later, in August 2006, under the Apache + License, Version 2.0. + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 50] + +Internet Draft Multicast DNS 10th August 2006 + + + In addition to desktop and laptop computers running Mac OS X and + Microsoft Windows, Multicast DNS is implemented in a wide range of + hardware devices, such as Apple's "AirPort Extreme" and "AirPort + Express" wireless base stations, 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. + + +29. Copyright Notice + + Copyright (C) The Internet Society (2006). + + This document is subject to the rights, licenses and restrictions + contained in BCP 78, and except as set forth therein, the authors + retain all their rights. For the purposes of this document, + the term "BCP 78" refers exclusively to RFC 3978, "IETF Rights + in Contributions", published March 2005. + + This document and the information contained herein are provided on an + "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS + OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET + ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, + INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE + INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED + WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + + +30. Normative References + + [RFC 1034] Mockapetris, P., "Domain Names - Concepts and + Facilities", STD 13, RFC 1034, November 1987. + + [RFC 1035] Mockapetris, P., "Domain Names - Implementation and + Specifications", STD 13, RFC 1035, November 1987. + + [RFC 2119] Bradner, S., "Key words for use in RFCs to Indicate + Requirement Levels", RFC 2119, March 1997. + + [RFC 3629] Yergeau, F., "UTF-8, a transformation format of ISO + 10646", RFC 3629, November 2003. + + [UAX15] "Unicode Normalization Forms" + http://www.unicode.org/reports/tr15/ + + + + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 51] + +Internet Draft Multicast DNS 10th August 2006 + + +31. Informative References + + [dotlocal] + + [djbdl] + + [DNS-SD] Cheshire, S., and M. Krochmal, "DNS-Based Service + Discovery", Internet-Draft (work in progress), + draft-cheshire-dnsext-dns-sd-04.txt, August 2006. + + [IEEE802] IEEE Standards for Local and Metropolitan Area Networks: + Overview and Architecture. + Institute of Electrical and Electronic Engineers, + IEEE Standard 802, 1990. + + [NBP] Cheshire, S., and M. Krochmal, + "Requirements for a Protocol to Replace AppleTalk NBP", + Internet-Draft (work in progress), + draft-cheshire-dnsext-nbp-05.txt, August 2006. + + [RFC 2136] Vixie, P., et al., "Dynamic Updates in the Domain Name + System (DNS UPDATE)", RFC 2136, April 1997. + + [RFC 2462] S. Thomson and T. Narten, "IPv6 Stateless Address + Autoconfiguration", RFC 2462, December 1998. + + [RFC 2535] Eastlake, D., "Domain Name System Security Extensions", + RFC 2535, March 1999. + + [RFC 2606] Eastlake, D., and A. Panitz, "Reserved Top Level DNS + Names", RFC 2606, June 1999. + + [RFC 2860] Carpenter, B., Baker, F. and M. Roberts, "Memorandum + of Understanding Concerning the Technical Work of the + Internet Assigned Numbers Authority", RFC 2860, June + 2000. + + [RFC 3492] Costello, A., "Punycode: A Bootstring encoding of + Unicode for use with Internationalized Domain Names + in Applications (IDNA)", RFC 3492, March 2003. + + [RFC 3927] Cheshire, S., B. Aboba, and E. Guttman, + "Dynamic Configuration of IPv4 Link-Local Addresses", + RFC 3927, May 2005. + + [ZC] Williams, A., "Requirements for Automatic Configuration + of IP Hosts", Internet-Draft (work in progress), + draft-ietf-zeroconf-reqts-12.txt, September 2002. + + + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 52] + +Internet Draft Multicast DNS 10th August 2006 + + +32. Authors' Addresses + + Stuart Cheshire + Apple Computer, Inc. + 1 Infinite Loop + Cupertino + California 95014 + USA + + Phone: +1 408 974 3207 + EMail: rfc [at] stuartcheshire [dot] org + + + Marc Krochmal + Apple Computer, Inc. + 1 Infinite Loop + Cupertino + California 95014 + USA + + Phone: +1 408 974 4368 + EMail: marc [at] apple [dot] com + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Expires 10th February 2007 Cheshire & Krochmal [Page 53] -- cgit