| rfc8766xml2.original.xml | rfc8766.xml | |||
|---|---|---|---|---|
| <?xml version="1.0" encoding="UTF-8"?> | <?xml version='1.0' encoding='utf-8'?> | |||
| <!DOCTYPE rfc SYSTEM "rfc2629.dtd"> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="std" conse | |||
| nsus="true" docName="draft-ietf-dnssd-hybrid-10" indexInclude="true" ipr="trust2 | ||||
| <?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?> | 00902" number="8766" prepTime="2020-06-22T20:59:58" scripts="Common,Latin" sortR | |||
| efs="false" submissionType="IETF" symRefs="true" tocDepth="3" tocInclude="true" | ||||
| <!-- | xml:lang="en"> | |||
| Check output with <http://tools.ietf.org/tools/idnits/> | <link href="https://datatracker.ietf.org/doc/draft-ietf-dnssd-hybrid-10" rel=" | |||
| prev"/> | ||||
| <!-- used by XSLT processors --> | <link href="https://dx.doi.org/10.17487/rfc8766" rel="alternate"/> | |||
| <!-- For a complete list and description of processing instructions (PIs), | <link href="urn:issn:2070-1721" rel="alternate"/> | |||
| please see http://xml.resource.org/authoring/README.html. --> | ||||
| <!-- Below are generally applicable Processing Instructions (PIs) that most | ||||
| I-Ds might want to use. | ||||
| (Here they are set differently than their defaults in xml2rfc v1.35) --> | ||||
| <!-- give errors regarding ID-nits and DTD validation --> | ||||
| <?rfc strict="yes" ?> | ||||
| <!-- control the table of contents (ToC) --> | ||||
| <!-- generate a ToC --> | ||||
| <?rfc toc="yes"?> | ||||
| <!-- the number of levels of subsections in ToC. default: 3 --> | ||||
| <?rfc tocdepth="3"?> | ||||
| <!-- control references --> | ||||
| <!-- use anchors instead of numbers for refs, i.e, [RFC2119] instead of [1] | ||||
| <?rfc symrefs="yes"?> | ||||
| <!-- sort the reference entries alphabetically --> | ||||
| <?rfc sortrefs="no" ?> | ||||
| <!-- control vertical white space | ||||
| (using these PIs as follows is recommended by the RFC Editor) --> | ||||
| <!-- do not start each main section on a new page --> | ||||
| <?rfc compact="yes" ?> | ||||
| <!-- keep one blank line between list items --> | ||||
| <?rfc subcompact="no" ?> | ||||
| <!-- encourage use of "xml2rfc" tool --> | ||||
| <?rfc rfcprocack="yes" ?> | ||||
| <!-- end of list of popular I-D processing instructions --> | ||||
| <rfc category="std" docName="draft-ietf-dnssd-hybrid-10" ipr="trust200902"> | ||||
| <front> | <front> | |||
| <title abbrev='Multicast Service Discovery Proxy'>Discovery Proxy | <title abbrev="Multicast Service Discovery Proxy">Discovery Proxy for Multic | |||
| for Multicast DNS-Based Service Discovery</title> | ast DNS-Based Service Discovery</title> | |||
| <author initials='S.' surname='Cheshire' fullname='Stuart Cheshire'> | <seriesInfo name="RFC" value="8766" stream="IETF"/> | |||
| <organization>Apple Inc.</organization> | <author initials="S." surname="Cheshire" fullname="Stuart Cheshire"> | |||
| <organization showOnFrontPage="true">Apple Inc.</organization> | ||||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street>One Apple Park Way</street> | <street>One Apple Park Way</street> | |||
| <city>Cupertino</city> | <city>Cupertino</city> | |||
| <region>California</region> | <region>California</region> | |||
| <code>95014</code> | <code>95014</code> | |||
| <country>USA</country> | <country>United States of America</country> | |||
| </postal> | </postal> | |||
| <phone>+1 (408) 996-1010</phone> | <phone>+1 (408) 996-1010</phone> | |||
| <email>cheshire@apple.com</email> | <email>cheshire@apple.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <date year='2019' month='March' day='24'/> | <date month="06" year="2020"/> | |||
| <area>Internet</area> | <area>INT</area> | |||
| <workgroup>Internet Engineering Task Force</workgroup> | <workgroup>DNSSD</workgroup> | |||
| <keyword>Multicast DNS</keyword> | <keyword>Multicast DNS</keyword> | |||
| <keyword>DNS-Based Service Discovery</keyword> | <keyword>DNS-Based Service Discovery</keyword> | |||
| <keyword>RFC</keyword> | <abstract pn="section-abstract"> | |||
| <keyword>Request for Comments</keyword> | <t pn="section-abstract-1">This document specifies a network proxy that us | |||
| <keyword>I-D</keyword> | es Multicast DNS | |||
| <keyword>Internet-Draft</keyword> | ||||
| <abstract> | ||||
| <t>This document specifies a network proxy that uses Multicast DNS | ||||
| to automatically populate the wide-area unicast Domain Name System | to automatically populate the wide-area unicast Domain Name System | |||
| namespace | namespace | |||
| with records describing devices and services found on the local | with records describing devices and services found on the local | |||
| link.</t> | link.</t> | |||
| </abstract> | </abstract> | |||
| <boilerplate> | ||||
| <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc= | ||||
| "exclude" pn="section-boilerplate.1"> | ||||
| <name slugifiedName="name-status-of-this-memo">Status of This Memo</name | ||||
| > | ||||
| <t pn="section-boilerplate.1-1"> | ||||
| This is an Internet Standards Track document. | ||||
| </t> | ||||
| <t pn="section-boilerplate.1-2"> | ||||
| This document is a product of the Internet Engineering Task Force | ||||
| (IETF). It represents the consensus of the IETF community. It has | ||||
| received public review and has been approved for publication by | ||||
| the Internet Engineering Steering Group (IESG). Further | ||||
| information on Internet Standards is available in Section 2 of | ||||
| RFC 7841. | ||||
| </t> | ||||
| <t pn="section-boilerplate.1-3"> | ||||
| Information about the current status of this document, any | ||||
| errata, and how to provide feedback on it may be obtained at | ||||
| <eref target="https://www.rfc-editor.org/info/rfc8766" brackets="non | ||||
| e"/>. | ||||
| </t> | ||||
| </section> | ||||
| <section anchor="copyright" numbered="false" removeInRFC="false" toc="excl | ||||
| ude" pn="section-boilerplate.2"> | ||||
| <name slugifiedName="name-copyright-notice">Copyright Notice</name> | ||||
| <t pn="section-boilerplate.2-1"> | ||||
| Copyright (c) 2020 IETF Trust and the persons identified as the | ||||
| document authors. All rights reserved. | ||||
| </t> | ||||
| <t pn="section-boilerplate.2-2"> | ||||
| This document is subject to BCP 78 and the IETF Trust's Legal | ||||
| Provisions Relating to IETF Documents | ||||
| (<eref target="https://trustee.ietf.org/license-info" brackets="none | ||||
| "/>) in effect on the date of | ||||
| publication of this document. Please review these documents | ||||
| carefully, as they describe your rights and restrictions with | ||||
| respect to this document. Code Components extracted from this | ||||
| document must include Simplified BSD License text as described in | ||||
| Section 4.e of the Trust Legal Provisions and are provided without | ||||
| warranty as described in the Simplified BSD License. | ||||
| </t> | ||||
| </section> | ||||
| </boilerplate> | ||||
| <toc> | ||||
| <section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" p | ||||
| n="section-toc.1"> | ||||
| <name slugifiedName="name-table-of-contents">Table of Contents</name> | ||||
| <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-to | ||||
| c.1-1"> | ||||
| <li pn="section-toc.1-1.1"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.1.1"><xref derivedContent | ||||
| ="1" format="counter" sectionFormat="of" target="section-1"/>. <xref derivedCon | ||||
| tent="" format="title" sectionFormat="of" target="name-introduction">Introductio | ||||
| n</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.2"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.2.1"><xref derivedContent | ||||
| ="2" format="counter" sectionFormat="of" target="section-2"/>. <xref derivedCon | ||||
| tent="" format="title" sectionFormat="of" target="name-operational-analogy">Oper | ||||
| ational Analogy</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.3"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.3.1"><xref derivedContent | ||||
| ="3" format="counter" sectionFormat="of" target="section-3"/>. <xref derivedCon | ||||
| tent="" format="title" sectionFormat="of" target="name-conventions-and-terminolo | ||||
| gy">Conventions and Terminology Used in This Document</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.4"> | ||||
| <t pn="section-toc.1-1.4.1"><xref derivedContent="4" format="counter | ||||
| " sectionFormat="of" target="section-4"/>. <xref derivedContent="" format="titl | ||||
| e" sectionFormat="of" target="name-compatibility-consideration">Compatibility Co | ||||
| nsiderations</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.5"> | ||||
| <t pn="section-toc.1-1.5.1"><xref derivedContent="5" format="counter | ||||
| " sectionFormat="of" target="section-5"/>. <xref derivedContent="" format="titl | ||||
| e" sectionFormat="of" target="name-discovery-proxy-operation">Discovery Proxy Op | ||||
| eration</xref></t> | ||||
| <ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
| n-toc.1-1.5.2"> | ||||
| <li pn="section-toc.1-1.5.2.1"> | ||||
| <t pn="section-toc.1-1.5.2.1.1"><xref derivedContent="5.1" forma | ||||
| t="counter" sectionFormat="of" target="section-5.1"/>. <xref derivedContent="" | ||||
| format="title" sectionFormat="of" target="name-delegated-subdomain-for-dns">Dele | ||||
| gated Subdomain for DNS-based Service Discovery | ||||
| Records</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.5.2.2"> | ||||
| <t pn="section-toc.1-1.5.2.2.1"><xref derivedContent="5.2" forma | ||||
| t="counter" sectionFormat="of" target="section-5.2"/>. <xref derivedContent="" | ||||
| format="title" sectionFormat="of" target="name-domain-enumeration">Domain Enumer | ||||
| ation</xref></t> | ||||
| <ul bare="true" empty="true" indent="2" spacing="compact" pn="se | ||||
| ction-toc.1-1.5.2.2.2"> | ||||
| <li pn="section-toc.1-1.5.2.2.2.1"> | ||||
| <t pn="section-toc.1-1.5.2.2.2.1.1"><xref derivedContent="5. | ||||
| 2.1" format="counter" sectionFormat="of" target="section-5.2.1"/>. <xref derive | ||||
| dContent="" format="title" sectionFormat="of" target="name-domain-enumeration-vi | ||||
| a-unic">Domain Enumeration via Unicast Queries</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.5.2.2.2.2"> | ||||
| <t pn="section-toc.1-1.5.2.2.2.2.1"><xref derivedContent="5. | ||||
| 2.2" format="counter" sectionFormat="of" target="section-5.2.2"/>. <xref derive | ||||
| dContent="" format="title" sectionFormat="of" target="name-domain-enumeration-vi | ||||
| a-mult">Domain Enumeration via Multicast Queries</xref></t> | ||||
| </li> | ||||
| </ul> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.5.2.3"> | ||||
| <t pn="section-toc.1-1.5.2.3.1"><xref derivedContent="5.3" forma | ||||
| t="counter" sectionFormat="of" target="section-5.3"/>. <xref derivedContent="" | ||||
| format="title" sectionFormat="of" target="name-delegated-subdomain-for-ldh">Dele | ||||
| gated Subdomain for LDH Host Names</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.5.2.4"> | ||||
| <t pn="section-toc.1-1.5.2.4.1"><xref derivedContent="5.4" forma | ||||
| t="counter" sectionFormat="of" target="section-5.4"/>. <xref derivedContent="" | ||||
| format="title" sectionFormat="of" target="name-delegated-subdomain-for-rev">Dele | ||||
| gated Subdomain for Reverse Mapping</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.5.2.5"> | ||||
| <t pn="section-toc.1-1.5.2.5.1"><xref derivedContent="5.5" forma | ||||
| t="counter" sectionFormat="of" target="section-5.5"/>. <xref derivedContent="" | ||||
| format="title" sectionFormat="of" target="name-data-translation">Data Translatio | ||||
| n</xref></t> | ||||
| <ul bare="true" empty="true" indent="2" spacing="compact" pn="se | ||||
| ction-toc.1-1.5.2.5.2"> | ||||
| <li pn="section-toc.1-1.5.2.5.2.1"> | ||||
| <t pn="section-toc.1-1.5.2.5.2.1.1"><xref derivedContent="5. | ||||
| 5.1" format="counter" sectionFormat="of" target="section-5.5.1"/>. <xref derive | ||||
| dContent="" format="title" sectionFormat="of" target="name-dns-ttl-limiting">DNS | ||||
| TTL Limiting</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.5.2.5.2.2"> | ||||
| <t pn="section-toc.1-1.5.2.5.2.2.1"><xref derivedContent="5. | ||||
| 5.2" format="counter" sectionFormat="of" target="section-5.5.2"/>. <xref derive | ||||
| dContent="" format="title" sectionFormat="of" target="name-suppressing-unusable- | ||||
| record">Suppressing Unusable Records</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.5.2.5.2.3"> | ||||
| <t pn="section-toc.1-1.5.2.5.2.3.1"><xref derivedContent="5. | ||||
| 5.3" format="counter" sectionFormat="of" target="section-5.5.3"/>. <xref derive | ||||
| dContent="" format="title" sectionFormat="of" target="name-nsec-and-nsec3-querie | ||||
| s">NSEC and NSEC3 Queries</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.5.2.5.2.4"> | ||||
| <t pn="section-toc.1-1.5.2.5.2.4.1"><xref derivedContent="5. | ||||
| 5.4" format="counter" sectionFormat="of" target="section-5.5.4"/>. <xref derive | ||||
| dContent="" format="title" sectionFormat="of" target="name-no-text-encoding-tran | ||||
| slatio">No Text-Encoding Translation</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.5.2.5.2.5"> | ||||
| <t pn="section-toc.1-1.5.2.5.2.5.1"><xref derivedContent="5. | ||||
| 5.5" format="counter" sectionFormat="of" target="section-5.5.5"/>. <xref derive | ||||
| dContent="" format="title" sectionFormat="of" target="name-application-specific- | ||||
| data-t">Application-Specific Data Translation</xref></t> | ||||
| </li> | ||||
| </ul> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.5.2.6"> | ||||
| <t pn="section-toc.1-1.5.2.6.1"><xref derivedContent="5.6" forma | ||||
| t="counter" sectionFormat="of" target="section-5.6"/>. <xref derivedContent="" | ||||
| format="title" sectionFormat="of" target="name-answer-aggregation">Answer Aggreg | ||||
| ation</xref></t> | ||||
| </li> | ||||
| </ul> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.6"> | ||||
| <t pn="section-toc.1-1.6.1"><xref derivedContent="6" format="counter | ||||
| " sectionFormat="of" target="section-6"/>. <xref derivedContent="" format="titl | ||||
| e" sectionFormat="of" target="name-administrative-dns-records">Administrative DN | ||||
| S Records</xref></t> | ||||
| <ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
| n-toc.1-1.6.2"> | ||||
| <li pn="section-toc.1-1.6.2.1"> | ||||
| <t pn="section-toc.1-1.6.2.1.1"><xref derivedContent="6.1" forma | ||||
| t="counter" sectionFormat="of" target="section-6.1"/>. <xref derivedContent="" | ||||
| format="title" sectionFormat="of" target="name-dns-soa-start-of-authority-">DNS | ||||
| SOA (Start of Authority) Record</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.6.2.2"> | ||||
| <t pn="section-toc.1-1.6.2.2.1"><xref derivedContent="6.2" forma | ||||
| t="counter" sectionFormat="of" target="section-6.2"/>. <xref derivedContent="" | ||||
| format="title" sectionFormat="of" target="name-dns-ns-records">DNS NS Records</x | ||||
| ref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.6.2.3"> | ||||
| <t pn="section-toc.1-1.6.2.3.1"><xref derivedContent="6.3" forma | ||||
| t="counter" sectionFormat="of" target="section-6.3"/>. <xref derivedContent="" | ||||
| format="title" sectionFormat="of" target="name-dns-delegation-records">DNS Deleg | ||||
| ation Records</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.6.2.4"> | ||||
| <t pn="section-toc.1-1.6.2.4.1"><xref derivedContent="6.4" forma | ||||
| t="counter" sectionFormat="of" target="section-6.4"/>. <xref derivedContent="" | ||||
| format="title" sectionFormat="of" target="name-dns-srv-records">DNS SRV Records< | ||||
| /xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.6.2.5"> | ||||
| <t pn="section-toc.1-1.6.2.5.1"><xref derivedContent="6.5" forma | ||||
| t="counter" sectionFormat="of" target="section-6.5"/>. <xref derivedContent="" | ||||
| format="title" sectionFormat="of" target="name-domain-enumeration-records">Domai | ||||
| n Enumeration Records</xref></t> | ||||
| </li> | ||||
| </ul> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.7"> | ||||
| <t pn="section-toc.1-1.7.1"><xref derivedContent="7" format="counter | ||||
| " sectionFormat="of" target="section-7"/>. <xref derivedContent="" format="titl | ||||
| e" sectionFormat="of" target="name-dnssec-considerations">DNSSEC Considerations< | ||||
| /xref></t> | ||||
| <ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
| n-toc.1-1.7.2"> | ||||
| <li pn="section-toc.1-1.7.2.1"> | ||||
| <t pn="section-toc.1-1.7.2.1.1"><xref derivedContent="7.1" forma | ||||
| t="counter" sectionFormat="of" target="section-7.1"/>. <xref derivedContent="" | ||||
| format="title" sectionFormat="of" target="name-online-signing-only">Online Signi | ||||
| ng Only</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.7.2.2"> | ||||
| <t pn="section-toc.1-1.7.2.2.1"><xref derivedContent="7.2" forma | ||||
| t="counter" sectionFormat="of" target="section-7.2"/>. <xref derivedContent="" | ||||
| format="title" sectionFormat="of" target="name-nsec-and-nsec3-records">NSEC and | ||||
| NSEC3 Records</xref></t> | ||||
| </li> | ||||
| </ul> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.8"> | ||||
| <t pn="section-toc.1-1.8.1"><xref derivedContent="8" format="counter | ||||
| " sectionFormat="of" target="section-8"/>. <xref derivedContent="" format="titl | ||||
| e" sectionFormat="of" target="name-ipv6-considerations">IPv6 Considerations</xre | ||||
| f></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.9"> | ||||
| <t pn="section-toc.1-1.9.1"><xref derivedContent="9" format="counter | ||||
| " sectionFormat="of" target="section-9"/>. <xref derivedContent="" format="titl | ||||
| e" sectionFormat="of" target="name-security-considerations">Security Considerati | ||||
| ons</xref></t> | ||||
| <ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
| n-toc.1-1.9.2"> | ||||
| <li pn="section-toc.1-1.9.2.1"> | ||||
| <t pn="section-toc.1-1.9.2.1.1"><xref derivedContent="9.1" forma | ||||
| t="counter" sectionFormat="of" target="section-9.1"/>. <xref derivedContent="" | ||||
| format="title" sectionFormat="of" target="name-authenticity">Authenticity</xref> | ||||
| </t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.9.2.2"> | ||||
| <t pn="section-toc.1-1.9.2.2.1"><xref derivedContent="9.2" forma | ||||
| t="counter" sectionFormat="of" target="section-9.2"/>. <xref derivedContent="" | ||||
| format="title" sectionFormat="of" target="name-privacy">Privacy</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.9.2.3"> | ||||
| <t pn="section-toc.1-1.9.2.3.1"><xref derivedContent="9.3" forma | ||||
| t="counter" sectionFormat="of" target="section-9.3"/>. <xref derivedContent="" | ||||
| format="title" sectionFormat="of" target="name-denial-of-service">Denial of Serv | ||||
| ice</xref></t> | ||||
| </li> | ||||
| </ul> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.10"> | ||||
| <t pn="section-toc.1-1.10.1"><xref derivedContent="10" format="count | ||||
| er" sectionFormat="of" target="section-10"/>. <xref derivedContent="" format="ti | ||||
| tle" sectionFormat="of" target="name-iana-considerations">IANA Considerations</x | ||||
| ref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.11"> | ||||
| <t pn="section-toc.1-1.11.1"><xref derivedContent="11" format="count | ||||
| er" sectionFormat="of" target="section-11"/>. <xref derivedContent="" format="ti | ||||
| tle" sectionFormat="of" target="name-references">References</xref></t> | ||||
| <ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
| n-toc.1-1.11.2"> | ||||
| <li pn="section-toc.1-1.11.2.1"> | ||||
| <t pn="section-toc.1-1.11.2.1.1"><xref derivedContent="11.1" for | ||||
| mat="counter" sectionFormat="of" target="section-11.1"/>. <xref derivedContent= | ||||
| "" format="title" sectionFormat="of" target="name-normative-references">Normativ | ||||
| e References</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.11.2.2"> | ||||
| <t pn="section-toc.1-1.11.2.2.1"><xref derivedContent="11.2" for | ||||
| mat="counter" sectionFormat="of" target="section-11.2"/>. <xref derivedContent= | ||||
| "" format="title" sectionFormat="of" target="name-informative-references">Inform | ||||
| ative References</xref></t> | ||||
| </li> | ||||
| </ul> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.12"> | ||||
| <t pn="section-toc.1-1.12.1"><xref derivedContent="Appendix A" forma | ||||
| t="default" sectionFormat="of" target="section-appendix.a"/>. <xref derivedCont | ||||
| ent="" format="title" sectionFormat="of" target="name-implementation-status">Imp | ||||
| lementation Status</xref></t> | ||||
| <ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
| n-toc.1-1.12.2"> | ||||
| <li pn="section-toc.1-1.12.2.1"> | ||||
| <t pn="section-toc.1-1.12.2.1.1"><xref derivedContent="A.1" form | ||||
| at="counter" sectionFormat="of" target="section-a.1"/>. <xref derivedContent="" | ||||
| format="title" sectionFormat="of" target="name-already-implemented-and-dep">Alr | ||||
| eady Implemented and Deployed</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.12.2.2"> | ||||
| <t pn="section-toc.1-1.12.2.2.1"><xref derivedContent="A.2" form | ||||
| at="counter" sectionFormat="of" target="section-a.2"/>. <xref derivedContent="" | ||||
| format="title" sectionFormat="of" target="name-already-implemented">Already Imp | ||||
| lemented</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.12.2.3"> | ||||
| <t pn="section-toc.1-1.12.2.3.1"><xref derivedContent="A.3" form | ||||
| at="counter" sectionFormat="of" target="section-a.3"/>. <xref derivedContent="" | ||||
| format="title" sectionFormat="of" target="name-partially-implemented">Partially | ||||
| Implemented</xref></t> | ||||
| </li> | ||||
| </ul> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.13"> | ||||
| <t pn="section-toc.1-1.13.1"><xref derivedContent="" format="none" s | ||||
| ectionFormat="of" target="section-appendix.b"/><xref derivedContent="" format="t | ||||
| itle" sectionFormat="of" target="name-acknowledgments">Acknowledgments</xref></t | ||||
| > | ||||
| </li> | ||||
| <li pn="section-toc.1-1.14"> | ||||
| <t pn="section-toc.1-1.14.1"><xref derivedContent="" format="none" s | ||||
| ectionFormat="of" target="section-appendix.c"/><xref derivedContent="" format="t | ||||
| itle" sectionFormat="of" target="name-authors-address">Author's Address</xref></ | ||||
| t> | ||||
| </li> | ||||
| </ul> | ||||
| </section> | ||||
| </toc> | ||||
| </front> | </front> | |||
| <middle> | <middle> | |||
| <?rfc needLines="31" ?> | <section numbered="true" toc="include" removeInRFC="false" pn="section-1"> | |||
| <section title="Introduction"> | <name slugifiedName="name-introduction">Introduction</name> | |||
| <t><xref target="RFC6762">Multicast DNS</xref> and its companion | <t pn="section-1-1">Multicast DNS <xref target="RFC6762" format="default" | |||
| technology | sectionFormat="of" derivedContent="RFC6762"/> and its | |||
| DNS-based Service Discovery <xref target="RFC6763"/> were created to | companion technology DNS-based Service Discovery <xref target="RFC6763" fo | |||
| provide | rmat="default" sectionFormat="of" derivedContent="RFC6763"/> were created to pro | |||
| IP networking with the ease-of-use and autoconfiguration for which | vide IP networking with the ease | |||
| AppleTalk was well known <xref target="RFC6760"/> <xref target="ZC"/> | of use and autoconfiguration for which AppleTalk was well known <xref targ | |||
| <xref target="Roadmap"/>.</t> | et="RFC6760" format="default" sectionFormat="of" derivedContent="RFC6760"/> <xre | |||
| f target="ZC" format="default" sectionFormat="of" derivedContent="ZC"/> | ||||
| <t>For a small home network consisting of just a single link (or a few | <xref target="I-D.cheshire-dnssd-roadmap" format="default" sectionFormat | |||
| ="of" derivedContent="ROADMAP"/>.</t> | ||||
| <t pn="section-1-2">For a small home network consisting of just a single l | ||||
| ink (or a few | ||||
| physical links bridged together to appear as a single logical link from | physical links bridged together to appear as a single logical link from | |||
| the point of view of IP) | the point of view of IP), Multicast DNS <xref target="RFC6762" format="def | |||
| <xref target="RFC6762">Multicast DNS</xref> is sufficient for client | ault" sectionFormat="of" derivedContent="RFC6762"/> is sufficient for client dev | |||
| devices | ices | |||
| to look up the ".local" host names of peers on the same home network, | to look up the ".local" host names of peers on the same home network, | |||
| and | and to use Multicast DNS-based | |||
| to use Multicast <xref target="RFC6763">DNS-Based Service Discovery | Service Discovery (DNS-SD) <xref target="RFC6763" format="default" section | |||
| (DNS-SD)</xref> | Format="of" derivedContent="RFC6763"/> to discover services offered on that | |||
| to discover services offered on that home network.</t> | home network.</t> | |||
| <t pn="section-1-3">For a larger network consisting of multiple links that | ||||
| <t>For a larger network consisting of multiple links that are | are | |||
| interconnected using IP-layer routing instead of link-layer bridging, | interconnected using IP-layer routing instead of link-layer bridging, | |||
| link-local Multicast DNS alone is insufficient because link-local | link-local Multicast DNS alone is insufficient because link-local | |||
| Multicast DNS packets, by design, are not propagated onto other | Multicast DNS packets, by design, are not propagated onto other | |||
| links.</t> | links.</t> | |||
| <t pn="section-1-4">Using link-local multicast packets for Multicast DNS w | ||||
| <t>Using link-local multicast packets for Multicast DNS | as a conscious | |||
| was a conscious design choice <xref target="RFC6762"/>. | design choice <xref target="RFC6762" format="default" sectionFormat="of" d | |||
| Even when limited to a single link, multicast traffic is still | erivedContent="RFC6762"/>. Even when | |||
| generally considered to be more expensive than unicast, because | limited to a single link, multicast traffic is still generally | |||
| multicast traffic impacts many devices, instead of just a single | considered to be more expensive than unicast, because multicast traffic | |||
| recipient. | impacts many devices instead of just a single recipient. In addition, | |||
| In addition, with some technologies like <xref | with some technologies like Wi-Fi <xref target="IEEE-11" format="default" | |||
| target="IEEE-11">Wi-Fi</xref>, | sectionFormat="of" derivedContent="IEEE-11"/>, multicast traffic is inherently l | |||
| multicast traffic is inherently less efficient and less reliable than | ess | |||
| unicast, because | efficient and less reliable than unicast, because Wi-Fi multicast | |||
| Wi-Fi multicast traffic is sent at lower data rates, and is not | traffic is sent at lower data rates, and is not acknowledged <xref target= | |||
| acknowledged <xref target="Mcast"/>. | "I-D.ietf-mboned-ieee802-mcast-problems" format="default" sectionFormat="of" der | |||
| Increasing the amount of expensive multicast traffic by flooding | ivedContent="MCAST"/>. | |||
| it across multiple links would make the traffic load even worse.</t> | Increasing the amount of expensive multicast traffic by flooding it | |||
| across multiple links would make the traffic load even worse.</t> | ||||
| <t>Partitioning the network into many small links curtails the spread | <t pn="section-1-5">Partitioning the network into many small links curtail | |||
| of expensive multicast traffic, but limits the discoverability of | s the spread | |||
| of expensive multicast traffic but limits the discoverability of | ||||
| services. | services. | |||
| At the opposite end of the spectrum, using a very large local link with | At the opposite end of the spectrum, using a very large local link with | |||
| thousands of hosts enables better | thousands of hosts enables better | |||
| service discovery, but at the cost of larger amounts of multicast | service discovery but at the cost of larger amounts of multicast | |||
| traffic.</t> | traffic.</t> | |||
| <t pn="section-1-6">Performing DNS-based Service Discovery using purely Un | ||||
| <t>Performing DNS-Based Service Discovery using purely Unicast DNS is | icast DNS is | |||
| more efficient and doesn't require large multicast domains, but does | more efficient and doesn't require large multicast domains but does | |||
| require that the relevant data be available in the Unicast DNS | require that the relevant data be available in the Unicast DNS | |||
| namespace. | namespace. | |||
| The Unicast DNS namespace in question could fall within a traditionally | The Unicast DNS namespace in question could fall within a traditionally | |||
| assigned globally unique domain name, or could use a private local | assigned globally unique domain name, or it could be within a private | |||
| unicast domain name such as ".home.arpa" <xref target="RFC8375"/>.</t> | local | |||
| unicast domain name such as ".home.arpa" <xref target="RFC8375" format="de | ||||
| <t>In the <xref target="RFC6763">DNS-SD specification</xref>, | fault" sectionFormat="of" derivedContent="RFC8375"/>.</t> | |||
| Section 10 ("Populating the DNS with Information") | <t pn="section-1-7">In the DNS-SD specification <xref target="RFC6763" sec | |||
| discusses various possible ways that a service's PTR, SRV, TXT and | tionFormat="comma" section="10" format="default" derivedLink="https://rfc-editor | |||
| address records can make their way into the Unicast DNS namespace, | .org/rfc/rfc6763#section-10" derivedContent="RFC6763"/> ("Populating | |||
| including manual zone file configuration | the DNS with Information") discusses various possible ways that a | |||
| <xref target="RFC1034"/> <xref target="RFC1035"/>, | service's PTR, SRV, TXT, and address records can make their way into the | |||
| DNS Update <xref target="RFC2136"/> <xref target="RFC3007"/> | Unicast DNS namespace, including manual zone file configuration <xref targ | |||
| and proxies of various kinds.</t> | et="RFC1034" format="default" sectionFormat="of" derivedContent="RFC1034"/> <xre | |||
| f target="RFC1035" format="default" sectionFormat="of" derivedContent="RFC1035"/ | ||||
| <t>Making the relevant data available in the Unicast DNS namespace | >, DNS Update <xref target="RFC2136" format="default" sectionFormat="of" derived | |||
| by manual DNS configuration is one option. This option has been used | Content="RFC2136"/> <xref target="RFC3007" format="default" sectionFormat="of" d | |||
| for many years at IETF meetings to advertise the IETF Terminal Room | erivedContent="RFC3007"/>, and | |||
| printer. | proxies | |||
| Details of this example are given in Appendix A of | of various kinds.</t> | |||
| <xref target="Roadmap">the Roadmap document</xref>. | <t pn="section-1-8">One option is to make the relevant data available in t | |||
| However, this manual DNS configuration is labor intensive, | he Unicast DNS | |||
| error prone, and requires a reasonable degree of DNS expertise.</t> | namespace by | |||
| manual DNS configuration. This option has been used for | ||||
| <t>Populating the Unicast DNS namespace via DNS Update by the | many years at IETF meetings to advertise the IETF terminal room printer. | |||
| devices offering the services themselves is another option <xref | Details of this example are given in <xref target="I-D.cheshire-dnssd-road | |||
| target="RegProt"/> <xref target="DNS-UL"/>. | map" sectionFormat="of" section="A" format="default" derivedLink="https://tools. | |||
| ietf.org/html/draft-cheshire-dnssd-roadmap-03#appendix-A" derivedContent="ROADMA | ||||
| P">the | ||||
| Roadmap document</xref>. However, this manual DNS configuration is | ||||
| labor intensive, error prone, and requires a reasonable degree of DNS | ||||
| expertise.</t> | ||||
| <t pn="section-1-9">Another option is to populate the Unicast DNS namespac | ||||
| e by having | ||||
| the devices offering the services do that themselves, using DNS Update | ||||
| <xref target="I-D.sctl-service-registration" format="default" sectionForma | ||||
| t="of" derivedContent="REG-PROT"/> | ||||
| <xref target="I-D.sekar-dns-ul" format="default" sectionFormat="of" deri | ||||
| vedContent="DNS-UL"/>. | ||||
| However, this requires configuration | However, this requires configuration | |||
| of DNS Update keys on those devices, which has proven onerous and | of DNS Update keys on those devices, which has proven onerous and | |||
| impractical for simple devices like printers and network cameras.</t> | impractical for simple devices like printers and network cameras.</t> | |||
| <t pn="section-1-10">Hence, to facilitate efficient and reliable DNS-based | ||||
| <t>Hence, to facilitate efficient and reliable DNS-Based Service | Service | |||
| Discovery, | Discovery, | |||
| a compromise is needed that combines the ease-of-use of | a hybrid is needed that combines the ease of use of | |||
| Multicast DNS with the efficiency and scalability of Unicast DNS.</t> | Multicast DNS with the efficiency and scalability of Unicast DNS.</t> | |||
| <t pn="section-1-11">This document specifies a type of proxy called a "Dis | ||||
| <t>This document specifies a type of proxy called a "Discovery Proxy" | covery Proxy" | |||
| that uses <xref target="RFC6762">Multicast DNS</xref> to discover | that uses Multicast DNS <xref target="RFC6762" format="default" sectionFor | |||
| Multicast DNS records on its local link, and makes corresponding | mat="of" derivedContent="RFC6762"/> | |||
| to discover | ||||
| Multicast DNS records on its local link on demand, and makes | ||||
| corresponding | ||||
| DNS records visible in the Unicast DNS namespace.</t> | DNS records visible in the Unicast DNS namespace.</t> | |||
| <t pn="section-1-12">In principle, similar mechanisms could be defined | ||||
| <t>In principle, similar mechanisms could be defined using other | for other local discovery protocols, by creating a proxy that | |||
| local service discovery protocols, to discover local information | (i) uses the protocol in question to discover local information on | |||
| and then make corresponding DNS records visible in the Unicast | demand, and then | |||
| DNS namespace. Such mechanisms for other local service discovery | (ii) makes corresponding DNS records visible in the Unicast | |||
| DNS namespace. Such mechanisms for other local discovery | ||||
| protocols could be addressed in future documents.</t> | protocols could be addressed in future documents.</t> | |||
| <t pn="section-1-13">The design of the Discovery Proxy is guided by the pr | ||||
| <t>The design of the Discovery Proxy is guided by the previously | eviously | |||
| published | published DNS-based Service Discovery requirements document | |||
| <xref target="RFC7558">requirements document</xref>.</t> | <xref target="RFC7558" format="default" sectionFormat="of" derivedContent= | |||
| "RFC7558"/>.</t> | ||||
| <t>In simple terms, a descriptive DNS name is chosen for | <t pn="section-1-14">In simple terms, a descriptive DNS name is chosen for | |||
| each link in an organization. | each link in an organization. | |||
| Using a DNS NS record, responsibility for that DNS name is delegated to | Using a DNS NS record, responsibility for that DNS name is delegated to | |||
| a Discovery Proxy physically attached to that link. | a Discovery Proxy physically attached to that link. | |||
| Now, when a remote client issues a unicast query for a name falling | When a remote client issues a unicast query for a name falling | |||
| within | within | |||
| the delegated subdomain, the normal DNS delegation mechanism | the delegated subdomain, the normal DNS delegation mechanism | |||
| results in the unicast query arriving at the Discovery Proxy, | results in the unicast query arriving at the Discovery Proxy, | |||
| since it has been declared authoritative for those names. | since it has been declared authoritative for those names. | |||
| Now, instead of consulting a textual zone file on disk to discover | Now, instead of consulting a textual zone file on disk to discover | |||
| the answer to the query, as a traditional DNS server would, | the answer to the query as a traditional authoritative DNS server would, | |||
| a Discovery Proxy consults its local link, using Multicast DNS, | a Discovery Proxy consults its local link, using Multicast DNS, | |||
| to find the answer to the question.</t> | to find the answer to the question.</t> | |||
| <t pn="section-1-15">For fault tolerance reasons, there may be more than o | ||||
| <t>For fault tolerance reasons there may be more than one | ne | |||
| Discovery Proxy serving a given link.</t> | Discovery Proxy serving a given link.</t> | |||
| <t pn="section-1-16">Note that the Discovery Proxy uses a "pull" model. | ||||
| <t>Note that the Discovery Proxy uses a "pull" model. | Until some remote client has requested data, | |||
| The local link is not queried using Multicast DNS until some remote | the local link is not queried using Multicast DNS. | |||
| client has requested that data. In the idle state, in the absence | In the idle state, in the absence | |||
| of client requests, the Discovery Proxy sends no packets and imposes | of client requests, the Discovery Proxy sends no packets and imposes | |||
| no burden on the network. It operates purely "on demand".</t> | no burden on the network. It operates purely "on demand".</t> | |||
| <t pn="section-1-17">An alternative proposal that has been discussed is a | ||||
| <t>An alternative proposal that has been discussed is a proxy that | proxy that | |||
| performs | performs DNS updates to a remote DNS server on behalf of the Multicast | |||
| DNS updates to a remote DNS server on behalf of the Multicast DNS | DNS devices on the local network. The difficulty with this is that | |||
| devices on the local network. | Multicast DNS devices do not routinely announce their records on the | |||
| The difficulty with this is is that | network. Generally, they remain silent until queried. This means that | |||
| Multicast DNS devices do not routinely announce their records | the complete set of Multicast DNS records in use on a link can only be | |||
| on the network. Generally they remain silent until queried. | discovered by active querying, not by passive listening. Because of | |||
| This means that the complete set of Multicast DNS records in use on a | this, a proxy can only know what names exist on a link by issuing | |||
| link can only be discovered by active querying, not by passive | queries for them, and since it would be impractical to issue queries for | |||
| listening. | every possible name just to find out which names exist and which do not, | |||
| Because of this, a proxy can only know what names exist on a link | there is no reasonable way for a proxy to programmatically learn all the | |||
| by issuing queries for them, and since it would be impractical to | answers it would need to push up to the remote DNS server using DNS | |||
| issue queries for every possible name just to find out which names | Update. Even if such a mechanism were possible, it would risk | |||
| exist and which do not, there is no reasonable way for a proxy to | generating high load on the network continuously, even when there are no | |||
| programmatically learn all the answers it would need to push up to | clients with any interest in that data.</t> | |||
| the remote DNS server using DNS Update. | <t pn="section-1-18">Hence, having a model where the query comes to the Di | |||
| Even if such a mechanism were possible, it would risk generating | scovery Proxy | |||
| high load on the network continuously, even when there are | ||||
| no clients with any interest in that data.</t> | ||||
| <t>Hence, having a model where the query comes to the Discovery Proxy | ||||
| is much more efficient than | is much more efficient than | |||
| a model where the Discovery Proxy pushes the answers out | a model where the Discovery Proxy pushes the answers out | |||
| to some other remote DNS server.</t> | to some other remote DNS server.</t> | |||
| <t pn="section-1-19">A client seeking to discover services and other infor | ||||
| <t>A client seeking to discover services and other information | mation performs | |||
| achieves this by sending traditional DNS queries to the Discovery Proxy, | this by sending traditional DNS queries to the Discovery Proxy or by | |||
| or by sending | sending DNS Push Notification subscription requests <xref target="RFC8765" | |||
| <xref target="Push">DNS Push Notification subscription | format="default" sectionFormat="of" derivedContent="RFC8765"/>.</t> | |||
| requests</xref>.</t> | <t pn="section-1-20">How a client discovers what domain name(s) to use for | |||
| its | ||||
| <t>How a client discovers what domain name(s) to use for its service | DNS-based Service Discovery queries | |||
| discovery queries, | (and, consequently, what Discovery Proxy or Proxies to use) | |||
| (and consequently what Discovery Proxy or Proxies to use) | is described in <xref target="dom-enum" format="default" sectionFormat="of | |||
| is described in <xref target="dom-enum"/>.</t> | " derivedContent="Section 5.2"/>.</t> | |||
| <t pn="section-1-21">The diagram below illustrates a network topology usin | ||||
| <t>The diagram below illustrates a network topology using a | g a | |||
| Discovery Proxy to provide discovery service to a remote client.</t> | Discovery Proxy to provide discovery service to a remote client.</t> | |||
| <figure align="left" suppress-title="false" pn="figure-1"> | ||||
| <figure><artwork> | <name slugifiedName="name-example-deployment">Example Deployment</name> | |||
| +--------+ Unicast +-----------+ +---------+ +---------+ | <artwork name="" type="" align="center" alt="" pn="section-1-22.1"> | |||
| | Remote | Communcation | Discovery | | Network | | Network | | +--------+ Unicast +-----------+ +---------+ +---------+ | |||
| | Client |---- . . . -----| Proxy | | Printer | | Camera | | | Remote | Communication | Discovery | | Network | | Network | | |||
| +--------+ +-----------+ +---------+ +---------+ | | Client |---- . . . ----| Proxy | | Printer | | Camera | | |||
| | | | | +--------+ +-----------+ +---------+ +---------+ | |||
| -------------------------------------------- | | | | | | |||
| ------------ -------------------------------------------- | ||||
| Multicast-capable LAN segment (e.g., Ethernet) | Multicast-capable LAN segment (e.g., Ethernet) | |||
| </artwork></figure> | ||||
| <?rfc needLines="31" ?> | </artwork> | |||
| </section> | </figure> | |||
| <t pn="section-1-23">Note that there need not be any Discovery Proxy on th | ||||
| <section title="Operational Analogy"> | e link | |||
| <t>A Discovery Proxy does not operate as a multicast relay, or multicast | to which the remote client is directly attached. | |||
| forwarder. | The remote client communicates directly with the Discovery Proxy | |||
| There is no danger of multicast forwarding loops that result in traffic | using normal unicast TCP/IP communication mechanisms, | |||
| storms, | potentially spanning multiple IP hops, | |||
| because no multicast packets are forwarded. | possibly including VPN tunnels and other similar | |||
| A Discovery Proxy operates as a *proxy* for a remote client, | long-distance communication channels. | |||
| performing queries on its behalf and reporting the results back.</t> | </t> | |||
| </section> | ||||
| <t>A reasonable analogy is making a telephone call to a colleague | <section numbered="true" toc="include" removeInRFC="false" pn="section-2"> | |||
| at your workplace and saying, "I'm out of the office right now. Would | <name slugifiedName="name-operational-analogy">Operational Analogy</name> | |||
| you | <t pn="section-2-1">A Discovery Proxy does not operate as a multicast rela | |||
| y or multicast | ||||
| forwarder. There is no danger of multicast forwarding loops that result | ||||
| in traffic storms, because no multicast packets are forwarded. A | ||||
| Discovery Proxy operates as a <em>proxy</em> for remote clients, | ||||
| performing | ||||
| queries on their behalf and reporting the results back.</t> | ||||
| <t pn="section-2-2">A reasonable analogy is making a telephone call to a c | ||||
| olleague at | ||||
| your workplace and saying, "I'm out of the office right now. Would you | ||||
| mind bringing up a printer browser window and telling me the names of | mind bringing up a printer browser window and telling me the names of | |||
| the | the printers you see?" That entails no risk of a forwarding loop causing | |||
| printers you see?" That entails no risk of a forwarding loop causing a | a traffic storm, because no multicast packets are sent over the | |||
| traffic storm, because no multicast packets are sent over the telephone | telephone call.</t> | |||
| call.</t> | <t pn="section-2-3">A similar analogy, instead of enlisting another human | |||
| being | ||||
| <t>A similar analogy, instead of enlisting another human being | ||||
| to initiate the service discovery operation on your behalf, is | to initiate the service discovery operation on your behalf, is | |||
| to log into your own desktop work computer using screen sharing, | to log in to your own desktop work computer using screen sharing | |||
| and then run the printer browser yourself to see the list of printers. | and then run the printer browser yourself to see the list of printers. | |||
| Or log in using ssh and type "dns-sd -B _ipp._tcp" and observe the | Or, log in using Secure Shell (ssh) and type "dns-sd -B _ipp._tcp" and | |||
| observe the | ||||
| list of discovered printer names. In neither case is there any risk | list of discovered printer names. In neither case is there any risk | |||
| of a forwarding loop causing a traffic storm, because no multicast | of a forwarding loop causing a traffic storm, because no multicast | |||
| packets are being sent over the screen sharing or ssh connection.</t> | packets are being sent over the screen-sharing or ssh connection.</t> | |||
| <t pn="section-2-4">The Discovery Proxy provides another way of performing | ||||
| <t>The Discovery Proxy provides another way of performing remote | remote | |||
| queries, | queries, | |||
| except using a different protocol instead of screen sharing or ssh.</t> | which uses a different protocol instead of screen sharing or ssh. | |||
| The Discovery Proxy mechanism can be thought of as a custom Remote | ||||
| <t>When the Discovery Proxy software performs Multicast DNS | Procedure Call (RPC) protocol that allows a remote client to exercise | |||
| the Multicast DNS APIs on the Discovery Proxy device, just as a local | ||||
| client running on the Discovery Proxy device would use those APIs.</t> | ||||
| <t pn="section-2-5">When the Discovery Proxy software performs Multicast D | ||||
| NS | ||||
| operations, the exact same Multicast DNS caching mechanisms are | operations, the exact same Multicast DNS caching mechanisms are | |||
| applied as when any other client software on that Discovery Proxy | applied as when any other client software on that Discovery Proxy | |||
| device performs Multicast DNS operations, whether that be running | device performs Multicast DNS operations, regardless of whether that be | |||
| a printer browser client locally, or a remote user running the | running | |||
| printer browser client via a screen sharing connection, or a remote | a printer browser client locally, a remote user running the | |||
| printer browser client via a screen-sharing connection, a remote | ||||
| user logged in via ssh running a command-line tool like "dns-sd", | user logged in via ssh running a command-line tool like "dns-sd", | |||
| or a remote user sending DNS requests that cause a Discovery Proxy | or a remote user sending DNS requests that cause a Discovery Proxy | |||
| to perform discovery operations on its behalf.</t> | to perform discovery operations on its behalf.</t> | |||
| <?rfc needLines="15" ?> | ||||
| </section> | </section> | |||
| <section numbered="true" toc="include" removeInRFC="false" pn="section-3"> | ||||
| <section title="Conventions and Terminology Used in this Document"> | <name slugifiedName="name-conventions-and-terminology">Conventions and Ter | |||
| <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | minology Used in This Document</name> | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY",<vspace | <t pn="section-3-1"> | |||
| /> | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | |||
| and "OPTIONAL" in this document are to be interpreted as | "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14> | |||
| described<vspace /> | ", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", | |||
| in "Key words for use in RFCs to Indicate Requirement Levels",<vspace /> | "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
| when, and only when, they appear in all capitals, as shown here<vspace | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are | |||
| /> | to be interpreted as | |||
| <xref target="RFC2119"/> <xref target="RFC8174"/>.</t> | described in BCP 14 <xref target="RFC2119" format="default" sectionFormat="o | |||
| f" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" sectionFor | ||||
| <t>The Discovery Proxy builds on Multicast DNS, | mat="of" derivedContent="RFC8174"/> | |||
| when, and only when, they appear in all capitals, as shown here. | ||||
| </t> | ||||
| <t pn="section-3-2">The Discovery Proxy builds on Multicast DNS, | ||||
| which works between hosts on the same link. | which works between hosts on the same link. | |||
| For the purposes of this document | For the purposes of this document, | |||
| a set of hosts is considered to be "on the same link" if: | a set of hosts is considered to be "on the same link" if: | |||
| <list style='symbols'> | </t> | |||
| <t>when any host from that set sends a packet to any other host | <ul spacing="normal" bare="false" empty="false" pn="section-3-3"> | |||
| <li pn="section-3-3.1">when any host from that set sends a packet to any | ||||
| other host | ||||
| in that set, using unicast, multicast, or broadcast, the entire | in that set, using unicast, multicast, or broadcast, the entire | |||
| link-layer packet payload arrives unmodified, and</t> | link-layer packet payload arrives unmodified, and</li> | |||
| <t>a broadcast sent over that link, by any host from that set of | <li pn="section-3-3.2">a broadcast sent over that link, by any host from | |||
| that set of | ||||
| hosts, | hosts, | |||
| can be received by every other host in that set.</t> | can be received by every other host in that set.</li> | |||
| </list> | </ul> | |||
| <t pn="section-3-4"> | ||||
| The link-layer *header* may be modified, such as in | The link-layer <em>header</em> may be modified, such as in Token Ring | |||
| <xref target="IEEE-5">Token Ring Source Routing</xref>, | Source Routing | |||
| but not the link-layer *payload*. | <xref target="IEEE-5" format="default" sectionFormat="of" derivedContent=" | |||
| IEEE-5"/>, | ||||
| but not the link-layer <em>payload</em>. | ||||
| In particular, if any device forwarding a packet modifies any | In particular, if any device forwarding a packet modifies any | |||
| part of the IP header or IP payload then the packet is no longer | part of the IP header or IP payload, then the packet is no longer | |||
| considered to be on the same link. This means that the packet may | considered to be on the same link. This means that the packet may | |||
| pass through devices such as repeaters, bridges, hubs or switches | pass through devices such as repeaters, bridges, hubs, or switches | |||
| and still be considered to be on the same link for the purpose of | and still be considered to be on the same link for the purpose of | |||
| this document, but not through a device such as an IP router that | this document, but not through a device such as an IP router that | |||
| decrements the IP TTL or otherwise modifies the IP header.</t> | decrements the IP TTL or otherwise modifies the IP header.</t> | |||
| </section> | </section> | |||
| <section anchor="compatibility" numbered="true" toc="include" removeInRFC="f | ||||
| <section anchor="compatibility" title="Compatibility Considerations"> | alse" pn="section-4"> | |||
| <t>No changes to existing devices are required to work with a Discovery | <name slugifiedName="name-compatibility-consideration">Compatibility Consi | |||
| derations</name> | ||||
| <t pn="section-4-1">No changes to existing devices are required to work wi | ||||
| th a Discovery | ||||
| Proxy.</t> | Proxy.</t> | |||
| <t pn="section-4-2">Existing devices that advertise services using Multica | ||||
| <t>Existing devices that advertise services using Multicast DNS work | st DNS work | |||
| with Discovery Proxy.</t> | with a Discovery Proxy.</t> | |||
| <t pn="section-4-3">Existing clients that support DNS-based Service Discov | ||||
| <t>Existing clients that support DNS-Based Service Discovery over | ery over | |||
| Unicast DNS | Unicast DNS work with a Discovery Proxy. DNS-based Service Discovery | |||
| work with Discovery Proxy. | over Unicast | |||
| Service Discovery over Unicast DNS was introduced in Mac OS X 10.4 in | DNS was introduced in Mac OS X 10.4 Tiger in April 2005 and has been | |||
| April 2005, | included in | |||
| as is included in Apple products introduced since then, including iPhone | Apple products introduced since then, including the iPhone and iPad. | |||
| and iPad, | It has also been included in | |||
| as well as products from other vendors, such as Microsoft Windows | products from other vendors, such as Microsoft Windows 10.</t> | |||
| 10.</t> | <t pn="section-4-4">An overview of the larger collection of associated DNS | |||
| -based Service | ||||
| <t>An overview of the larger collection of related Service Discovery | Discovery | |||
| technologies, and how Discovery Proxy relates to those, is given in | technologies, and how the Discovery Proxy technology relates to those, | |||
| <xref target="Roadmap">the Service Discovery Road Map | is given in the | |||
| document</xref>.</t> | Service Discovery Road Map document <xref target="I-D.cheshire-dnssd-roadm | |||
| ap" format="default" sectionFormat="of" derivedContent="ROADMAP"/>.</t> | ||||
| <?rfc needLines="22" ?> | ||||
| </section> | </section> | |||
| <section anchor="operation" numbered="true" toc="include" removeInRFC="false | ||||
| <section anchor="operation" title="Discovery Proxy Operation"> | " pn="section-5"> | |||
| <t>In a typical configuration, a Discovery Proxy is configured | <name slugifiedName="name-discovery-proxy-operation">Discovery Proxy Opera | |||
| to be authoritative <xref target="RFC1034"/> <xref target="RFC1035"/> | tion</name> | |||
| for four or more DNS subdomains, and authority | <t pn="section-5-1">In a typical configuration, a Discovery Proxy is confi | |||
| for these subdomains is delegated to it via NS records: | gured | |||
| <list style="hanging"> | to be authoritative <xref target="RFC1034" format="default" sectionFormat= | |||
| <t hangText="A DNS subdomain for service discovery records."><vspace | "of" derivedContent="RFC1034"/> <xref target="RFC1035" format="default" sectionF | |||
| /> | ormat="of" derivedContent="RFC1035"/> | |||
| for four or more DNS subdomains, listed below. | ||||
| Authority for these subdomains is delegated | ||||
| from the parent domain to the Discovery Proxy | ||||
| in the usual way for DNS delegation, via NS records. | ||||
| </t> | ||||
| <dl newline="true" spacing="normal" pn="section-5-2"> | ||||
| <dt pn="section-5-2.1">A DNS subdomain for DNS-based Service Discovery r | ||||
| ecords.</dt> | ||||
| <dd pn="section-5-2.2"> | ||||
| This subdomain name may contain rich text, including | This subdomain name may contain rich text, including | |||
| spaces and other punctuation. This is because this | spaces and other punctuation. This is because this | |||
| subdomain name is used only in graphical user interfaces, | subdomain name is used only in graphical user interfaces, | |||
| where rich text is appropriate.</t> | where rich text is appropriate.</dd> | |||
| <t hangText="A DNS subdomain for host name records."><vspace /> | <dt pn="section-5-2.3">A DNS subdomain for host name records.</dt> | |||
| This subdomain name SHOULD be limited to letters, digits and | <dd pn="section-5-2.4"> | |||
| hyphens, | This subdomain name <bcp14>SHOULD</bcp14> be limited to letters, | |||
| to facilitate convenient use of host names in command-line | digits, and | |||
| interfaces.</t> | hyphens in order to facilitate the convenient use of host | |||
| <t hangText="One or more DNS subdomains for IPv4 Reverse Mapping | names in | |||
| records."><vspace /> | command-line | |||
| These subdomains will have names that ends in "in-addr.arpa."</t> | interfaces.</dd> | |||
| <t hangText="One or more DNS subdomains for IPv6 Reverse Mapping | <dt pn="section-5-2.5">One or more DNS subdomains for IPv4 Reverse Mappi | |||
| records."><vspace /> | ng records.</dt> | |||
| These subdomains will have names that ends in "ip6.arpa."</t> | <dd pn="section-5-2.6"> | |||
| </list> | These subdomains will have names that end in "in-addr.arpa".</dd> | |||
| </t> | <dt pn="section-5-2.7">One or more DNS subdomains for IPv6 Reverse Mappi | |||
| ng records.</dt> | ||||
| <t>In an enterprise network the naming and delegation of these | <dd pn="section-5-2.8"> | |||
| These subdomains will have names that end in "ip6.arpa".</dd> | ||||
| </dl> | ||||
| <t pn="section-5-3">In an enterprise network, the naming and delegation of | ||||
| these | ||||
| subdomains | subdomains | |||
| is typically performed by conscious action of the network administrator. | is typically performed by conscious action of the network administrator. | |||
| In a home network naming and delegation would typically be performed | In a home network, naming and delegation would typically be performed | |||
| using some automatic configuration mechanism such as HNCP | using some automatic configuration mechanism such as Home Networking | |||
| <xref target="RFC7788"/>.</t> | Control Protocol (HNCP) | |||
| <xref target="RFC7788" format="default" sectionFormat="of" derivedContent= | ||||
| <t>These three varieties of delegated subdomains | "RFC7788"/>.</t> | |||
| <t pn="section-5-4">These three varieties of delegated subdomains | ||||
| (service discovery, host names, and reverse mapping) are described below | (service discovery, host names, and reverse mapping) are described below | |||
| in | in Sections <xref target="dom-sd" format="counter" sectionFormat="of" deri | |||
| <xref target="dom-sd"/>, | vedContent="5.1"/>, <xref target="dom-host" format="counter" sectionFormat="of" | |||
| <xref target="dom-host"/> and | derivedContent="5.3"/>, and <xref target="dom-rev" format="counter" sectionForma | |||
| <xref target="dom-rev"/>.</t> | t="of" derivedContent="5.4"/>.</t> | |||
| <t pn="section-5-5">How a client discovers where to issue its DNS-based Se | ||||
| <t>How a client discovers where to issue its service discovery queries | rvice Discovery | |||
| is described | queries | |||
| below in <xref target="dom-enum"/>.</t> | is described in <xref target="dom-enum" format="default" sectionFormat="of | |||
| " derivedContent="Section 5.2"/>.</t> | ||||
| <?rfc needLines="28" ?> | <section anchor="dom-sd" numbered="true" toc="include" removeInRFC="false" | |||
| <section anchor="dom-sd" title="Delegated Subdomain for Service | pn="section-5.1"> | |||
| Discovery Records"> | <name slugifiedName="name-delegated-subdomain-for-dns">Delegated Subdoma | |||
| <t>In its simplest form, each link in an organization | in for DNS-based Service Discovery | |||
| is assigned a unique Unicast DNS domain name, such as | Records</name> | |||
| "Building 1.example.com" or | <t pn="section-5.1-1">In its simplest form, each link in an organization | |||
| "2nd Floor.Building 3.example.com". | is assigned a unique Unicast DNS domain name such as | |||
| "Building 1.example.com" or | ||||
| "2nd Floor.Building 3.example.com". | ||||
| Grouping multiple links under a single Unicast DNS domain | Grouping multiple links under a single Unicast DNS domain | |||
| name is to be specified in a future companion document, but for | name is to be specified in a future companion document, but for | |||
| the purposes of this document, assume that each link has its own | the purposes of this document, assume that each link has its own | |||
| unique Unicast DNS domain name. | unique Unicast DNS domain name. | |||
| In a graphical user interface these names are not displayed | In a graphical user interface these names are not displayed | |||
| as strings with dots as shown above, but something more | as strings with dots as shown above, but something more | |||
| akin to a typical file browser graphical user interface | akin to a typical file browser graphical user interface | |||
| (which is harder to illustrate in a text-only document) | (which is harder to illustrate in a text-only document) | |||
| showing folders, subfolders and files in a file system. | showing folders, subfolders, and files in a file system. | |||
| <figure align="left" anchor="browser" title="Illustrative | </t> | |||
| GUI"><artwork><![CDATA[ | <figure anchor="browser" align="left" suppress-title="false" pn="figure- | |||
| 2"> | ||||
| <name slugifiedName="name-illustrative-gui">Illustrative GUI | ||||
| </name> | ||||
| <artwork align="center" name="" type="" alt="" pn="section-5.1-2.1"> | ||||
| +---------------+--------------+-------------+-------------------+ | +---------------+--------------+-------------+-------------------+ | |||
| | *example.com* | Building 1 | 1st Floor | Alice's printer | | | *example.com* | Building 1 | 1st Floor | Alice's printer | | |||
| | | Building 2 | *2nd Floor* | Bob's printer | | | | Building 2 | *2nd Floor* | Bob's printer | | |||
| | | *Building 3* | 3rd Floor | Charlie's printer | | | | *Building 3* | 3rd Floor | Charlie's printer | | |||
| | | Building 4 | 4th Floor | | | | | Building 4 | 4th Floor | | | |||
| | | Building 5 | | | | | | Building 5 | | | | |||
| | | Building 6 | | | | | | Building 6 | | | | |||
| +---------------+--------------+-------------+-------------------+]]></artwork> | +---------------+--------------+-------------+-------------------+ | |||
| </figure> | ||||
| </t> | ||||
| <t>Each named link in an organization has one or more Discovery Proxies | ||||
| which | ||||
| serve it. This Discovery Proxy function for each link could be performed | ||||
| by a | ||||
| device like a router or switch that is physically attached to that link. | ||||
| In the parent domain, NS records | ||||
| are used to delegate ownership of each defined link name | ||||
| (e.g., "Building 1.example.com") | ||||
| to the one or more Discovery Proxies that serve the named link. | ||||
| In other words, the Discovery Proxies are the authoritative name | ||||
| servers for that subdomain. | ||||
| As in the rest of DNS-Based Service Discovery, all names are represented | ||||
| as-is | ||||
| using plain UTF-8 encoding, and, as described in <xref | ||||
| target="notrans"/>, | ||||
| no text encoding translations are performed.</t> | ||||
| <t>With appropriate <xref target="IEEE-1Q">VLAN configuration</xref> | ||||
| a single Discovery Proxy device could have a logical presence on | ||||
| many links, and serve as the Discovery Proxy for all those links. | ||||
| In such a configuration the Discovery Proxy device would have a single | ||||
| physical <xref target="IEEE-3">Ethernet</xref> port, configured as a | ||||
| VLAN trunk port, which would appear to software on that device as | ||||
| multiple | ||||
| virtual Ethernet interfaces, one connected to each of the VLAN | ||||
| links.</t> | ||||
| <t>As an alternative to using VLAN technology, using a | </artwork> | |||
| <xref target="Relay">Multicast DNS Discovery Relay</xref> | </figure> | |||
| <t pn="section-5.1-3">Each named link in an organization has one or more | ||||
| Discovery | ||||
| Proxies that serve it. This Discovery Proxy function | ||||
| could be performed by a device like a router or switch that is | ||||
| physically attached to that link. In the parent domain, NS records | ||||
| are used to delegate ownership of each defined link name | ||||
| (e.g., "Building 1.example.com") to one or more | ||||
| Discovery Proxies that serve the named link. In other words, the | ||||
| Discovery Proxies are the authoritative name servers for that | ||||
| subdomain. As in the rest of DNS-based Service Discovery, all names | ||||
| are represented as-is using plain UTF-8 encoding and, as described in | ||||
| <xref target="notrans" format="default" sectionFormat="of" derivedConten | ||||
| t="Section 5.5.4"/>, no text-encoding | ||||
| translations are performed.</t> | ||||
| <t pn="section-5.1-4">With appropriate VLAN | ||||
| configuration <xref target="IEEE-1Q" format="default" sectionFormat="of" | ||||
| derivedContent="IEEE-1Q"/>, a | ||||
| single Discovery Proxy device could have a | ||||
| logical presence on many links and serve as the Discovery Proxy for | ||||
| all those links. In such a configuration, the Discovery Proxy device | ||||
| would have a single physical Ethernet <xref target="IEEE-3" format="defa | ||||
| ult" sectionFormat="of" derivedContent="IEEE-3"/> port, configured as a VLAN tru | ||||
| nk | ||||
| port, which would appear to software on that device as multiple | ||||
| virtual Ethernet interfaces, one connected to each of the VLAN | ||||
| links.</t> | ||||
| <t pn="section-5.1-5">As an alternative to using VLAN technology, using | ||||
| a Multicast DNS | ||||
| Discovery Relay | ||||
| <xref target="I-D.sctl-dnssd-mdns-relay" format="default" sectionFormat="o | ||||
| f" derivedContent="RELAY"/> | ||||
| is another way that a Discovery Proxy can have | is another way that a Discovery Proxy can have | |||
| a ‘virtual’ presence on a remote link.</t> | a "virtual" presence on a remote link.</t> | |||
| <t pn="section-5.1-6">When a DNS-SD client issues a Unicast DNS query to | ||||
| <?rfc needLines="6" ?> | discover | |||
| <t>When a DNS-SD client issues a Unicast DNS query to discover services | services in a particular Unicast DNS subdomain | |||
| in a particular Unicast DNS subdomain | (e.g., "_ipp._tcp.Building 1.example.com. PTR ?"), | |||
| (e.g., "_printer._tcp.Building 1.example.com. PTR ?") | the normal DNS delegation mechanism results in that query being | |||
| the normal DNS delegation mechanism results in that query being | forwarded until it reaches the delegated authoritative name server for | |||
| forwarded until it reaches the delegated authoritative name server | that subdomain, namely, the Discovery Proxy on the link in question. | |||
| for that subdomain, namely the Discovery Proxy on the link in question. | Like a conventional Unicast DNS server, a Discovery Proxy implements | |||
| Like a conventional Unicast DNS server, | the usual Unicast DNS protocol <xref target="RFC1034" format="default" s | |||
| a Discovery Proxy implements the usual Unicast DNS protocol | ectionFormat="of" derivedContent="RFC1034"/> <xref target="RFC1035" format="defa | |||
| <xref target="RFC1034"/> <xref target="RFC1035"/> over UDP and TCP. | ult" sectionFormat="of" derivedContent="RFC1035"/> over UDP | |||
| However, unlike a conventional Unicast DNS server that | and TCP. However, unlike a conventional Unicast DNS server that | |||
| generates answers from the data in its manually-configured zone file, | generates answers from the data in its manually configured zone file, | |||
| a Discovery Proxy generates answers using Multicast DNS. | a Discovery Proxy learns answers using Multicast DNS. A Discovery | |||
| A Discovery Proxy does this by consulting | Proxy does this by consulting its Multicast DNS cache and/or issuing | |||
| its Multicast DNS cache and/or issuing Multicast DNS queries, | Multicast DNS queries, as appropriate according to the usual protocol | |||
| as appropriate, according to the usual protocol | rules of Multicast DNS <xref target="RFC6762" format="default" sectionFo | |||
| rules of <xref target="RFC6762">Multicast DNS</xref>, | rmat="of" derivedContent="RFC6762"/>, | |||
| for the corresponding Multicast DNS name, type and class, | for the corresponding Multicast DNS name, type, and class, with the | |||
| with the delegated zone part of the name replaced with ".local" | delegated zone part of the name replaced with ".local" (e.g., in | |||
| (e.g., in this case, "_printer._tcp.local. PTR ?"). | this case, "_ipp._tcp.local. PTR ?"). Then, from the | |||
| Then, from the received Multicast DNS data, the Discovery Proxy | received Multicast DNS data, the Discovery Proxy synthesizes the | |||
| synthesizes the appropriate Unicast DNS response, with the | appropriate Unicast DNS response, with the ".local" top-level label | |||
| ".local" top-level label replaced with with the name of the delegated | of the owner name | |||
| zone. | replaced with the name of the delegated zone. | |||
| How long the Discovery Proxy should wait to accumulate Multicast DNS | Further details of the name translation rules are | |||
| responses before sending its unicast reply is described below in <xref | described in <xref target="translation" format="default" sectionFormat=" | |||
| target="aggregation"/>.</t> | of" derivedContent="Section 5.5"/>. | |||
| Rules specifying how long the Discovery | ||||
| <t>The existing Multicast DNS caching mechanism is used | Proxy should wait to accumulate Multicast DNS responses before sending | |||
| to minimize unnecessary Multicast DNS queries on the wire. | its unicast reply are described in <xref target="aggregation" format="de | |||
| The Discovery Proxy is acting as a client of the underlying Multicast | fault" sectionFormat="of" derivedContent="Section 5.6"/>. | |||
| DNS | </t> | |||
| subsystem, and benefits from the same caching and efficiency | <t pn="section-5.1-7">The existing Multicast DNS caching mechanism is us | |||
| measures as any other client using that subsystem.</t> | ed to minimize | |||
| unnecessary Multicast DNS queries on the wire. The Discovery Proxy is | ||||
| <t>Note that the contents of the delegated zone, | acting as a client of the underlying Multicast DNS subsystem and | |||
| generated as it is by performing ".local" Multicast DNS queries, | benefits from the same caching and efficiency measures as any other | |||
| mirrors the records available on the local link via Multicast DNS | client using that subsystem.</t> | |||
| very closely, but not precisely. | <t pn="section-5.1-8">Note that the contents of the delegated zone, gene | |||
| There is not a full bidirectional equivalence between the two. | rated as it is by | |||
| Certain records that are available via Multicast DNS may not have | performing ".local" Multicast DNS queries, mirrors the records | |||
| equivalents in the delegated zone, | available on the local link via Multicast DNS very closely, but not | |||
| possibly because they are invalid or not relevant in the delegated zone, | precisely. There is not a full bidirectional equivalence between the | |||
| or | two. Certain records that are available via Multicast DNS may not | |||
| because they are being supressed because they are unusable outside the | have equivalents in the delegated zone possibly because they are | |||
| local link | invalid or not relevant in the delegated zone or because they are | |||
| (see <xref target="unusable"/>). | being suppressed because they are unusable outside the local link (see | |||
| Conversely, certain records that appear in the delegated zone may not | <xref target="unusable" format="default" sectionFormat="of" derivedConte | |||
| have | nt="Section 5.5.2"/>). Conversely, certain | |||
| corresponding records available on the local link via Multicast DNS. | records that appear in the delegated zone may not have corresponding | |||
| In particular there are certain administrative SRV records | records available on the local link via Multicast DNS. In particular, | |||
| (see <xref target="admin"/>) that logically fall within the delegated | there are certain administrative SRV records (see <xref target="admin" f | |||
| zone, | ormat="default" sectionFormat="of" derivedContent="Section 6"/>) that logically | |||
| but semantically represent metadata *about* the zone rather than records | fall within the delegated zone but | |||
| *within* the zone, and consequently these administrative records in the | semantically represent metadata <em>about</em> the zone rather than | |||
| delegated zone | records | |||
| do not have any corresponding counterparts in the Multicast DNS | <em>within</em> the zone. Consequently, these administrative records | |||
| namespace of the local link.</t> | in | |||
| the delegated zone do not have any corresponding counterparts in the | ||||
| <?rfc needLines="26" ?> | Multicast DNS namespace of the local link.</t> | |||
| </section> | </section> | |||
| <section anchor="dom-enum" numbered="true" toc="include" removeInRFC="fals | ||||
| <section anchor="dom-enum" title="Domain Enumeration"> | e" pn="section-5.2"> | |||
| <t>A DNS-SD client performs Domain Enumeration <xref | <name slugifiedName="name-domain-enumeration">Domain Enumeration</name> | |||
| target="RFC6763"/> | <t pn="section-5.2-1">A DNS-SD client performs Domain Enumeration <xref | |||
| via certain PTR queries, using both unicast and multicast. | target="RFC6763" format="default" sectionFormat="of" derivedContent="RFC6763"/> | |||
| If it receives a Domain Name configuration via | via certain PTR queries, using both unicast and | |||
| <xref target="RFC2132">DHCP option 15</xref>, | multicast.</t> | |||
| then it issues unicast queries using this domain. | <t pn="section-5.2-2">If a DNS-SD client receives a Domain Name configur | |||
| It issues unicast queries using names derived from its | ation via DHCP | |||
| IPv4 subnet address(es) and | then it issues | |||
| IPv6 prefix(es). | unicast queries derived from this domain name. It also issues unicast | |||
| These are described below in <xref target="unicast"/>. | queries using | |||
| It also issues multicast Domain Enumeration queries in the "local" | names derived from its IPv4 subnet address(es) and IPv6 prefix(es). | |||
| domain | These unicast Domain Enumeration queries are described | |||
| <xref target="RFC6762"/>. | in <xref target="unicast" format="default" sectionFormat="of" derivedCon | |||
| These are described below in <xref target="multicast"/>. | tent="Section 5.2.1"/>. | |||
| The results of all the Domain Enumeration queries are combined for | A DNS-SD client | |||
| Service Discovery purposes.</t> | also issues multicast Domain Enumeration queries in the "local" domain | |||
| <xref target="RFC6762" format="default" sectionFormat="of" derivedConten | ||||
| <section anchor="unicast" title="Domain Enumeration via Unicast | t="RFC6762"/>, as described in | |||
| Queries"> | <xref target="multicast" format="default" sectionFormat="of" derivedCont | |||
| <t>The administrator creates Domain Enumeration | ent="Section 5.2.2"/>. The results of all the | |||
| PTR records <xref target="RFC6763"/> | Domain Enumeration queries are combined for DNS-based Service | |||
| to inform clients of available service discovery domains. | Discovery | |||
| Two varieties of such Domain Enumeration PTR records exist; | purposes.</t> | |||
| those with names derived from the domain name communicated to the | <section anchor="unicast" numbered="true" toc="include" removeInRFC="fal | |||
| clients via DHCP, | se" pn="section-5.2.1"> | |||
| and those with names derived from IPv4 subnet address(es) and IPv6 | <name slugifiedName="name-domain-enumeration-via-unic">Domain Enumerat | |||
| prefix(es) in use by the clients. | ion via Unicast Queries</name> | |||
| Below is an example showing the name-based variety:</t> | <t pn="section-5.2.1-1">The (human or automated) administrator creates | |||
| <figure><artwork> | Unicast DNS Domain Enumeration PTR records <xref target="RFC6763" form | |||
| at="default" sectionFormat="of" derivedContent="RFC6763"/> to inform clients of | ||||
| available | ||||
| service discovery domains. Two varieties of such Unicast DNS Domain | ||||
| Enumeration | ||||
| PTR records exist: those with names derived from the domain name | ||||
| communicated to the clients via | ||||
| <xref target="RFC2132" format="default" sectionFormat="of" derivedCont | ||||
| ent="RFC2132">DHCP option 15</xref>, | ||||
| and those with names derived | ||||
| from either IPv4 subnet address(es) or IPv6 prefix(es) in use by the | ||||
| clients. Below is an example showing the name-based variety, | ||||
| where the DHCP server configured the client with the domain name | ||||
| "example.com":</t> | ||||
| <artwork name="" type="" align="center" alt="" pn="section-5.2.1-2"> | ||||
| b._dns-sd._udp.example.com. PTR Building 1.example.com. | b._dns-sd._udp.example.com. PTR Building 1.example.com. | |||
| PTR Building 2.example.com. | PTR Building 2.example.com. | |||
| PTR Building 3.example.com. | PTR Building 3.example.com. | |||
| PTR Building 4.example.com. | PTR Building 4.example.com. | |||
| db._dns-sd._udp.example.com. PTR Building 1.example.com. | db._dns-sd._udp.example.com. PTR Building 1.example.com. | |||
| lb._dns-sd._udp.example.com. PTR Building | lb._dns-sd._udp.example.com. PTR Building 1.example.com.</artwork> | |||
| 1.example.com.</artwork></figure> | <t pn="section-5.2.1-3">The meaning of these records is defined in the | |||
| <xref target="RFC6763" format="default" sectionFormat="of" derivedContent="RFC6 | ||||
| <t>The meaning of these records is defined in the | 763">DNS-based Service | |||
| <xref target="RFC6763">DNS Service Discovery specification</xref> | Discovery specification</xref> but, for convenience, is repeated | |||
| but for convenience is repeated here. | here. | |||
| The "b" ("browse") records tell the client device the | The "b" ("browse") records tell the client device the list of | |||
| list of browsing domains to display for the user to select from. | browsing domains to display for the user to select from. The "db" | |||
| The "db" ("default browse") record tells the client device | ("default browse") record tells the client device which domain in | |||
| which domain in that list should be selected by default. | that list should be selected by default. The "db" domain | |||
| The "db" domain MUST be one of the domains in the "b" list; | <bcp14>MUST</bcp14> be one of the domains in the "b" list; if not, | |||
| if not then no domain is selected by default. | then no domain is selected by default. The "lb" ("legacy browse") | |||
| The "lb" ("legacy browse") record tells the client device which domain | record tells the client device which domain to automatically browse | |||
| to automatically browse on behalf of applications that don't implement | on behalf of applications that don't implement user interface for | |||
| UI for multi-domain browsing (which is most of them, at the time of | multi-domain | |||
| writing). | browsing (which is most of them at the time of writing). The "lb" | |||
| The "lb" domain is often the same as the "db" domain, or sometimes | domain is often the same as the "db" domain, or sometimes the "db" | |||
| the "db" domain plus one or more others that should be included in | domain plus one or more others that should be included in the list | |||
| the list of automatic browsing domains for legacy clients.</t> | of automatic browsing domains for legacy clients.</t> | |||
| <t pn="section-5.2.1-4">Note that in the example above, for clarity, s | ||||
| <t>Note that in the example above, for clarity, | pace characters in | |||
| space characters in names are shown as actual spaces. | names are shown as actual spaces. If this data is manually entered | |||
| If this data is manually entered into a textual zone file for | into a textual zone file for authoritative server software such as | |||
| authoritative server | BIND, care must be taken because the space character is used as a | |||
| software such as BIND, care must be taken because the space character | field separator, and other characters like dot ('.'), semicolon | |||
| is used as | (';'), dollar ('$'), backslash ('\'), etc., also have special | |||
| a field separator, and other characters like dot ('.'), semicolon | meaning. These characters have to be escaped when entered into a | |||
| (';'), | textual zone file, following the rules in <xref target="RFC1035" secti | |||
| dollar ('$'), backslash ('\'), etc., also have special meaning. | onFormat="of" section="5.1" format="default" derivedLink="https://rfc-editor.org | |||
| These characters have to be escaped when entered into a textual zone | /rfc/rfc1035#section-5.1" derivedContent="RFC1035">the DNS specification</xref>. | |||
| file, | For | |||
| following the rules in Section 5.1 of the | example, a literal space in a name is represented in the textual | |||
| <xref target="RFC1035">DNS specification</xref>. | zone file using '\032', so "Building 1.example.com" is entered | |||
| For example, a literal space in a name is represented in the textual | as "Building\0321.example.com".</t> | |||
| zone file | <t pn="section-5.2.1-5">DNS responses are limited to a maximum size of | |||
| using '\032', so "Building 1.example.com." is entered as | 65535 bytes. | |||
| "Building\0321.example.com."</t> | ||||
| <?rfc needLines="15" ?> | ||||
| <t>DNS responses are limited to a maximum size of 65535 bytes. | ||||
| This limits the maximum number of domains that can be returned for | This limits the maximum number of domains that can be returned for | |||
| a Domain Enumeration query, as follows:</t> | a Domain Enumeration query as follows:</t> | |||
| <t pn="section-5.2.1-6">A DNS response header is 12 bytes. | ||||
| <t>A DNS response header is 12 bytes. | ||||
| That's typically followed by a single qname (up to 256 bytes) | That's typically followed by a single qname (up to 256 bytes) | |||
| plus qtype (2 bytes) and qclass (2 bytes), leaving 65275 | plus qtype (2 bytes) and qclass (2 bytes), leaving 65275 | |||
| for the Answer Section.</t> | for the Answer Section.</t> | |||
| <t pn="section-5.2.1-7">An Answer Section Resource Record consists of: | ||||
| <t>An Answer Section Resource Record consists of: | </t> | |||
| <?rfc subcompact="yes" ?> | <ul spacing="compact" bare="false" empty="false" pn="section-5.2.1-8"> | |||
| <list style='symbols'> | <li pn="section-5.2.1-8.1">Owner name, encoded as a compression poin | |||
| <t>Owner name, encoded as a two-byte compression pointer</t> | ter, 2 bytes</li> | |||
| <t>Two-byte rrtype (type PTR)</t> | <li pn="section-5.2.1-8.2">RRTYPE (type PTR), 2 bytes</li> | |||
| <t>Two-byte rrclass (class IN)</t> | <li pn="section-5.2.1-8.3">RRCLASS (class IN), 2 bytes</li> | |||
| <t>Four-byte ttl</t> | <li pn="section-5.2.1-8.4">TTL, 4 bytes</li> | |||
| <t>Two-byte rdlength</t> | <li pn="section-5.2.1-8.5">RDLENGTH, 2 bytes</li> | |||
| <t>rdata (domain name, up to 256 bytes)</t> | <li pn="section-5.2.1-8.6">RDATA (domain name), up to 256 bytes</li> | |||
| </list> | </ul> | |||
| <?rfc subcompact="no" ?> | <t pn="section-5.2.1-9">This means that each Resource Record in the An | |||
| </t> | swer Section can | |||
| <t>This means that each Resource Record in the Answer Section can | ||||
| take up to 268 bytes total, which means that the Answer Section | take up to 268 bytes total, which means that the Answer Section | |||
| can contain, in the worst case, no more than 243 domains.</t> | can contain, in the worst case, no more than 243 domains.</t> | |||
| <t pn="section-5.2.1-10">In a more typical scenario, where the domain | ||||
| <t>In a more typical scenario, where the domain names are not all | names are not all | |||
| maximum-sized names, and there is some similarity between names | maximum-sized names, and there is some similarity between names | |||
| so that reasonable name compression is possible, each Answer | so that reasonable name compression is possible, each Answer | |||
| Section Resource Record may average 140 bytes, which means that | Section Resource Record may average 140 bytes, which means that | |||
| the Answer Section can contain up to 466 domains.</t> | the Answer Section can contain up to 466 domains.</t> | |||
| <t pn="section-5.2.1-11">It is anticipated that this should be suffici | ||||
| <t>It is anticipated that this should be sufficient for even a large | ent for even a large | |||
| corporate network or university campus.</t> | corporate network or university campus.</t> | |||
| <?rfc needLines="21" ?> | </section> | |||
| </section> | <section anchor="multicast" numbered="true" toc="include" removeInRFC="f | |||
| alse" pn="section-5.2.2"> | ||||
| <section anchor="multicast" title="Domain Enumeration via Multicast | <name slugifiedName="name-domain-enumeration-via-mult">Domain Enumerat | |||
| Queries"> | ion via Multicast Queries</name> | |||
| <t pn="section-5.2.2-1">In the case where Discovery Proxy functionalit | ||||
| <t>In the case where Discovery Proxy functionality is widely deployed | y is widely | |||
| within an enterprise (either by having a Discovery Proxy on each link, | deployed within an enterprise (either by having a Discovery Proxy | |||
| or by having a Discovery Proxy with a remote ‘virtual’ presence on | physically on | |||
| each link | each link, or by having a Discovery Proxy with a remote "virtual" | |||
| using VLANs or <xref target="Relay">Multicast DNS Discovery | presence on each link using VLANs or Multicast DNS Discovery Relays | |||
| Relays</xref>) | <xref target="I-D.sctl-dnssd-mdns-relay" format="default" sectionForma | |||
| this offers an additional way to provide Domain Enumeration data for | t="of" derivedContent="RELAY"/>), | |||
| clients.</t> | this offers an additional way to provide Domain Enumeration | |||
| configuration data for | ||||
| <t>A Discovery Proxy can be configured to generate Multicast DNS | clients.</t> | |||
| responses | <t pn="section-5.2.2-2">Note that this function of the Discovery Proxy | |||
| is | ||||
| supplementary to the primary purpose of the Discovery Proxy, | ||||
| which is to facilitate <em>remote</em> clients discovering services | ||||
| on the Discovery Proxy's local link. | ||||
| This publication of Domain Enumeration configuration data | ||||
| via link-local multicast on the Discovery | ||||
| Proxy's local link is performed for the benefit of <em>local</em> | ||||
| clients | ||||
| attached to that link, and typically directs those clients to | ||||
| contact other distant Discovery Proxies attached to other links. | ||||
| Generally, a client does not need to use the local Discovery | ||||
| Proxy on its own link, because a client is generally able to | ||||
| perform its own Multicast DNS queries on that link. | ||||
| (The exception to this is when the local Wi-Fi access point is | ||||
| blocking or filtering local multicast traffic, requiring even local | ||||
| clients to use their local Discovery Proxy to perform local | ||||
| discovery.)</t> | ||||
| <t pn="section-5.2.2-3">A Discovery Proxy can be configured to generat | ||||
| e Multicast DNS | ||||
| responses | ||||
| for the following Multicast DNS Domain Enumeration queries issued by | for the following Multicast DNS Domain Enumeration queries issued by | |||
| clients:</t> | clients:</t> | |||
| <artwork name="" type="" align="left" alt="" pn="section-5.2.2-4"> | ||||
| <figure><artwork> | ||||
| b._dns-sd._udp.local. PTR ? | b._dns-sd._udp.local. PTR ? | |||
| db._dns-sd._udp.local. PTR ? | db._dns-sd._udp.local. PTR ? | |||
| lb._dns-sd._udp.local. PTR ?</artwork></figure> | lb._dns-sd._udp.local. PTR ?</artwork> | |||
| <t pn="section-5.2.2-5">This provides the ability for Discovery Proxie | ||||
| <t>This provides the ability for Discovery Proxies to indicate | s to indicate | |||
| recommended browsing domains | recommended browsing domains to DNS-SD clients on a per-link | |||
| to DNS-SD clients on a per-link granularity. In some enterprises it | granularity. In some enterprises, it may be preferable to provide | |||
| may be | this per-link configuration information in the form of Discovery | |||
| preferable to provide this per-link configuration data in the form of | Proxy | |||
| Discovery Proxy configuration, rather than populating the Unicast DNS | configuration data rather than by populating the Unicast DNS servers | |||
| servers | with | |||
| with the same data (in the "ip6.arpa" or "in-addr.arpa" domains).</t> | the same data (in the "ip6.arpa" or "in-addr.arpa" domains).</t> | |||
| <t pn="section-5.2.2-6">Regardless of how the network operator chooses | ||||
| <t>Regardless of how the network operator chooses to provide this | to provide this | |||
| configuration | configuration | |||
| data, clients will perform Domain Enumeration via both unicast and | data, clients will perform Domain Enumeration via both unicast and | |||
| multicast | multicast | |||
| queries, and then combine the results of these queries.</t> | queries and then combine the results of these queries.</t> | |||
| <?rfc needLines="30" ?> | ||||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="dom-host" numbered="true" toc="include" removeInRFC="fals | ||||
| <section anchor="dom-host" title="Delegated Subdomain for LDH Host | e" pn="section-5.3"> | |||
| Names"> | <name slugifiedName="name-delegated-subdomain-for-ldh">Delegated Subdoma | |||
| <t>DNS-SD service instance names and domains are allowed | in for LDH Host Names</name> | |||
| to contain arbitrary <xref target="RFC5198">Net-Unicode text</xref>, | <t pn="section-5.3-1">DNS-SD service instance names and domains are allo | |||
| encoded as <xref target="RFC3629">precomposed UTF-8</xref>.</t> | wed | |||
| to contain arbitrary Net-Unicode text <xref target="RFC5198" format="def | ||||
| <t>Users typically interact with service discovery software by | ault" sectionFormat="of" derivedContent="RFC5198"/>, | |||
| viewing a list of discovered service instance names on a display, | encoded as precomposed UTF-8 <xref target="RFC3629" format="default" sec | |||
| tionFormat="of" derivedContent="RFC3629"/>.</t> | ||||
| <t pn="section-5.3-2">Users typically interact with service discovery so | ||||
| ftware by | ||||
| viewing a list of discovered service instance names on a display | ||||
| and selecting one of them by pointing, touching, or clicking. | and selecting one of them by pointing, touching, or clicking. | |||
| Similarly, in software that provides a multi-domain DNS-SD user | Similarly, in software that provides a multi-domain DNS-SD user | |||
| interface, users view a list of offered domains on the display | interface, users view a list of offered domains on the display | |||
| and select one of them by pointing, touching, or clicking. | and select one of them by pointing, touching, or clicking. | |||
| To use a service, users don't have to remember domain or instance | To use a service, users don't have to remember domain or instance | |||
| names, or type them; users just have to be able to recognize what | names, or type them; users just have to be able to recognize what | |||
| they see on the display and touch or click on the thing they want.</t> | they see on the display and touch or click on the thing they want.</t> | |||
| <t pn="section-5.3-3">In contrast, host names are often remembered and t | ||||
| <t>In contrast, host names are often remembered and typed. | yped. Also, host | |||
| Also, host names have historically been used in command-line | names have historically been used in command-line interfaces where | |||
| interfaces | spaces can be inconvenient. For this reason, host names have | |||
| where spaces can be inconvenient. For this reason, host names have | traditionally been restricted to letters, digits, and hyphens (LDH) | |||
| traditionally been restricted to letters, digits and hyphens (LDH), | with no spaces or other punctuation.</t> | |||
| with | <t pn="section-5.3-4">While we do want to allow | |||
| no spaces or other punctuation.</t> | rich text for DNS-SD service instance names and domains, it is | |||
| advisable, for maximum compatibility with existing usage, to restrict | ||||
| <t>While we do want to allow rich text for DNS-SD service | host names to the traditional letter-digit-hyphen rules. This means | |||
| instance names and domains, it is advisable, for maximum | that while the service name | |||
| compatibility with existing usage, to restrict host names | "My Printer._ipp._tcp.Building 1.example.com" is acceptable | |||
| to the traditional letter-digit-hyphen rules. | and desirable (it is displayed in a graphical user interface as an | |||
| This means that while a service name | instance called "My Printer" in the domain "Building 1" at | |||
| "My Printer._ipp._tcp.Building 1.example.com" | "example.com"), the host name "My-Printer.Building 1.example.com" | |||
| is acceptable and desirable | is less desirable (because of the space in "Building 1").</t> | |||
| (it is displayed in a graphical user interface as an instance called | <t pn="section-5.3-5">To accommodate this difference in allowable charac | |||
| "My Printer" in the domain "Building 1" at "example.com"), | ters, a Discovery | |||
| a host name "My-Printer.Building 1.example.com" is less desirable | Proxy <bcp14>SHOULD</bcp14> support having two separate subdomains | |||
| (because of the space in "Building 1").</t> | delegated to it for each link it serves: one whose name is allowed to | |||
| contain arbitrary Net-Unicode text <xref target="RFC5198" format="defaul | ||||
| <t>To accomodate this difference in allowable characters, a Discovery | t" sectionFormat="of" derivedContent="RFC5198"/>, and a second more constrained | |||
| Proxy | subdomain whose name | |||
| SHOULD support having two separate subdomains delegated to it | is restricted to contain only letters, digits, and hyphens, to be used | |||
| for each link it serves, one whose name | for host name records (names of 'A' and 'AAAA' address records). The | |||
| is allowed to contain arbitrary Net-Unicode text <xref | restricted names may be any valid name consisting of only letters, | |||
| target="RFC5198"/>, | digits, and hyphens, including Punycode-encoded names <xref target="RFC3 | |||
| and a second more constrained subdomain whose name is restricted to | 492" format="default" sectionFormat="of" derivedContent="RFC3492"/>. | |||
| contain | ||||
| only letters, digits, and hyphens, to be used for host name records | ||||
| (names of 'A' and 'AAAA' address records). | ||||
| The restricted names may be any valid name consisting of only | ||||
| letters, digits, and hyphens, including Punycode-encoded names <xref | ||||
| target="RFC3492"/>. | ||||
| </t> | </t> | |||
| <t pn="section-5.3-6">For example, a Discovery Proxy could have the two | ||||
| <?rfc needLines="12" ?> | subdomains | |||
| <t>For example, a Discovery Proxy could have the two subdomains | "Building 1.example.com" and "bldg‑1.example.com" delegated | |||
| "Building 1.example.com" and "bldg1.example.com" delegated to it. | to it. | |||
| The Discovery Proxy would then translate these two Multicast DNS | The Discovery Proxy would then translate these two Multicast DNS | |||
| records:</t> | records:</t> | |||
| <artwork name="" type="" align="left" alt="" pn="section-5.3-7"> | ||||
| <figure><artwork> | ||||
| My Printer._ipp._tcp.local. SRV 0 0 631 prnt.local. | My Printer._ipp._tcp.local. SRV 0 0 631 prnt.local. | |||
| prnt.local. A 203.0.113.2</artwork></figure> | prnt.local. A 203.0.113.2</artwork> | |||
| <t pn="section-5.3-8">into Unicast DNS records as follows:</t> | ||||
| <t>into Unicast DNS records as follows:</t> | <artwork name="" type="" align="left" alt="" pn="section-5.3-9"> | |||
| <figure><artwork> | ||||
| My Printer._ipp._tcp.Building 1.example.com. | My Printer._ipp._tcp.Building 1.example.com. | |||
| SRV 0 0 631 prnt.bldg1.example.com. | SRV 0 0 631 prnt.bldg-1.example.com. | |||
| prnt.bldg1.example.com. A 203.0.113.2</artwork></figure> | prnt.bldg-1.example.com. A 203.0.113.2</artwork> | |||
| <t pn="section-5.3-10">Note that the SRV record name is translated using | ||||
| <t>Note that the SRV record name is translated using the rich-text | the rich-text | |||
| domain name ("Building 1.example.com") and the address record | domain name ("Building 1.example.com"), and the address record | |||
| name is translated using the LDH domain ("bldg1.example.com").</t> | name is translated using the LDH domain ("bldg‑1.example.com"). | |||
| Further details of the name translation rules are | ||||
| <t>A Discovery Proxy MAY support only a single rich text Net-Unicode | described in <xref target="translation" format="default" sectionFormat=" | |||
| domain, and | of" derivedContent="Section 5.5"/>.</t> | |||
| use that domain for all records, including 'A' and 'AAAA' address | <t pn="section-5.3-11">A Discovery Proxy <bcp14>MAY</bcp14> support only | |||
| records, | a single | |||
| but implementers choosing this option should be aware that this choice | rich-text Net-Unicode domain and use that domain for all records, | |||
| may produce host names that are awkward to use in command-line | including 'A' and 'AAAA' address records, but implementers choosing | |||
| environments. | this option should be aware that this choice may produce host names | |||
| Whether this is an issue depends on whether users in the target | that are awkward to use in command-line environments. Whether or not | |||
| environment | this is | |||
| are expected to be using command-line interfaces.</t> | an issue depends on whether users in the target environment are | |||
| expected to be using command-line interfaces.</t> | ||||
| <t>A Discovery Proxy MUST NOT be restricted to support only a | <t pn="section-5.3-12">A Discovery Proxy <bcp14>MUST NOT</bcp14> be rest | |||
| ricted to support | ||||
| only a | ||||
| letter-digit-hyphen | letter-digit-hyphen | |||
| subdomain, because that results in an unnecessarily poor user | subdomain, because that results in an unnecessarily poor user | |||
| experience.</t> | experience.</t> | |||
| <t pn="section-5.3-13">As described in <xref target="unicast" format="de | ||||
| <t>As described above in <xref target="unicast"/>, for clarity, | fault" sectionFormat="of" derivedContent="Section 5.2.1"/>, for | |||
| space characters in names are shown as actual spaces. | clarity, in examples here space characters in names are shown as | |||
| If this data were to be manually entered into a textual zone file | actual spaces. If | |||
| (which it isn't) | this dynamically discovered data were to be manually entered into a | |||
| then spaces would need to be represented using '\032', so | textual zone file (which | |||
| "My Printer._ipp._tcp.Building 1.example.com." would become | it isn't), then spaces would need to be represented using '\032', so | |||
| "My\032Printer._ipp._tcp.Building\0321.example.com."<vspace /> | "My Printer._ipp._tcp.Building 1.example.com" would become | |||
| Note that the '\032' representation does not appear | "My\032Printer._ipp._tcp.Building\0321.example.com".</t> | |||
| in the network packets sent over the air. | <t pn="section-5.3-14"> | |||
| In the wire format of DNS messages, spaces are sent as spaces, not as | Note that the '\032' representation does not appear in DNS messages | |||
| '\032', | sent over the air. In the wire format of DNS messages, spaces are sent as | |||
| and likewise, in a graphical user interface at the client device, | spaces, not as '\032', and likewise, in a graphical user interface at the | |||
| spaces are shown as spaces, not as '\032'. | client device, spaces are shown as spaces, not as '\032'. | |||
| </t> | </t> | |||
| </section> | ||||
| <?rfc needLines="36" ?> | <section anchor="dom-rev" numbered="true" toc="include" removeInRFC="false | |||
| </section> | " pn="section-5.4"> | |||
| <name slugifiedName="name-delegated-subdomain-for-rev">Delegated Subdoma | ||||
| <section anchor="dom-rev" title="Delegated Subdomain for Reverse | in for Reverse Mapping</name> | |||
| Mapping"> | <t pn="section-5.4-1">A Discovery Proxy can facilitate easier management | |||
| <t>A Discovery Proxy can facilitate easier management of reverse | of reverse | |||
| mapping domains, particularly for IPv6 addresses where manual | mapping domains, particularly for IPv6 addresses where manual | |||
| management may be more onerous than it is for IPv4 addresses.</t> | management may be more onerous than it is for IPv4 addresses.</t> | |||
| <t pn="section-5.4-2">To achieve this, in the parent domain, NS records | ||||
| <t>To achieve this, in the parent domain, NS records are used to | are used to | |||
| delegate ownership of the appropriate reverse mapping domain to | delegate ownership of the appropriate reverse mapping domain to | |||
| the Discovery Proxy. In other words, the Discovery Proxy becomes the | the Discovery Proxy. In other words, the Discovery Proxy becomes the | |||
| authoritative name server for the reverse mapping domain. | authoritative name server for the reverse mapping domain. | |||
| For fault tolerance reasons there may be more than one | For fault tolerance reasons, there may be more than one | |||
| Discovery Proxy serving a given link.</t> | Discovery Proxy serving a given link.</t> | |||
| <t pn="section-5.4-3">If a given link is using the IPv4 subnet 203.0.113 | ||||
| <t>If a given link is using the IPv4 subnet 203.0.113/24,<vspace/> | /24, | |||
| then the domain "113.0.203.in-addr.arpa"<vspace/> | then the domain "113.0.203.in-addr.arpa" | |||
| is delegated to the Discovery Proxy for that link.</t> | is delegated to the Discovery Proxy for that link.</t> | |||
| <t pn="section-5.4-4">If a given link is using the | ||||
| <t>For example, if a given link is using the<vspace/> | IPv6 prefix 2001:0DB8:1234:5678::/64, | |||
| IPv6 prefix 2001:0DB8:1234:5678/64,<vspace/> | then the domain "8.7.6.5.4.3.2.1.8.b.d.0.1.0.0.2.ip6.arpa" | |||
| then the domain "8.7.6.5.4.3.2.1.8.b.d.0.1.0.0.2.ip6.arpa"<vspace/> | ||||
| is delegated to the Discovery Proxy for that link.</t> | is delegated to the Discovery Proxy for that link.</t> | |||
| <t pn="section-5.4-5">When a reverse mapping query arrives at the Discov | ||||
| <t>When a reverse mapping query arrives at the Discovery Proxy, it | ery Proxy, it | |||
| issues | issues the identical query on its local link, as a Multicast DNS | |||
| the identical query on its local link as a Multicast DNS query. | query. | |||
| The mechanism to force an apparently unicast name to be resolved | The mechanism to force an apparently unicast name to be resolved using | |||
| using link-local Multicast DNS varies depending on the API set being | link-local Multicast DNS varies depending on the API set being used. | |||
| used. | For example, in the "dns_sd.h" APIs (available on macOS, iOS, Bonjour | |||
| For example, in the "dns_sd.h" APIs<vspace/> | for Windows, Linux, and Android), using kDNSServiceFlagsForceMulticast | |||
| (available on macOS, iOS, Bonjour for Windows, Linux and Android), | indicates that the DNSServiceQueryRecord() call should perform the | |||
| using kDNSServiceFlagsForceMulticast | query using Multicast DNS. Other API sets have different ways of | |||
| indicates that the DNSServiceQueryRecord() | forcing multicast queries. When the host owning that IPv4 or IPv6 | |||
| call should perform the query using Multicast DNS. | address responds with a name of the form "something.local", the | |||
| Other APIs sets have different ways of forcing multicast queries. | Discovery Proxy rewrites it to use its configured LDH host name | |||
| When the host owning that IPv4 or IPv6 address responds | domain instead of ".local" and returns the response to the caller.</t> | |||
| with a name of the form "something.local", the Discovery Proxy | <t pn="section-5.4-6">For example, a Discovery Proxy with the two subdom | |||
| rewrites that to use its configured LDH host name domain instead | ains | |||
| of "local", and returns the response to the caller.</t> | "113.0.203.in‑addr.arpa" and "bldg‑1.example.com" delegated | |||
| to it | ||||
| <?rfc needLines="15" ?> | ||||
| <t>For example, a Discovery Proxy with the two subdomains | ||||
| "113.0.203.in&nbhy;addr.arpa" and "bldg1.example.com" delegated to it | ||||
| would translate this Multicast DNS record:</t> | would translate this Multicast DNS record:</t> | |||
| <artwork name="" type="" align="left" alt="" pn="section-5.4-7"> | ||||
| <figure><artwork> | 2.113.0.203.in-addr.arpa. PTR prnt.local.</artwork> | |||
| 2.113.0.203.in-addr.arpa. PTR prnt.local.</artwork></figure> | <t pn="section-5.4-8">into this Unicast DNS response:</t> | |||
| <artwork name="" type="" align="left" alt="" pn="section-5.4-9"> | ||||
| <t>into this Unicast DNS response:</t> | 2.113.0.203.in-addr.arpa. PTR prnt.bldg-1.example.com.</artwork> | |||
| <t pn="section-5.4-10">In this example the "prnt.local" host name is tra | ||||
| <figure><artwork> | nslated | |||
| 2.113.0.203.in-addr.arpa. PTR prnt.bldg1.example.com.</artwork></figure> | using the delegated LDH subdomain, as described in | |||
| <xref target="translation" format="default" sectionFormat="of" derivedCo | ||||
| <t>Subsequent queries for the prnt.bldg1.example.com address | ntent="Section 5.5"/>.</t> | |||
| record, falling as it does within the bldg1.example.com domain, | <t pn="section-5.4-11">Subsequent queries for the prnt.bldg‑1.example.co | |||
| which is delegated to the Discovery Proxy, will arrive at the | m address | |||
| Discovery Proxy, where they are answered by issuing Multicast DNS | record, falling as it does within the bldg‑1.example.com domain, | |||
| which is delegated to this Discovery Proxy, will arrive at this | ||||
| Discovery Proxy where they are answered by issuing Multicast DNS | ||||
| queries | queries | |||
| and using the received Multicast DNS answers to synthesize Unicast | and using the received Multicast DNS answers to synthesize Unicast | |||
| DNS responses, as described above.</t> | DNS responses, as described above.</t> | |||
| <t pn="section-5.4-12">Note that this description assumes that all addre | ||||
| <t>Note that this design assumes that all addresses on a given | sses on a given | |||
| IPv4 subnet or IPv6 prefix are mapped to hostnames using the Discovery | IPv4 subnet or IPv6 prefix are mapped to host names using the | |||
| Discovery | ||||
| Proxy mechanism. | Proxy mechanism. | |||
| It would be possible to implement a Discovery Proxy that can be | It would be possible to implement a Discovery Proxy that can be | |||
| configured | configured | |||
| so that some address-to-name mappings are performed using Multicast | so that some address-to-name mappings are performed using Multicast | |||
| DNS | DNS | |||
| on the local link, while other address-to-name mappings within the | on the local link, while other address-to-name mappings within the | |||
| same | same | |||
| IPv4 subnet or IPv6 prefix are configured manually.</t> | IPv4 subnet or IPv6 prefix are configured manually.</t> | |||
| <?rfc needLines="46" ?> | ||||
| </section> | </section> | |||
| <section anchor="translation" numbered="true" toc="include" removeInRFC="f | ||||
| <section title="Data Translation"> | alse" pn="section-5.5"> | |||
| <t>Generating the appropriate Multicast DNS queries involves,<vspace/> | <name slugifiedName="name-data-translation">Data Translation</name> | |||
| at the very least, translating from the configured DNS domain | <t pn="section-5.5-1">For the delegated rich-text and LDH subdomains, | |||
| (e.g., "Building 1.example.com") on the Unicast DNS side | generating appropriate Multicast DNS queries | |||
| to "local" on the Multicast DNS side.</t> | involves translating from the configured DNS domain | |||
| (e.g., "Building 1.example.com") on the Unicast DNS side | ||||
| <t>Generating the appropriate Unicast DNS responses involves | to ".local" on the Multicast DNS side.</t> | |||
| translating back from "local" to the appropriate configured DNS | <t pn="section-5.5-2">For the delegated reverse-mapping subdomain, | |||
| Unicast domain.</t> | generating appropriate Multicast DNS queries | |||
| involves using the appropriate API mechanism to | ||||
| <t>Other beneficial translation and filtering operations are described | indicate that a query should be performed using | |||
| Multicast DNS, as described in | ||||
| <xref target="dom-rev" format="default" sectionFormat="of" derivedConten | ||||
| t="Section 5.4"/>.</t> | ||||
| <t pn="section-5.5-3">Generating appropriate Unicast DNS responses from | ||||
| the | ||||
| received Multicast DNS answers involves translating back | ||||
| from ".local" to the appropriate configured Unicast DNS | ||||
| domain as necessary, as described below.</t> | ||||
| <t pn="section-5.5-4">In the examples below, the delegated subdomains ar | ||||
| e as follows:</t> | ||||
| <artwork name="" type="" align="left" alt="" pn="section-5.5-5"> | ||||
| Delegated subdomain for rich-text names Building 1.example.com. | ||||
| Delegated subdomain for LDH names bldg‑1.example.com. | ||||
| Delegated subdomain for IPv4 reverse mapping 113.0.203.in-addr.arpa.</artwork> | ||||
| <t pn="section-5.5-6">Names in Multicast DNS answers that do not end in | ||||
| ".local" | ||||
| do not require any translation.</t> | ||||
| <t pn="section-5.5-7">Names in Multicast DNS answers that end in ".local | ||||
| " | ||||
| are only meaningful on the local link, and require translation | ||||
| to make them useable by clients outside the local link.</t> | ||||
| <t pn="section-5.5-8">Names that end in ".local" may appear both as the | ||||
| owner names of received Multicast DNS answer records, | ||||
| and in the RDATA of received Multicast DNS answer records.</t> | ||||
| <t pn="section-5.5-9">In a received Multicast DNS answer record, | ||||
| if the owner name ends with ".local", | ||||
| then the ".local" top-level label is replaced with the name | ||||
| of the delegated subdomain as was used in the originating query.</t> | ||||
| <t pn="section-5.5-10">In a received Multicast DNS answer record, | ||||
| if a name in the RDATA ends with ".local", | ||||
| then the name is translated according to the delegated subdomain | ||||
| that was used in the originating query, as explained below.</t> | ||||
| <t pn="section-5.5-11">For queries in subdomains delegated for LDH host | ||||
| names, | ||||
| ".local" names in RDATA | ||||
| are translated to that delegated LDH subdomain. | ||||
| For example, a query for "thing.bldg‑1.example.com" will be | ||||
| translated to a | ||||
| Multicast DNS query for "thing.local". If that query returns this | ||||
| CNAME record:</t> | ||||
| <artwork name="" type="" align="left" alt="" pn="section-5.5-12"> | ||||
| thing.local. CNAME prnt.local.</artwork> | ||||
| <t pn="section-5.5-13">then both the owner name and the name in the RDAT | ||||
| A | ||||
| are translated from ".local" to the LDH subdomain | ||||
| "bldg‑1.example.com":</t> | ||||
| <artwork name="" type="" align="left" alt="" pn="section-5.5-14"> | ||||
| thing.bldg‑1.example.com. CNAME prnt.bldg‑1.example.com.</artwork> | ||||
| <t pn="section-5.5-15">For queries in subdomains delegated for reverse m | ||||
| apping names, | ||||
| ".local" names in RDATA | ||||
| are translated to the delegated LDH subdomain, if one is configured, | ||||
| or to the delegated rich-text subdomain otherwise. | ||||
| For example, consider a reverse mapping query that returns this PTR | ||||
| record:</t> | ||||
| <artwork name="" type="" align="left" alt="" pn="section-5.5-16"> | ||||
| 2.113.0.203.in-addr.arpa. PTR prnt.local.</artwork> | ||||
| <t pn="section-5.5-17">The owner name is not translated because it does | ||||
| not end in | ||||
| ".local". | ||||
| The name in the RDATA is | ||||
| translated from ".local" to the LDH subdomain | ||||
| "bldg‑1.example.com":</t> | ||||
| <artwork name="" type="" align="left" alt="" pn="section-5.5-18"> | ||||
| 2.113.0.203.in-addr.arpa. PTR prnt.bldg‑1.example.com.</artwork> | ||||
| <t pn="section-5.5-19">For queries in subdomains delegated for rich-text | ||||
| names, | ||||
| ".local" names in RDATA | ||||
| are translated according to whether or not they represent host names | ||||
| (i.e., RDATA names that are the owner names of A and AAAA DNS | ||||
| records). | ||||
| RDATA names ending in ".local" that represent host names | ||||
| are translated to the delegated LDH subdomain, if one is configured, | ||||
| or to the delegated rich-text subdomain otherwise. | ||||
| All other RDATA names ending in ".local" | ||||
| are translated to the delegated rich-text subdomain. | ||||
| For example, consider a DNS-SD service browsing PTR query | ||||
| that returns this PTR record for IPP printing:</t> | ||||
| <artwork name="" type="" align="left" alt="" pn="section-5.5-20"> | ||||
| _ipp._tcp.local. PTR My Printer._ipp._tcp.local.</artwork> | ||||
| <t pn="section-5.5-21">Both the owner name and the name in the RDATA | ||||
| are translated from ".local" to the rich-text subdomain:</t> | ||||
| <artwork name="" type="" align="left" alt="" pn="section-5.5-22"> | ||||
| _ipp._tcp.Building 1.example.com. | ||||
| PTR My Printer._ipp._tcp.Building 1.example.com.</artwork> | ||||
| <t pn="section-5.5-23">In contrast, consider a query | ||||
| that returns this SRV record for a specific IPP printing instance:</t> | ||||
| <artwork name="" type="" align="left" alt="" pn="section-5.5-24"> | ||||
| My Printer._ipp._tcp.local. SRV 0 0 631 prnt.local.</artwork> | ||||
| <t pn="section-5.5-25">As for all queries, the owner name | ||||
| is translated to the delegated subdomain of the originating query, | ||||
| the delegated rich-text subdomain "Building 1.example.com". | ||||
| However, the ".local" name in the RDATA | ||||
| is the target host name field of an SRV record, | ||||
| a field that is used exclusively for host names. | ||||
| Consequently it is translated to the LDH subdomain | ||||
| "bldg‑1.example.com", | ||||
| if configured, instead of the rich-text subdomain: | ||||
| </t> | ||||
| <artwork name="" type="" align="left" alt="" pn="section-5.5-26"> | ||||
| My Printer._ipp._tcp.Building 1.example.com. | ||||
| SRV 0 0 631 prnt.bldg‑1.example.com.</artwork> | ||||
| <t pn="section-5.5-27">Other beneficial translation and filtering operat | ||||
| ions are described | ||||
| below.</t> | below.</t> | |||
| <section anchor="ttl" numbered="true" toc="include" removeInRFC="false" | ||||
| <section anchor="ttl" title="DNS TTL limiting"> | pn="section-5.5.1"> | |||
| <t>For efficiency, Multicast DNS typically uses moderately high | <name slugifiedName="name-dns-ttl-limiting">DNS TTL Limiting</name> | |||
| DNS TTL values. For example, the typical TTL on DNS-SD PTR records | <t pn="section-5.5.1-1">For efficiency, Multicast DNS typically uses m | |||
| is 75 minutes. What makes these moderately high TTLs acceptable | oderately high DNS | |||
| is the cache coherency mechanisms built in to the Multicast DNS | TTL values. For example, the typical TTL on DNS-SD service browsing | |||
| protocol which protect against stale data persisting for too long. | PTR records is 75 | |||
| When a service shuts down gracefully, it sends goodbye packets | minutes. What makes these moderately high TTLs acceptable is the | |||
| to remove its PTR records immediately from neighboring caches. | cache coherency mechanisms built in to the Multicast DNS protocol, | |||
| If a service shuts down abruptly without sending goodbye packets, | which protect against stale data persisting for too long. When a | |||
| the Passive Observation Of Failures (POOF) mechanism described | service shuts down gracefully, it sends goodbye packets to remove | |||
| in Section 10.5 of the <xref target="RFC6762">Multicast DNS | its service browsing PTR record(s) immediately from neighboring | |||
| specification</xref> | caches. If a service | |||
| comes into play to purge the cache of stale data.</t> | shuts down abruptly without sending goodbye packets, the Passive | |||
| Observation Of Failures (POOF) mechanism described in <xref target="RF | ||||
| <t>A traditional Unicast DNS client on a distant remote link does | C6762" sectionFormat="of" section="10.5" format="default" derivedLink="https://r | |||
| not get to participate | fc-editor.org/rfc/rfc6762#section-10.5" derivedContent="RFC6762">the Multicast D | |||
| in these Multicast DNS cache coherency mechanisms on the local link. | NS | |||
| For traditional Unicast DNS queries | specification</xref> comes into play to purge the cache of stale | |||
| (those received without using Long-Lived Query <xref target="LLQ"/> | data.</t> | |||
| or DNS Push Notification subscriptions <xref target="Push"/>) | <t pn="section-5.5.1-2">A traditional Unicast DNS client on a distant | |||
| the DNS TTLs reported in the resulting Unicast DNS response | remote link does | |||
| MUST be capped to be no more than ten seconds.</t> | not get to participate in these Multicast DNS cache coherency | |||
| mechanisms on the local link. For traditional Unicast DNS queries | ||||
| <t>Similarly, for negative responses, the negative caching TTL | (those received without using Long-Lived Queries (LLQ) <xref target="R | |||
| indicated | FC8764" format="default" sectionFormat="of" derivedContent="RFC8764"/> or DNS Pu | |||
| in the SOA record <xref target="RFC2308"/> should also be ten | sh | |||
| seconds | Notification subscriptions <xref target="RFC8765" format="default" sec | |||
| (<xref target="soa"/>).</t> | tionFormat="of" derivedContent="RFC8765"/>), the DNS TTLs reported in the result | |||
| ing Unicast | ||||
| <t>This value of ten seconds is chosen based on user-experience | DNS response <bcp14>MUST</bcp14> be capped to be no more than ten | |||
| considerations.</t> | seconds.</t> | |||
| <t pn="section-5.5.1-3">Similarly, for negative responses, the negativ | ||||
| <t>For negative caching, suppose a user is attempting to access a | e caching TTL | |||
| remote | indicated in the SOA record <xref target="RFC2308" format="default" se | |||
| device (e.g., a printer), and they are unsuccessful because that | ctionFormat="of" derivedContent="RFC2308"/> should also be ten seconds (see <xre | |||
| device | f target="soa" format="default" sectionFormat="of" derivedContent="Section 6.1"/ | |||
| is powered off. Suppose they then place a telephone call and ask for | >).</t> | |||
| the | <t pn="section-5.5.1-4">This value of ten seconds is chosen based on u | |||
| device to be powered on. We want the device to become available to | ser-experience | |||
| the | considerations.</t> | |||
| user within a reasonable time period. It is reasonable to expect it | <t pn="section-5.5.1-5">For negative caching, suppose a user is attemp | |||
| to | ting to access a | |||
| take on the order of ten seconds for a simple device with a simple | remote device (e.g., a printer), and they are unsuccessful because | |||
| embedded operating system to power on. Once the device is powered on | that device is powered off. Suppose they then place a telephone call | |||
| and | and ask for the device to be powered on. We want the device to | |||
| has announced its presence on the network via Multicast DNS, we | become available to the user within a reasonable time period. It is | |||
| would | reasonable to expect it to take on the order of ten seconds for a | |||
| like it to take no more than a further ten seconds for stale | simple device with a simple embedded operating system to power | |||
| negative | on. Once the device is powered on and has announced its presence on | |||
| cache entries to expire from Unicast DNS caches, making the device | the network via Multicast DNS, we would like it to take no more than | |||
| available to the user desiring to access it.</t> | a further ten seconds for stale negative cache entries to expire | |||
| from Unicast DNS caches, making the device available to the user | ||||
| <t>Similar reasoning applies to capping positive TTLs at ten | desiring to access it.</t> | |||
| seconds. | <t pn="section-5.5.1-6">Similar reasoning applies to capping positive | |||
| TTLs at ten | ||||
| seconds. | ||||
| In the event of a device moving location, getting a new DHCP | In the event of a device moving location, getting a new DHCP | |||
| address, | address, | |||
| or other renumbering events, we would like the updated information | or other renumbering events, we would like the updated information | |||
| to | to | |||
| be available to remote clients in a relatively timely fashion.</t> | be available to remote clients in a relatively timely fashion.</t> | |||
| <t pn="section-5.5.1-7">However, network administrators should be awar | ||||
| <t>However, network administrators should be aware that many | e that many | |||
| recursive | recursive | |||
| (caching) DNS servers by default are configured to impose a minimum | resolvers by default are configured to impose a minimum | |||
| TTL of | TTL of | |||
| 30 seconds. If stale data appears to be persisting in the network to | 30 seconds. If stale data appears to be persisting in the network to | |||
| the | the | |||
| extent that it adversely impacts user experience, network | extent that it adversely impacts user experience, network | |||
| administrators | administrators | |||
| are advised to check the configuration of their recursive DNS | are advised to check the configuration of their recursive | |||
| servers.</t> | resolvers.</t> | |||
| <t pn="section-5.5.1-8">For received Unicast DNS queries that use LLQ | ||||
| <t>For received Unicast DNS queries that use LLQ <xref | <xref target="RFC8764" format="default" sectionFormat="of" derivedContent="RFC87 | |||
| target="LLQ"/> or | 64"/> or | |||
| DNS Push Notifications <xref target="Push"/>, the Multicast DNS | DNS Push Notifications <xref target="RFC8765" format="default" section | |||
| record's TTL SHOULD be | Format="of" derivedContent="RFC8765"/>, | |||
| returned unmodified, because the Push Notification channel exists | the Multicast DNS | |||
| record's TTL <bcp14>SHOULD</bcp14> be | ||||
| returned unmodified, because the notification channel exists | ||||
| to inform the remote client as records come and go. | to inform the remote client as records come and go. | |||
| For further details about Long-Lived Queries, and its newer | For further details about Long-Lived Queries and its newer | |||
| replacement, | replacement, | |||
| DNS Push Notifications, see <xref target="aggregation"/>.</t> | DNS Push Notifications, see <xref target="aggregation" format="default | |||
| " sectionFormat="of" derivedContent="Section 5.6"/>.</t> | ||||
| </section> | </section> | |||
| <section anchor="unusable" numbered="true" toc="include" removeInRFC="fa | ||||
| <section anchor="unusable" title="Suppressing Unusable Records"> | lse" pn="section-5.5.2"> | |||
| <t>A Discovery Proxy SHOULD offer a configurable option, | <name slugifiedName="name-suppressing-unusable-record">Suppressing Unu | |||
| sable Records</name> | ||||
| <t pn="section-5.5.2-1">A Discovery Proxy <bcp14>SHOULD</bcp14> offer | ||||
| a configurable | ||||
| option, | ||||
| enabled by default, to suppress Unicast DNS answers | enabled by default, to suppress Unicast DNS answers | |||
| for records that are not useful outside the local link. | for records that are not useful outside the local link. | |||
| When the option to suppress unusable records is enabled: | When the option to suppress unusable records is enabled: | |||
| <list style='symbols'> | </t> | |||
| <ul spacing="normal" bare="false" empty="false" pn="section-5.5.2-2"> | ||||
| <t>DNS A and AAAA records for | <li pn="section-5.5.2-2.1">For a Discovery Proxy that is serving onl | |||
| IPv4 link-local addresses <xref target="RFC3927"/> | y clients outside the | |||
| local link, | ||||
| DNS A and AAAA records for | ||||
| IPv4 link-local addresses <xref target="RFC3927" format="default" | ||||
| sectionFormat="of" derivedContent="RFC3927"/> | ||||
| and | and | |||
| IPv6 link-local addresses <xref target="RFC4862"/> | IPv6 link-local addresses <xref target="RFC4862" format="default" | |||
| SHOULD be suppressed.</t> | sectionFormat="of" derivedContent="RFC4862"/> | |||
| <bcp14>SHOULD</bcp14> be suppressed.</li> | ||||
| <t>Similarly, for sites that have multiple private address | <li pn="section-5.5.2-2.2">Similarly, for sites that have multiple p | |||
| realms <xref target="RFC1918"/>, | rivate address | |||
| realms <xref target="RFC1918" format="default" sectionForma | ||||
| t="of" derivedContent="RFC1918"/>, | ||||
| in cases where the Discovery Proxy can determine that the | in cases where the Discovery Proxy can determine that the | |||
| querying client | querying client | |||
| is in a different address realm, private addresses SHOULD NOT be | is in a different address realm, private addresses <bcp14>SHOULD N | |||
| communicated to that client.</t> | OT</bcp14> be | |||
| communicated to that client.</li> | ||||
| <t><xref target="RFC4193">IPv6 Unique Local Addresses</xref> | <li pn="section-5.5.2-2.3"> | |||
| SHOULD be suppressed | IPv6 Unique Local Addresses <xref target="RFC4193" format="default | |||
| " sectionFormat="of" derivedContent="RFC4193"/> | ||||
| <bcp14>SHOULD</bcp14> be suppressed | ||||
| in cases where the Discovery Proxy can determine that the | in cases where the Discovery Proxy can determine that the | |||
| querying client | querying client | |||
| is in a different IPv6 address realm.</t> | is in a different IPv6 address realm.</li> | |||
| <li pn="section-5.5.2-2.4">By the same logic, DNS SRV records that r | ||||
| <t>By the same logic, DNS SRV records that reference target host | eference target host | |||
| names that have no addresses usable by the requester should be | names that have no addresses usable by the requester should be | |||
| suppressed, and likewise, DNS PTR records that point to unusable | suppressed, and likewise, DNS-SD service browsing PTR records | |||
| SRV records should be similarly be suppressed.</t> | that point to unusable | |||
| </list> | SRV records should similarly be suppressed.</li> | |||
| </t> | </ul> | |||
| <?rfc needLines="8" ?> | ||||
| </section> | </section> | |||
| <section numbered="true" toc="include" removeInRFC="false" pn="section-5 | ||||
| <section title="NSEC and NSEC3 queries"> | .5.3"> | |||
| <t>Multicast DNS devices do not routinely announce their records | <name slugifiedName="name-nsec-and-nsec3-queries">NSEC and NSEC3 Queri | |||
| on the network. Generally they remain silent until queried. | es</name> | |||
| <t pn="section-5.5.3-1">Multicast DNS devices do not routinely announc | ||||
| e their records | ||||
| on the network. Generally, they remain silent until queried. | ||||
| This means that the complete set of Multicast DNS records in use on | This means that the complete set of Multicast DNS records in use on | |||
| a | a | |||
| link can only be discovered by active querying, not by passive | link can only be discovered by active querying, not by passive | |||
| listening. | listening. | |||
| Because of this, a Discovery Proxy can only know what names exist on | Because of this, a Discovery Proxy can only know what names exist on | |||
| a link | a link | |||
| by issuing queries for them, and since it would be impractical to | by issuing queries for them, and since it would be impractical to | |||
| issue queries for every possible name just to find out which names | issue queries for every possible name just to find out which names | |||
| exist and which do not, a Discovery Proxy cannot programmatically | exist and which do not, a Discovery Proxy cannot programmatically | |||
| generate the traditional | generate the traditional Unicast DNS | |||
| <xref target="RFC4034">NSEC</xref> and | NSEC <xref target="RFC4034" format="default" sectionFormat="of" derive | |||
| <xref target="RFC5155">NSEC3</xref> records | dContent="RFC4034"/> and | |||
| which assert the nonexistence of a large range of names.</t> | NSEC3 <xref target="RFC5155" format="default" sectionFormat="of" deriv | |||
| edContent="RFC5155"/> records | ||||
| <t>When queried for an NSEC or NSEC3 record type, the Discovery | that assert the nonexistence of a large range of names.</t> | |||
| Proxy issues | <t pn="section-5.5.3-2">When queried for an NSEC or NSEC3 record type, | |||
| a qtype "ANY" query using Multicast DNS on the local link, and then | the Discovery | |||
| Proxy issues | ||||
| a qtype "ANY" query using Multicast DNS on the local link and then | ||||
| generates an NSEC or NSEC3 response with a Type Bit Map signifying | generates an NSEC or NSEC3 response with a Type Bit Map signifying | |||
| which record types do and do not exist for just the specific name | which record types do and do not exist for just the specific name | |||
| queried, | queried, | |||
| and no other names.</t> | and no other names.</t> | |||
| <t pn="section-5.5.3-3">Multicast DNS NSEC records received on the loc | ||||
| <t>Multicast DNS NSEC records received on the local link | al link | |||
| MUST NOT be forwarded unmodified to a unicast querier, because there | <bcp14>MUST NOT</bcp14> be forwarded unmodified to a unicast | |||
| are | querier, because there | |||
| are | ||||
| slight differences in the NSEC record data. | slight differences in the NSEC record data. | |||
| In particular, Multicast DNS NSEC records do not have the NSEC | In particular, Multicast DNS NSEC records do not have the NSEC | |||
| bit set in the Type Bit Map, whereas conventional Unicast DNS | bit set in the Type Bit Map, whereas conventional Unicast DNS | |||
| NSEC records do have the NSEC bit set.</t> | NSEC records do have the NSEC bit set.</t> | |||
| </section> | </section> | |||
| <section anchor="notrans" numbered="true" toc="include" removeInRFC="fal | ||||
| <section anchor="notrans" title="No Text Encoding Translation"> | se" pn="section-5.5.4"> | |||
| <t>A Discovery Proxy does no translation between text encodings. | <name slugifiedName="name-no-text-encoding-translatio">No Text-Encodin | |||
| Specifically, a Discovery Proxy does no translation between | g Translation</name> | |||
| <xref target="RFC3492">Punycode encoding</xref> and | <t pn="section-5.5.4-1">A Discovery Proxy does no translation between | |||
| <xref target="RFC3629">UTF-8 encoding</xref>, | text encodings. | |||
| either in the owner name of DNS records, or anywhere in the RDATA of | Specifically, a Discovery Proxy does no translation between Punycode | |||
| DNS records | encoding <xref target="RFC3492" format="default" sectionFormat="of" | |||
| (such as the RDATA of PTR records, SRV records, NS records, or other | derivedContent="RFC3492"/> and UTF-8 encoding <xref target="RFC3629" format="de | |||
| record types | fault" sectionFormat="of" derivedContent="RFC3629"/>, either in | |||
| like TXT, where it is ambiguous whether the RDATA may contain DNS | the owner name of DNS records or anywhere in the RDATA of DNS | |||
| names). | records (such as the RDATA of PTR records, SRV records, NS records, | |||
| All bytes are treated as-is, with no attempt at text encoding | or other record types like TXT, where it is ambiguous whether the | |||
| translation. | RDATA may contain DNS names). All bytes are treated as-is with no | |||
| A client implementing DNS-based Service Discovery <xref | attempt at text-encoding translation. A client implementing | |||
| target="RFC6763"/> | DNS-based Service Discovery <xref target="RFC6763" format="default" se | |||
| will use UTF-8 encoding for its service discovery queries, which the | ctionFormat="of" derivedContent="RFC6763"/> will use UTF-8 encoding for its unic | |||
| Discovery Proxy passes through without any text encoding translation | ast DNS-based | |||
| to the Multicast DNS subsystem. | Service Discovery | |||
| Responses from the Multicast DNS subsystem are similarly returned, | queries, which the Discovery Proxy passes through without any | |||
| without any text encoding translation, back to the requesting | text-encoding translation to the Multicast DNS subsystem. Responses | |||
| client.</t> | from the Multicast DNS subsystem are similarly returned, without any | |||
| text-encoding translation, back to the requesting unicast | ||||
| <?rfc needLines="13" ?> | client.</t> | |||
| </section> | </section> | |||
| <section numbered="true" toc="include" removeInRFC="false" pn="section-5 | ||||
| <section title="Application-Specific Data Translation"> | .5.5"> | |||
| <t>There may be cases where Application-Specific Data Translation is | <name slugifiedName="name-application-specific-data-t">Application-Spe | |||
| appropriate.</t> | cific Data Translation</name> | |||
| <t pn="section-5.5.5-1">There may be cases where Application-Specific | ||||
| <t>For example, AirPrint printers tend to advertise fairly verbose | Data Translation is | |||
| appropriate.</t> | ||||
| <t pn="section-5.5.5-2">For example, AirPrint printers tend to adverti | ||||
| se fairly verbose | ||||
| information about their capabilities in their DNS-SD TXT record. | information about their capabilities in their DNS-SD TXT record. | |||
| TXT record sizes in the range 500-1000 bytes are not uncommon. | TXT record sizes in the range of 500-1000 bytes are not uncommon. | |||
| This information is a legacy from LPR printing, because LPR does not | This information is a legacy from lineprinter (LPR) printing, | |||
| have in-band capability negotiation, so all of this information is | because LPR does not have in-band capability negotiation, so all of | |||
| conveyed using the DNS-SD TXT record instead. | this information is conveyed using the DNS-SD TXT record instead. | |||
| IPP printing does have in-band capability negotiation, but for | Internet Printing Protocol (IPP) printing does have in-band | |||
| convenience printers tend to include the same capability information | capability negotiation, but for convenience, printers tend to | |||
| in their IPP DNS-SD TXT records as well. For local mDNS use this | include | |||
| extra TXT record information is inefficient, but not fatal. | the same capability information in their IPP DNS-SD TXT records as | |||
| However, when a Discovery Proxy aggregates data from multiple | well. For local Multicast DNS (mDNS) use, this extra TXT record | |||
| printers | information is | |||
| on a link, and sends it via unicast (via UDP or TCP) | wasteful but not fatal. However, when a Discovery Proxy | |||
| this amount of unnecessary TXT record information can | aggregates data from multiple printers on a link, and sends it via | |||
| result in large responses. | unicast (via UDP or TCP), this amount of unnecessary TXT record | |||
| A DNS reply over TCP carrying information about 70 printers | information can result in large responses. A DNS reply over TCP | |||
| with an average of 700 bytes per printer adds up to about | carrying information about 70 printers with an average of 700 bytes | |||
| 50 kilobytes of data. | per printer adds up to about 50 kilobytes of data. Therefore, a | |||
| Therefore, a Discovery Proxy that is aware of | Discovery Proxy that is aware of the specifics of an | |||
| the specifics of an application-layer protocol such as | application-layer protocol such as AirPrint (which uses IPP) can | |||
| AirPrint (which uses IPP) can elide unnecessary key/value pairs from | elide unnecessary key/value pairs from the DNS-SD TXT record for | |||
| the DNS-SD TXT record for better network efficiency.</t> | better network efficiency.</t> | |||
| <t pn="section-5.5.5-3">Also, the DNS-SD TXT record for many printers | ||||
| <t>Also, the DNS-SD TXT record for many printers contains an | contains an | |||
| "adminurl" | "adminurl" key (e.g., | |||
| key something like "adminurl=http://printername.local/status.html". | "adminurl=http://printername.local/status.html"). For this URL to | |||
| For this URL to be useful outside the local link, the embedded | be | |||
| ".local" | useful outside the local link, the embedded ".local" host name needs | |||
| hostname needs to be translated to an appropriate name with larger | to be translated to an appropriate name with larger scope. It is | |||
| scope. | easy to translate ".local" names when they appear in well-defined | |||
| It is easy to translate ".local" names when they appear in | places: as a record's owner name, or in domain name fields in the | |||
| well-defined places, | RDATA of record types | |||
| either as a record's name, or in the rdata of record types like PTR | like PTR and SRV. In the printing case, some application-specific | |||
| and SRV. | knowledge about the semantics of the "adminurl" key is needed for | |||
| In the printing case, some application-specific knowledge about the | the Discovery Proxy to know that it contains a name that needs to be | |||
| semantics of the "adminurl" key is needed for the Discovery Proxy | translated. This is somewhat analogous to the need for NAT gateways | |||
| to know that it contains a name that needs to be translated. | to contain ALGs (Application-Level Gateways) to facilitate the | |||
| This is somewhat analogous to the need for NAT gateways to contain | correct translation of protocols that embed addresses in unexpected | |||
| ALGs | places.</t> | |||
| (Application-Specific Gateways) to facilitate the correct | <t pn="section-5.5.5-4">To avoid the need for application-specific kno | |||
| translation | wledge about the | |||
| of protocols that embed addresses in unexpected places.</t> | ||||
| <t>To avoid the need for application-specific knowledge about the | ||||
| semantics of particular TXT record keys, protocol designers are | semantics of particular TXT record keys, protocol designers are | |||
| advised to avoid | advised to avoid placing link-local names or link-local IP addresses | |||
| placing link-local names or link-local IP addresses in TXT record | in TXT record keys if translation of those names or addresses would | |||
| keys, | be required for off-link operation. In the printing case, the | |||
| if translation of those names or addresses would be required for | consequence of failing to translate the "adminurl" key | |||
| off-link operation. | correctly would be that, when accessed from a different link, | |||
| In the printing case, the operational failure of failing to | printing | |||
| translate | will still work, but clicking the "Admin" user interface button will | |||
| the "adminurl" key correctly is that, when accessed from a different | fail to | |||
| link, | open the printer's administration page. Rather than duplicating the | |||
| printing will still work, but clicking the "Admin" UI button | host name from the service's SRV record in its "adminurl" key, | |||
| will fail to open the printer's administration page. | thereby having the same host name appear in two places, a better | |||
| Rather than duplicating the host name from the service's SRV record | design might have been to omit the host name from the "adminurl" | |||
| in its | key and instead have the client implicitly substitute the target | |||
| "adminurl" key, thereby having the same host name appear in two | host name from the service's SRV record in place of a missing host | |||
| places, | name in the "adminurl" key. That way, the desired host name only | |||
| a better design might have been to omit the host name from the | appears once and is in a well-defined place where software like | |||
| "adminurl" key, | the Discovery Proxy is expecting to find it.</t> | |||
| and instead have the client implicitly substitute the target host | <t pn="section-5.5.5-5">Note that this kind of Application-Specific Da | |||
| name from the service's SRV record in place of a missing host name | ta Translation is | |||
| in the "adminurl" key. | expected to be very rare; it is the exception rather than the rule. | |||
| That way the desired host name only appears once, and it is in a | This is an example of a common theme in computing. It is frequently | |||
| well-defined place | the case that it is wise to start with a clean, layered design with | |||
| where software like the Discovery Proxy is expecting to find it.</t> | clear boundaries. Then, in certain special cases, those layer | |||
| boundaries may be violated where the performance and efficiency | ||||
| <t>Note that this kind of Application-Specific Data Translation is | benefits outweigh the inelegance of the layer violation.</t> | |||
| expected to be very rare. It is the exception, rather than the rule. | <t pn="section-5.5.5-6">These layer violations are optional. They are | |||
| This is an example of a common theme in computing. | done primarily for | |||
| It is frequently the case that it is wise to start with a clean, | efficiency reasons and generally should not be required for correct | |||
| layered design, with clear boundaries. Then, in certain special | operation. A Discovery Proxy <bcp14>MAY</bcp14> operate solely at | |||
| cases, | the mDNS layer without any knowledge of semantics at the DNS-SD | |||
| those layer boundaries may be violated, where the performance and | layer or above.</t> | |||
| efficiency benefits outweigh the inelegance of the layer | </section> | |||
| violation.</t> | ||||
| <t>These layer violations are optional. They are done primarily for | ||||
| efficiency | ||||
| reasons, and generally should not be required for correct operation. | ||||
| A Discovery Proxy MAY operate solely at the mDNS layer, | ||||
| without any knowledge of semantics at the DNS-SD layer or above.</t> | ||||
| <?rfc needLines="30" ?> | ||||
| </section> | </section> | |||
| </section> | <section anchor="aggregation" numbered="true" toc="include" removeInRFC="f | |||
| alse" pn="section-5.6"> | ||||
| <section anchor="aggregation" title="Answer Aggregation"> | <name slugifiedName="name-answer-aggregation">Answer Aggregation</name> | |||
| <t>In a simple analysis, simply gathering multicast answers and | <t pn="section-5.6-1">In a simple analysis, simply gathering multicast a | |||
| forwarding them | nswers and | |||
| in a unicast response seems adequate, but it raises the | forwarding them in a unicast response seems adequate, but it raises | |||
| question of how long the Discovery Proxy should wait to be sure that | the question of how long the Discovery Proxy should wait to be sure | |||
| it has received | that it has received all the Multicast DNS answers it needs to form a | |||
| all the Multicast DNS answers it needs to form a complete Unicast DNS | complete Unicast DNS response. If it waits too little time, then it | |||
| response. | risks its Unicast DNS response being incomplete. If it waits too | |||
| If it waits too little time, then it risks its Unicast DNS response | long, then it creates a poor user experience at the client end. In | |||
| being incomplete. | fact, there may be no time that is both short enough to produce a | |||
| If it waits too long, then it creates a poor user experience at the | good user experience and at the same time long enough to reliably | |||
| client end. | produce complete results.</t> | |||
| In fact, there may be no time which is both short enough to produce a | <t pn="section-5.6-2">Similarly, the Discovery Proxy (the authoritative | |||
| good | name server for | |||
| user experience and at the same time long enough to reliably produce | the subdomain in question) needs to decide what DNS TTL to report | |||
| complete results.</t> | for these records. If the TTL is too long, then the recursive | |||
| resolvers issuing queries on behalf of their clients risk | ||||
| <t>Similarly, the Discovery Proxy | caching stale data for too long. If the TTL is too short, then the | |||
| -- the authoritative name server for the subdomain in question -- | amount of network traffic will be more than necessary. In fact, there | |||
| needs to decide what DNS TTL to report for these records. | may be no TTL that is both short enough to avoid undesirable stale | |||
| If the TTL is too long then the recursive (caching) name servers | data and, at the same time, long enough to be efficient on the | |||
| issuing queries on behalf of their clients risk caching stale | network.</t> | |||
| data for too long. If the TTL is too short then the amount of | <t pn="section-5.6-3">Both these dilemmas are solved by the use of DNS L | |||
| network traffic will be more than necessary. | ong-Lived Queries | |||
| In fact, there may be no TTL which is both short enough to avoid | (LLQ) | |||
| undesirable stale data and at the same time long enough to be | <xref target="RFC8764" format="default" sectionFormat="of" derivedConten | |||
| efficient on the network.</t> | t="RFC8764"/> or its newer replacement, | |||
| DNS Push Notifications <xref target="RFC8765" format="default" sectionFo | ||||
| <t>Both these dilemmas are solved by use of DNS Long-Lived Queries | rmat="of" derivedContent="RFC8765"/>.</t> | |||
| (DNS LLQ) | <t pn="section-5.6-4">Clients supporting unicast DNS-based Service Disco | |||
| <xref target="LLQ"/> or its newer replacement, | very | |||
| <xref target="Push">DNS Push Notifications</xref>.</t> | <bcp14>SHOULD</bcp14> implement | |||
| DNS Push Notifications <xref target="RFC8765" format="default" sectionFo | ||||
| <t>Clients supporting unicast DNS Service Discovery SHOULD implement | rmat="of" derivedContent="RFC8765"/> | |||
| <xref target="Push">DNS Push Notifications</xref> | ||||
| for improved user experience.</t> | for improved user experience.</t> | |||
| <t pn="section-5.6-5">Clients and Discovery Proxies <bcp14>MAY</bcp14> s | ||||
| <t>Clients and Discovery Proxies MAY support both DNS LLQ and | upport both | |||
| DNS Push, | LLQ and DNS Push Notifications, and when talking to a | |||
| and when talking to a Discovery Proxy that supports both, the client | Discovery Proxy that supports both, the client may use either | |||
| may use either protocol, as it chooses, though it is expected | protocol, as it chooses, though it is expected that only | |||
| that only DNS Push will continue to be supported in the long | DNS Push Notifications will continue to be supported in the long | |||
| run.</t> | run.</t> | |||
| <t pn="section-5.6-6">When a Discovery Proxy receives a query using LLQ | ||||
| <t>When a Discovery Proxy receives a query using DNS LLQ or | or DNS Push Notifications, it responds immediately using the Multicast | |||
| DNS Push Notifications, it responds immediately using the | DNS records it already has in its cache (if any). This provides a | |||
| Multicast DNS records it already has in its cache (if any). | good client user experience by providing a near-instantaneous | |||
| This provides a good client user experience by providing a | ||||
| near-instantaneous | ||||
| response. Simultaneously, the Discovery Proxy issues a Multicast DNS | response. Simultaneously, the Discovery Proxy issues a Multicast DNS | |||
| query on the | query on the local link to discover if there are any additional | |||
| local link to discover if there are any additional Multicast DNS | Multicast DNS records it did not already know about. Should additional | |||
| records it | Multicast DNS responses be received, these are then delivered to the | |||
| did not already know about. Should additional Multicast DNS responses | client using additional LLQ or DNS Push Notification update | |||
| be | messages. The timeliness of such update messages is limited only by | |||
| received, these are then delivered to the client using additional | the timeliness of the device responding to the Multicast DNS query. If | |||
| DNS LLQ | the Multicast DNS device responds quickly, then the update message is | |||
| or DNS Push Notification update messages. | delivered quickly. If the Multicast DNS device responds slowly, then | |||
| The timeliness of such update messages is limited only by the | the update message is delivered slowly. The benefit of using multiple | |||
| timeliness of the | update | |||
| device responding to the Multicast DNS query. If the Multicast DNS | messages to deliver results as they become available is that the | |||
| device | Discovery | |||
| responds quickly, then the update message is delivered quickly. If the | Proxy can respond promptly because it doesn't have to deliver all the | |||
| Multicast | results in a single response that needs to be delayed to allow for the | |||
| DNS device responds slowly, then the update message is delivered | expected worst-case delay for receiving all the Multicast DNS | |||
| slowly. | responses.</t> | |||
| The benefit of using update messages is that the Discovery Proxy can | <t pn="section-5.6-7">With a proxy that supported only standard DNS quer | |||
| respond promptly | ies, even if it | |||
| because it doesn't have to delay its unicast response to allow for | were to try to provide reliability by assuming an | |||
| the expected worst-case delay for receiving all the Multicast DNS | excessively pessimistic worst-case time (thereby giving a very poor | |||
| responses. | user experience), there would still be the risk of a slow Multicast | |||
| Even if a proxy were to try to provide reliability by assuming an | DNS device taking even longer than that worst-case time (e.g., a | |||
| excessively pessimistic worst-case time (thereby giving a very | device that is not | |||
| poor user experience) there would still be the risk of a slow | even powered on until ten seconds after the initial query is | |||
| Multicast DNS device taking even longer than that (e.g., a device | received), | |||
| that is not even powered on until ten seconds after the initial | resulting in incomplete responses. | |||
| query is received) resulting in incomplete responses. Using update | Using update messages to deliver subsequent asynchronous replies | |||
| message solves | solves this | |||
| this dilemma: even very late responses are not lost; they are | dilemma: even very late responses are not lost; they are delivered in | |||
| delivered | subsequent update messages.</t> | |||
| in subsequent update messages.</t> | <t pn="section-5.6-8">Note that while normal DNS queries are generally r | |||
| eceived via the | ||||
| <?rfc needLines="16" ?> | client's configured | |||
| <t>There are two factors that determine specifically how responses | recursive resolver, LLQ and DNS Push Notification subscriptions may be | |||
| received directly from the client.</t> | ||||
| <t pn="section-5.6-9">There are two factors that determine how unicast r | ||||
| esponses | ||||
| are generated:</t> | are generated:</t> | |||
| <t pn="section-5.6-10">The first factor is whether or not the Discovery | ||||
| <t>The first factor is whether the query from the client used | Proxy already has | |||
| LLQ or DNS Push Notifications | at least one record in its cache that answers the question. | |||
| (used for long-lived service browsing PTR queries) | </t> | |||
| or not (used for one-shot operations like SRV or address record | <t pn="section-5.6-11"> | |||
| queries). | The second factor is whether the client used a normal DNS query, | |||
| Note that queries using LLQ or DNS Push Notifications are received | or established a subscription using LLQ or DNS Push Notifications. | |||
| directly | Normal DNS queries | |||
| from the client. | are typically used for one-shot operations like SRV or address record | |||
| Queries not using LLQ or DNS Push Notifications are generally received | queries. | |||
| via the | LLQ and DNS Push Notification subscriptions | |||
| client's configured recursive (caching) name server.</t> | are typically used for long-lived service browsing PTR queries. | |||
| Normal DNS queries and LLQ each have different response timing depending | ||||
| <t>The second factor is whether the Discovery Proxy already has at | on the cache state, yielding the first four cases listed below. | |||
| least | DNS Push Notifications, the newer protocol, has uniform behavior | |||
| one record in its cache that positively answers the question. | regardless of cache state, yielding the fifth case listed below.</t> | |||
| <list style='symbols'> | <ul spacing="normal" bare="false" empty="false" pn="section-5.6-12"> | |||
| <t>Not using LLQ or Push Notifications; no answer in | <li pn="section-5.6-12.1"> | |||
| cache:<vspace/> | <t pn="section-5.6-12.1.1">Standard DNS query; no answer in | |||
| Issue an mDNS query, exactly as a local client would issue an mDNS | cache:</t> | |||
| query on the local link for the desired record name, type and | <t pn="section-5.6-12.1.2"> | |||
| class, including retransmissions, as appropriate, according to | Issue an mDNS query on the local link, exactly as a local client | |||
| the established mDNS retransmission schedule <xref | would issue an mDNS query, for the desired record name, type, and | |||
| target="RFC6762"/>. | class, including retransmissions, as appropriate, according to the | |||
| As soon as any Multicast DNS response packet is received that | established mDNS retransmission schedule <xref target="RFC6762" form | |||
| contains one or more positive answers to that question | at="default" sectionFormat="of" derivedContent="RFC6762"/>. The Discovery Proxy | |||
| (with or without the Cache Flush bit <xref target="RFC6762"/> | awaits Multicast DNS | |||
| set), | responses.</t> | |||
| or a negative answer (signified via a Multicast DNS NSEC record | <t pn="section-5.6-12.1.3"> | |||
| <xref target="RFC6762"/>), | As soon as any Multicast DNS response packet | |||
| the Discovery Proxy generates a Unicast DNS response packet | is received that contains one or more positive answers to that | |||
| containing the | question (with or without the Cache Flush bit <xref target="RFC6762" | |||
| corresponding (filtered and translated) answers and sends it to | format="default" sectionFormat="of" derivedContent="RFC6762"/> set) or a negati | |||
| the remote | ve answer | |||
| client. If after six seconds no Multicast DNS answers have been | (signified via a Multicast DNS NSEC record <xref target="RFC6762" fo | |||
| received, | rmat="default" sectionFormat="of" derivedContent="RFC6762"/>), the Discovery Pro | |||
| cancel the mDNS query and | xy generates a Unicast DNS | |||
| return a negative response to the remote client. | response message containing the corresponding (filtered and | |||
| Six seconds is enough time to transmit three mDNS queries, | translated) answers and sends it to the remote client.</t> | |||
| and allow some time for responses to arrive.<vspace/> | <t pn="section-5.6-12.1.4"> | |||
| DNS TTLs in responses MUST be capped to at most ten | If after | |||
| seconds.<vspace/> | six seconds no relevant Multicast DNS answers have been received, | |||
| cancel | ||||
| the mDNS query and return a negative response to the remote | ||||
| client. Six seconds is enough time | ||||
| for the underlying Multicast DNS subsystem | ||||
| to transmit three mDNS queries | ||||
| and allow some time for responses to arrive.</t> | ||||
| <t pn="section-5.6-12.1.5"> | ||||
| (Reasoning: Queries not using LLQ or Push Notifications are | (Reasoning: Queries not using LLQ or Push Notifications are | |||
| generally queries | generally queries | |||
| that that expect an answer from only one device, | that expect an answer from only one device, | |||
| so the first response is also the only response.) | so the first response is also the only response.)</t> | |||
| <vspace blankLines="1"/> | <t pn="section-5.6-12.1.6"> | |||
| </t> | DNS TTLs in responses <bcp14>MUST</bcp14> be capped to at most ten | |||
| seconds.</t> | ||||
| <t>Not using LLQ or Push Notifications; at least one answer in | </li> | |||
| cache:<vspace/> | <li pn="section-5.6-12.2"> | |||
| Send response right away to minimise delay.<vspace/> | <t pn="section-5.6-12.2.1">Standard DNS query; at least one answer i | |||
| DNS TTLs in responses MUST be capped to at most ten | n | |||
| seconds.<vspace/> | cache:</t> | |||
| No local mDNS queries are performed.<vspace/> | <t pn="section-5.6-12.2.2"> | |||
| No local mDNS queries are performed.</t> | ||||
| <t pn="section-5.6-12.2.3"> | ||||
| The Discovery Proxy generates a Unicast DNS | ||||
| response message containing the answer(s) from the cache right | ||||
| away, to minimize delay.</t> | ||||
| <t pn="section-5.6-12.2.4"> | ||||
| (Reasoning: Queries not using LLQ or Push Notifications are | (Reasoning: Queries not using LLQ or Push Notifications are | |||
| generally queries | generally queries | |||
| that that expect an answer from only one device. | that expect an answer from only one device. | |||
| Given RRSet TTL harmonisation, if the proxy has | Given RRSet TTL harmonization, if the proxy has | |||
| one Multicast DNS answer in its cache, it can reasonably | one Multicast DNS answer in its cache, it can reasonably | |||
| assume that it has all of them.)</t> | assume that it has the whole set.)</t> | |||
| <t pn="section-5.6-12.2.5"> | ||||
| <t>Using LLQ or Push Notifications; no answer in cache:<vspace/> | DNS TTLs in responses <bcp14>MUST</bcp14> be capped to at most ten | |||
| As in the case above with no answer in the cache, perform mDNS | seconds.</t> | |||
| querying for six seconds, and send a response to the remote | </li> | |||
| client as soon as any relevant mDNS response is received.<vspace/> | <li pn="section-5.6-12.3"> | |||
| If after six seconds no relevant mDNS response has been received, | <t pn="section-5.6-12.3.1">Long-Lived Query (LLQ); no answer in cach | |||
| return negative response to the remote client | e:</t> | |||
| (for LLQ; not applicable for Push Notifications).<vspace/> | <t pn="section-5.6-12.3.2"> | |||
| As in the case above with no answer in the cache, plan to perform | ||||
| mDNS | ||||
| querying for six seconds, returning an LLQ response message to the | ||||
| remote | ||||
| client as soon as any relevant mDNS response is received.</t> | ||||
| <t pn="section-5.6-12.3.3"> | ||||
| If after six seconds no relevant mDNS answers have been received, | ||||
| and the client has not cancelled its Long-Lived Query, | ||||
| return a negative LLQ response message to the remote client.</t> | ||||
| <t pn="section-5.6-12.3.4"> | ||||
| (Reasoning: We don't need to rush to send an empty | (Reasoning: We don't need to rush to send an empty | |||
| answer.)<vspace/> | answer.)</t> | |||
| Whether or not a relevant mDNS response is received within | <t pn="section-5.6-12.3.5"> | |||
| six seconds, the query remains active for as long as the | Regardless of whether or not a relevant mDNS response is received | |||
| client maintains the LLQ or Push Notification state, and if mDNS | within | |||
| answers are | six seconds, the Long-Lived Query remains active for as long as | |||
| received later, LLQ or Push Notification messages are | the | |||
| sent.<vspace/> | client maintains the LLQ state, and results in the ongoing | |||
| transmission of mDNS queries until the Long-Lived Query is | ||||
| cancelled. | ||||
| If the set of mDNS answers changes, LLQ Event Response messages | ||||
| are sent.</t> | ||||
| <t pn="section-5.6-12.3.6"> | ||||
| DNS TTLs in responses are returned unmodified.</t> | DNS TTLs in responses are returned unmodified.</t> | |||
| </li> | ||||
| <t>Using LLQ or Push Notifications; at least one answer in | <li pn="section-5.6-12.4"> | |||
| cache:<vspace/> | <t pn="section-5.6-12.4.1">Long-Lived Query (LLQ); at least one answ | |||
| As in the case above with at least one answer in cache, | er in | |||
| send response right away to minimise delay.<vspace/> | cache:</t> | |||
| The query remains active for as long as the client | <t pn="section-5.6-12.4.2"> | |||
| maintains the LLQ or Push Notification state, and | As in the case above with at least one answer in the cache, | |||
| results in transmission of mDNS queries, with appropriate Known | the Discovery Proxy generates a unicast LLQ | |||
| Answer lists, | response message containing the answer(s) from the cache right | |||
| away, to minimize delay.</t> | ||||
| <t pn="section-5.6-12.4.3"> | ||||
| The Long-Lived Query remains active for as long as the client | ||||
| maintains the LLQ state, | ||||
| and results in the transmission of mDNS queries | ||||
| (with appropriate Known Answer lists) | ||||
| to determine if further answers are available. | to determine if further answers are available. | |||
| If additional mDNS answers are | If the set of mDNS answers changes, LLQ Event Response messages | |||
| received later, LLQ or Push Notification messages are | are sent.</t> | |||
| sent.<vspace/> | <t pn="section-5.6-12.4.4"> | |||
| (Reasoning: We want UI that is displayed very rapidly, yet | (Reasoning: We want a user interface that is displayed very | |||
| continues | rapidly yet | |||
| to remain accurate even as the network environment | continues to remain accurate even as the network environment | |||
| changes.)<vspace/> | changes.)</t> | |||
| <t pn="section-5.6-12.4.5"> | ||||
| DNS TTLs in responses are returned unmodified.</t> | DNS TTLs in responses are returned unmodified.</t> | |||
| </list> | </li> | |||
| </t> | <li pn="section-5.6-12.5"> | |||
| <t pn="section-5.6-12.5.1">Push Notification Subscription</t> | ||||
| <t>The "negative responses" referred to above are | <t pn="section-5.6-12.5.2"> | |||
| "no error no answer" negative responses, not NXDOMAIN. | The Discovery Proxy acknowledges the subscription request | |||
| This is because the Discovery Proxy cannot know all the Multicast | immediately.</t> | |||
| DNS domain names that may exist on a link at any given time, | <t pn="section-5.6-12.5.3"> | |||
| so any name with no answers may have child names that do exist, | If one or more answers are already available in the cache, | |||
| making it an "empty nonterminal" name.</t> | those answers are then sent in an immediately following DNS PUSH | |||
| message.</t> | ||||
| <?rfc needLines="30" ?> | <t pn="section-5.6-12.5.4"> | |||
| <t>Note that certain aspects of the behavior described here | The Push Notification subscription remains active until the client | |||
| cancels the subscription, | ||||
| and results in the transmission of mDNS queries | ||||
| (with appropriate Known Answer lists) | ||||
| to determine if further answers are available. | ||||
| If the set of mDNS answers changes, further DNS PUSH messages are | ||||
| sent.</t> | ||||
| <t pn="section-5.6-12.5.5"> | ||||
| (Reasoning: We want a user interface that is displayed very | ||||
| rapidly yet | ||||
| continues to remain accurate even as the network environment | ||||
| changes.)</t> | ||||
| <t pn="section-5.6-12.5.6"> | ||||
| DNS TTLs in responses are returned unmodified.</t> | ||||
| </li> | ||||
| </ul> | ||||
| <t pn="section-5.6-13">Where the text above refers to returning "a negat | ||||
| ive response to | ||||
| the remote client", it is describing returning a "no error no answer" | ||||
| negative response, not NXDOMAIN. This is because the Discovery Proxy | ||||
| cannot know all the Multicast DNS domain names that may exist on a | ||||
| link at any given time, so any name with no answers may have child | ||||
| names that do exist, making it an "empty non-terminal" name.</t> | ||||
| <t pn="section-5.6-14">Note that certain aspects of the behavior describ | ||||
| ed here | ||||
| do not have to be implemented overtly by the Discovery Proxy; | do not have to be implemented overtly by the Discovery Proxy; | |||
| they occur naturally as a result of using existing Multicast DNS | they occur naturally as a result of using existing Multicast DNS | |||
| APIs.</t> | APIs.</t> | |||
| <t pn="section-5.6-15">For example, in the first case above (standard DN | ||||
| <t>For example, | S query and no | |||
| in the first case above (no LLQ or Push Notifications, and no answers | answers in the cache), if a new Multicast DNS query is requested | |||
| in the cache) | (either by a local client on the Discovery Proxy device, or by the | |||
| if a new Multicast DNS query is requested | Discovery Proxy software on that device on behalf of a remote client), | |||
| (either by a local client, or by the Discovery Proxy on behalf of a | and there is not already an identical Multicast DNS query active and | |||
| remote client), | there are no matching answers already in the Multicast DNS cache on | |||
| and there is not already an identical Multicast DNS query active, | the Discovery Proxy device, then this will cause a series of Multicast | |||
| and there are no matching answers already in the | DNS query packets to be issued with exponential backoff. The | |||
| Multicast DNS cache on the Discovery Proxy device, | exponential backoff sequence in some implementations starts at one | |||
| then this will cause a series | second and then doubles for each retransmission (0, 1, 3, 7 seconds, | |||
| of Multicast DNS query packets to be issued with exponential backoff. | etc.), and in others, it starts at one second and then triples for | |||
| The exponential backoff sequence in some implementations starts at one | each retransmission (0, 1, 4, 13 seconds, etc.). In either case, if | |||
| second | no response has been received after six seconds, that is long enough | |||
| and then doubles for each retransmission (0, 1, 3, 7 seconds, etc.) | that the underlying Multicast DNS implementation will have sent three | |||
| and in others starts at one second | query packets without receiving any response. At that point, the | |||
| and then triples for each retransmission (0, 1, 4, 13 seconds, etc.). | Discovery Proxy cancels its Multicast DNS query (so no further | |||
| In either case, if no response has been received after six seconds, | Multicast DNS query packets will be sent for this query) and returns a | |||
| that is long enough that the underlying Multicast DNS implementation | negative response to the remote client via unicast.</t> | |||
| will have sent three query packets without receiving any response. | <t pn="section-5.6-16">The six-second delay is chosen to be long enough | |||
| At that point the Discovery Proxy cancels its Multicast DNS query | to give enough | |||
| (so no further Multicast DNS query packets will be sent for this | time for devices to respond, yet short enough not to be too onerous | |||
| query) | for a human user waiting for a response. For example, using the "dig" | |||
| and returns a negative response to the remote client via unicast.</t> | DNS debugging tool, the current default settings result in it waiting | |||
| a total of 15 seconds for a reply (three transmissions of the DNS UDP | ||||
| <t>The six-second delay is chosen to be | query packet, with a wait of 5 seconds after each packet), which is | |||
| long enough to give enough time for devices to respond, yet | ample time for it to have received a negative reply from a Discovery | |||
| short enough not to be too onerous for a human user waiting for a | Proxy after six seconds.</t> | |||
| response. | <t pn="section-5.6-17">The text above states that for a standard DNS que | |||
| For example, using the "dig" DNS debugging tool, the current default | ry, | |||
| settings | if at least one answer is already available in the cache, then a | |||
| result in it waiting a total of 15 seconds for a reply | Discovery Proxy should not issue additional mDNS query packets. | |||
| (three transmissions of the query packet, with a wait of 5 seconds | This also occurs naturally as a result of using existing | |||
| after each packet) | Multicast DNS APIs. | |||
| which is ample time for it to have received a negative reply from a | If a new Multicast DNS query is requested | |||
| Discovery Proxy | (either locally, or by the Discovery Proxy on behalf of a remote client) | |||
| after six seconds.</t> | for which there are relevant answers already in the Multicast DNS | |||
| cache on the Discovery Proxy device, and after the answers are | ||||
| <t>The statement that for a one-shot query (i.e., no LLQ or Push | delivered the Multicast DNS query is immediately cancelled, then | |||
| Notifications requested), | no Multicast DNS query packets will be generated for this query. | |||
| if at least one answer is already available in the cache | </t> | |||
| then a Discovery Proxy should not issue additional mDNS query packets, | </section> | |||
| also occurs naturally as a result of using existing Multicast DNS | ||||
| APIs. | ||||
| If a new Multicast DNS query is requested | ||||
| (either locally, or by the Discovery Proxy on behalf of a remote | ||||
| client), | ||||
| for which there are relevant answers already in the | ||||
| Multicast DNS cache on the Discovery Proxy device, | ||||
| and after the answers are delivered the Multicast DNS query is then | ||||
| cancelled immediately, | ||||
| then no Multicast DNS query packets will be generated for this | ||||
| query.</t> | ||||
| <?rfc needLines="19" ?> | ||||
| </section> | </section> | |||
| </section> | <section anchor="admin" numbered="true" toc="include" removeInRFC="false" pn | |||
| ="section-6"> | ||||
| <section anchor="admin" title="Administrative DNS Records"> | <name slugifiedName="name-administrative-dns-records">Administrative DNS R | |||
| ecords</name> | ||||
| <section anchor="soa" title="DNS SOA (Start of Authority) Record"> | <section anchor="soa" numbered="true" toc="include" removeInRFC="false" pn | |||
| ="section-6.1"> | ||||
| <t>The MNAME field SHOULD contain the host name of the Discovery Proxy | <name slugifiedName="name-dns-soa-start-of-authority-">DNS SOA (Start of | |||
| Authority) Record</name> | ||||
| <t pn="section-6.1-1">The MNAME field <bcp14>SHOULD</bcp14> contain the | ||||
| host name of the | ||||
| Discovery Proxy | ||||
| device | device | |||
| (i.e., the same domain name as the rdata of the NS record delegating | (i.e., the same domain name as the RDATA of the NS record delegating | |||
| the | the | |||
| relevant zone(s) to this Discovery Proxy device).</t> | relevant zone(s) to this Discovery Proxy device).</t> | |||
| <t pn="section-6.1-2">The RNAME field <bcp14>SHOULD</bcp14> contain the | ||||
| <t>The RNAME field SHOULD contain the mailbox of the person | mailbox of the | |||
| person | ||||
| responsible | responsible | |||
| for administering this Discovery Proxy device.</t> | for administering this Discovery Proxy device.</t> | |||
| <t pn="section-6.1-3">The SERIAL field <bcp14>MUST</bcp14> be zero.</t> | ||||
| <t>The SERIAL field MUST be zero.</t> | <t pn="section-6.1-4">Zone transfers are undefined for Discovery Proxy z | |||
| ones, and | ||||
| <t>Zone transfers are undefined for Discovery Proxy zones, and | consequently, the REFRESH, RETRY, and EXPIRE fields have no useful | |||
| consequently the | meaning for Discovery Proxy zones. These fields <bcp14>SHOULD</bcp14> | |||
| REFRESH, RETRY and EXPIRE fields have no useful meaning for Discovery | contain reasonable default values. The <bcp14>RECOMMENDED</bcp14> | |||
| Proxy zones. | values are: REFRESH 7200, RETRY 3600, and EXPIRE 86400.</t> | |||
| These fields SHOULD contain reasonable default values. | <t pn="section-6.1-5">The MINIMUM field (used to control the lifetime of | |||
| The RECOMMENDED values are: REFRESH 7200, RETRY 3600, EXPIRE | negative cache | |||
| 86400.</t> | ||||
| <t>The MINIMUM field (used to control the lifetime of negative cache | ||||
| entries) | entries) | |||
| SHOULD contain the value 10. | <bcp14>SHOULD</bcp14> contain the value 10. | |||
| The value of ten seconds is chosen based on user-experience | This value is chosen based on user-experience | |||
| considerations | considerations | |||
| (see <xref target="ttl"/>).</t> | (see <xref target="ttl" format="default" sectionFormat="of" derivedConte | |||
| nt="Section 5.5.1"/>).</t> | ||||
| <t>In the event that there are multiple Discovery Proxy devices on a | <t pn="section-6.1-6">In the event that there are multiple Discovery Pro | |||
| xy devices on a | ||||
| link for fault tolerance reasons, this will result in clients | link for fault tolerance reasons, this will result in clients | |||
| receiving inconsistent SOA records (different MNAME, and possibly | receiving inconsistent SOA records (different MNAME and possibly | |||
| RNAME) | RNAME) depending on which Discovery Proxy answers their SOA query. | |||
| depending on which Discovery Proxy answers their SOA query. | ||||
| However, since clients generally have no reason to use the MNAME or | However, since clients generally have no reason to use the MNAME or | |||
| RNAME | RNAME data, this is unlikely to cause any problems.</t> | |||
| data, this is unlikely to cause any problems.</t> | ||||
| <?rfc needLines="22" ?> | ||||
| </section> | </section> | |||
| <section anchor="ns" numbered="true" toc="include" removeInRFC="false" pn= | ||||
| <section anchor="ns" title="DNS NS Records"> | "section-6.2"> | |||
| <t>In the event that there are multiple Discovery Proxy devices on a | <name slugifiedName="name-dns-ns-records">DNS NS Records</name> | |||
| link for fault tolerance reasons, the parent zone MUST | <t pn="section-6.2-1">In the event that there are multiple Discovery Pro | |||
| xy devices on a | ||||
| link for fault tolerance reasons, the parent zone <bcp14>MUST</bcp14> | ||||
| be configured with NS records giving the names | be configured with NS records giving the names | |||
| of all the Discovery Proxy devices on the link.</t> | of all the Discovery Proxy devices on the link.</t> | |||
| <t pn="section-6.2-2">Each Discovery Proxy device <bcp14>MUST</bcp14> be | ||||
| <t>Each Discovery Proxy device MUST be configured to answer NS queries | configured to | |||
| answer NS queries | ||||
| for the zone apex name by giving its own NS record, | for the zone apex name by giving its own NS record, | |||
| and the NS records of its fellow Discovery Proxy devices on the same | and the NS records of its fellow Discovery Proxy devices on the same | |||
| link, so that it can return the correct answers for NS queries.</t> | link, so that it can return the correct answers for NS queries.</t> | |||
| <t pn="section-6.2-3">The target host name in the RDATA of an NS record | ||||
| <t>The target host name in the RDATA of an NS record MUST NOT | <bcp14>MUST NOT</bcp14> | |||
| reference | reference | |||
| a name that falls within any zone delegated to a Discovery Proxy. | a name that falls within any zone delegated to a Discovery Proxy. | |||
| Apart from the zone apex name, | Apart from the zone apex name, | |||
| all other host names that fall within a zone delegated to a Discovery | all other host names (names of A and AAAA DNS records) | |||
| that fall within a zone delegated to a Discovery | ||||
| Proxy | Proxy | |||
| correspond to local Multicast DNS host names, | correspond to local Multicast DNS host names, | |||
| which logically belong to the respective Multicast DNS hosts defending | which logically belong to the respective Multicast DNS hosts defending | |||
| those names, | those names, | |||
| not the Discovery Proxy. | not the Discovery Proxy. | |||
| Generally speaking, the Discovery Proxy does not own or control the | Generally speaking, the Discovery Proxy does not own or control the | |||
| delegated zone; | delegated zone; | |||
| it is merely a conduit to the corresponding ".local" namespace, | it is merely a conduit to the corresponding ".local" namespace, | |||
| which is controlled by the Multicast DNS hosts on that link. | which is controlled by the Multicast DNS hosts on that link. | |||
| If an NS record were to reference a manually-determined host name | If an NS record were to reference a manually determined host name | |||
| that falls within a delegated zone, | that falls within a delegated zone, | |||
| that manually-determined host name may inadvertently conflict with a | that manually determined host name may inadvertently conflict with a | |||
| corresponding | corresponding | |||
| ".local" host name that is owned and controlled by some device on that | ".local" host name that is owned and controlled by some device on that | |||
| link. | link. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="delegation" numbered="true" toc="include" removeInRFC="fa | ||||
| <section anchor="delegation" title="DNS Delegation Records"> | lse" pn="section-6.3"> | |||
| <t>Since the <xref target="RFC6762">Multicast DNS specification</xref> | <name slugifiedName="name-dns-delegation-records">DNS Delegation Records | |||
| states that there can be no delegation (subdomains) within a ".local" | </name> | |||
| namespace, | <t pn="section-6.3-1">Since the <xref target="RFC6762" format="default" | |||
| this implies that | sectionFormat="of" derivedContent="RFC6762">Multicast DNS | |||
| any name within a zone delegated to a Discovery Proxy | specification</xref> states that there can be no delegation | |||
| (except for the zone apex name itself) | (subdomains) within a ".local" namespace, this implies that any name | |||
| cannot have any answers for any DNS queries for RRTYPEs SOA, NS, or | within a zone delegated to a Discovery Proxy (except for the zone apex | |||
| DS. | name itself) cannot have any answers for any DNS queries for RRTYPEs | |||
| Consequently: | SOA, NS, or DS. Consequently: | |||
| <list style='symbols'> | ||||
| <t>for any query for the zone apex name of a zone delegated to a | ||||
| Discovery Proxy, | ||||
| the Discovery Proxy MUST generate the appropriate immediate | ||||
| answers as described above, and</t> | ||||
| <t>for any query for RRTYPEs SOA, NS, or DS, | ||||
| for any name within a zone delegated to a Discovery Proxy, | ||||
| other than the zone apex name, | ||||
| instead of translating the query to its corresponding Multicast | ||||
| DNS ".local" equivalent, | ||||
| a Discovery Proxy MUST generate an immediate negative answer.</t> | ||||
| </list> | ||||
| </t> | </t> | |||
| <ul spacing="normal" bare="false" empty="false" pn="section-6.3-2"> | ||||
| <li pn="section-6.3-2.1">for any query for the zone apex name of a zon | ||||
| e delegated to a | ||||
| Discovery Proxy, the Discovery Proxy <bcp14>MUST</bcp14> generate | ||||
| the appropriate immediate answers as described above, and</li> | ||||
| <li pn="section-6.3-2.2"> | ||||
| for any query for any name below the zone apex, for RRTYPEs SOA, NS, | ||||
| or DS, | ||||
| the Discovery Proxy <bcp14>MUST</bcp14> generate | ||||
| an immediate negative answer. | ||||
| </li> | ||||
| </ul> | ||||
| </section> | </section> | |||
| <section anchor="srv" numbered="true" toc="include" removeInRFC="false" pn | ||||
| <section anchor="srv" title="DNS SRV Records"> | ="section-6.4"> | |||
| <t>There are certain special DNS records that logically | <name slugifiedName="name-dns-srv-records">DNS SRV Records</name> | |||
| fall within the delegated unicast DNS subdomain, | <t pn="section-6.4-1">There are certain special DNS records that logical | |||
| but rather than mapping to their corresponding ".local" namesakes, | ly fall within | |||
| they actually contain metadata pertaining to the operation | the delegated Unicast DNS subdomain, but rather than mapping to their | |||
| of the delegated unicast DNS subdomain itself. | corresponding ".local" namesakes, they actually contain metadata | |||
| They do not exist in the corresponding ".local" namespace of the local | pertaining to the operation of the delegated Unicast DNS subdomain | |||
| link. | itself. They do not exist in the corresponding ".local" namespace of | |||
| For these queries a Discovery Proxy MUST generate immediate answers, | the local link. For these queries, a Discovery Proxy | |||
| whether positive or negative, to avoid delays while clients wait for | <bcp14>MUST</bcp14> generate immediate answers, whether positive or | |||
| their query to be answered. | negative, to avoid delays while clients wait for their query to be | |||
| For example, if a Discovery Proxy does not implement | answered.</t> | |||
| <xref target="LLQ">Long-Lived Queries</xref> | <t pn="section-6.4-2">For example, if a Discovery Proxy implements Long- | |||
| then it MUST return an immediate negative answer to tell the client | Lived Queries | |||
| this without delay, | <xref target="RFC8764" format="default" sectionFormat="of" derivedConten | |||
| instead of passing the query through to the local network as a query | t="RFC8764"/>, then it | |||
| for | <bcp14>MUST</bcp14> positively respond to | |||
| <spanx style="verb">_dns&nbhy;llq._udp.local.</spanx>, | <tt>_dns‑llq._udp.<zone> SRV</tt> queries, | |||
| and then waiting unsuccessfully for answers that will not be | <tt>_dns‑llq._tcp.<zone> SRV</tt> queries, and | |||
| forthcoming.</t> | <tt>_dns‑llq‑tls._tcp.<zone> SRV</tt> queries as | |||
| appropriate. If it does not implement Long-Lived Queries, it | ||||
| <t>If a Discovery Proxy implements | <bcp14>MUST</bcp14> return an immediate negative answer for those | |||
| <xref target="LLQ">Long-Lived Queries</xref> | queries, instead of passing those queries through to the local network | |||
| then it MUST positively respond to | as Multicast DNS queries and then waiting unsuccessfully for answers | |||
| <spanx style="verb">_dns&nbhy;llq._udp.<zone> SRV</spanx> | that will not be forthcoming.</t> | |||
| queries, | <t pn="section-6.4-3">If a Discovery Proxy implements | |||
| <spanx style="verb">_dns&nbhy;llq._tcp.<zone> SRV</spanx> | DNS Push Notifications <xref target="RFC8765" format="default" sectionFo | |||
| queries, and | rmat="of" derivedContent="RFC8765"/>, | |||
| <spanx | then it <bcp14>MUST</bcp14> positively respond to | |||
| style="verb">_dns&nbhy;llq&nbhy;tls._tcp.<zone> SRV</spanx | <tt>_dns‑push‑tls._tcp.<zone></tt> | |||
| > | queries. | |||
| queries as appropriate, | Otherwise, it <bcp14>MUST</bcp14> return an immediate negative answer | |||
| else it MUST return an immediate negative answer for those | for those | |||
| queries.</t> | ||||
| <t>If a Discovery Proxy implements | ||||
| <xref target="Push">DNS Push Notifications</xref> | ||||
| then it MUST positively respond to | ||||
| <spanx style="verb">_dns&nbhy;push&nbhy;tls._tcp.<zone></spanx> | ||||
| queries, | ||||
| else it MUST return an immediate negative answer for those | ||||
| queries.</t> | queries.</t> | |||
| <t pn="section-6.4-4">A Discovery Proxy <bcp14>MUST</bcp14> return an im | ||||
| <t>A Discovery Proxy MUST return an immediate negative answer for | mediate negative | |||
| <spanx | answer for | |||
| style="verb">_dns&nbhy;update._udp.<zone> SRV</spanx> | <tt>_dns‑update._udp.<zone> SRV</tt> | |||
| queries, | queries, | |||
| <spanx | <tt>_dns‑update._tcp.<zone> SRV</tt> | |||
| style="verb">_dns&nbhy;update._tcp.<zone> SRV</spanx> | ||||
| queries, and | queries, and | |||
| <spanx | <tt>_dns‑update-tls._tcp.<zone> SRV</tt> | |||
| style="verb">_dns&nbhy;update-tls._tcp.<zone> SRV</spanx> | ||||
| queries, | queries, | |||
| since using <xref target="RFC2136">DNS Update</xref> to change | since using DNS Update <xref target="RFC2136" format="default" sectionFo | |||
| rmat="of" derivedContent="RFC2136"/> | ||||
| to change | ||||
| zones generated dynamically from local Multicast DNS data is not | zones generated dynamically from local Multicast DNS data is not | |||
| possible.</t> | possible.</t> | |||
| </section> | ||||
| <?rfc needLines="29" ?> | <section numbered="true" toc="include" removeInRFC="false" pn="section-6.5 | |||
| "> | ||||
| <name slugifiedName="name-domain-enumeration-records">Domain Enumeration | ||||
| Records</name> | ||||
| <t pn="section-6.5-1">If the network operator chooses to use address-bas | ||||
| ed | ||||
| unicast Domain Enumeration queries for client configuration | ||||
| (see <xref target="unicast" format="default" sectionFormat="of" derivedC | ||||
| ontent="Section 5.2.1"/>), | ||||
| and the network operator also chooses to delegate the enclosing | ||||
| reverse mapping subdomain to a Discovery Proxy, | ||||
| then that Discovery Proxy becomes responsible for serving | ||||
| the answers to those address-based unicast Domain Enumeration | ||||
| queries.</t> | ||||
| <t pn="section-6.5-2">As with the SRV metadata records described above, | ||||
| a Discovery Proxy | ||||
| configured with delegated reverse mapping subdomains is responsible | ||||
| for generating immediate (positive or negative) answers for | ||||
| address-based unicast Domain Enumeration queries, rather than | ||||
| passing them though to the underlying Multicast DNS subsystem and | ||||
| then waiting unsuccessfully for answers that will not be | ||||
| forthcoming.</t> | ||||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="DNSSEC" numbered="true" toc="include" removeInRFC="false" p | ||||
| <section anchor="DNSSEC" title="DNSSEC Considerations"> | n="section-7"> | |||
| <name slugifiedName="name-dnssec-considerations">DNSSEC Considerations</na | ||||
| <section title="On-line signing only"> | me> | |||
| <t>The Discovery Proxy acts as the authoritative name server for | <section numbered="true" toc="include" removeInRFC="false" pn="section-7.1 | |||
| "> | ||||
| <name slugifiedName="name-online-signing-only">Online Signing Only</name | ||||
| > | ||||
| <t pn="section-7.1-1">The Discovery Proxy acts as the authoritative name | ||||
| server for | ||||
| designated subdomains, and if DNSSEC is to be used, the Discovery | designated subdomains, and if DNSSEC is to be used, the Discovery | |||
| Proxy needs to | Proxy needs to possess a copy of the signing keys in order to | |||
| possess a copy of the signing keys, in order to generate authoritative | generate authoritative signed data from the local Multicast DNS | |||
| signed data from the local Multicast DNS responses it receives. | responses it receives. Offline signing is not applicable to | |||
| Off-line signing is not applicable to Discovery Proxy.</t> | Discovery Proxy.</t> | |||
| </section> | </section> | |||
| <section numbered="true" toc="include" removeInRFC="false" pn="section-7.2 | ||||
| <section title="NSEC and NSEC3 Records"> | "> | |||
| <t>In DNSSEC | <name slugifiedName="name-nsec-and-nsec3-records">NSEC and NSEC3 Records | |||
| <xref target="RFC4034">NSEC</xref> and | </name> | |||
| <xref target="RFC5155">NSEC3</xref> records | <t pn="section-7.2-1">In DNSSEC, | |||
| NSEC and NSEC3 records | ||||
| are used to assert the nonexistence of certain names, | are used to assert the nonexistence of certain names, | |||
| also described as "authenticated denial of existence".</t> | also described as "authenticated denial of existence" | |||
| <xref target="RFC4034" format="default" sectionFormat="of" derivedConten | ||||
| <t>Since a Discovery Proxy only knows what names exist on the local | t="RFC4034"/> | |||
| link | <xref target="RFC5155" format="default" sectionFormat="of" derivedCont | |||
| by issuing queries for them, and since it would be impractical to | ent="RFC5155"/>.</t> | |||
| <t pn="section-7.2-2">Since a Discovery Proxy only knows what names exis | ||||
| t on the local | ||||
| link by issuing queries for them, and since it would be impractical to | ||||
| issue queries for every possible name just to find out which names | issue queries for every possible name just to find out which names | |||
| exist and which do not, a Discovery Proxy cannot programmatically | exist and which do not, a Discovery Proxy cannot programmatically | |||
| synthesize the traditional NSEC and NSEC3 records which assert the | synthesize the traditional NSEC and NSEC3 records that assert the | |||
| nonexistence of a large range of names. | nonexistence of a large range of names. Instead, when generating a | |||
| Instead, when generating a negative response, | negative response, a Discovery Proxy programmatically synthesizes a | |||
| a Discovery Proxy programmatically synthesizes a single NSEC record | single NSEC record asserting the nonexistence of just the specific | |||
| assert the nonexistence of just the specific name queried, and no | name queried and no others. Since the Discovery Proxy has the zone | |||
| others. | signing key, it can do this on demand. Since the NSEC record asserts | |||
| Since the Discovery Proxy has the zone signing key, it can do this on | the nonexistence of only a single name, zone walking is not a concern, | |||
| demand. | and NSEC3 is therefore not necessary.</t> | |||
| Since the NSEC record asserts the nonexistence of only a single name, | <t pn="section-7.2-3">Note that this applies only to traditional immedia | |||
| zone walking is not a concern, so NSEC3 is not necessary.</t> | te DNS queries, | |||
| which may return immediate negative answers when no immediate positive | ||||
| <t>Note that this applies only to traditional immediate DNS queries, | answer is available. When used with a DNS Push Notification | |||
| which may return immediate negative answers when | subscription <xref target="RFC8765" format="default" sectionFormat="of" | |||
| no immediate positive answer is available. | derivedContent="RFC8765"/>, there are no negative answers, merely the | |||
| When used with a | absence of answers so far, which may change in the future if answers | |||
| <xref target="Push">DNS Push Notification subscription</xref> | become available.</t> | |||
| there are no negative answers, merely the absence of answers so far, | ||||
| which may change in the future if answers become available.</t> | ||||
| <?rfc needLines="19" ?> | ||||
| </section> | </section> | |||
| </section> | </section> | |||
| <section numbered="true" toc="include" removeInRFC="false" pn="section-8"> | ||||
| <section title="IPv6 Considerations"> | <name slugifiedName="name-ipv6-considerations">IPv6 Considerations</name> | |||
| <t>An IPv4-only host and an IPv6-only host behave as "ships that pass in | <t pn="section-8-1">An IPv4-only host and an IPv6-only host behave as "shi | |||
| the night". Even if they are on the same <xref | ps that pass in | |||
| target="IEEE-3">Ethernet</xref>, neither is aware | the night". Even if they are on the same Ethernet <xref target="IEEE-3" fo | |||
| of the other's traffic. For this reason, each link may have | rmat="default" sectionFormat="of" derivedContent="IEEE-3"/>, neither is aware of | |||
| *two* unrelated ".local." zones, one for IPv4 and one for IPv6. | the other's traffic. For | |||
| Since for practical purposes, a group of IPv4-only hosts and a group | this reason, each link may have <em>two</em> unrelated ".local." zones: | |||
| of IPv6-only hosts on the same Ethernet act as if they were on two | one for | |||
| entirely separate Ethernet segments, it is unsurprising that their | IPv4 and one for IPv6. Since, for practical purposes, a group of | |||
| use of the ".local." zone should occur exactly as it would if | IPv4-only hosts and a group of IPv6-only hosts on the same Ethernet act | |||
| they really were on two entirely separate Ethernet segments.</t> | as if they were on two entirely separate Ethernet segments, it is | |||
| unsurprising that their use of the ".local." zone should occur exactly | ||||
| <t>It will be desirable to have a mechanism to 'stitch' together | as it would if they really were on two entirely separate Ethernet | |||
| segments.</t> | ||||
| <t pn="section-8-2">It will be desirable to have a mechanism to "stitch" t | ||||
| ogether | ||||
| these two unrelated ".local." zones so that they appear as one. | these two unrelated ".local." zones so that they appear as one. | |||
| Such mechanism will need to be able to differentiate between a | Such a mechanism will need to be able to differentiate between a | |||
| dual-stack (v4/v6) host participating in both ".local." | dual-stack (v4/v6) host participating in both ".local." | |||
| zones, and two different hosts, one IPv4-only and the other IPv6-only, | zones, and two different hosts: one IPv4-only and the other IPv6-only, | |||
| which are both trying to use the same name(s). Such a mechanism | which are both trying to use the same name(s). Such a mechanism | |||
| will be specified in a future companion document.</t> | will be specified in a future companion document.</t> | |||
| <t pn="section-8-3">At present, it is <bcp14>RECOMMENDED</bcp14> that a Di | ||||
| <t>At present, it is RECOMMENDED that a Discovery Proxy be configured | scovery Proxy | |||
| be configured | ||||
| with a single domain name for both the IPv4 and IPv6 ".local." zones | with a single domain name for both the IPv4 and IPv6 ".local." zones | |||
| on the local link, and when a unicast query is received, it should | on the local link, and when a unicast query is received, it should | |||
| issue Multicast DNS queries using both IPv4 and IPv6 on the local link, | issue Multicast DNS queries using both IPv4 and IPv6 on the local link | |||
| and then combine the results.</t> | and then combine the results.</t> | |||
| <?rfc needLines="25" ?> | ||||
| </section> | </section> | |||
| <section numbered="true" toc="include" removeInRFC="false" pn="section-9"> | ||||
| <section title="Security Considerations"> | <name slugifiedName="name-security-considerations">Security Considerations | |||
| <section title="Authenticity"> | </name> | |||
| <t>A service proves its presence on a link by its ability to | <section numbered="true" toc="include" removeInRFC="false" pn="section-9.1 | |||
| "> | ||||
| <name slugifiedName="name-authenticity">Authenticity</name> | ||||
| <t pn="section-9.1-1">A service proves its presence on a link by its abi | ||||
| lity to | ||||
| answer link-local multicast queries on that link. | answer link-local multicast queries on that link. | |||
| If greater security is desired, then the Discovery Proxy mechanism | If greater security is desired, then the Discovery Proxy mechanism | |||
| should not be used, and something with stronger security should | should not be used, and something with stronger security should | |||
| be used instead, such as authenticated secure DNS Update | be used instead such as authenticated secure DNS Update | |||
| <xref target="RFC2136"/> <xref target="RFC3007"/>.</t> | <xref target="RFC2136" format="default" sectionFormat="of" derivedConten | |||
| t="RFC2136"/> <xref target="RFC3007" format="default" sectionFormat="of" derived | ||||
| Content="RFC3007"/>.</t> | ||||
| </section> | </section> | |||
| <section numbered="true" toc="include" removeInRFC="false" pn="section-9.2 | ||||
| <section title="Privacy"> | "> | |||
| <t>The Domain Name System is, generally speaking, a global public | <name slugifiedName="name-privacy">Privacy</name> | |||
| database. | <t pn="section-9.2-1">The Domain Name System is, generally speaking, | |||
| Records that exist in the Domain Name System name hierarchy | a global public database. Records that exist in the Domain Name | |||
| can be queried by name from, in principle, anywhere in the world. | System name hierarchy can be queried by name from, in principle, | |||
| If services on a mobile device (like a laptop computer) are made | anywhere in the world. If services on a mobile device (like a laptop | |||
| visible | computer) are made visible via the Discovery Proxy mechanism, then | |||
| via the Discovery Proxy mechanism, then when those services become | when those services become visible in a domain such as | |||
| visible | "My House.example.com", it might indicate to (potentially | |||
| in a domain such as "My House.example.com" that might indicate to | hostile) observers that the mobile device is in the owner's home. | |||
| (potentially hostile) observers that the mobile device is in my house. | When those | |||
| When those services disappear from "My House.example.com" | services disappear from "My House.example.com", that change could | |||
| that change could be used by observers to infer when the | be used by observers to infer when the mobile device (and possibly its | |||
| mobile device (and possibly its owner) may have left the house. | owner) may have left the house. The privacy of this information may | |||
| The privacy of this information may be protected using techniques | be protected using techniques like firewalls, split-view DNS, and | |||
| like firewalls, split-view DNS, and Virtual Private Networks (VPNs), | Virtual Private Networks (VPNs), as are customarily used today to | |||
| as are customarily used today | protect the privacy of corporate DNS information.</t> | |||
| to protect the privacy of corporate DNS information.</t> | <t pn="section-9.2-2">The privacy issue is particularly serious for the | |||
| IPv4 and IPv6 | ||||
| <t>The privacy issue is particularly serious for the IPv4 and IPv6 | ||||
| reverse zones. | reverse zones. | |||
| If the public delegation of the reverse zones points to the | If the public delegation of the reverse zones points to the | |||
| Discovery Proxy, and the Discovery Proxy is reachable globally, | Discovery Proxy, and the Discovery Proxy is reachable globally, | |||
| then it could leak a significant amount of information. | then it could leak a significant amount of information. | |||
| Attackers could discover hosts that otherwise might | Attackers could discover hosts that otherwise might | |||
| not be easy to identify, and learn their hostnames. | not be easy to identify, and learn their host names. | |||
| Attackers could also discover the existence of links | Attackers could also discover the existence of links | |||
| where hosts frequently come and go.</t> | where hosts frequently come and go.</t> | |||
| <t pn="section-9.2-3">The Discovery Proxy could provide sensitive record | ||||
| <t>The Discovery Proxy could also provide sensitive records only to | s only to | |||
| authenticated | authenticated | |||
| users. This is a general DNS problem, not specific to the Discovery | users. This is a general DNS problem, not specific to the Discovery | |||
| Proxy. | Proxy. | |||
| Work is underway in the IETF to tackle this problem <xref | Work is underway in the IETF to tackle this problem <xref target="RFC762 | |||
| target="RFC7626"/>.</t> | 6" format="default" sectionFormat="of" derivedContent="RFC7626"/>.</t> | |||
| </section> | </section> | |||
| <section numbered="true" toc="include" removeInRFC="false" pn="section-9.3 | ||||
| <section title="Denial of Service"> | "> | |||
| <t>A remote attacker could use a rapid series of unique Unicast DNS | <name slugifiedName="name-denial-of-service">Denial of Service</name> | |||
| <t pn="section-9.3-1">A remote attacker could use a rapid series of uniq | ||||
| ue Unicast DNS | ||||
| queries to induce a Discovery Proxy to generate a rapid series of | queries to induce a Discovery Proxy to generate a rapid series of | |||
| corresponding Multicast DNS queries on one or more of its local links. | corresponding Multicast DNS queries on one or more of its local links. | |||
| Multicast traffic is generally more expensive than unicast traffic | Multicast traffic is generally more expensive than unicast traffic, | |||
| -- especially on Wi-Fi links -- | especially on Wi-Fi links | |||
| which makes this attack particularly serious. | <xref target="I-D.ietf-mboned-ieee802-mcast-problems" format="default" s | |||
| To limit the damage that can be caused by such attacks, a Discovery | ectionFormat="of" derivedContent="MCAST"/>, | |||
| Proxy | which makes this attack particularly | |||
| (or the underlying Multicast DNS subsystem which it utilizes) MUST | serious. To limit the damage that can be caused by such attacks, a | |||
| implement Multicast DNS query rate limiting appropriate to the link | Discovery Proxy (or the underlying Multicast DNS subsystem that it | |||
| technology in question. For today's 802.11b/g/n/ac Wi-Fi links | utilizes) <bcp14>MUST</bcp14> implement Multicast DNS query rate | |||
| (for which approximately 200 multicast packets per second is | limiting appropriate to the link technology in question. For today's | |||
| sufficient | 802.11b/g/n/ac Wi-Fi links (for which approximately 200 multicast | |||
| to consume approximately 100% of the wireless spectrum) | packets per second is sufficient to consume approximately 100% of the | |||
| a limit of 20 Multicast DNS query packets per second is RECOMMENDED. | wireless spectrum), a limit of 20 Multicast DNS query packets per | |||
| On other link technologies like Gigabit Ethernet higher limits | second is <bcp14>RECOMMENDED</bcp14>. On other link technologies like | |||
| may be appropriate. | Gigabit Ethernet, higher limits may be appropriate. A consequence of | |||
| A consequence of this rate limiting is that a rogue remote client | this rate limiting is that a rogue remote client could issue an | |||
| could issue an excessive number of queries, resulting in denial of | excessive number of queries resulting in denial of service to other | |||
| service to other legitimate remote clients attempting to use that | legitimate remote clients attempting to use that Discovery Proxy. | |||
| Discovery Proxy. | ||||
| However, this is preferable to a rogue remote client being able to | However, this is preferable to a rogue remote client being able to | |||
| inflict even greater harm on the local network, which could impact | inflict even greater harm on the local network, which could impact the | |||
| the correct operation of all local clients on that network.</t> | correct operation of all local clients on that network.</t> | |||
| <?rfc needLines="28" ?> | ||||
| </section> | </section> | |||
| </section> | </section> | |||
| <section numbered="true" toc="include" removeInRFC="false" pn="section-10"> | ||||
| <section title="IANA Considerations"> | <name slugifiedName="name-iana-considerations">IANA Considerations</name> | |||
| <t>This document has no IANA Considerations.</t> | <t pn="section-10-1">This document has no IANA actions.</t> | |||
| </section> | ||||
| <section title="Acknowledgments"> | ||||
| <t>Thanks to Markus Stenberg for helping develop the policy | ||||
| regarding the four styles of unicast response according to what | ||||
| data is immediately available in the cache. | ||||
| Thanks to | ||||
| Anders Brandt, | ||||
| Ben Campbell, | ||||
| Tim Chown, | ||||
| Alissa Cooper, | ||||
| Spencer Dawkins, | ||||
| Ralph Droms, | ||||
| Joel Halpern, | ||||
| Ray Hunter, | ||||
| Joel Jaeggli, | ||||
| Warren Kumari, | ||||
| Ted Lemon, | ||||
| Alexey Melnikov, | ||||
| Kathleen Moriarty, | ||||
| Tom Pusateri, | ||||
| Eric Rescorla, | ||||
| Adam Roach, | ||||
| David Schinazi, | ||||
| Markus Stenberg, | ||||
| Dave Thaler, | ||||
| and Andrew Yourtchenko for their comments.</t> | ||||
| <?rfc needLines="33" ?> | ||||
| </section> | </section> | |||
| </middle> | </middle> | |||
| <back> | <back> | |||
| <references title="Normative References"> | <displayreference target="I-D.cheshire-dnssd-roadmap" to="ROADMAP"/> | |||
| <?rfc include="reference.RFC.1034" ?> | <displayreference target="I-D.sctl-service-registration" to="REG-PROT"/> | |||
| <?rfc include="reference.RFC.1035" ?> | <displayreference target="I-D.sctl-dnssd-mdns-relay" to="RELAY"/> | |||
| <?rfc include="reference.RFC.1918" ?> | <displayreference target="I-D.ietf-mboned-ieee802-mcast-problems" to="MCAST" | |||
| <?rfc include="reference.RFC.2119" ?> | /> | |||
| <?rfc include="reference.RFC.2308" ?> | <displayreference target="I-D.sekar-dns-ul" to="DNS-UL"/> | |||
| <?rfc include="reference.RFC.3629" ?> | <references pn="section-11"> | |||
| <?rfc include="reference.RFC.3927" ?> | <name slugifiedName="name-references">References</name> | |||
| <?rfc include="reference.RFC.4034" ?> | <references pn="section-11.1"> | |||
| <?rfc include="reference.RFC.4862" ?> | <name slugifiedName="name-normative-references">Normative References</na | |||
| <?rfc include="reference.RFC.5155" ?> | me> | |||
| <?rfc include="reference.RFC.5198" ?> | <reference anchor="RFC1034" target="https://www.rfc-editor.org/info/rfc1 | |||
| <?rfc include="reference.RFC.6762" ?> | 034" quoteTitle="true" derivedAnchor="RFC1034"> | |||
| <?rfc include="reference.RFC.6763" ?> | <front> | |||
| <?rfc include="reference.RFC.8174" ?> | <title>Domain names - concepts and facilities</title> | |||
| <?rfc include="reference.RFC.8490" ?> | <author initials="P.V." surname="Mockapetris" fullname="P.V. Mockape | |||
| tris"> | ||||
| <?rfc include="reference.I-D.ietf-dnssd-push" anchor='Push' | <organization showOnFrontPage="true"/> | |||
| ?> | </author> | |||
| <date year="1987" month="November"/> | ||||
| </references> | <abstract> | |||
| <t>This RFC is the revised basic definition of The Domain Name Sys | ||||
| <?rfc needLines="6" ?> | tem. It obsoletes RFC-882. This memo describes the domain style names and thei | |||
| <references title="Informative References"> | r used for host address look up and electronic mail forwarding. It discusses th | |||
| e clients and servers in the domain name system and the protocol used between th | ||||
| <?rfc include="reference.I-D.cheshire-dnssd-roadmap" | em.</t> | |||
| anchor='Roadmap' ?> | </abstract> | |||
| <?rfc include="reference.I-D.sekar-dns-ul" | </front> | |||
| anchor='DNS-UL' ?> | <seriesInfo name="STD" value="13"/> | |||
| <?rfc include="reference.I-D.sekar-dns-llq" anchor='LLQ' | <seriesInfo name="RFC" value="1034"/> | |||
| ?> | <seriesInfo name="DOI" value="10.17487/RFC1034"/> | |||
| <?rfc include="reference.I-D.sctl-service-registration" | </reference> | |||
| anchor='RegProt' ?> | <reference anchor="RFC1035" target="https://www.rfc-editor.org/info/rfc1 | |||
| <?rfc include="reference.I-D.sctl-dnssd-mdns-relay" anchor='Relay' | 035" quoteTitle="true" derivedAnchor="RFC1035"> | |||
| ?> | <front> | |||
| <?rfc include="reference.I-D.ietf-mboned-ieee802-mcast-problems" | <title>Domain names - implementation and specification</title> | |||
| anchor='Mcast' ?> | <author initials="P.V." surname="Mockapetris" fullname="P.V. Mockape | |||
| <?rfc include="reference.RFC.2132" ?> | tris"> | |||
| <?rfc include="reference.RFC.2136" ?> | <organization showOnFrontPage="true"/> | |||
| <?rfc include="reference.RFC.3007" ?> | </author> | |||
| <?rfc include="reference.RFC.3492" ?> | <date year="1987" month="November"/> | |||
| <?rfc include="reference.RFC.4193" ?> | <abstract> | |||
| <?rfc include="reference.RFC.6760" ?> | <t>This RFC is the revised specification of the protocol and forma | |||
| <?rfc include="reference.RFC.7558" ?> | t used in the implementation of the Domain Name System. It obsoletes RFC-883. T | |||
| <?rfc include="reference.RFC.7626" ?> | his memo documents the details of the domain name client - server communication. | |||
| <?rfc include="reference.RFC.7788" ?> | </t> | |||
| <?rfc include="reference.RFC.8375" ?> | </abstract> | |||
| </front> | ||||
| <reference anchor="ohp" target="https://github.com/sbyx/ohybridproxy/"> | <seriesInfo name="STD" value="13"/> | |||
| <front> | <seriesInfo name="RFC" value="1035"/> | |||
| <title>Discovery Proxy (Hybrid Proxy) implementation for | <seriesInfo name="DOI" value="10.17487/RFC1035"/> | |||
| OpenWrt</title> | </reference> | |||
| <author/> | <reference anchor="RFC1918" target="https://www.rfc-editor.org/info/rfc1 | |||
| <date/> | 918" quoteTitle="true" derivedAnchor="RFC1918"> | |||
| </front> | <front> | |||
| </reference> | <title>Address Allocation for Private Internets</title> | |||
| <author initials="Y." surname="Rekhter" fullname="Y. Rekhter"> | ||||
| <reference anchor="ZC"> | <organization showOnFrontPage="true"/> | |||
| <front> | </author> | |||
| <title>Zero Configuration Networking: The Definitive Guide</title> | <author initials="B." surname="Moskowitz" fullname="B. Moskowitz"> | |||
| <author initials="S." surname="Cheshire" fullname="Stuart | <organization showOnFrontPage="true"/> | |||
| Cheshire"/> | </author> | |||
| <author initials="D.H." surname="Steinberg" fullname="Daniel | <author initials="D." surname="Karrenberg" fullname="D. Karrenberg"> | |||
| H. Steinberg"/> | <organization showOnFrontPage="true"/> | |||
| <date year="2005" month="December"/> | </author> | |||
| </front> | <author initials="G. J." surname="de Groot" fullname="G. J. de Groot | |||
| <seriesInfo name="O'Reilly Media, Inc." value=""/> | "> | |||
| <seriesInfo name="ISBN" value="0-596-10100-7"/> | <organization showOnFrontPage="true"/> | |||
| </reference> | </author> | |||
| <author initials="E." surname="Lear" fullname="E. Lear"> | ||||
| <!-- Patterned after | <organization showOnFrontPage="true"/> | |||
| http://xml.resource.org/public/rfc/bibxml2/_reference.IEEE.802-3.1998.xml | </author> | |||
| --> | <date year="1996" month="February"/> | |||
| <reference anchor="IEEE-1Q" | <abstract> | |||
| target="http://standards.ieee.org/getieee802/download/802-1Q-201 | <t>This document describes address allocation for private internet | |||
| 4.pdf"> | s. This document specifies an Internet Best Current Practices for the Internet | |||
| <front> | Community, and requests discussion and suggestions for improvements.</t> | |||
| <title> | </abstract> | |||
| IEEE Standard for Local and metropolitan area networks -- | </front> | |||
| Bridges and Bridged Networks | <seriesInfo name="BCP" value="5"/> | |||
| </title> | <seriesInfo name="RFC" value="1918"/> | |||
| <author/> | <seriesInfo name="DOI" value="10.17487/RFC1918"/> | |||
| <date year="2014" month="November"/> | </reference> | |||
| </front> | <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2 | |||
| <seriesInfo name="IEEE" value="Std 802.1Q-2014"/> | 119" quoteTitle="true" derivedAnchor="RFC2119"> | |||
| </reference> | <front> | |||
| <title>Key words for use in RFCs to Indicate Requirement Levels</tit | ||||
| <reference anchor="IEEE-3" | le> | |||
| target="http://standards.ieee.org/getieee802/802.3.html"> | <author initials="S." surname="Bradner" fullname="S. Bradner"> | |||
| <front> | <organization showOnFrontPage="true"/> | |||
| <title> | </author> | |||
| Information technology - Telecommunications and information | <date year="1997" month="March"/> | |||
| exchange between systems - | <abstract> | |||
| Local and metropolitan area networks - Specific requirements - | <t>In many standards track documents several words are used to sig | |||
| Part 3: Carrier Sense Multiple Access with Collision Detection | nify the requirements in the specification. These words are often capitalized. | |||
| (CMSA/CD) | This document defines these words as they should be interpreted in IETF document | |||
| Access Method and Physical Layer Specifications | s. This document specifies an Internet Best Current Practices for the Internet | |||
| </title> | Community, and requests discussion and suggestions for improvements.</t> | |||
| <author/> | </abstract> | |||
| <date year="2008" month="December"/> | </front> | |||
| </front> | <seriesInfo name="BCP" value="14"/> | |||
| <seriesInfo name="IEEE" value="Std 802.3-2008"/> | <seriesInfo name="RFC" value="2119"/> | |||
| </reference> | <seriesInfo name="DOI" value="10.17487/RFC2119"/> | |||
| </reference> | ||||
| <reference anchor="IEEE-5"> | <reference anchor="RFC2308" target="https://www.rfc-editor.org/info/rfc2 | |||
| <front> | 308" quoteTitle="true" derivedAnchor="RFC2308"> | |||
| <title>Information technology - Telecommunications and information | <front> | |||
| exchange | <title>Negative Caching of DNS Queries (DNS NCACHE)</title> | |||
| between systems - Local and metropolitan area networks - Specific | <author initials="M." surname="Andrews" fullname="M. Andrews"> | |||
| requirements - | <organization showOnFrontPage="true"/> | |||
| Part 5: Token ring access method and physical layer | </author> | |||
| specification</title> | <date year="1998" month="March"/> | |||
| <author><organization>Institute of Electrical and Electronics | <abstract> | |||
| Engineers</organization></author> | <t>RFC1034 provided a description of how to cache negative respons | |||
| <date month="" year="1995" /> | es. It however had a fundamental flaw in that it did not allow a name server to | |||
| </front> | hand out those cached responses to other resolvers, thereby greatly reducing th | |||
| <seriesInfo name="IEEE" value="Std 802.5-1998"/> | e effect of the caching. This document addresses issues raise in the light of e | |||
| </reference> | xperience and replaces RFC1034 Section 4.3.4. [STANDARDS-TRACK]</t> | |||
| </abstract> | ||||
| <reference anchor="IEEE-11" | </front> | |||
| target="http://standards.ieee.org/getieee802/802.11.html"> | <seriesInfo name="RFC" value="2308"/> | |||
| <front> | <seriesInfo name="DOI" value="10.17487/RFC2308"/> | |||
| <title> | </reference> | |||
| Information technology - Telecommunications and information | <reference anchor="RFC3629" target="https://www.rfc-editor.org/info/rfc3 | |||
| exchange between systems - | 629" quoteTitle="true" derivedAnchor="RFC3629"> | |||
| Local and metropolitan area networks - Specific requirements - | <front> | |||
| Part 11: Wireless LAN Medium Access Control (MAC) and Physical | <title>UTF-8, a transformation format of ISO 10646</title> | |||
| Layer (PHY) Specifications | <author initials="F." surname="Yergeau" fullname="F. Yergeau"> | |||
| </title> | <organization showOnFrontPage="true"/> | |||
| <author/> | </author> | |||
| <date year="2007" month="June"/> | <date year="2003" month="November"/> | |||
| </front> | <abstract> | |||
| <seriesInfo name="IEEE" value="Std 802.11-2007"/> | <t>ISO/IEC 10646-1 defines a large character set called the Univer | |||
| </reference> | sal Character Set (UCS) which encompasses most of the world's writing systems. | |||
| The originally proposed encodings of the UCS, however, were not compatible with | ||||
| many current applications and protocols, and this has led to the development of | ||||
| UTF-8, the object of this memo. UTF-8 has the characteristic of preserving the | ||||
| full US-ASCII range, providing compatibility with file systems, parsers and othe | ||||
| r software that rely on US-ASCII values but are transparent to other values. Th | ||||
| is memo obsoletes and replaces RFC 2279.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="STD" value="63"/> | ||||
| <seriesInfo name="RFC" value="3629"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC3629"/> | ||||
| </reference> | ||||
| <reference anchor="RFC3927" target="https://www.rfc-editor.org/info/rfc3 | ||||
| 927" quoteTitle="true" derivedAnchor="RFC3927"> | ||||
| <front> | ||||
| <title>Dynamic Configuration of IPv4 Link-Local Addresses</title> | ||||
| <author initials="S." surname="Cheshire" fullname="S. Cheshire"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="B." surname="Aboba" fullname="B. Aboba"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="E." surname="Guttman" fullname="E. Guttman"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2005" month="May"/> | ||||
| <abstract> | ||||
| <t>To participate in wide-area IP networking, a host needs to be c | ||||
| onfigured with IP addresses for its interfaces, either manually by the user or a | ||||
| utomatically from a source on the network such as a Dynamic Host Configuration P | ||||
| rotocol (DHCP) server. Unfortunately, such address configuration information ma | ||||
| y not always be available. It is therefore beneficial for a host to be able to d | ||||
| epend on a useful subset of IP networking functions even when no address configu | ||||
| ration is available. This document describes how a host may automatically confi | ||||
| gure an interface with an IPv4 address within the 169.254/16 prefix that is vali | ||||
| d for communication with other devices connected to the same physical (or logica | ||||
| l) link.</t> | ||||
| <t>IPv4 Link-Local addresses are not suitable for communication wi | ||||
| th devices not directly connected to the same physical (or logical) link, and ar | ||||
| e only used where stable, routable addresses are not available (such as on ad ho | ||||
| c or isolated networks). This document does not recommend that IPv4 Link-Local | ||||
| addresses and routable addresses be configured simultaneously on the same interf | ||||
| ace. [STANDARDS-TRACK]</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="3927"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC3927"/> | ||||
| </reference> | ||||
| <reference anchor="RFC4034" target="https://www.rfc-editor.org/info/rfc4 | ||||
| 034" quoteTitle="true" derivedAnchor="RFC4034"> | ||||
| <front> | ||||
| <title>Resource Records for the DNS Security Extensions</title> | ||||
| <author initials="R." surname="Arends" fullname="R. Arends"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="R." surname="Austein" fullname="R. Austein"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="M." surname="Larson" fullname="M. Larson"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="D." surname="Massey" fullname="D. Massey"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="S." surname="Rose" fullname="S. Rose"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2005" month="March"/> | ||||
| <abstract> | ||||
| <t>This document is part of a family of documents that describe th | ||||
| e DNS Security Extensions (DNSSEC). The DNS Security Extensions are a collectio | ||||
| n of resource records and protocol modifications that provide source authenticat | ||||
| ion for the DNS. This document defines the public key (DNSKEY), delegation sign | ||||
| er (DS), resource record digital signature (RRSIG), and authenticated denial of | ||||
| existence (NSEC) resource records. The purpose and format of each resource reco | ||||
| rd is described in detail, and an example of each resource record is given. </t> | ||||
| <t> This document obsoletes RFC 2535 and incorporates changes from | ||||
| all updates to RFC 2535. [STANDARDS-TRACK]</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="4034"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC4034"/> | ||||
| </reference> | ||||
| <reference anchor="RFC4862" target="https://www.rfc-editor.org/info/rfc4 | ||||
| 862" quoteTitle="true" derivedAnchor="RFC4862"> | ||||
| <front> | ||||
| <title>IPv6 Stateless Address Autoconfiguration</title> | ||||
| <author initials="S." surname="Thomson" fullname="S. Thomson"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="T." surname="Narten" fullname="T. Narten"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="T." surname="Jinmei" fullname="T. Jinmei"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2007" month="September"/> | ||||
| <abstract> | ||||
| <t>This document specifies the steps a host takes in deciding how | ||||
| to autoconfigure its interfaces in IP version 6. The autoconfiguration process | ||||
| includes generating a link-local address, generating global addresses via statel | ||||
| ess address autoconfiguration, and the Duplicate Address Detection procedure to | ||||
| verify the uniqueness of the addresses on a link. [STANDARDS-TRACK]</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="4862"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC4862"/> | ||||
| </reference> | ||||
| <reference anchor="RFC5155" target="https://www.rfc-editor.org/info/rfc5 | ||||
| 155" quoteTitle="true" derivedAnchor="RFC5155"> | ||||
| <front> | ||||
| <title>DNS Security (DNSSEC) Hashed Authenticated Denial of Existenc | ||||
| e</title> | ||||
| <author initials="B." surname="Laurie" fullname="B. Laurie"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="G." surname="Sisson" fullname="G. Sisson"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="R." surname="Arends" fullname="R. Arends"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="D." surname="Blacka" fullname="D. Blacka"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2008" month="March"/> | ||||
| <abstract> | ||||
| <t>The Domain Name System Security (DNSSEC) Extensions introduced | ||||
| the NSEC resource record (RR) for authenticated denial of existence. This docume | ||||
| nt introduces an alternative resource record, NSEC3, which similarly provides au | ||||
| thenticated denial of existence. However, it also provides measures against zon | ||||
| e enumeration and permits gradual expansion of delegation-centric zones. [STAND | ||||
| ARDS-TRACK]</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="5155"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC5155"/> | ||||
| </reference> | ||||
| <reference anchor="RFC5198" target="https://www.rfc-editor.org/info/rfc5 | ||||
| 198" quoteTitle="true" derivedAnchor="RFC5198"> | ||||
| <front> | ||||
| <title>Unicode Format for Network Interchange</title> | ||||
| <author initials="J." surname="Klensin" fullname="J. Klensin"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="M." surname="Padlipsky" fullname="M. Padlipsky"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2008" month="March"/> | ||||
| <abstract> | ||||
| <t>The Internet today is in need of a standardized form for the tr | ||||
| ansmission of internationalized "text" information, paralleling the specificatio | ||||
| ns for the use of ASCII that date from the early days of the ARPANET. This docu | ||||
| ment specifies that format, using UTF-8 with normalization and specific line-end | ||||
| ing sequences. [STANDARDS-TRACK]</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="5198"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC5198"/> | ||||
| </reference> | ||||
| <reference anchor="RFC6762" target="https://www.rfc-editor.org/info/rfc6 | ||||
| 762" quoteTitle="true" derivedAnchor="RFC6762"> | ||||
| <front> | ||||
| <title>Multicast DNS</title> | ||||
| <author initials="S." surname="Cheshire" fullname="S. Cheshire"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="M." surname="Krochmal" fullname="M. Krochmal"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2013" month="February"/> | ||||
| <abstract> | ||||
| <t>As networked devices become smaller, more portable, and more ub | ||||
| iquitous, the ability to operate with less configured infrastructure is increasi | ||||
| ngly 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 convention | ||||
| al managed DNS server is useful.</t> | ||||
| <t>Multicast DNS (mDNS) provides the ability to perform DNS-like o | ||||
| perations on the local link in the absence of any conventional Unicast DNS serve | ||||
| r. In addition, Multicast DNS designates a portion of the DNS namespace to be f | ||||
| ree 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.</t> | ||||
| <t>The primary benefits of Multicast DNS names are that (i) they r | ||||
| equire little or no administration or configuration to set them up, (ii) they wo | ||||
| rk when no infrastructure is present, and (iii) they work during infrastructure | ||||
| failures.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="6762"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC6762"/> | ||||
| </reference> | ||||
| <reference anchor="RFC6763" target="https://www.rfc-editor.org/info/rfc6 | ||||
| 763" quoteTitle="true" derivedAnchor="RFC6763"> | ||||
| <front> | ||||
| <title>DNS-Based Service Discovery</title> | ||||
| <author initials="S." surname="Cheshire" fullname="S. Cheshire"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="M." surname="Krochmal" fullname="M. Krochmal"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2013" month="February"/> | ||||
| <abstract> | ||||
| <t>This document specifies how DNS resource records are named and | ||||
| structured to facilitate service discovery. Given a type of service that a clie | ||||
| nt is looking for, and a domain in which the client is looking for that service, | ||||
| this mechanism allows clients to discover a list of named instances of that des | ||||
| ired service, using standard DNS queries. This mechanism is referred to as DNS-b | ||||
| ased Service Discovery, or DNS-SD.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="6763"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC6763"/> | ||||
| </reference> | ||||
| <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8 | ||||
| 174" quoteTitle="true" derivedAnchor="RFC8174"> | ||||
| <front> | ||||
| <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</ti | ||||
| tle> | ||||
| <author initials="B." surname="Leiba" fullname="B. Leiba"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2017" month="May"/> | ||||
| <abstract> | ||||
| <t>RFC 2119 specifies common key words that may be used in protoco | ||||
| l specifications. This document aims to reduce the ambiguity by clarifying tha | ||||
| t only UPPERCASE usage of the key words have the defined special meanings.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="BCP" value="14"/> | ||||
| <seriesInfo name="RFC" value="8174"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8174"/> | ||||
| </reference> | ||||
| <reference anchor="RFC8490" target="https://www.rfc-editor.org/info/rfc8 | ||||
| 490" quoteTitle="true" derivedAnchor="RFC8490"> | ||||
| <front> | ||||
| <title>DNS Stateful Operations</title> | ||||
| <author initials="R." surname="Bellis" fullname="R. Bellis"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="S." surname="Cheshire" fullname="S. Cheshire"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="J." surname="Dickinson" fullname="J. Dickinson"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="S." surname="Dickinson" fullname="S. Dickinson"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="T." surname="Lemon" fullname="T. Lemon"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="T." surname="Pusateri" fullname="T. Pusateri"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2019" month="March"/> | ||||
| <abstract> | ||||
| <t>This document defines a new DNS OPCODE for DNS Stateful Operati | ||||
| ons (DSO). DSO messages communicate operations within persistent stateful sessi | ||||
| ons using Type Length Value (TLV) syntax. Three TLVs are defined that manage se | ||||
| ssion timeouts, termination, and encryption padding, and a framework is defined | ||||
| for extensions to enable new stateful operations. This document updates RFC 103 | ||||
| 5 by adding a new DNS header OPCODE that has both different message semantics an | ||||
| d a new result code. This document updates RFC 7766 by redefining a session, pr | ||||
| oviding new guidance on connection reuse, and providing a new mechanism for hand | ||||
| ling session idle timeouts.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="8490"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8490"/> | ||||
| </reference> | ||||
| <reference anchor="RFC8765" target="https://www.rfc-editor.org/info/rfc8 | ||||
| 765" quoteTitle="true" derivedAnchor="RFC8765"> | ||||
| <front> | ||||
| <title>DNS Push Notifications</title> | ||||
| <author initials="T" surname="Pusateri" fullname="Tom Pusateri"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="S" surname="Cheshire" fullname="Stuart Cheshire"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date month="June" year="2020"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="8765"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8765"/> | ||||
| </reference> | ||||
| </references> | ||||
| <references pn="section-11.2"> | ||||
| <name slugifiedName="name-informative-references">Informative References | ||||
| </name> | ||||
| <reference anchor="I-D.sekar-dns-ul" quoteTitle="true" target="https://t | ||||
| ools.ietf.org/html/draft-sekar-dns-ul-02" derivedAnchor="DNS-UL"> | ||||
| <front> | ||||
| <title>Dynamic DNS Update Leases</title> | ||||
| <author initials="S" surname="Cheshire" fullname="Stuart Cheshire"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="T" surname="Lemon" fullname="Ted Lemon"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date month="August" day="2" year="2018"/> | ||||
| <abstract> | ||||
| <t>This document proposes a method of extending Dynamic DNS Update | ||||
| to contain an update lease lifetime, allowing a server to garbage collect stale | ||||
| resource records.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="Internet-Draft" value="draft-sekar-dns-ul-02"/> | ||||
| <format type="TXT" target="http://www.ietf.org/internet-drafts/draft-s | ||||
| ekar-dns-ul-02.txt"/> | ||||
| <refcontent>Work in Progress</refcontent> | ||||
| </reference> | ||||
| <reference anchor="IEEE-1Q" target="https://ieeexplore.ieee.org/document | ||||
| /6991462" quoteTitle="true" derivedAnchor="IEEE-1Q"> | ||||
| <front> | ||||
| <title>IEEE Standard for Local and metropolitan area networks -- Bri | ||||
| dges and Bridged Networks</title> | ||||
| <author> | ||||
| <organization showOnFrontPage="true">IEEE</organization> | ||||
| </author> | ||||
| <date year="2014"/> | ||||
| </front> | ||||
| <seriesInfo name="IEEE Std" value="802.1Q-2014"/> | ||||
| <seriesInfo name="DOI" value="10.1109/IEEESTD.2014.6991462"/> | ||||
| </reference> | ||||
| <reference anchor="IEEE-3" target="https://ieeexplore.ieee.org/document/ | ||||
| 8457469" quoteTitle="true" derivedAnchor="IEEE-3"> | ||||
| <front> | ||||
| <title>IEEE Standard for Ethernet</title> | ||||
| <seriesInfo name="DOI" value="10.1109/IEEESTD.2018.8457469"/> | ||||
| <seriesInfo name="IEEE Std" value="802.3-2018"/> | ||||
| <author> | ||||
| <organization showOnFrontPage="true">IEEE</organization> | ||||
| </author> | ||||
| <date year="2008" month="December"/> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="IEEE-5" target="https://standards.ieee.org/standard/8 | ||||
| 02_5-1998.html" quoteTitle="true" derivedAnchor="IEEE-5"> | ||||
| <front> | ||||
| <title>Telecommunications and information exchange between systems - | ||||
| Local and metropolitan area networks - Part 5: Token ring access method and phy | ||||
| sical layer specifications</title> | ||||
| <seriesInfo name="IEEE Std" value="802.5-1998"/> | ||||
| <author> | ||||
| <organization showOnFrontPage="true">IEEE</organization> | ||||
| </author> | ||||
| <date year="1998"/> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="IEEE-11" target="https://standards.ieee.org/standard/ | ||||
| 802_11-2016.html" quoteTitle="true" derivedAnchor="IEEE-11"> | ||||
| <front> | ||||
| <title>Information technology - Telecommunications and information e | ||||
| xchange between systems - Local and metropolitan area networks - Specific requir | ||||
| ements - Part 11: Wireless LAN Medium Access Control (MAC) and Physical Layer (P | ||||
| HY) Specifications</title> | ||||
| <seriesInfo name="IEEE Std" value="802.11-2016"/> | ||||
| <author> | ||||
| <organization showOnFrontPage="true">IEEE</organization> | ||||
| </author> | ||||
| <date year="2016" month="December"/> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="I-D.ietf-mboned-ieee802-mcast-problems" quoteTitle="t | ||||
| rue" target="https://tools.ietf.org/html/draft-ietf-mboned-ieee802-mcast-problem | ||||
| s-11" derivedAnchor="MCAST"> | ||||
| <front> | ||||
| <title>Multicast Considerations over IEEE 802 Wireless Media</title> | ||||
| <author initials="C" surname="Perkins" fullname="Charles Perkins"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="M" surname="McBride" fullname="Mike McBride"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="D" surname="Stanley" fullname="Dorothy Stanley"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="W" surname="Kumari" fullname="Warren Kumari"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="J" surname="Zuniga" fullname="Juan Zuniga"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date month="December" day="11" year="2019"/> | ||||
| <abstract> | ||||
| <t>Well-known issues with multicast have prevented the deployment | ||||
| of multicast in 802.11 (wifi) and other local-area wireless environments. This | ||||
| document describes the problems of known limitations with wireless (primarily 80 | ||||
| 2.11) Layer-2 multicast. Also described are certain multicast enhancement featu | ||||
| res that have been specified by the IETF, and by IEEE 802, for wireless media, a | ||||
| s well as some operational choices that can be taken to improve the performance | ||||
| of the network. Finally, some recommendations are provided about the usage and | ||||
| combination of these features and operational choices.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="Internet-Draft" value="draft-ietf-mboned-ieee802-mca | ||||
| st-problems-11"/> | ||||
| <format type="TXT" target="http://www.ietf.org/internet-drafts/draft-i | ||||
| etf-mboned-ieee802-mcast-problems-11.txt"/> | ||||
| <refcontent>Work in Progress</refcontent> | ||||
| </reference> | ||||
| <reference anchor="OHP" target="https://github.com/sbyx/ohybridproxy/" q | ||||
| uoteTitle="true" derivedAnchor="OHP"> | ||||
| <front> | ||||
| <title>ohybridproxy - an mDNS/DNS hybrid-proxy based on mDNSResponde | ||||
| r</title> | ||||
| <author/> | ||||
| <date month="June" year="2017"/> | ||||
| </front> | ||||
| <refcontent>commit 464d6c9</refcontent> | ||||
| </reference> | ||||
| <reference anchor="I-D.sctl-service-registration" quoteTitle="true" targ | ||||
| et="https://tools.ietf.org/html/draft-sctl-service-registration-02" derivedAncho | ||||
| r="REG-PROT"> | ||||
| <front> | ||||
| <title>Service Registration Protocol for DNS-Based Service Discovery | ||||
| </title> | ||||
| <author initials="S" surname="Cheshire" fullname="Stuart Cheshire"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="T" surname="Lemon" fullname="Ted Lemon"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date month="July" day="15" year="2018"/> | ||||
| <abstract> | ||||
| <t>The DNS-SD Service Registration Protocol uses the standard DNS | ||||
| Update mechanism to enable DNS-Based Service Discovery using only unicast packet | ||||
| s. This eliminates the dependency on Multicast DNS as the foundation layer, whi | ||||
| ch greatly improves scalability and improves performance on networks where multi | ||||
| cast service is not an optimal choice, particularly 802.11 (Wi-Fi) and 802.15.4 | ||||
| (IoT) networks. DNS-SD Service registration uses public keys and SIG(0) to allow | ||||
| services to defend their registrations against attack.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="Internet-Draft" value="draft-sctl-service-registrati | ||||
| on-02"/> | ||||
| <format type="TXT" target="http://www.ietf.org/internet-drafts/draft-s | ||||
| ctl-service-registration-02.txt"/> | ||||
| <refcontent>Work in Progress</refcontent> | ||||
| </reference> | ||||
| <reference anchor="I-D.sctl-dnssd-mdns-relay" quoteTitle="true" target=" | ||||
| https://tools.ietf.org/html/draft-sctl-dnssd-mdns-relay-04" derivedAnchor="RELAY | ||||
| "> | ||||
| <front> | ||||
| <title>Multicast DNS Discovery Relay</title> | ||||
| <author initials="S" surname="Cheshire" fullname="Stuart Cheshire"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="T" surname="Lemon" fullname="Ted Lemon"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date month="March" day="21" year="2018"/> | ||||
| <abstract> | ||||
| <t>This document extends the specification of the Discovery Proxy | ||||
| for Multicast DNS-Based Service Discovery. It describes a lightweight relay mec | ||||
| hanism, a Discovery Relay, which allows Discovery Proxies to provide service on | ||||
| multicast links to which they are not directly attached.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="Internet-Draft" value="draft-sctl-dnssd-mdns-relay-0 | ||||
| 4"/> | ||||
| <format type="TXT" target="http://www.ietf.org/internet-drafts/draft-s | ||||
| ctl-dnssd-mdns-relay-04.txt"/> | ||||
| <refcontent>Work in Progress</refcontent> | ||||
| </reference> | ||||
| <reference anchor="RFC2132" target="https://www.rfc-editor.org/info/rfc2 | ||||
| 132" quoteTitle="true" derivedAnchor="RFC2132"> | ||||
| <front> | ||||
| <title>DHCP Options and BOOTP Vendor Extensions</title> | ||||
| <author initials="S." surname="Alexander" fullname="S. Alexander"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="R." surname="Droms" fullname="R. Droms"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="1997" month="March"/> | ||||
| <abstract> | ||||
| <t>This document specifies the current set of DHCP options. Futur | ||||
| e options will be specified in separate RFCs. The current list of valid options | ||||
| is also available in ftp://ftp.isi.edu/in-notes/iana/assignments. [STANDARDS-TR | ||||
| ACK]</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="2132"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC2132"/> | ||||
| </reference> | ||||
| <reference anchor="RFC2136" target="https://www.rfc-editor.org/info/rfc2 | ||||
| 136" quoteTitle="true" derivedAnchor="RFC2136"> | ||||
| <front> | ||||
| <title>Dynamic Updates in the Domain Name System (DNS UPDATE)</title | ||||
| > | ||||
| <author initials="P." surname="Vixie" fullname="P. Vixie" role="edit | ||||
| or"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="S." surname="Thomson" fullname="S. Thomson"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="Y." surname="Rekhter" fullname="Y. Rekhter"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="J." surname="Bound" fullname="J. Bound"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="1997" month="April"/> | ||||
| <abstract> | ||||
| <t>Using this specification of the UPDATE opcode, it is possible t | ||||
| o add or delete RRs or RRsets from a specified zone. Prerequisites are specifie | ||||
| d separately from update operations, and can specify a dependency upon either th | ||||
| e previous existence or nonexistence of an RRset, or the existence of a single R | ||||
| R. [STANDARDS-TRACK]</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="2136"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC2136"/> | ||||
| </reference> | ||||
| <reference anchor="RFC3007" target="https://www.rfc-editor.org/info/rfc3 | ||||
| 007" quoteTitle="true" derivedAnchor="RFC3007"> | ||||
| <front> | ||||
| <title>Secure Domain Name System (DNS) Dynamic Update</title> | ||||
| <author initials="B." surname="Wellington" fullname="B. Wellington"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2000" month="November"/> | ||||
| <abstract> | ||||
| <t>This document proposes a method for performing secure Domain Na | ||||
| me System (DNS) dynamic updates. [STANDARDS-TRACK]</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="3007"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC3007"/> | ||||
| </reference> | ||||
| <reference anchor="RFC3492" target="https://www.rfc-editor.org/info/rfc3 | ||||
| 492" quoteTitle="true" derivedAnchor="RFC3492"> | ||||
| <front> | ||||
| <title>Punycode: A Bootstring encoding of Unicode for Internationali | ||||
| zed Domain Names in Applications (IDNA)</title> | ||||
| <author initials="A." surname="Costello" fullname="A. Costello"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2003" month="March"/> | ||||
| <abstract> | ||||
| <t>Punycode is a simple and efficient transfer encoding syntax des | ||||
| igned for use with Internationalized Domain Names in Applications (IDNA). It un | ||||
| iquely and reversibly transforms a Unicode string into an ASCII string. ASCII c | ||||
| haracters in the Unicode string are represented literally, and non-ASCII charact | ||||
| ers are represented by ASCII characters that are allowed in host name labels (le | ||||
| tters, digits, and hyphens). This document defines a general algorithm called Bo | ||||
| otstring that allows a string of basic code points to uniquely represent any str | ||||
| ing of code points drawn from a larger set. Punycode is an instance of Bootstri | ||||
| ng that uses particular parameter values specified by this document, appropriate | ||||
| for IDNA. [STANDARDS-TRACK]</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="3492"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC3492"/> | ||||
| </reference> | ||||
| <reference anchor="RFC4193" target="https://www.rfc-editor.org/info/rfc4 | ||||
| 193" quoteTitle="true" derivedAnchor="RFC4193"> | ||||
| <front> | ||||
| <title>Unique Local IPv6 Unicast Addresses</title> | ||||
| <author initials="R." surname="Hinden" fullname="R. Hinden"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="B." surname="Haberman" fullname="B. Haberman"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2005" month="October"/> | ||||
| <abstract> | ||||
| <t>This document defines an IPv6 unicast address format that is gl | ||||
| obally unique and is intended for local communications, usually inside of a site | ||||
| . These addresses are not expected to be routable on the global Internet. [STAN | ||||
| DARDS-TRACK]</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="4193"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC4193"/> | ||||
| </reference> | ||||
| <reference anchor="RFC6760" target="https://www.rfc-editor.org/info/rfc6 | ||||
| 760" quoteTitle="true" derivedAnchor="RFC6760"> | ||||
| <front> | ||||
| <title>Requirements for a Protocol to Replace the AppleTalk Name Bin | ||||
| ding Protocol (NBP)</title> | ||||
| <author initials="S." surname="Cheshire" fullname="S. Cheshire"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="M." surname="Krochmal" fullname="M. Krochmal"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2013" month="February"/> | ||||
| <abstract> | ||||
| <t>One of the goals of the authors of Multicast DNS (mDNS) and DNS | ||||
| -Based Service Discovery (DNS-SD) was to retire AppleTalk and the AppleTalk Name | ||||
| Binding Protocol (NBP) and to replace them with an IP-based solution. This doc | ||||
| ument presents a brief overview of the capabilities of AppleTalk NBP and outline | ||||
| s the properties required of an IP-based replacement.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="6760"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC6760"/> | ||||
| </reference> | ||||
| <reference anchor="RFC7558" target="https://www.rfc-editor.org/info/rfc7 | ||||
| 558" quoteTitle="true" derivedAnchor="RFC7558"> | ||||
| <front> | ||||
| <title>Requirements for Scalable DNS-Based Service Discovery (DNS-SD | ||||
| ) / Multicast DNS (mDNS) Extensions</title> | ||||
| <author initials="K." surname="Lynn" fullname="K. Lynn"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="S." surname="Cheshire" fullname="S. Cheshire"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="M." surname="Blanchet" fullname="M. Blanchet"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="D." surname="Migault" fullname="D. Migault"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2015" month="July"/> | ||||
| <abstract> | ||||
| <t>DNS-based Service Discovery (DNS-SD) over Multicast DNS (mDNS) | ||||
| is widely used today for discovery and resolution of services and names on a loc | ||||
| al link, but there are use cases to extend DNS-SD/mDNS to enable service discove | ||||
| ry beyond the local link. This document provides a problem statement and a list | ||||
| of requirements for scalable DNS-SD.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="7558"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC7558"/> | ||||
| </reference> | ||||
| <reference anchor="RFC7626" target="https://www.rfc-editor.org/info/rfc7 | ||||
| 626" quoteTitle="true" derivedAnchor="RFC7626"> | ||||
| <front> | ||||
| <title>DNS Privacy Considerations</title> | ||||
| <author initials="S." surname="Bortzmeyer" fullname="S. Bortzmeyer"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2015" month="August"/> | ||||
| <abstract> | ||||
| <t>This document describes the privacy issues associated with the | ||||
| use of the DNS by Internet users. It is intended to be an analysis of the prese | ||||
| nt situation and does not prescribe solutions.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="7626"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC7626"/> | ||||
| </reference> | ||||
| <reference anchor="RFC7788" target="https://www.rfc-editor.org/info/rfc7 | ||||
| 788" quoteTitle="true" derivedAnchor="RFC7788"> | ||||
| <front> | ||||
| <title>Home Networking Control Protocol</title> | ||||
| <author initials="M." surname="Stenberg" fullname="M. Stenberg"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="S." surname="Barth" fullname="S. Barth"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="P." surname="Pfister" fullname="P. Pfister"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2016" month="April"/> | ||||
| <abstract> | ||||
| <t>This document describes the Home Networking Control Protocol (H | ||||
| NCP), an extensible configuration protocol, and a set of requirements for home n | ||||
| etwork devices. HNCP is described as a profile of and extension to the Distribu | ||||
| ted Node Consensus Protocol (DNCP). HNCP enables discovery of network borders, | ||||
| automated configuration of addresses, name resolution, service discovery, and th | ||||
| e use of any routing protocol that supports routing based on both the source and | ||||
| destination address.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="7788"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC7788"/> | ||||
| </reference> | ||||
| <reference anchor="RFC8375" target="https://www.rfc-editor.org/info/rfc8 | ||||
| 375" quoteTitle="true" derivedAnchor="RFC8375"> | ||||
| <front> | ||||
| <title>Special-Use Domain 'home.arpa.'</title> | ||||
| <author initials="P." surname="Pfister" fullname="P. Pfister"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="T." surname="Lemon" fullname="T. Lemon"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2018" month="May"/> | ||||
| <abstract> | ||||
| <t>This document specifies the behavior that is expected from the | ||||
| Domain Name System with regard to DNS queries for names ending with '.home.arpa. | ||||
| ' and designates this domain as a special-use domain name. 'home.arpa.' is desig | ||||
| nated for non-unique use in residential home networks. The Home Networking Cont | ||||
| rol Protocol (HNCP) is updated to use the 'home.arpa.' domain instead of '.home' | ||||
| .</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="8375"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8375"/> | ||||
| </reference> | ||||
| <reference anchor="RFC8764" target="https://www.rfc-editor.org/info/rfc8 | ||||
| 764" quoteTitle="true" derivedAnchor="RFC8764"> | ||||
| <front> | ||||
| <title>Apple's DNS Long-Lived Queries Protocol</title> | ||||
| <author initials="S" surname="Cheshire" fullname="Stuart Cheshire"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="M" surname="Krochmal" fullname="Marc Krochmal"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date month="June" year="2020"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="8764"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8764"/> | ||||
| </reference> | ||||
| <reference anchor="I-D.cheshire-dnssd-roadmap" quoteTitle="true" target= | ||||
| "https://tools.ietf.org/html/draft-cheshire-dnssd-roadmap-03" derivedAnchor="ROA | ||||
| DMAP"> | ||||
| <front> | ||||
| <title>Service Discovery Road Map</title> | ||||
| <author initials="S" surname="Cheshire" fullname="Stuart Cheshire"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date month="October" day="23" year="2018"/> | ||||
| <abstract> | ||||
| <t>Over the course of several years, a rich collection of technolo | ||||
| gies has developed around DNS-Based Service Discovery, described across multiple | ||||
| documents. This "Road Map" document gives an overview of how these related but | ||||
| separate technologies (and their documents) fit together, to facilitate service | ||||
| discovery in various environments.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="Internet-Draft" value="draft-cheshire-dnssd-roadmap- | ||||
| 03"/> | ||||
| <format type="TXT" target="http://www.ietf.org/internet-drafts/draft-c | ||||
| heshire-dnssd-roadmap-03.txt"/> | ||||
| <refcontent>Work in Progress</refcontent> | ||||
| </reference> | ||||
| <reference anchor="ZC" quoteTitle="true" derivedAnchor="ZC"> | ||||
| <front> | ||||
| <title>Zero Configuration Networking: The Definitive Guide</title> | ||||
| <seriesInfo name="ISBN" value="0-596-10100-7"/> | ||||
| <author initials="S." surname="Cheshire" fullname="Stuart | ||||
| Cheshire"/> | ||||
| <author initials="D.H." surname="Steinberg" fullname="Daniel | ||||
| H. Steinberg"/> | ||||
| <date year="2005" month="December"/> | ||||
| </front> | ||||
| <refcontent>O'Reilly Media, Inc.</refcontent> | ||||
| </reference> | ||||
| </references> | ||||
| </references> | </references> | |||
| <section anchor="implementation" numbered="true" toc="include" removeInRFC=" | ||||
| <?rfc needLines="40" ?> | false" pn="section-appendix.a"> | |||
| <section anchor="implementation" title="Implementation Status"> | <name slugifiedName="name-implementation-status">Implementation Status</na | |||
| <t>Some aspects of the mechanism specified in this document already | me> | |||
| <t pn="section-appendix.a-1">Some aspects of the mechanism specified in th | ||||
| is document already | ||||
| exist in | exist in | |||
| deployed software. Some aspects are new. This section outlines which | deployed software. Some aspects are new. This section outlines which | |||
| aspects | aspects | |||
| already exist and which are new.</t> | already exist and which are new.</t> | |||
| <section numbered="true" toc="include" removeInRFC="false" pn="section-a.1 | ||||
| <section title="Already Implemented and Deployed"> | "> | |||
| <t>Domain enumeration by the client (the | <name slugifiedName="name-already-implemented-and-dep">Already Implement | |||
| "b._dns-sd._udp" queries) is already implemented and deployed.</t> | ed and Deployed</name> | |||
| <t pn="section-a.1-1">Domain enumeration by the client | ||||
| <t>Unicast queries to the indicated discovery domain is already | ("b._dns-sd._udp.<zone>" queries) is already implemented and | |||
| deployed.</t> | ||||
| <t pn="section-a.1-2">Performing unicast queries to the indicated discov | ||||
| ery domain is | ||||
| already | ||||
| implemented and deployed.</t> | implemented and deployed.</t> | |||
| <t pn="section-a.1-3">These are implemented and deployed in Mac OS X 10. | ||||
| <t>These are implemented and deployed in Mac OS X 10.4 and later | 4 Tiger and later | |||
| (including all versions of Apple iOS, on all iPhone and iPads), | (including all versions of Apple iOS, on all models of iPhones, iPads, | |||
| Apple TVs and HomePods), | ||||
| in Bonjour for Windows, | in Bonjour for Windows, | |||
| and in Android 4.1 "Jelly Bean" (API Level 16) and later.</t> | and in Android 4.1 "Jelly Bean" (API Level 16) and later.</t> | |||
| <t pn="section-a.1-4">Domain enumeration and unicast querying have been | ||||
| <t>Domain enumeration and unicast querying have been | used for several years at IETF meetings to make terminal room | |||
| used for several years at IETF meetings to make Terminal Room | printers discoverable from outside the terminal room. When an IETF | |||
| printers discoverable from outside the Terminal room. When an IETF | attendee presses "Cmd‑P" on a Mac, or selects AirPrint on an iPad | |||
| attendee presses Cmd-P on a Mac, or selects AirPrint on an iPad | or iPhone, and the terminal room printers appear, it is because | |||
| or iPhone, and the Terminal room printers appear, that is because | the client is sending Unicast DNS queries to the IETF DNS servers. | |||
| the client is sending unicast DNS queries to the IETF DNS servers. | ||||
| A walk-through giving the details of this particular specific example | A walk-through giving the details of this particular specific example | |||
| is given in Appendix A of <xref target="Roadmap">the Roadmap | is given in <xref target="I-D.cheshire-dnssd-roadmap" sectionFormat="of" section="A" format="default" derivedLink="https://tools.ietf.org/html/draft-che shire-dnssd-roadmap-03#appendix-A" derivedContent="ROADMAP">the Roadmap | |||
| document</xref>.</t> | document</xref>.</t> | |||
| <t pn="section-a.1-5">The Long-Lived Query mechanism <xref target="RFC87 | ||||
| 64" format="default" sectionFormat="of" derivedContent="RFC8764"/> | ||||
| referred to in this specification exists and is deployed | ||||
| but was not standardized by the IETF. | ||||
| The IETF has developed a superior Long-Lived Query mechanism | ||||
| called DNS Push Notifications <xref target="RFC8765" format="default" se | ||||
| ctionFormat="of" derivedContent="RFC8765"/>, | ||||
| which is built on DNS Stateful Operations <xref target="RFC8490" format= | ||||
| "default" sectionFormat="of" derivedContent="RFC8490"/>. | ||||
| DNS Push Notifications is implemented and deployed in Mac OS X 10.15 | ||||
| and later, | ||||
| and iOS 13 and later.</t> | ||||
| </section> | </section> | |||
| <section numbered="true" toc="include" removeInRFC="false" pn="section-a.2 | ||||
| <section title="Already Implemented"> | "> | |||
| <name slugifiedName="name-already-implemented">Already Implemented</name | ||||
| <t>A minimal portable Discovery Proxy implementation has been produced | > | |||
| <t pn="section-a.2-1">A minimal portable Discovery Proxy implementation | ||||
| has been produced | ||||
| by | by | |||
| Markus Stenberg and Steven Barth, which runs on OS X and several Linux | Markus Stenberg and Steven Barth, which runs on OS X and several Linux | |||
| variants including OpenWrt <xref target="ohp"/>. | variants including OpenWrt <xref target="OHP" format="default" sectionFo rmat="of" derivedContent="OHP"/>. | |||
| It was demonstrated at the Berlin IETF in July 2013.</t> | It was demonstrated at the Berlin IETF in July 2013.</t> | |||
| <t pn="section-a.2-2">Tom Pusateri has an implementation that runs on an | ||||
| <t>Tom Pusateri has an implementation that runs on any Unix/Linux. | y Unix/Linux | |||
| It has a RESTful interface for management and an experimental demo CLI | system. It | |||
| and web interface.</t> | has a RESTful interface for management and an experimental demo | |||
| command-line interface (CLI) and web interface.</t> | ||||
| <t>Ted Lemon also has produced a portable implementation of Discovery | <t pn="section-a.2-3">Ted Lemon also has produced a portable implementat | |||
| ion of Discovery | ||||
| Proxy, | Proxy, | |||
| which is available in the mDNSResponder open source code.</t> | which is available in the mDNSResponder open source code.</t> | |||
| <t>The Long-Lived Query mechanism <xref target="LLQ"/> | ||||
| referred to in this specification exists and is deployed, | ||||
| but was not standardized by the IETF. | ||||
| The IETF has developed a superior Long-Lived Query mechanism | ||||
| called DNS Push Notifications <xref target="Push"/>, | ||||
| which is built on DNS Stateful Operations <xref target="RFC8490"/>. | ||||
| The pragmatic short-term deployment approach is for vendors | ||||
| to produce Discovery Proxies that implement both the deployed | ||||
| Long-Lived Query mechanism <xref target="LLQ"/> | ||||
| (for today's clients) and the new | ||||
| DNS Push Notifications mechanism <xref target="Push"/> | ||||
| as the preferred long-term direction.</t> | ||||
| </section> | </section> | |||
| <section numbered="true" toc="include" removeInRFC="false" pn="section-a.3 | ||||
| <section title="Partially Implemented"> | "> | |||
| <t>The current APIs make multiple domains visible to client | <name slugifiedName="name-partially-implemented">Partially Implemented</ | |||
| software, but most client UI today lumps all discovered services | name> | |||
| <t pn="section-a.3-1">At the time of writing, | ||||
| existing APIs make multiple domains visible to client software, | ||||
| but most client user interfaces lump all discovered services | ||||
| into a single flat list. This is largely a chicken-and-egg | into a single flat list. This is largely a chicken-and-egg | |||
| problem. Application writers were naturally reluctant to spend | problem. Application writers were naturally reluctant to spend | |||
| time writing domain-aware UI code when few customers today would | time writing domain-aware user interface code when few customers would | |||
| benefit from it. If Discovery Proxy deployment becomes common, then | benefit from it. If Discovery Proxy deployment becomes common, then | |||
| application writers will have a reason to provide better UI. | application writers will have a reason to provide a better user | |||
| Existing applications will work with the Discovery Proxy, but will | experience. | |||
| Existing applications will work with the Discovery Proxy but will | ||||
| show all services in a single flat list. Applications with | show all services in a single flat list. Applications with | |||
| improved UI will group services by domain.</t> | improved user interfaces will show services grouped by domain.</t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section numbered="false" toc="include" removeInRFC="false" pn="section-appe | ||||
| ndix.b"> | ||||
| <name slugifiedName="name-acknowledgments">Acknowledgments</name> | ||||
| <t pn="section-appendix.b-1">Thanks to <contact fullname="Markus Stenberg" | ||||
| /> for helping develop | ||||
| the policy | ||||
| regarding the four styles of unicast response according to what | ||||
| data is immediately available in the cache. | ||||
| Thanks to | ||||
| <contact fullname="Anders Brandt"/>, | ||||
| <contact fullname="Ben Campbell"/>, | ||||
| <contact fullname="Tim Chown"/>, | ||||
| <contact fullname="Alissa Cooper"/>, | ||||
| <contact fullname="Spencer Dawkins"/>, | ||||
| <contact fullname="Ralph Droms"/>, | ||||
| <contact fullname="Joel Halpern"/>, | ||||
| <contact fullname="Ray Hunter"/>, | ||||
| <contact fullname="Joel Jaeggli"/>, | ||||
| <contact fullname="Warren Kumari"/>, | ||||
| <contact fullname="Ted Lemon"/>, | ||||
| <contact fullname="Alexey Melnikov"/>, | ||||
| <contact fullname="Kathleen Moriarty"/>, | ||||
| <contact fullname="Tom Pusateri"/>, | ||||
| <contact fullname="Eric Rescorla"/>, | ||||
| <contact fullname="Adam Roach"/>, | ||||
| <contact fullname="David Schinazi"/>, | ||||
| <contact fullname="Markus Stenberg"/>, | ||||
| <contact fullname="Dave Thaler"/>, | ||||
| and <contact fullname="Andrew Yourtchenko"/> for their comments.</t> | ||||
| </section> | ||||
| <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc | ||||
| ="include" pn="section-appendix.c"> | ||||
| <name slugifiedName="name-authors-address">Author's Address</name> | ||||
| <author initials="S." surname="Cheshire" fullname="Stuart Cheshire"> | ||||
| <organization showOnFrontPage="true">Apple Inc.</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street>One Apple Park Way</street> | ||||
| <city>Cupertino</city> | ||||
| <region>California</region> | ||||
| <code>95014</code> | ||||
| <country>United States of America</country> | ||||
| </postal> | ||||
| <phone>+1 (408) 996-1010</phone> | ||||
| <email>cheshire@apple.com</email> | ||||
| </address> | ||||
| </author> | ||||
| </section> | ||||
| </back> | </back> | |||
| </rfc> | </rfc> | |||
| End of changes. 175 change blocks. | ||||
| 1642 lines changed or deleted | 2979 lines changed or added | |||
This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||