| rfc8765xml2.original.xml | rfc8765.xml | |||
|---|---|---|---|---|
| <?xml version="1.0" encoding="UTF-8"?> | <?xml version='1.0' encoding='utf-8'?> | |||
| <!-- This template is for creating an Internet Draft using xml2rfc, | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="std" conse | |||
| which is available here: http://xml.resource.org. --> | nsus="true" docName="draft-ietf-dnssd-push-25" indexInclude="true" ipr="trust200 | |||
| <!DOCTYPE rfc SYSTEM "rfc2629.dtd" [ | 902" number="8765" prepTime="2020-06-22T20:57:32" scripts="Common,Latin" sortRef | |||
| <!-- One method to get references from the online citation libraries. | s="true" submissionType="IETF" symRefs="true" tocDepth="4" tocInclude="true" xml | |||
| There has to be one entity for each item to be referenced. | :lang="en"> | |||
| An alternate method (rfc include) is described in the references. --> | <link href="https://datatracker.ietf.org/doc/draft-ietf-dnssd-push-25" rel="pr | |||
| ev"/> | ||||
| <!ENTITY RFC0020 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | <link href="https://dx.doi.org/10.17487/rfc8765" rel="alternate"/> | |||
| ence.RFC.0020.xml"> | <link href="urn:issn:2070-1721" rel="alternate"/> | |||
| <!ENTITY RFC0768 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | <front> | |||
| ence.RFC.0768.xml"> | <title abbrev="DNS Push Notifications">DNS Push Notifications</title> | |||
| <!ENTITY RFC0793 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | <seriesInfo name="RFC" value="8765" stream="IETF"/> | |||
| ence.RFC.0793.xml"> | <author fullname="Tom Pusateri" initials="T." surname="Pusateri"> | |||
| <!ENTITY RFC1034 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | <organization showOnFrontPage="true">Unaffiliated</organization> | |||
| ence.RFC.1034.xml"> | <address> | |||
| <!ENTITY RFC1035 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | <postal> | |||
| ence.RFC.1035.xml"> | <street/> | |||
| <!ENTITY RFC1123 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | <city>Raleigh</city> | |||
| ence.RFC.1123.xml"> | <region>NC</region> | |||
| <!ENTITY RFC2119 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | <code>27608</code> | |||
| ence.RFC.2119.xml"> | <country>United States of America</country> | |||
| <!ENTITY RFC2136 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | </postal> | |||
| ence.RFC.2136.xml"> | <phone>+1 919 867 1330</phone> | |||
| <!ENTITY RFC2181 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | <email>pusateri@bangj.com</email> | |||
| ence.RFC.2181.xml"> | </address> | |||
| <!ENTITY RFC2308 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | </author> | |||
| ence.RFC.2308.xml"> | <author fullname="Stuart Cheshire" initials="S." surname="Cheshire"> | |||
| <!ENTITY RFC3123 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | <organization showOnFrontPage="true">Apple Inc.</organization> | |||
| ence.RFC.3123.xml"> | <address> | |||
| <!ENTITY RFC2782 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | <postal> | |||
| ence.RFC.2782.xml"> | <street>One Apple Park Way</street> | |||
| <!ENTITY RFC4287 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | <city>Cupertino</city> | |||
| ence.RFC.4287.xml"> | <region>CA</region> | |||
| <!ENTITY RFC4953 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | <code>95014</code> | |||
| ence.RFC.4953.xml"> | <country>United States of America</country> | |||
| <!ENTITY RFC6066 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | </postal> | |||
| ence.RFC.6066.xml"> | <phone>+1 (408) 996-1010</phone> | |||
| <!ENTITY RFC6281 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | <email>cheshire@apple.com</email> | |||
| ence.RFC.6281.xml"> | </address> | |||
| <!ENTITY RFC6762 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | </author> | |||
| ence.RFC.6762.xml"> | <date month="06" year="2020"/> | |||
| <!ENTITY RFC6763 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | <area>INT</area> | |||
| ence.RFC.6763.xml"> | <workgroup>DNSSD</workgroup> | |||
| <!ENTITY RFC6824 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | <keyword>Push notification</keyword> | |||
| ence.RFC.6824.xml"> | <keyword>Asynchronous notification</keyword> | |||
| <!ENTITY RFC6886 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | <abstract pn="section-abstract"> | |||
| ence.RFC.6886.xml"> | <t pn="section-abstract-1">The Domain Name System (DNS) was designed to re | |||
| <!ENTITY RFC6887 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | turn matching records | |||
| ence.RFC.6887.xml"> | efficiently for queries for data that are relatively static. When those | |||
| <!ENTITY RFC6895 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | records change frequently, DNS is still efficient at returning the | |||
| ence.RFC.6895.xml"> | updated results when polled, as long as the polling rate is not too | |||
| <!ENTITY RFC7413 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | high. | |||
| ence.RFC.7413.xml"> | But, there exists no mechanism for a client to be asynchronously | |||
| <!ENTITY RFC7673 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | notified | |||
| ence.RFC.7673.xml"> | when these changes occur. This document defines a mechanism for a | |||
| <!ENTITY RFC7719 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | client to be notified of such changes to DNS records, called DNS Push | |||
| ence.RFC.7719.xml"> | Notifications.</t> | |||
| <!ENTITY RFC7766 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | </abstract> | |||
| ence.RFC.7766.xml"> | <boilerplate> | |||
| <!ENTITY RFC7858 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc= | |||
| ence.RFC.7858.xml"> | "exclude" pn="section-boilerplate.1"> | |||
| <!ENTITY RFC8010 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | <name slugifiedName="name-status-of-this-memo">Status of This Memo</name | |||
| ence.RFC.8010.xml"> | > | |||
| <!ENTITY RFC8011 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | <t pn="section-boilerplate.1-1"> | |||
| ence.RFC.8011.xml"> | This is an Internet Standards Track document. | |||
| <!ENTITY RFC8174 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | </t> | |||
| ence.RFC.8174.xml"> | <t pn="section-boilerplate.1-2"> | |||
| <!ENTITY RFC8310 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | This document is a product of the Internet Engineering Task Force | |||
| ence.RFC.8310.xml"> | (IETF). It represents the consensus of the IETF community. It has | |||
| <!ENTITY RFC8446 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | received public review and has been approved for publication by | |||
| ence.RFC.8446.xml"> | the Internet Engineering Steering Group (IESG). Further | |||
| <!ENTITY RFC8490 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | information on Internet Standards is available in Section 2 of | |||
| ence.RFC.8490.xml"> | RFC 7841. | |||
| <!ENTITY RFC8499 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | </t> | |||
| ence.RFC.8499.xml"> | <t pn="section-boilerplate.1-3"> | |||
| <!ENTITY I-D.ietf-tcpm-rack SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/b | Information about the current status of this document, any | |||
| ibxml3/reference.I-D.ietf-tcpm-rack.xml"> | errata, and how to provide feedback on it may be obtained at | |||
| ]> | <eref target="https://www.rfc-editor.org/info/rfc8765" brackets="non | |||
| <?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?> | e"/>. | |||
| <!-- used by XSLT processors --> | </t> | |||
| <!-- For a complete list and description of processing instructions (PIs), | </section> | |||
| please see http://xml.resource.org/authoring/README.html. --> | <section anchor="copyright" numbered="false" removeInRFC="false" toc="excl | |||
| <!-- Below are generally applicable Processing Instructions (PIs) that most I-Ds | ude" pn="section-boilerplate.2"> | |||
| might want to use. | <name slugifiedName="name-copyright-notice">Copyright Notice</name> | |||
| (Here they are set differently than their defaults in xml2rfc v1.32) --> | <t pn="section-boilerplate.2-1"> | |||
| <?rfc strict="yes" ?> | Copyright (c) 2020 IETF Trust and the persons identified as the | |||
| <!-- give errors regarding ID-nits and DTD validation --> | document authors. All rights reserved. | |||
| <!-- control the table of contents (ToC) --> | </t> | |||
| <?rfc toc="yes"?> | <t pn="section-boilerplate.2-2"> | |||
| <!-- generate a ToC --> | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| <?rfc tocdepth="4"?> | Provisions Relating to IETF Documents | |||
| <!-- the number of levels of subsections in ToC. default: 3 --> | (<eref target="https://trustee.ietf.org/license-info" brackets="none | |||
| <!-- control references --> | "/>) in effect on the date of | |||
| <?rfc symrefs="yes"?> | publication of this document. Please review these documents | |||
| <!-- use symbolic references tags, i.e, [RFC2119] instead of [1] --> | carefully, as they describe your rights and restrictions with | |||
| <?rfc sortrefs="yes" ?> | respect to this document. Code Components extracted from this | |||
| <!-- sort the reference entries alphabetically --> | document must include Simplified BSD License text as described in | |||
| <!-- control vertical white space | Section 4.e of the Trust Legal Provisions and are provided without | |||
| (using these PIs as follows is recommended by the RFC Editor) --> | warranty as described in the Simplified BSD License. | |||
| <?rfc compact="yes" ?> | </t> | |||
| <!-- do not start each main section on a new page --> | </section> | |||
| <?rfc subcompact="no" ?> | </boilerplate> | |||
| <!-- keep one blank line between list items --> | <toc> | |||
| <!-- end of list of popular I-D processing instructions --> | <section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" p | |||
| <rfc category="std" docName="draft-ietf-dnssd-push-25" ipr="trust200902"> | n="section-toc.1"> | |||
| <!-- category values: std, bcp, info, exp, and historic | <name slugifiedName="name-table-of-contents">Table of Contents</name> | |||
| ipr values: trust200902, noModificationTrust200902, noDerivativesTrust200902 | <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-to | |||
| , | c.1-1"> | |||
| or pre5378Trust200902 | <li pn="section-toc.1-1.1"> | |||
| you can add the attributes updates="NNNN" and obsoletes="NNNN" | <t keepWithNext="true" pn="section-toc.1-1.1.1"><xref derivedContent | |||
| they will automatically be output with "(if approved)" --> | ="1" format="counter" sectionFormat="of" target="section-1"/>. <xref derivedCon | |||
| tent="" format="title" sectionFormat="of" target="name-introduction">Introductio | ||||
| <!-- ***** FRONT MATTER ***** --> | n</xref></t> | |||
| <ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
| <front> | n-toc.1-1.1.2"> | |||
| <!-- The abbreviated title is used in the page header - it is only necessary | <li pn="section-toc.1-1.1.2.1"> | |||
| if the | <t keepWithNext="true" pn="section-toc.1-1.1.2.1.1"><xref derive | |||
| full title is longer than 39 characters --> | dContent="1.1" format="counter" sectionFormat="of" target="section-1.1"/>. <xre | |||
| f derivedContent="" format="title" sectionFormat="of" target="name-requirements- | ||||
| <title abbrev="DNS Push Notifications">DNS Push Notifications</title> | language">Requirements Language</xref></t> | |||
| </li> | ||||
| <!-- add 'role="editor"' below for the editors if appropriate --> | <li pn="section-toc.1-1.1.2.2"> | |||
| <t keepWithNext="true" pn="section-toc.1-1.1.2.2.1"><xref derive | ||||
| <!-- Another author who claims to be an editor --> | dContent="1.2" format="counter" sectionFormat="of" target="section-1.2"/>. <xre | |||
| f derivedContent="" format="title" sectionFormat="of" target="name-fatal-errors" | ||||
| <author fullname="Tom Pusateri" initials="T.J." surname="Pusateri"> | >Fatal Errors</xref></t> | |||
| <organization>Unaffiliated</organization> | </li> | |||
| </ul> | ||||
| <address> | </li> | |||
| <postal> | <li pn="section-toc.1-1.2"> | |||
| <street></street> | <t pn="section-toc.1-1.2.1"><xref derivedContent="2" format="counter | |||
| <!-- Reorder these if your country does things differently --> | " sectionFormat="of" target="section-2"/>. <xref derivedContent="" format="titl | |||
| <city>Raleigh</city> | e" sectionFormat="of" target="name-motivation">Motivation</xref></t> | |||
| <region>NC</region> | </li> | |||
| <code>27608</code> | <li pn="section-toc.1-1.3"> | |||
| <country>USA</country> | <t pn="section-toc.1-1.3.1"><xref derivedContent="3" format="counter | |||
| </postal> | " sectionFormat="of" target="section-3"/>. <xref derivedContent="" format="titl | |||
| <phone>+1 919 867 1330</phone> | e" sectionFormat="of" target="name-overview">Overview</xref></t> | |||
| <email>pusateri@bangj.com</email> | </li> | |||
| <!-- uri and facsimile elements may also be added --> | <li pn="section-toc.1-1.4"> | |||
| </address> | <t pn="section-toc.1-1.4.1"><xref derivedContent="4" format="counter | |||
| </author> | " sectionFormat="of" target="section-4"/>. <xref derivedContent="" format="titl | |||
| <author fullname="Stuart Cheshire" initials="S." surname="Cheshire"> | e" sectionFormat="of" target="name-state-considerations">State Considerations</x | |||
| <organization>Apple Inc.</organization> | ref></t> | |||
| </li> | ||||
| <address> | <li pn="section-toc.1-1.5"> | |||
| <postal> | <t pn="section-toc.1-1.5.1"><xref derivedContent="5" format="counter | |||
| <street>One Apple Park Way</street> | " sectionFormat="of" target="section-5"/>. <xref derivedContent="" format="titl | |||
| <!-- Reorder these if your country does things differently --> | e" sectionFormat="of" target="name-transport">Transport</xref></t> | |||
| <city>Cupertino</city> | </li> | |||
| <region>CA</region> | <li pn="section-toc.1-1.6"> | |||
| <code>95014</code> | <t pn="section-toc.1-1.6.1"><xref derivedContent="6" format="counter | |||
| <country>USA</country> | " sectionFormat="of" target="section-6"/>. <xref derivedContent="" format="titl | |||
| </postal> | e" sectionFormat="of" target="name-protocol-operation">Protocol Operation</xref> | |||
| <phone>+1 (408) 996-1010</phone> | </t> | |||
| <email>cheshire@apple.com</email> | <ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | |||
| <!-- uri and facsimile elements may also be added --> | n-toc.1-1.6.2"> | |||
| </address> | <li pn="section-toc.1-1.6.2.1"> | |||
| </author> | <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="" | ||||
| <date year='2019' month='October' day='13'/> | format="title" sectionFormat="of" target="name-discovery">Discovery</xref></t> | |||
| </li> | ||||
| <!-- If the month and year are both specified and are the current ones, xml2r | <li pn="section-toc.1-1.6.2.2"> | |||
| fc will fill | <t pn="section-toc.1-1.6.2.2.1"><xref derivedContent="6.2" forma | |||
| in the current day for you. If only the current year is specified, xml2r | t="counter" sectionFormat="of" target="section-6.2"/>. <xref derivedContent="" | |||
| fc will fill | format="title" sectionFormat="of" target="name-dns-push-notification-subsc">DNS | |||
| in the current day and month for you. If the year is not the current one | Push Notification SUBSCRIBE</xref></t> | |||
| , it is | <ul bare="true" empty="true" indent="2" spacing="compact" pn="se | |||
| necessary to specify at least a month (xml2rfc assumes day="1" if not sp | ction-toc.1-1.6.2.2.2"> | |||
| ecified for the | <li pn="section-toc.1-1.6.2.2.2.1"> | |||
| purpose of calculating the expiry date). With drafts it is normally suf | <t pn="section-toc.1-1.6.2.2.2.1.1"><xref derivedContent="6. | |||
| ficient to | 2.1" format="counter" sectionFormat="of" target="section-6.2.1"/>. <xref derive | |||
| specify just the year. --> | dContent="" format="title" sectionFormat="of" target="name-subscribe-request">SU | |||
| BSCRIBE Request</xref></t> | ||||
| <!-- Meta-data Declarations --> | </li> | |||
| <li pn="section-toc.1-1.6.2.2.2.2"> | ||||
| <area>DNSSD</area> | <t pn="section-toc.1-1.6.2.2.2.2.1"><xref derivedContent="6. | |||
| 2.2" format="counter" sectionFormat="of" target="section-6.2.2"/>. <xref derive | ||||
| <workgroup>Internet Engineering Task Force</workgroup> | dContent="" format="title" sectionFormat="of" target="name-subscribe-response">S | |||
| UBSCRIBE Response</xref></t> | ||||
| <!-- WG name at the upper left corner of the doc, | </li> | |||
| IETF is fine for individual submissions. | </ul> | |||
| If this element is not present, the default is "Network Working Group", | </li> | |||
| which is used by the RFC Editor as a nod to the history of the IETF. --> | <li pn="section-toc.1-1.6.2.3"> | |||
| <t pn="section-toc.1-1.6.2.3.1"><xref derivedContent="6.3" forma | ||||
| <keyword>dns update push notification</keyword> | t="counter" sectionFormat="of" target="section-6.3"/>. <xref derivedContent="" | |||
| format="title" sectionFormat="of" target="name-dns-push-notification-updat">DNS | ||||
| <!-- Keywords will be incorporated into HTML output | Push Notification Updates</xref></t> | |||
| files in a meta tag but they have no effect on text or nroff | <ul bare="true" empty="true" indent="2" spacing="compact" pn="se | |||
| output. If you submit your draft to the RFC Editor, the | ction-toc.1-1.6.2.3.2"> | |||
| keywords will be used for the search engine. --> | <li pn="section-toc.1-1.6.2.3.2.1"> | |||
| <t pn="section-toc.1-1.6.2.3.2.1.1"><xref derivedContent="6. | ||||
| <abstract> | 3.1" format="counter" sectionFormat="of" target="section-6.3.1"/>. <xref derive | |||
| <t>The Domain Name System (DNS) was designed to return matching records | dContent="" format="title" sectionFormat="of" target="name-push-message">PUSH Me | |||
| efficiently for queries for data that are relatively static. | ssage</xref></t> | |||
| When those records change frequently, DNS is still efficient at returning | </li> | |||
| the updated results when polled, as long as the polling rate is not too hig | </ul> | |||
| h. | </li> | |||
| But there exists no mechanism | <li pn="section-toc.1-1.6.2.4"> | |||
| for a client to be asynchronously notified when these changes occur. | <t pn="section-toc.1-1.6.2.4.1"><xref derivedContent="6.4" forma | |||
| This document defines a mechanism for a client to be notified | t="counter" sectionFormat="of" target="section-6.4"/>. <xref derivedContent="" | |||
| of such changes to DNS records, called DNS Push Notifications.</t> | format="title" sectionFormat="of" target="name-dns-push-notification-unsub">DNS | |||
| </abstract> | Push Notification UNSUBSCRIBE</xref></t> | |||
| </front> | <ul bare="true" empty="true" indent="2" spacing="compact" pn="se | |||
| ction-toc.1-1.6.2.4.2"> | ||||
| <middle> | <li pn="section-toc.1-1.6.2.4.2.1"> | |||
| <?rfc needLines="14" ?> | <t pn="section-toc.1-1.6.2.4.2.1.1"><xref derivedContent="6. | |||
| <section title="Introduction"> | 4.1" format="counter" sectionFormat="of" target="section-6.4.1"/>. <xref derive | |||
| dContent="" format="title" sectionFormat="of" target="name-unsubscribe-message"> | ||||
| <t>Domain Name System (DNS) records may be updated using <xref target="RFC2 | UNSUBSCRIBE Message</xref></t> | |||
| 136">DNS Update</xref>. | </li> | |||
| Other mechanisms such as a <xref target="DisProx">Discovery Proxy</xref> ca | </ul> | |||
| n also generate changes to a DNS zone. | </li> | |||
| This document specifies a protocol for DNS clients to subscribe to receive | <li pn="section-toc.1-1.6.2.5"> | |||
| asynchronous notifications of changes to RRsets of interest. It is immediately r | <t pn="section-toc.1-1.6.2.5.1"><xref derivedContent="6.5" forma | |||
| elevant in the case of <xref target="RFC6763">DNS Service Discovery</xref> but i | t="counter" sectionFormat="of" target="section-6.5"/>. <xref derivedContent="" | |||
| s not limited to that use case, and provides a general DNS mechanism for DNS rec | format="title" sectionFormat="of" target="name-dns-push-notification-recon">DNS | |||
| ord change notifications. Familiarity with the DNS protocol and DNS packet forma | Push Notification RECONFIRM</xref></t> | |||
| ts is assumed <xref target="RFC1034"/> <xref target="RFC1035"/> <xref target="RF | <ul bare="true" empty="true" indent="2" spacing="compact" pn="se | |||
| C6895"/>.</t> | ction-toc.1-1.6.2.5.2"> | |||
| <li pn="section-toc.1-1.6.2.5.2.1"> | ||||
| <?rfc needLines="7" ?> | <t pn="section-toc.1-1.6.2.5.2.1.1"><xref derivedContent="6. | |||
| <section title="Requirements Language"> | 5.1" format="counter" sectionFormat="of" target="section-6.5.1"/>. <xref derive | |||
| <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | dContent="" format="title" sectionFormat="of" target="name-reconfirm-message">RE | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", | CONFIRM Message</xref></t> | |||
| and "OPTIONAL" in this document are to be interpreted as described | </li> | |||
| in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | </ul> | |||
| when, and only when, they appear in all capitals, as shown here. | </li> | |||
| These words may also appear in this document in lower case as | <li pn="section-toc.1-1.6.2.6"> | |||
| plain English words, absent their normative meanings.</t> | <t pn="section-toc.1-1.6.2.6.1"><xref derivedContent="6.6" forma | |||
| </section> | t="counter" sectionFormat="of" target="section-6.6"/>. <xref derivedContent="" | |||
| format="title" sectionFormat="of" target="name-dns-stateful-operations-tlv">DNS | ||||
| <section title="Fatal Errors"> | Stateful Operations TLV Context Summary</xref></t> | |||
| <t>Certain invalid situations are described in this specification, | </li> | |||
| like a server sending a Push Notification subscription request to a clien | <li pn="section-toc.1-1.6.2.7"> | |||
| t, | <t pn="section-toc.1-1.6.2.7.1"><xref derivedContent="6.7" forma | |||
| or a client sending a Push Notification response to a server. | t="counter" sectionFormat="of" target="section-6.7"/>. <xref derivedContent="" | |||
| These should never occur with a correctly implemented client and server, | format="title" sectionFormat="of" target="name-client-initiated-terminatio">Clie | |||
| and if they do occur then they indicate a serious implementation error. | nt-Initiated Termination</xref></t> | |||
| In these extreme cases there is no reasonable expectation of a graceful r | </li> | |||
| ecovery, | <li pn="section-toc.1-1.6.2.8"> | |||
| and the recipient detecting the error should respond by unilaterally | <t pn="section-toc.1-1.6.2.8.1"><xref derivedContent="6.8" forma | |||
| aborting the session without regard for data loss. | t="counter" sectionFormat="of" target="section-6.8"/>. <xref derivedContent="" | |||
| Such cases are addressed by having an engineer investigate the | format="title" sectionFormat="of" target="name-client-fallback-to-polling">Clien | |||
| cause of the failure and fixing the problem in the software.</t> | t Fallback to Polling</xref></t> | |||
| </li> | ||||
| <t>Where this specification says "forcibly abort", it means | </ul> | |||
| sending a TCP RST to terminate the TCP connection, | </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-security-considerations">Security Considerati | ||||
| ons</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-security-services">Security Servi | ||||
| ces</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-tls-name-authentication">TLS Name | ||||
| Authentication</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.7.2.3"> | ||||
| <t pn="section-toc.1-1.7.2.3.1"><xref derivedContent="7.3" forma | ||||
| t="counter" sectionFormat="of" target="section-7.3"/>. <xref derivedContent="" | ||||
| format="title" sectionFormat="of" target="name-tls-early-data">TLS Early Data</x | ||||
| ref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.7.2.4"> | ||||
| <t pn="section-toc.1-1.7.2.4.1"><xref derivedContent="7.4" forma | ||||
| t="counter" sectionFormat="of" target="section-7.4"/>. <xref derivedContent="" | ||||
| format="title" sectionFormat="of" target="name-tls-session-resumption">TLS Sessi | ||||
| on Resumption</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-iana-considerations">IANA 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-references">References</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-normative-references">Normative R | ||||
| eferences</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-informative-references">Informati | ||||
| ve References</xref></t> | ||||
| </li> | ||||
| </ul> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.10"> | ||||
| <t pn="section-toc.1-1.10.1"><xref derivedContent="" format="none" s | ||||
| ectionFormat="of" target="section-appendix.a"/><xref derivedContent="" format="t | ||||
| itle" sectionFormat="of" target="name-acknowledgments">Acknowledgments</xref></t | ||||
| > | ||||
| </li> | ||||
| <li pn="section-toc.1-1.11"> | ||||
| <t pn="section-toc.1-1.11.1"><xref derivedContent="" format="none" s | ||||
| ectionFormat="of" target="section-appendix.b"/><xref derivedContent="" format="t | ||||
| itle" sectionFormat="of" target="name-authors-addresses">Authors' Addresses</xre | ||||
| f></t> | ||||
| </li> | ||||
| </ul> | ||||
| </section> | ||||
| </toc> | ||||
| </front> | ||||
| <middle> | ||||
| <section numbered="true" toc="include" removeInRFC="false" pn="section-1"> | ||||
| <name slugifiedName="name-introduction">Introduction</name> | ||||
| <t pn="section-1-1">Domain Name System (DNS) records may be updated using | ||||
| DNS Update | ||||
| <xref target="RFC2136" format="default" sectionFormat="of" derivedContent= | ||||
| "RFC2136"/>. Other mechanisms such | ||||
| as a Discovery Proxy <xref target="RFC8766" format="default" sectionFormat | ||||
| ="of" derivedContent="RFC8766"/> can | ||||
| also generate changes to a DNS zone. This document specifies a protocol | ||||
| for DNS clients to subscribe to receive asynchronous notifications of | ||||
| changes to RRsets of interest. It is immediately relevant in the case of | ||||
| DNS-based Service Discovery <xref target="RFC6763" format="default" sectio | ||||
| nFormat="of" derivedContent="RFC6763"/> | ||||
| but is not limited to that use case; it provides a general DNS | ||||
| mechanism for DNS record change notifications. Familiarity with the DNS | ||||
| protocol and DNS packet formats is assumed <xref target="RFC1034" format=" | ||||
| default" sectionFormat="of" derivedContent="RFC1034"/> <xref target="RFC1035" fo | ||||
| rmat="default" sectionFormat="of" derivedContent="RFC1035"/> <xref target="RFC68 | ||||
| 95" format="default" sectionFormat="of" derivedContent="RFC6895"/>.</t> | ||||
| <section numbered="true" toc="include" removeInRFC="false" pn="section-1.1 | ||||
| "> | ||||
| <name slugifiedName="name-requirements-language">Requirements Language</ | ||||
| name> | ||||
| <t pn="section-1.1-1"> | ||||
| The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | ||||
| "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14> | ||||
| ", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", | ||||
| "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | ||||
| "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are | ||||
| to be interpreted as | ||||
| described in BCP 14 <xref target="RFC2119" format="default" sectionFormat="o | ||||
| f" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" sectionFor | ||||
| mat="of" derivedContent="RFC8174"/> | ||||
| when, and only when, they appear in all capitals, as shown here. | ||||
| </t> | ||||
| </section> | ||||
| <section numbered="true" toc="include" removeInRFC="false" pn="section-1.2 | ||||
| "> | ||||
| <name slugifiedName="name-fatal-errors">Fatal Errors</name> | ||||
| <t pn="section-1.2-1">Certain invalid situations are described in this s | ||||
| pecification, | ||||
| such | ||||
| as a server sending a Push Notification subscription request to a | ||||
| client, or a client sending a Push Notification response to a server. | ||||
| These should never occur with a correctly implemented client and | ||||
| server, and if they do occur, then they indicate a serious | ||||
| implementation error. In these extreme cases, there is no reasonable | ||||
| expectation of a graceful recovery, and the recipient detecting the | ||||
| error should respond by unilaterally aborting the session without | ||||
| regard for data loss. Such cases are addressed by having an engineer | ||||
| investigate the cause of the failure and fixing the problem in the | ||||
| software.</t> | ||||
| <t pn="section-1.2-2">Where this specification says "forcibly abort", it | ||||
| means | ||||
| sending a TCP RST to terminate the TCP connection | ||||
| and the TLS session running over that TCP connection. | and the TLS session running over that TCP connection. | |||
| In the BSD Sockets API, this is achieved by setting the | In the BSD Sockets API, this is achieved by setting the | |||
| SO_LINGER option to zero before closing the socket.</t> | SO_LINGER option to zero before closing the socket.</t> | |||
| </section> | ||||
| <?rfc needLines="40" ?> | </section> | |||
| </section> | <section numbered="true" toc="include" removeInRFC="false" pn="section-2"> | |||
| </section> | <name slugifiedName="name-motivation">Motivation</name> | |||
| <t pn="section-2-1">As the domain name system continues to adapt to new us | ||||
| <section title="Motivation"> | es and changes | |||
| <t>As the domain name system continues to adapt to new uses and changes in | in deployment, polling has the potential to burden DNS servers at many | |||
| deployment, polling has the potential to burden DNS servers at many levels throu | levels throughout the network. Other network protocols have successfully | |||
| ghout the network. Other network protocols have successfully deployed a publish/ | deployed a publish/subscribe model following the Observer design pattern | |||
| subscribe model following the <xref target="obs">Observer design pattern</xref>. | <xref target="OBS" format="default" sectionFormat="of" derivedContent="OBS | |||
| <xref target="XEP0060">XMPP Publish-Subscribe</xref> and <xref target="RFC4 | "/>. Extensible Messaging and | |||
| 287">Atom</xref> are examples. While DNS servers are generally highly tuned and | Presence Protocol (XMPP) Publish-Subscribe | |||
| capable of a high rate of query/response traffic, adding a publish/subscribe mod | <xref target="XEP0060" format="default" sectionFormat="of" derivedContent= | |||
| el for tracking changes to DNS records can deliver more timely notification of c | "XEP0060"/> and Atom <xref target="RFC4287" format="default" sectionFormat="of" | |||
| hanges with reduced CPU usage and lower network traffic.</t> | derivedContent="RFC4287"/> are examples. While DNS | |||
| servers are generally highly tuned and capable of a high rate of | ||||
| <t><xref target="RFC6762">Multicast DNS</xref> implementations always liste | query/response traffic, adding a publish/subscribe model for tracking | |||
| n on a well known link-local | changes to DNS records can deliver more timely notifications of changes | |||
| IP multicast group address, and changes are sent to that multicast group ad | with reduced CPU usage and lower network traffic.</t> | |||
| dress for all group members to receive. | <t pn="section-2-2">The guiding design principle of DNS Push Notifications | |||
| Therefore, Multicast DNS already has asynchronous change notification capab | is that clients that choose to use DNS Push Notifications, | |||
| ility. | instead of repeated polling with DNS queries, | |||
| When <xref target="RFC6763">DNS Service Discovery</xref> is used across a w | will receive the same results as they could | |||
| ide area network using Unicast DNS | via sufficiently rapid polling, except more efficiently. | |||
| (possibly facilitated via a <xref target="DisProx">Discovery Proxy</xref>) | This means that the rules for | |||
| it would be beneficial to have an equivalent | which records match a given DNS Push Notification subscription are the | |||
| capability for Unicast DNS, to allow clients to learn about DNS record chan | same as the already established rules used to determine | |||
| ges in a timely manner without polling.</t> | which records match a given DNS query <xref target="RFC1034" format="defau | |||
| lt" sectionFormat="of" derivedContent="RFC1034"/>. | ||||
| <t>The <xref target="LLQ">DNS Long-Lived Queries (LLQ) mechanism</xref> is | For example, name comparisons are done in a case-insensitive manner, | |||
| an existing deployed solution to provide asynchronous change notifications, used | and a record of type CNAME in a zone matches any DNS TYPE in a query or | |||
| by Apple's <xref target="RFC6281">Back to My Mac</xref> service | subscription.</t> | |||
| introduced in Mac OS X 10.5 Leopard in 2007. | <t pn="section-2-3">Multicast DNS <xref target="RFC6762" format="default" | |||
| Back to My Mac was designed in an era when the data center operations staff | sectionFormat="of" derivedContent="RFC6762"/> | |||
| asserted that it was impossible for a server to handle large numbers of mostly- | implementations always listen on a well-known link-local IP multicast | |||
| idle TCP connections, so LLQ was defined as a UDP-based protocol, effectively re | group address, and changes are sent to that multicast group address for | |||
| plicating much of TCP's connection state management logic in user space, and cre | all group members to receive. Therefore, Multicast DNS already has | |||
| ating its own imitation of existing TCP features like the three-way handshake, f | asynchronous change notification capability. When DNS-based Service Disco | |||
| low control, and reliability.</t> | very | |||
| <xref target="RFC6763" format="default" sectionFormat="of" derivedContent= | ||||
| <t>This document builds on experience gained with the LLQ protocol, with an | "RFC6763"/> is used across a wide | |||
| improved design. | area network using Unicast DNS (possibly facilitated via a Discovery | |||
| Instead of using UDP, this specification uses | Proxy <xref target="RFC8766" format="default" sectionFormat="of" derivedCo | |||
| <xref target="RFC8490">DNS Stateful Operations (DSO)</xref> | ntent="RFC8766"/>), it would be | |||
| running over TLS over TCP, | beneficial to have an equivalent capability for Unicast DNS in order to | |||
| and therefore doesn't need to reinvent existing TCP functionality. | allow clients to learn about DNS record changes in a timely manner | |||
| Using TCP also gives long-lived low-traffic connections better longevity th | without polling.</t> | |||
| rough NAT gateways | <t pn="section-2-4">The DNS Long-Lived Queries (LLQ) mechanism <xref targe | |||
| without depending on the gateway to support | t="RFC8764" format="default" sectionFormat="of" derivedContent="RFC8764"/> is an | |||
| <xref target="RFC6886">NAT Port Mapping Protocol (NAT-PMP)</xref> or | existing deployed solution to provide | |||
| <xref target="RFC6887">Port Control Protocol (PCP)</xref>, or | asynchronous change notifications; it was used by Apple's Back to | |||
| resorting to excessive keepalive traffic.</t> | My Mac <xref target="RFC6281" format="default" sectionFormat="of" derivedC | |||
| ontent="RFC6281"/> service | ||||
| <?rfc needLines="9" ?> | introduced in Mac OS X 10.5 Leopard in 2007. Back to My Mac was | |||
| </section> | designed in an era when the data center operations staff asserted that | |||
| it was impossible for a server to handle large numbers of | ||||
| <section title="Overview"> | TCP connections, even if those connections carried | |||
| <t>A DNS Push Notification client subscribes for Push Notifications for a p | very little traffic and spent most of their time idle. | |||
| articular RRset by connecting to the appropriate Push Notification server for th | Consequently, LLQ was defined as a UDP-based protocol, effectively | |||
| at RRset, and sending DSO message(s) indicating the RRset(s) of interest. When t | replicating much of TCP's connection state management logic in user | |||
| he client loses interest in receiving further updates to these records, it unsub | space and creating its own imitation of existing TCP features like flow | |||
| scribes.</t> | control, reliability, and the three-way handshake.</t> | |||
| <t pn="section-2-5">This document builds on experience gained with the LLQ | ||||
| <t>The DNS Push Notification server for a DNS zone is any server capable | protocol, with | |||
| an improved design. Instead of using UDP, this specification uses DNS | ||||
| Stateful Operations (DSO) <xref target="RFC8490" format="default" sectionF | ||||
| ormat="of" derivedContent="RFC8490"/> running over TLS over TCP, and therefore | ||||
| doesn't need to reinvent existing TCP functionality. Using TCP also | ||||
| gives long-lived low-traffic connections better longevity through NAT | ||||
| gateways without depending on the gateway to support NAT Port Mapping | ||||
| Protocol (NAT-PMP) <xref target="RFC6886" format="default" sectionFormat=" | ||||
| of" derivedContent="RFC6886"/> or | ||||
| Port Control Protocol (PCP) <xref target="RFC6887" format="default" sectio | ||||
| nFormat="of" derivedContent="RFC6887"/>, or resorting to excessive keepalive | ||||
| traffic.</t> | ||||
| </section> | ||||
| <section numbered="true" toc="include" removeInRFC="false" pn="section-3"> | ||||
| <name slugifiedName="name-overview">Overview</name> | ||||
| <t pn="section-3-1">A DNS Push Notification client subscribes for Push Not | ||||
| ifications for | ||||
| a particular RRset by connecting to the appropriate Push Notification | ||||
| server for that RRset and sending DSO message(s) indicating the | ||||
| RRset(s) of interest. When the client loses interest in receiving | ||||
| further updates to these records, it unsubscribes.</t> | ||||
| <t pn="section-3-2">The DNS Push Notification server for a DNS zone is any | ||||
| server capable | ||||
| of generating the correct change notifications for a name. | of generating the correct change notifications for a name. | |||
| It may be a primary, secondary, or stealth name server <xref target="RFC771 | It may be a primary, secondary, or stealth name server <xref target="RFC849 | |||
| 9"/>.</t> | 9" format="default" sectionFormat="of" derivedContent="RFC8499"/>.</t> | |||
| <t pn="section-3-3">The <tt>_dns‑push‑tls._tcp.<zone></tt> SRV recor | ||||
| <t>The <spanx style="verb">_dns&nbhy;push&nbhy;tls._tcp.<zone></spanx | d for | |||
| > SRV record for a | a zone <bcp14>MAY</bcp14> reference the same target host and port as | |||
| zone MAY reference the same target host and port as that zone's | that zone's <tt>_dns‑update‑tls._tcp.<zone></tt> SRV | |||
| <spanx style="verb">_dns&nbhy;update&nbhy;tls._tcp.<zone></spanx> SRV | record. When the same target host and port is offered for both DNS | |||
| record. When the same target host and port is offered for both DNS Updates and | Updates and DNS Push Notifications, a client <bcp14>MAY</bcp14> use a | |||
| DNS Push Notifications, a client MAY use a single DSO session to that server for | single DSO session to that server for both DNS Updates and DNS Push | |||
| both DNS Updates and DNS Push Notification Subscriptions. | Notification subscriptions. DNS Updates and DNS Push Notifications may | |||
| DNS Updates and DNS Push Notifications may be handled on different ports on | be handled on different ports on the same target host, in which case | |||
| the same target host, in which case they are not considered to be the "same ser | they are not considered to be the "same server" for the purposes of this | |||
| ver" for the purposes of this specification, and communications with these two p | specification, and communications with these two ports are handled | |||
| orts are handled independently. | independently. Supporting DNS Updates and DNS Push Notifications on the | |||
| Supporting DNS Updates and DNS Push Notifications on the same server is OPT | same server is <bcp14>OPTIONAL</bcp14>. A DNS Push Notification server | |||
| IONAL. A DNS Push Notification server is not required to support DNS Update.</t> | is not required to support DNS Update.</t> | |||
| <t pn="section-3-4">Standard DNS Queries <bcp14>MAY</bcp14> be sent over a | ||||
| <t>Standard DNS Queries MAY be sent over a DNS Push Notification (i.e., DSO | DNS Push | |||
| ) | Notification (i.e., DSO) session. For any zone for which the server is | |||
| session. For any zone for which the server is authoritative, it | authoritative, it <bcp14>MUST</bcp14> respond authoritatively for | |||
| MUST respond authoritatively for queries for names falling within | queries for names falling within that zone (e.g., the | |||
| that zone (e.g., the <spanx style="verb">_dns&nbhy;push&nbhy;tls._tcp.<zon | <tt>_dns‑push‑tls._tcp.<zone></tt> SRV record) both for | |||
| e></spanx> SRV | normal DNS queries and for DNS Push Notification subscriptions. For | |||
| record) both for normal DNS queries and for DNS Push Notification subscriptio | names for which the server is acting as a recursive resolver (e.g., when | |||
| ns. | the server is the local recursive resolver) for any query for which it | |||
| For names for which the server is acting as a recursive | supports DNS Push Notification subscriptions, it <bcp14>MUST</bcp14> | |||
| resolver (e.g., when the server is the local recursive resolver) for any quer | also support standard queries.</t> | |||
| y | <t pn="section-3-5">DNS Push Notifications impose less load on the respond | |||
| for which it supports DNS Push Notification subscriptions, it MUST also suppo | ing server than | |||
| rt | rapid polling would, but Push Notifications do still have a | |||
| standard queries.</t> | cost. Therefore, DNS Push Notification clients <bcp14>MUST NOT</bcp14> | |||
| recklessly create an excessive number of Push Notification | ||||
| <t>DNS Push Notifications impose less load on the responding server than ra | subscriptions. Specifically:</t> | |||
| pid polling would, but Push Notifications do still have a cost, so DNS Push Noti | <ol type="(%c)" spacing="normal" start="1" pn="section-3-6"> | |||
| fication clients MUST NOT recklessly create an excessive number of Push Notifica | <li pn="section-3-6.1" derivedCounter="(a)">A subscription should only b | |||
| tion subscriptions. Specifically:</t> | e active when there is a valid reason to need | |||
| live data (for example, an on-screen display is currently showing the results | ||||
| <t>(a) A subscription should only be active when there is a valid reason to | to the user), and the subscription <bcp14>SHOULD</bcp14> be canceled as soon | |||
| need live data (for example, an on-screen display is currently showing the resu | as the need for that data ends (for example, when the user dismisses that | |||
| lts to the user) and the subscription SHOULD be cancelled as soon as the need fo | display). In the case of a device like a smartphone that, after some period | |||
| r that data ends (for example, when the user dismisses that display). In the cas | of inactivity, goes to sleep or otherwise darkens its screen, it should cancel | |||
| e of a device like a smartphone which, after some period of inactivity, goes to | its subscriptions when darkening the screen (since the user cannot see any | |||
| sleep or otherwise darkens its screen, it should cancel its subscriptions when d | changes on the display anyway) and reinstate its subscriptions when | |||
| arkening the screen (since the user cannot see any changes on the display anyway | reawakening from display sleep. | |||
| ) and reinstate its subscriptions when re-awakening from display sleep.</t> | </li> | |||
| <li pn="section-3-6.2" derivedCounter="(b)">A DNS Push Notification clie | ||||
| <t>(b) A DNS Push Notification client SHOULD NOT routinely keep a DNS Push | nt <bcp14>SHOULD NOT</bcp14> routinely keep a | |||
| Notification subscription active 24 hours a day, 7 days a week, just to keep a l | DNS Push Notification subscription active 24 hours a day, 7 days a week, just | |||
| ist in memory up to date so that if the user does choose to bring up an on-scree | to keep a list in memory up to date so that if the user does choose to bring | |||
| n display of that data, it can be displayed really fast. DNS Push Notifications | up an on-screen display of that data, it can be displayed really fast. DNS | |||
| are designed to be fast enough that there is no need to pre-load a "warm" list i | Push Notifications are designed to be fast enough that there is no need to | |||
| n memory just in case it might be needed later.</t> | pre-load a "warm" list in memory just in case it might be needed later. | |||
| </li> | ||||
| <t>Generally, as described in the <xref target="RFC8490">DNS Stateful Opera | </ol> | |||
| tions specification</xref>, a client must not keep a DSO session to a server ope | <t pn="section-3-7">Generally, as described in the DNS Stateful Operations | |||
| n indefinitely if it has no subscriptions (or other operations) active on that s | specification | |||
| ession. A client may close a DSO session immediately it becomes idle, and then i | <xref target="RFC8490" format="default" sectionFormat="of" derivedContent= | |||
| f needed in the future, open a new session when required. Alternatively, a clien | "RFC8490"/>, a client | |||
| t may speculatively keep an idle DSO session open for some time, subject to the | must not keep a DSO session to a server open indefinitely if it has no | |||
| constraint that it must not keep a session open that has been idle for more than | subscriptions (or other operations) active on that session. A client | |||
| the session's idle timeout (15 seconds by default) <xref target="RFC8490"/>.</t | should begin closing a DSO session immediately after it becomes idle, | |||
| > | and then, if needed in | |||
| the future, open a new session when required. Alternatively, a client | ||||
| <t>Note that a DSO session that has an active DNS Push Notification subscri | may speculatively keep an idle DSO session open for some time, subject | |||
| ption is not considered idle, | to the constraint that it must not keep a session open that has been | |||
| even if there is no traffic flowing for an extended period of time. | idle for more than the session's idle timeout (15 seconds by default) | |||
| In this case the DSO inactivity timeout does not apply, because the session | <xref target="RFC8490" format="default" sectionFormat="of" derivedContent= | |||
| is not inactive, | "RFC8490"/>.</t> | |||
| but the keepalive interval does still apply, to ensure generation of | <t pn="section-3-8">Note that a DSO session that has an active DNS Push No | |||
| sufficient messages to maintain state in middleboxes (such at NAT gateways | tification | |||
| or firewalls) | subscription is not considered idle, even if there is no traffic flowing | |||
| and for the client and server to periodically verify that they still have c | for an extended period of time. In this case, the DSO inactivity | |||
| onnectivity to each other. | timeout does not apply, because the session is not inactive, but the | |||
| This is described in Section 6.2 of the <xref target="RFC8490">DSO specific | keepalive interval does still apply, to ensure the generation of | |||
| ation</xref>.</t> | sufficient messages to maintain state in middleboxes (such at NAT | |||
| gateways or firewalls) and for the client and server to periodically | ||||
| <?rfc needLines="14" ?> | verify that they still have connectivity to each other. This is | |||
| </section> | described in <xref target="RFC8490" sectionFormat="of" section="6.2" forma | |||
| t="default" derivedLink="https://rfc-editor.org/rfc/rfc8490#section-6.2" derived | ||||
| <section title="State Considerations"> | Content="RFC8490">the DSO specification</xref>.</t> | |||
| <t>Each DNS Push Notification server is capable of handling some finite | </section> | |||
| <section numbered="true" toc="include" removeInRFC="false" pn="section-4"> | ||||
| <name slugifiedName="name-state-considerations">State Considerations</name | ||||
| > | ||||
| <t pn="section-4-1">Each DNS Push Notification server is capable of handli | ||||
| ng some finite | ||||
| number of Push Notification subscriptions. This number will vary from | number of Push Notification subscriptions. This number will vary from | |||
| server to server and is based on physical machine characteristics, | server to server and is based on physical machine characteristics, | |||
| network bandwidth, and operating system resource allocation. After a | network capacity, and operating system resource allocation. After a | |||
| client establishes a session to a DNS server, each subscription is | client establishes a session to a DNS server, each subscription is | |||
| individually accepted or rejected. Servers may employ various techniques | individually accepted or rejected. Servers may employ various techniques | |||
| to limit subscriptions to a manageable level. Correspondingly, the client | to limit subscriptions to a manageable level. Correspondingly, the client | |||
| is free to establish simultaneous sessions to alternate DNS servers that | is free to establish simultaneous sessions to alternate DNS servers that | |||
| support DNS Push Notifications for the zone and distribute subscriptions | support DNS Push Notifications for the zone and distribute subscriptions | |||
| at the client's discretion. In this way, both clients and servers can | at the client's discretion. In this way, both clients and servers can | |||
| react to resource constraints.</t> | react to resource constraints.</t> | |||
| <?rfc needLines="35" ?> | </section> | |||
| </section> | <section numbered="true" toc="include" removeInRFC="false" pn="section-5"> | |||
| <name slugifiedName="name-transport">Transport</name> | ||||
| <section title="Transport"> | <t pn="section-5-1">Other DNS operations like DNS Update <xref target="RFC | |||
| <t>Other DNS operations like <xref target="RFC2136">DNS Update</xref> MAY u | 2136" format="default" sectionFormat="of" derivedContent="RFC2136"/> <bcp14>MAY< | |||
| se either User Datagram Protocol <xref target="RFC0768">(UDP)</xref> or Transmis | /bcp14> use either DNS over User | |||
| sion Control Protocol <xref target="RFC0793">(TCP)</xref> as the transport proto | Datagram | |||
| col, in keeping with the historical precedent that DNS queries must first be sen | Protocol (UDP) <xref target="RFC0768" format="default" sectionFormat="of" | |||
| t over UDP <xref target="RFC1123"/>. This requirement to use UDP has subsequentl | derivedContent="RFC0768"/> or | |||
| y been relaxed <xref target="RFC7766"/>.</t> | DNS over Transmission Control Protocol (TCP) <xref target="RFC0793" format | |||
| ="default" sectionFormat="of" derivedContent="RFC0793"/> as the transport protoc | ||||
| <t>In keeping with the more recent precedent, DNS Push Notification is defi | ol, provided they follow | |||
| ned only for TCP. | the historical precedent that DNS queries must first be sent using DNS | |||
| DNS Push Notification clients MUST use | over UDP | |||
| <xref target="RFC8490">DNS Stateful Operations</xref> | and only switch to DNS over TCP if needed <xref target="RFC1123" format="d | |||
| running over TLS over TCP <xref target="RFC7858"/>.</t> | efault" sectionFormat="of" derivedContent="RFC1123"/>. | |||
| This requirement to prefer UDP | ||||
| <t>Connection setup over TCP ensures return reachability | has subsequently been relaxed <xref target="RFC7766" format="default" sect | |||
| and alleviates concerns of state overload at the server, | ionFormat="of" derivedContent="RFC7766"/>.</t> | |||
| which is a potential problem with connectionless protocols, | <t pn="section-5-2">In keeping with the more recent precedent, DNS Push No | |||
| which can be more vulnerable to being exploited by attackers using spoofed | tification is | |||
| source addresses. | defined only for TCP. | |||
| All subscribers are guaranteed to be reachable by the server by virtue of t | DNS Push Notification clients <bcp14>MUST</bcp14> use | |||
| he TCP three-way handshake. | DNS Stateful Operations <xref target="RFC8490" format="default" sectionForm | |||
| Flooding attacks are possible with any protocol, and a benefit of TCP is th | at="of" derivedContent="RFC8490"/> | |||
| at there are already established industry best practices to guard against SYN fl | running over TLS over TCP <xref target="RFC7858" format="default" sectionFo | |||
| ooding and similar attacks <xref target="SYN"/> <xref target="RFC4953"/>.</t> | rmat="of" derivedContent="RFC7858"/>.</t> | |||
| <t pn="section-5-3"> | ||||
| <t>Use of TCP also allows DNS Push Notifications to take advantage of curre | Connection setup over TCP ensures return reachability and alleviates concerns | |||
| nt and future developments in TCP, such as | of state overload at the server, a potential problem with connectionless | |||
| <xref target="RFC6824">Multipath TCP (MPTCP)</xref>, | protocols, which can be more vulnerable to being exploited by attackers using | |||
| <xref target="RFC7413">TCP Fast Open (TFO)</xref>, | spoofed source addresses. | |||
| <xref target="I-D.ietf-tcpm-rack">the TCP RACK fast loss detection algorith | ||||
| m</xref>, | ||||
| and so on.</t> | ||||
| <t>Transport Layer Security <xref target="RFC8446">(TLS)</xref> is well und | ||||
| erstood, and used by many application-layer protocols running over TCP. TLS is d | ||||
| esigned to prevent eavesdropping, tampering, and message forgery. TLS is REQUIRE | ||||
| D for every connection between a client subscriber and server in this protocol s | ||||
| pecification. Additional security measures such as client authentication during | ||||
| TLS negotiation may also be employed to increase the trust relationship between | ||||
| client and server.</t> | ||||
| <?rfc needLines="25" ?> | ||||
| </section> | ||||
| <section title="Protocol Operation"> | ||||
| <t>The DNS Push Notification protocol is a session-oriented protocol, and m | ||||
| akes use of | ||||
| <xref target="RFC8490">DNS Stateful Operations (DSO)</xref>.</t> | ||||
| <t>For details of the DSO message format refer to the | All subscribers are guaranteed to be reachable by the server by virtue of | |||
| <xref target="RFC8490">DNS Stateful Oper-ations specification</xref>. | the TCP three-way handshake. Flooding attacks are possible with any | |||
| protocol, and a benefit of TCP is that there are already established | ||||
| industry best practices to guard against SYN flooding and similar attacks | ||||
| <xref target="SYN" format="default" sectionFormat="of" derivedContent="SYN" | ||||
| /> <xref target="RFC4953" format="default" sectionFormat="of" derivedContent="RF | ||||
| C4953"/>.</t> | ||||
| <t pn="section-5-4">Use of TCP also allows DNS Push Notifications to take | ||||
| advantage of | ||||
| current and future developments in TCP such as Multipath TCP (MPTCP) | ||||
| <xref target="RFC8684" format="default" sectionFormat="of" derivedContent= | ||||
| "RFC8684"/>, TCP Fast Open (TFO) | ||||
| <xref target="RFC7413" format="default" sectionFormat="of" derivedContent= | ||||
| "RFC7413"/>, the TCP RACK fast loss | ||||
| detection algorithm <xref target="I-D.ietf-tcpm-rack" format="default" sec | ||||
| tionFormat="of" derivedContent="TCPRACK"/>, and so on.</t> | ||||
| <t pn="section-5-5">Transport Layer Security (TLS) <xref target="RFC8446" | ||||
| format="default" sectionFormat="of" derivedContent="RFC8446"/> is well understoo | ||||
| d and is used by many | ||||
| application-layer protocols running over TCP. TLS is designed to prevent | ||||
| eavesdropping, tampering, and message forgery. TLS is | ||||
| <bcp14>REQUIRED</bcp14> for every connection between a client subscriber | ||||
| and server in this protocol specification. Additional security measures | ||||
| such as client authentication during TLS negotiation may also be | ||||
| employed to increase the trust relationship between client and | ||||
| server.</t> | ||||
| </section> | ||||
| <section numbered="true" toc="include" removeInRFC="false" pn="section-6"> | ||||
| <name slugifiedName="name-protocol-operation">Protocol Operation</name> | ||||
| <t pn="section-6-1">The DNS Push Notification protocol is a session-orient | ||||
| ed protocol and | ||||
| makes use of | ||||
| DNS Stateful Operations (DSO) <xref target="RFC8490" format="default" secti | ||||
| onFormat="of" derivedContent="RFC8490"/>.</t> | ||||
| <t pn="section-6-2">For details of the DSO message format, refer to the | ||||
| DNS Stateful Operations specification <xref target="RFC8490" format="defaul | ||||
| t" sectionFormat="of" derivedContent="RFC8490"/>. | ||||
| Those details are not repeated here.</t> | Those details are not repeated here.</t> | |||
| <t pn="section-6-3">DNS Push Notification clients and servers <bcp14>MUST< | ||||
| <t>DNS Push Notification clients and servers MUST support DSO. | /bcp14> support | |||
| DSO. | ||||
| A single server can support DNS Queries, DNS Updates, and DNS Push | A single server can support DNS Queries, DNS Updates, and DNS Push | |||
| Notifications (using DSO) on the same TCP port.</t> | Notifications (using DSO) on the same TCP port.</t> | |||
| <t pn="section-6-4">A DNS Push Notification exchange begins with the clien | ||||
| <t>A DNS Push Notification exchange begins with the client discovering the | t discovering | |||
| appropriate server, | the appropriate server, using the procedure described in <xref target="dis | |||
| using the procedure described in <xref target="discovery"/>, and then makin | covery" format="default" sectionFormat="of" derivedContent="Section 6.1"/>, and | |||
| g a TLS/TCP connection to it.</t> | then making a TLS/TCP | |||
| connection to it.</t> | ||||
| <t>A typical DNS Push Notification client will immediately issue a DSO | <t pn="section-6-5">After making the TLS/TCP connection to the server, | |||
| Keepalive operation to request a session timeout and/or keepalive interval | a typical DNS Push Notification client will then immediately issue a DSO | |||
| Keepalive operation to establish the DSO session | ||||
| and request a session timeout and/or keepalive interval | ||||
| longer than the 15-second default values, but this is not required. | longer than the 15-second default values, but this is not required. | |||
| A DNS Push Notification client MAY issue other requests on the | A DNS Push Notification client <bcp14>MAY</bcp14> issue other requests on | |||
| the | ||||
| session first, and only issue a DSO Keepalive | session first, and only issue a DSO Keepalive | |||
| operation later if it determines that to be necessary. | operation later if it determines that to be necessary. | |||
| Sending either a DSO Keepalive operation or a Push Notification | Sending either a DSO Keepalive operation or a Push Notification | |||
| subscription request over the TLS/TCP connection to the server signals the | subscription request over the TLS/TCP connection to the server signals | |||
| the | ||||
| client's support of DSO and serves to establish a DSO session.</t> | client's support of DSO and serves to establish a DSO session.</t> | |||
| <t pn="section-6-6">In accordance with the current set of active subscript | ||||
| <t>In accordance with the current set of active subscriptions, | ions, | |||
| the server sends relevant asynchronous Push Notifications to | the server sends relevant asynchronous Push Notifications to | |||
| the client. Note that a client MUST be prepared to receive | the client. Note that a client <bcp14>MUST</bcp14> be prepared to receive | |||
| (and silently ignore) Push Notifications for subscriptions it | (and silently ignore) Push Notifications for subscriptions it | |||
| has previously removed, since there is no way to prevent the | has previously removed, since there is no way to prevent the | |||
| situation where a Push Notification is in flight from server | situation where a Push Notification is in flight from server | |||
| to client while the client's UNSUBSCRIBE message cancelling | to client while the client's UNSUBSCRIBE message canceling | |||
| that subscription is simultaneously in flight from client to | that subscription is simultaneously in flight from client to | |||
| server.</t> | server.</t> | |||
| <section anchor="discovery" numbered="true" toc="include" removeInRFC="fal | ||||
| <?rfc needLines="30" ?> | se" pn="section-6.1"> | |||
| <section title="Discovery" anchor="discovery"> | <name slugifiedName="name-discovery">Discovery</name> | |||
| <t>The first step in establishing a DNS Push Notification subscription i | <t pn="section-6.1-1">The first step in establishing a DNS Push Notifica | |||
| s to discover an appropriate DNS server that supports DNS Push Notifications for | tion | |||
| the desired zone.</t> | subscription is to discover an appropriate DNS server that | |||
| supports DNS Push Notifications for the desired zone.</t> | ||||
| <t>The client begins by opening a DSO Session to its normal configured | <t pn="section-6.1-2">The client begins by opening a DSO session to its | |||
| DNS recursive resolver and requesting a Push Notification subscription. | normal configured | |||
| DNS recursive resolver and requesting a Push Notification | ||||
| subscription. | ||||
| This connection is made to TCP port 853, the default port for | This connection is made to TCP port 853, the default port for | |||
| <xref target="RFC7858">DNS-over-TLS</xref>. | DNS over TLS <xref target="RFC7858" format="default" sectionFormat="of" derivedContent="RFC7858"/>. | |||
| If the request for a Push Notification subscription is successful, | If the request for a Push Notification subscription is successful, | |||
| and the recursive resolver doesn't already have an active subscription f | and the recursive resolver doesn't already have an active subscription | |||
| or that name, type, and class, | for that name, type, and class, | |||
| then the recursive resolver will make a corresponding | then the recursive resolver will make a corresponding | |||
| Push Notification subscription on the client's behalf. | Push Notification subscription on the client's behalf. | |||
| Results received are relayed to the client. | Results received are relayed to the client. | |||
| This is closely analogous to how a client sends a normal DNS | This is closely analogous to how a client sends a normal DNS | |||
| query to its configured DNS recursive resolver which, | query to its configured DNS recursive resolver, which, | |||
| if it doesn't already have appropriate answer(s) in its cache, | if it doesn't already have appropriate answer(s) in its cache, | |||
| issues an upstream query to satisfy the request.</t> | issues an upstream query to satisfy the request.</t> | |||
| <t pn="section-6.1-3">In many contexts, the recursive resolver will be a | ||||
| <t>In many contexts, the recursive resolver will be able to handle | ble to handle | |||
| Push Notifications for all names that the client may need to follow. | Push Notifications for all names that the client may need to follow. | |||
| Use of VPN tunnels and Private DNS <xref target="RFC8499"/> | Use of VPN tunnels and Private DNS <xref target="RFC8499" format="defaul t" sectionFormat="of" derivedContent="RFC8499"/> | |||
| can create some additional complexity in the client software here; | can create some additional complexity in the client software here; | |||
| the techniques to handle VPN tunnels and Private DNS for DNS Push | the techniques to handle VPN tunnels and Private DNS for DNS Push | |||
| Notifications are the same as those already used to handle this for | Notifications are the same as those already used to handle this for | |||
| normal DNS queries.</t> | normal DNS queries.</t> | |||
| <t pn="section-6.1-4">If the recursive resolver does not support DNS ove | ||||
| <t>If the recursive resolver | r TLS, or | |||
| does not support DNS over TLS, or | ||||
| supports DNS over TLS but is not listening on TCP port 853, or | supports DNS over TLS but is not listening on TCP port 853, or | |||
| supports DNS over TLS on TCP port 853 but does not support DSO on that p | supports DNS over TLS on TCP port 853 but does not support DSO on that | |||
| ort, | port, then the DSO session establishment will fail <xref target="RFC8490 | |||
| then the DSO Session session establishment will fail <xref target="RFC84 | " format="default" sectionFormat="of" derivedContent="RFC8490"/>.</t> | |||
| 90"/>.</t> | <t pn="section-6.1-5">If the recursive resolver does support DSO on TCP | |||
| port 853 | ||||
| <t>If the recursive resolver does support DSO but not Push Notification | but does not support Push Notification subscriptions, | |||
| subscriptions, then it will return the DSO error code DSOTYPENI (11).</t | then when the client attempts to create a subscription, | |||
| > | the server will return the DSO error code DSOTYPENI (11).</t> | |||
| <t pn="section-6.1-6">In some cases, the recursive resolver may support | ||||
| <t>In some cases, the recursive resolver may support DSO and Push | DSO and Push | |||
| Notification subscriptions, but may not be able | Notification subscriptions but may not be able | |||
| to subscribe for Push Notifications for a particular name. | to subscribe for Push Notifications for a particular name. | |||
| In this case, the recursive resolver should return | In this case, the recursive resolver should return | |||
| SERVFAIL to the client. This includes being unable | SERVFAIL to the client. This includes being unable | |||
| to establish a connection | to establish a connection | |||
| to the zone's DNS Push Notification server or establishing | to the zone's DNS Push Notification server or establishing | |||
| a connection but receiving a non success response code. | a connection but receiving a non-success response code. | |||
| In some cases, where the client has a pre-established trust | In some cases, where the client has a pre-established trust | |||
| relationship with the owner of the zone (that is not handled | relationship with the owner of the zone (that is not handled | |||
| via the usual mechanisms for VPN software) the client may | via the usual mechanisms for VPN software), the client may | |||
| handle these failures by contacting the zone's DNS Push server | handle these failures by contacting the zone's DNS Push Notification | |||
| server | ||||
| directly.</t> | directly.</t> | |||
| <t pn="section-6.1-7">In any of the cases described above where the clie | ||||
| <t>In any of the cases described above where the client | nt | |||
| fails to establish a DNS Push Notification subscription via its | fails to establish a DNS Push Notification subscription via its | |||
| configured recursive resolver, the client should proceed to discover | configured recursive resolver, the client should proceed to discover | |||
| the appropriate server for direct communication. The client MUST | the appropriate server for direct communication. The client | |||
| also determine which TCP port on the server is listening for | <bcp14>MUST</bcp14> | |||
| connections, which need not be (and often is not) the typical TCP | also determine on which TCP port the server is listening for | |||
| port 53 used for conventional DNS, or TCP port 853 used for DNS | connections, which need not be, and often is not, | |||
| over TLS.</t> | TCP port 53 (traditionally used for conventional DNS) or | |||
| TCP port 853 (traditionally used for DNS over TLS).</t> | ||||
| <t>The discovery algorithm described here is an iterative algorithm, | <t pn="section-6.1-8">The discovery algorithm described here is an itera | |||
| tive algorithm, | ||||
| which starts with the full name of the record to which the | which starts with the full name of the record to which the | |||
| client wishes to subscribe. Successive SOA queries are then | client wishes to subscribe. Successive SOA queries are then | |||
| issued, trimming one label each time, until | issued, trimming one label each time, until | |||
| the closest enclosing authoritative server is discovered. | the closest enclosing authoritative server is discovered. | |||
| There is also an optimization to enable the client to | There is also an optimization to enable the client to | |||
| take a "short cut" directly to the SOA record of | take a "short cut" directly to the SOA record of | |||
| the closest enclosing authoritative server in many cases.</t> | the closest enclosing authoritative server in many cases.</t> | |||
| <ol spacing="normal" type="1" start="1" pn="section-6.1-9"> | ||||
| <t> | <li pn="section-6.1-9.1" derivedCounter="1.">The client begins the dis | |||
| <list style="numbers"> | covery by sending a DNS query to its | |||
| <t>The client begins the discovery by sending a DNS query to its loc | local resolver, with record type SOA <xref target="RFC1035" format="de | |||
| al resolver, with record type | fault" sectionFormat="of" derivedContent="RFC1035"/> for the record name to whic | |||
| <xref target="RFC1035">SOA</xref> for the record name to which it wi | h it wishes to | |||
| shes to subscribe. | subscribe. As an example, suppose the client wishes to subscribe to | |||
| As an example, suppose the client wishes to subscribe to PTR records | PTR records with the name <tt>_ipp._tcp.headoffice.example.com</tt> | |||
| with the name _ipp._tcp.headoffice.example.com | (to | |||
| (to discover Internet Printing Protocol (IPP) printers <xref target= | discover Internet Printing Protocol (IPP) printers <xref target="RFC80 | |||
| "RFC8010"/> <xref target="RFC8011"/> | 10" format="default" sectionFormat="of" derivedContent="RFC8010"/> <xref target= | |||
| being advertised in the head office of Example Company.). | "RFC8011" format="default" sectionFormat="of" derivedContent="RFC8011"/> being a | |||
| The client begins by sending an SOA query for _ipp._tcp.headoffice.e | dvertised in the head office of Example | |||
| xample.com to the local recursive resolver. | Company). The client begins by sending an SOA query for | |||
| The goal is to determine the server authoritative for the name _ipp. | <tt>_ipp._tcp.headoffice.example.com</tt> to the local recursive | |||
| _tcp.headoffice.example.com. | resolver. | |||
| The closest enclosing DNS zone containing the name _ipp._tcp.headoff | The goal is to determine the server that is authoritative for the | |||
| ice.example.com could be example.com, | name | |||
| or headoffice.example.com, or _tcp.headoffice.example.com, or even _ | <tt>_ipp._tcp.headoffice.example.com</tt>. The closest enclosing | |||
| ipp._tcp.headoffice.example.com. | DNS zone | |||
| The client does not know in advance where the closest enclosing zone | containing the name <tt>_ipp._tcp.headoffice.example.com</tt> could | |||
| cut occurs, | be | |||
| which is why it uses the iterative procedure described here to disco | <tt>example.com</tt>, or <tt>headoffice.example.com</tt>, or | |||
| ver this information.</t> | <tt>_tcp.headoffice.example.com</tt>, or even | |||
| <tt>_ipp._tcp.headoffice.example.com</tt>. The client does not know | ||||
| <t>If the requested SOA record exists, it will be returned in the An | in | |||
| swer section with a NOERROR response code, and | advance where the closest enclosing zone cut occurs, which is why it | |||
| the client has succeeded in discovering the information it needs. | uses the iterative procedure described here to discover this | |||
| <vspace /> | information.</li> | |||
| (This language is not placing any new requirements on DNS recursive | <li pn="section-6.1-9.2" derivedCounter="2."> | |||
| resolvers. | <t pn="section-6.1-9.2.1">If the requested SOA record exists, it wil | |||
| This text merely describes the existing operation of the DNS protoco | l be returned in the | |||
| l | Answer Section with a NOERROR response code, and the client has | |||
| <xref target="RFC1034"/> <xref target="RFC1035"/>.)</t> | succeeded in discovering the information it needs. | |||
| </t> | ||||
| <t>If the requested SOA record does not exist, the client will get b | <t pn="section-6.1-9.2.2"> | |||
| ack a NOERROR/NODATA response or an NXDOMAIN/Name Error response. | (This language is not placing any new requirements on DNS | |||
| In either case, the local resolver would normally include the SOA re | recursive resolvers. | |||
| cord for the closest enclosing zone of the requested name in the Authority Secti | This text merely describes the existing operation of the DNS | |||
| on. | protocol | |||
| If the SOA record is received in the Authority Section, then | <xref target="RFC1034" format="default" sectionFormat="of" derivedCo | |||
| the client has succeeded in discovering the information it needs. | ntent="RFC1034"/> <xref target="RFC1035" format="default" sectionFormat="of" der | |||
| <vspace /> | ivedContent="RFC1035"/>.)</t> | |||
| (This language is not placing any new requirements on DNS recursive | </li> | |||
| resolvers. | <li pn="section-6.1-9.3" derivedCounter="3."> | |||
| This text merely describes the existing operation of the DNS protoco | <t pn="section-6.1-9.3.1">If the requested SOA record does not exist | |||
| l | , the client will get | |||
| regarding negative responses <xref target="RFC2308"/>.)</t> | back a NOERROR/NODATA response or an NXDOMAIN/Name Error response. | |||
| In either case, the local resolver would normally include the SOA | ||||
| <t>If the client receives a response containing no SOA record, | record for the closest enclosing zone of the requested name in the | |||
| then it proceeds with the iterative approach. | Authority Section. If the SOA record is received in the Authority | |||
| The client strips the leading label from the current query name, | Section, then the client has succeeded in discovering the | |||
| and if the resulting name has at least two labels in it, | information it needs. | |||
| the client sends an SOA query for that new name, | </t> | |||
| and processing continues at step 2 above, | <t pn="section-6.1-9.3.2"> | |||
| repeating the iterative search until either an SOA is received, | (This language is not placing any new requirements on DNS | |||
| or the query name consists of a single label, i.e., a Top Level Doma | recursive resolvers. | |||
| in (TLD). | This text merely describes the existing operation of the DNS | |||
| In the case of a single-label name (TLD), this is a network configur | protocol | |||
| ation error, | regarding negative responses <xref target="RFC2308" format="default" | |||
| which should not happen, and the client gives up. | sectionFormat="of" derivedContent="RFC2308"/>.)</t> | |||
| The client may retry the operation at a later time, of the client's | </li> | |||
| choosing, | <li pn="section-6.1-9.4" derivedCounter="4.">If the client receives a | |||
| such after a change in network attachment.</t> | response containing no SOA record, then | |||
| it proceeds with the iterative approach. The client strips the | ||||
| <t>Once the SOA is known (either by virtue of being seen in the Answ | leading label from the current query name, and if the resulting name | |||
| er Section, or in the Authority Section), the client sends a DNS query with type | has at least two labels in it, then the client sends an SOA query | |||
| <xref target="RFC2782">SRV</xref> for the record name | for | |||
| <spanx style="verb">_dns&nbhy;push&nbhy;tls._tcp.<zone></spanx | that new name and processing continues at step 2 above, repeating | |||
| >, where <zone> is the owner name of the discovered SOA record.</t> | the iterative search until either an SOA is received or the query | |||
| name consists of a single label, i.e., a Top-Level Domain (TLD). In | ||||
| <t>If the zone in question is set up to offer DNS Push Notifications | the case of a single-label name (TLD), this is a network | |||
| then this SRV record MUST exist. | configuration error, which should not happen, and the client gives | |||
| (If this SRV record does not exist then the zone is not correctly | up. The client may retry the operation at a later time of the | |||
| configured for DNS Push Notifications as specified in this document. | client's choosing, such as after a change in network | |||
| ) | attachment.</li> | |||
| The SRV <spanx style="verb">target</spanx> contains the name of the | <li pn="section-6.1-9.5" derivedCounter="5.">Once the SOA is known (by | |||
| server providing DNS Push Notifications for the zone. The port number on which t | virtue of being seen either in the | |||
| o contact the server is in the SRV record <spanx style="verb">port</spanx> field | Answer Section or in the Authority Section), the client sends a DNS | |||
| . The address(es) of the target host MAY be included in the Additional Section, | query with type SRV <xref target="RFC2782" format="default" sectionFor | |||
| however, the address records SHOULD be authenticated before use as described bel | mat="of" derivedContent="RFC2782"/> | |||
| ow in <xref target="tls_name_auth"/> and in | for the record name | |||
| <xref target="RFC7673">the specification for using DANE TLSA Records | <tt>_dns‑push‑tls._tcp.<zone></tt>, where | |||
| with SRV Records</xref>, if applicable.</t> | <zone> is the owner name of the discovered SOA record.</li> | |||
| <li pn="section-6.1-9.6" derivedCounter="6.">If the zone in question i | ||||
| <t anchor="SRV">More than one SRV record may be returned. In this ca | s set up to offer DNS Push | |||
| se, the <spanx style="verb">priority</spanx> and <spanx style="verb">weight</spa | Notifications, then this SRV record <bcp14>MUST</bcp14> exist. (If | |||
| nx> values in the returned SRV records are used to determine the order in which | this SRV record does not exist, then the zone is not correctly | |||
| to contact the servers for subscription requests. As described in <xref target=" | configured for DNS Push Notifications as specified in this | |||
| RFC2782">the SRV specification</xref>, the server with the lowest <spanx style=" | document.) The SRV <tt>target</tt> contains the name of the server | |||
| verb">priority</spanx> is first contacted. If more than one server has the same | providing DNS Push Notifications for the zone. The port number on | |||
| <spanx style="verb">priority</spanx>, the <spanx style="verb">weight</spanx> ind | which to contact the server is in the SRV record <tt>port</tt> | |||
| icates the weighted probability that the client should contact that server. High | field. The address(es) of the target host <bcp14>MAY</bcp14> be | |||
| er weights have higher probabilities of being selected. | included in the Additional Section, however, the address records | |||
| If a server is not willing to accept a subscription request, | <bcp14>SHOULD</bcp14> be authenticated before use as described in | |||
| or is not reachable within a reasonable time, as determined by the c | <xref target="tls_name_auth" format="default" sectionFormat="of" deriv | |||
| lient, | edContent="Section 7.2"/> and in the | |||
| then a subsequent server is to be contacted.</t> | specification for using DNS-Based Authentication of Named Entities | |||
| (DANE) TLSA Records with SRV Records <xref target="RFC7673" format="d | ||||
| </list> | efault" sectionFormat="of" derivedContent="RFC7673"/>, if applicable.</li> | |||
| </t> | <li anchor="SRV" pn="section-6.1-9.7" derivedCounter="7.">More than on | |||
| e SRV record may be returned. In this | ||||
| <t>Each time a client makes a new DNS Push Notification subscription, | case, the <tt>priority</tt> and <tt>weight</tt> values in the | |||
| it SHOULD repeat the discovery process in order to determine | returned SRV records are used to determine the order in which to | |||
| the preferred DNS server for that subscription at that time. | contact the servers for subscription requests. As described in the | |||
| If a client already has a DSO session with that DNS server | SRV specification <xref target="RFC2782" format="default" sectionForma | |||
| the client SHOULD reuse that existing DSO session for the new subscripti | t="of" derivedContent="RFC2782"/>, | |||
| on, | the server with the lowest <tt>priority</tt> is first contacted. If | |||
| otherwise, a new DSO session is established. | more than one server has the same <tt>priority</tt>, the | |||
| The client MUST respect the DNS TTL values on records it receives while | <tt>weight</tt> indicates the weighted probability that the client | |||
| performing | should contact that server. Higher weights have higher probabilities | |||
| the discovery process and store them in its local cache with this lifeti | of being selected. If a server is not willing to accept a | |||
| me | subscription request, or is not reachable within a reasonable time, | |||
| (as it will generally be do anyway for all DNS queries it performs). | as determined by the client, then a subsequent server is to be | |||
| This means that, as long as the DNS TTL values on the authoritative reco | contacted.</li> | |||
| rds are set | </ol> | |||
| to reasonable values, repeated application of the discovery process can | <t pn="section-6.1-10">Each time a client makes a new DNS Push Notificat | |||
| be completed | ion subscription, | |||
| nearly instantaneously by the client, using only locally-stored cached d | it <bcp14>SHOULD</bcp14> repeat the discovery process in order to | |||
| ata.</t> | determine the preferred DNS server for that subscription at that time. | |||
| If a client already has a DSO session with that DNS server, the client | ||||
| <?rfc needLines="48" ?> | <bcp14>SHOULD</bcp14> reuse that existing DSO session for the new | |||
| </section> | subscription; otherwise, a new DSO session is established. The client | |||
| <bcp14>MUST</bcp14> respect the DNS TTL values on records it receives | ||||
| <section title="DNS Push Notification SUBSCRIBE" anchor="subscribe"> | while performing the discovery process and store them in its local | |||
| <t>After connecting, and requesting a longer idle timeout and/or | cache with this lifetime (as it will generally do anyway for all | |||
| keepalive interval if necessary, a DNS Push Notification client<vspace /> | DNS queries it performs). This means that, as long as the DNS TTL | |||
| then indicates its desire to receive DNS Push Notifications for<vspace /> | values on the authoritative records are set to reasonable values, | |||
| a given domain name by sending a SUBSCRIBE request to the server.<vspace | repeated application of the discovery process can be completed | |||
| /> | practically | |||
| A SUBSCRIBE request is encoded in a DSO message <xref target="RFC8490"/>. | instantaneously by the client, using only locally stored cached | |||
| <vspace /> | data.</t> | |||
| This specification defines a primary DSO TLV for DNS Push Notification SU | </section> | |||
| BSCRIBE Requests (tentatively DSO Type Code 0x40).</t> | <section anchor="subscribe" numbered="true" toc="include" removeInRFC="fal | |||
| se" pn="section-6.2"> | ||||
| <t>DSO messages with the SUBSCRIBE TLV as the Primary TLV are permitted i | <name slugifiedName="name-dns-push-notification-subsc">DNS Push Notifica | |||
| n TLS early data, | tion SUBSCRIBE</name> | |||
| provided that the precautions described in <xref target="early_data"/> ar | <t pn="section-6.2-1">After connecting, and requesting a longer idle tim | |||
| e followed.</t> | eout and/or | |||
| keepalive interval if necessary, a DNS Push Notification client then | ||||
| <t>The entity that initiates a SUBSCRIBE request is by definition the cli | indicates its desire to receive DNS Push Notifications for a given | |||
| ent. | domain name by sending a SUBSCRIBE request to the server. A SUBSCRIBE | |||
| A server MUST NOT send a SUBSCRIBE request over an existing session from | request is encoded in a DSO message <xref target="RFC8490" format="defau | |||
| a client. | lt" sectionFormat="of" derivedContent="RFC8490"/>. This specification defines a | |||
| If a server does send a SUBSCRIBE request over a DSO session initiated by | DSO Primary TLV for DNS Push Notification SUBSCRIBE Requests | |||
| a client, | (DSO Type Code 0x0040).</t> | |||
| this is a fatal error and the client MUST forcibly abort the connection i | <t pn="section-6.2-2">DSO messages with the SUBSCRIBE TLV as the Primary | |||
| mmediately.</t> | TLV are | |||
| permitted in TLS early data, provided that the precautions described | ||||
| <t>Each SUBSCRIBE request generates exactly one SUBSCRIBE response from t | in | |||
| he server. | <xref target="early_data" format="default" sectionFormat="of" derivedCon | |||
| The entity that initiates a SUBSCRIBE response is by definition the serve | tent="Section 7.3"/> are followed.</t> | |||
| r. | <t pn="section-6.2-3">The entity that initiates a SUBSCRIBE request is b | |||
| A client MUST NOT send a SUBSCRIBE response. | y definition the | |||
| If a client does send a SUBSCRIBE response, | client. A server <bcp14>MUST NOT</bcp14> send a SUBSCRIBE request | |||
| this is a fatal error and the server MUST forcibly abort the connection i | over an existing session from a client. If a server does send a | |||
| mmediately.</t> | SUBSCRIBE request over a DSO session initiated by a client, this is a | |||
| fatal error and the client <bcp14>MUST</bcp14> forcibly abort the | ||||
| <section title="SUBSCRIBE Request"> | connection immediately.</t> | |||
| <t pn="section-6.2-4">Each SUBSCRIBE request generates exactly one SUBSC | ||||
| <t>A SUBSCRIBE request begins with the standard | RIBE response | |||
| <xref target="RFC8490">DSO 12-byte header</xref>, followed by the SUBSC | from the server. The entity that initiates a SUBSCRIBE response is by | |||
| RIBE primary TLV. | definition the server. A client <bcp14>MUST NOT</bcp14> send a | |||
| A SUBSCRIBE request is illustrated in <xref target="subscribe_req"/>.</ | SUBSCRIBE response. If a client does send a SUBSCRIBE response, this | |||
| t> | is a fatal error and the server <bcp14>MUST</bcp14> forcibly abort the | |||
| connection immediately.</t> | ||||
| <t>The MESSAGE ID field MUST be set to a unique value, that the client | <section numbered="true" toc="include" removeInRFC="false" pn="section-6 | |||
| is not using for any other active operation on this DSO session. For the purpose | .2.1"> | |||
| s here, a MESSAGE ID is in use on this session if the client has used it in a re | <name slugifiedName="name-subscribe-request">SUBSCRIBE Request</name> | |||
| quest for which it has not yet received a response, or if the client has used it | <t pn="section-6.2.1-1">A SUBSCRIBE request begins with the standard D | |||
| for a subscription which it has not yet cancelled using UNSUBSCRIBE. In the SUB | SO 12-byte header | |||
| SCRIBE response the server MUST echo back the MESSAGE ID value unchanged.</t> | <xref target="RFC8490" format="default" sectionFormat="of" derivedCont | |||
| ent="RFC8490"/>, followed by the | ||||
| <t>The other header fields MUST be set as described in the | SUBSCRIBE Primary TLV. A SUBSCRIBE request is illustrated in <xref ta | |||
| <xref target="RFC8490">DSO spec-ification</xref>. | rget="subscribe_req" format="default" sectionFormat="of" derivedContent="Figure | |||
| The DNS OPCODE field contains the OPCODE value for DNS Stateful Operati | 1"/>.</t> | |||
| ons (6). | <t pn="section-6.2.1-2">The MESSAGE ID field <bcp14>MUST</bcp14> be se | |||
| The four count fields must be zero, and the corresponding four sections | t to a unique | |||
| must be empty (i.e., absent).</t> | value that the client is not using for any other active operation | |||
| on this DSO session. For the purposes here, a MESSAGE ID is in use | ||||
| <t>The DSO-TYPE is SUBSCRIBE (tentatively 0x40).</t> | on this session if either the client has used it in a request for | |||
| which it | ||||
| <t>The DSO-LENGTH is the length of the DSO-DATA that follows, which spe | has not yet received a response, or if the client has used it for a | |||
| cifies | subscription that it has not yet canceled using UNSUBSCRIBE. In | |||
| the SUBSCRIBE response, the server <bcp14>MUST</bcp14> echo back the | ||||
| MESSAGE ID value unchanged.</t> | ||||
| <t pn="section-6.2.1-3">The other header fields <bcp14>MUST</bcp14> be | ||||
| set as described | ||||
| in the | ||||
| <xref target="RFC8490" format="default" sectionFormat="of" derivedConte | ||||
| nt="RFC8490">DSO specification</xref>. | ||||
| The DNS OPCODE field contains the OPCODE value for DNS Stateful | ||||
| Operations (6). | ||||
| The four count fields must be zero, and the corresponding four | ||||
| sections must be empty (i.e., absent).</t> | ||||
| <t pn="section-6.2.1-4">The DSO-TYPE is SUBSCRIBE (0x0040).</t> | ||||
| <t pn="section-6.2.1-5">The DSO-LENGTH is the length of the DSO-DATA t | ||||
| hat follows, which | ||||
| specifies | ||||
| the name, type, and class of the record(s) being sought.</t> | the name, type, and class of the record(s) being sought.</t> | |||
| <figure anchor="subscribe_req" align="left" suppress-title="false" pn= | ||||
| <figure align="left" anchor="subscribe_req" title="SUBSCRIBE Request">< | "figure-1"> | |||
| artwork align="left"><![CDATA[ | <name slugifiedName="name-subscribe-request-2">SUBSCRIBE Request</na | |||
| me> | ||||
| <artwork align="left" name="" type="" alt="" pn="section-6.2.1-6.1"> | ||||
| 1 1 1 1 1 1 | 1 1 1 1 1 1 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | |||
| | MESSAGE ID | \ | | MESSAGE ID | \ | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| |QR| OPCODE(6) | Z | RCODE | | | |QR| OPCODE(6) | Z | RCODE | | | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| | QDCOUNT (MUST BE ZERO) | | | | QDCOUNT (MUST BE ZERO) | | | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > HEADER | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > HEADER | |||
| | ANCOUNT (MUST BE ZERO) | | | | ANCOUNT (MUST BE ZERO) | | | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| | NSCOUNT (MUST BE ZERO) | | | | NSCOUNT (MUST BE ZERO) | | | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| | ARCOUNT (MUST BE ZERO) | / | | ARCOUNT (MUST BE ZERO) | / | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | |||
| | DSO-TYPE = SUBSCRIBE (tentatively 0x40) | | | DSO-TYPE = SUBSCRIBE (0x0040) | | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | |||
| | DSO-LENGTH (number of octets in DSO-DATA) | | | DSO-LENGTH (number of octets in DSO-DATA) | | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | |||
| \ NAME \ \ | \ NAME \ \ | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| | TYPE | > DSO-DATA | | TYPE | > DSO-DATA | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| | CLASS | / | | CLASS | / | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ /]]></artwork></figure> | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ /</artwork> | |||
| </figure> | ||||
| <t>The DSO-DATA for a SUBSCRIBE request MUST contain exactly one NAME, | <t pn="section-6.2.1-7">The DSO-DATA for a SUBSCRIBE request <bcp14>MU | |||
| TYPE, and CLASS. | ST</bcp14> contain | |||
| Since SUBSCRIBE requests are sent over TCP, multiple SUBSCRIBE DSO requ | exactly one NAME, TYPE, and CLASS. | |||
| est messages | Since SUBSCRIBE requests are sent over TCP, multiple SUBSCRIBE DSO | |||
| can be concatenated in a single TCP stream and packed efficiently into | request messages | |||
| TCP segments.</t> | can be concatenated in a single TCP stream and packed efficiently | |||
| into TCP segments.</t> | ||||
| <t>If accepted, the subscription will stay in effect until the client c | <t pn="section-6.2.1-8">If accepted, the subscription will stay in eff | |||
| ancels the subscription using UNSUBSCRIBE or until the DSO session between the c | ect until the | |||
| lient and the server is closed.</t> | client cancels the subscription using UNSUBSCRIBE or until the DSO | |||
| session between the client and the server is closed.</t> | ||||
| <t>SUBSCRIBE requests on a given session MUST be unique. | <t pn="section-6.2.1-9">SUBSCRIBE requests on a given session <bcp14>M | |||
| A client MUST NOT send a SUBSCRIBE message that duplicates the | UST</bcp14> be | |||
| NAME, TYPE and CLASS of an existing active subscription on that DSO ses | unique. A client <bcp14>MUST NOT</bcp14> send a SUBSCRIBE message | |||
| sion. | that duplicates the name, type and class of an existing active | |||
| For the purpose of this matching, the established DNS case-insensitivit | subscription on that DSO session. For the purpose of this matching, | |||
| y | the established DNS case insensitivity for US-ASCII letters <xref targ | |||
| for US-ASCII letters <xref target="RFC0020" /> applies (e.g., "example. | et="RFC0020" format="default" sectionFormat="of" derivedContent="RFC0020"/> appl | |||
| com" and "Example.com" are the same). | ies (e.g., "example.com" and | |||
| If a server receives such a duplicate SUBSCRIBE message, | "Example.com" are the same). If a server receives such a duplicate | |||
| this is a fatal error and the server MUST forcibly abort the connection | SUBSCRIBE message, this is a fatal error and the server | |||
| immediately.</t> | <bcp14>MUST</bcp14> forcibly abort the connection immediately.</t> | |||
| <t pn="section-6.2.1-10">DNS wildcarding is not supported. | ||||
| <t>DNS wildcarding is not supported. That is, a wildcard ("*") in a SUB | That is, an asterisk character ("*") in a SUBSCRIBE message matches | |||
| SCRIBE message matches only a literal wildcard character ("*") in the zone, and | only a literal asterisk character ("*") in a name and nothing else. | |||
| nothing else.</t> | Similarly, a CNAME in a SUBSCRIBE message matches only a CNAME | |||
| record | ||||
| <t>Aliasing is not supported. That is, a CNAME in a SUBSCRIBE message m | with that name in the zone and no other records with that name.</t> | |||
| atches only a literal CNAME record in the zone, and no other records with the sa | <t pn="section-6.2.1-11">A client may SUBSCRIBE to records that are un | |||
| me owner name.</t> | known to the server | |||
| at the time of the request (providing that the name falls within one | ||||
| <t>A client may SUBSCRIBE to records that are unknown to the server at | of the zone(s) the server is responsible for), and this is not an | |||
| the time of the request (providing that the name falls within one of the zone(s) | error. The server <bcp14>MUST NOT</bcp14> return NXDOMAIN in this | |||
| the server is responsible for) and this is not an error. The server MUST NOT re | case. The server <bcp14>MUST</bcp14> accept these requests and send | |||
| turn NXDOMAIN in this case. The server MUST accept these requests and send Push | Push Notifications if and when matching records are found in the | |||
| Notifications if and when matching records are found in the future.</t> | future.</t> | |||
| <t pn="section-6.2.1-12">If neither TYPE nor CLASS are ANY (255), then | ||||
| <t>If neither TYPE nor CLASS are ANY (255) then this is a specific subs | this is a specific | |||
| cription to changes for the given NAME, TYPE and CLASS. If one or both of TYPE o | subscription to changes for the given name, type, and class. If one | |||
| r CLASS are ANY (255) then this subscription matches any type and/or any class, | or both of TYPE or CLASS are ANY (255), then this subscription | |||
| as appropriate.</t> | matches all types and/or all classes as appropriate.</t> | |||
| <t pn="section-6.2.1-13">NOTE: A little-known quirk of DNS is that in | ||||
| <?rfc needLines="14" ?> | DNS QUERY requests, | |||
| <t>NOTE: A little-known quirk of DNS is that in DNS QUERY requests, QTY | QTYPE and QCLASS 255 mean "ANY", not "ALL". They indicate that the | |||
| PE and QCLASS 255 mean "ANY" not "ALL". They indicate that the server should res | server should respond with ANY matching records of its choosing, not | |||
| pond with ANY matching records of its choosing, not necessarily ALL matching rec | necessarily ALL matching records. This can lead to some surprising | |||
| ords. This can lead to some surprising and unexpected results, where a query ret | and unexpected results, where a query returns some valid answers, | |||
| urns some valid answers but not all of them, and makes QTYPE = 255 (ANY) queries | but | |||
| less useful than people sometimes imagine.</t> | not all of them, and makes QTYPE = 255 (ANY) queries less useful | |||
| than people sometimes imagine.</t> | ||||
| <t>When used in conjunction with SUBSCRIBE, TYPE and CLASS 255 should b | <t pn="section-6.2.1-14">When used in conjunction with SUBSCRIBE, TYPE | |||
| e interpreted to mean "ALL", not "ANY". After accepting a subscription where one | 255 and CLASS 255 | |||
| or both of TYPE or CLASS are 255, the server MUST send Push Notification Update | should be interpreted to mean "ALL", not "ANY". After accepting a | |||
| s for ALL record changes that match the subscription, not just some of them.</t> | subscription where one or both of TYPE or CLASS are 255, the server | |||
| <?rfc needLines="48" ?> | <bcp14>MUST</bcp14> send Push Notification Updates for ALL record | |||
| </section> | changes that match the subscription, not just some of them.</t> | |||
| </section> | ||||
| <section title="SUBSCRIBE Response" anchor="subresp"> | <section anchor="subresp" numbered="true" toc="include" removeInRFC="fal | |||
| se" pn="section-6.2.2"> | ||||
| <t>A SUBSCRIBE response begins with the standard | <name slugifiedName="name-subscribe-response">SUBSCRIBE Response</name | |||
| <xref target="RFC8490">DSO 12-byte header</xref>. | > | |||
| <t pn="section-6.2.2-1">A SUBSCRIBE response begins with the standard | ||||
| DSO 12-byte header <xref target="RFC8490" format="default" sectionForma | ||||
| t="of" derivedContent="RFC8490"/>. | ||||
| The QR bit in the header is set indicating it is a response. | The QR bit in the header is set indicating it is a response. | |||
| The header MAY be followed by one or more optional TLVs, such as a Retr | The header <bcp14>MAY</bcp14> be followed by one or more | |||
| y Delay TLV. | optional Additional TLVs such as a Retry Delay Additional TLV. | |||
| A SUBSCRIBE response is illustrated in <xref target="subscribe_resp"/>. | A SUBSCRIBE response is illustrated in <xref target="subscribe_resp" fo | |||
| </t> | rmat="default" sectionFormat="of" derivedContent="Figure 2"/>.</t> | |||
| <t pn="section-6.2.2-2">The MESSAGE ID field <bcp14>MUST</bcp14> echo | ||||
| <t>The MESSAGE ID field MUST echo the value given in the MESSAGE ID fie | the value given in | |||
| ld of the SUBSCRIBE request. | the MESSAGE ID field of the SUBSCRIBE request. This is how the | |||
| This is how the client knows which request is being responded to.</t> | client knows which request is being responded to.</t> | |||
| <t pn="section-6.2.2-3">The other header fields <bcp14>MUST</bcp14> be | ||||
| <t>The other header fields MUST be set as described in the | set as described | |||
| <xref target="RFC8490">DSO spec-ification</xref>. | in the <xref target="RFC8490" format="default" sectionFormat="of" deri | |||
| The DNS OPCODE field contains the OPCODE value for DNS Stateful Operati | vedContent="RFC8490">DSO specification</xref>. The DNS OPCODE field | |||
| ons (6). | contains the OPCODE | |||
| The four count fields must be zero, and the corresponding four sections | value for DNS Stateful Operations (6). The four count fields must | |||
| must be empty (i.e., absent).</t> | be zero, and the corresponding four sections must be empty (i.e., | |||
| absent).</t> | ||||
| <t>A SUBSCRIBE response message MUST NOT include a SUBSCRIBE TLV. | <t pn="section-6.2.2-4">A SUBSCRIBE response message <bcp14>MUST NOT</ | |||
| If a client receives a SUBSCRIBE response message containing a SUBSCRIB | bcp14> include a | |||
| E TLV | SUBSCRIBE TLV. | |||
| then the response message is processed but the SUBSCRIBE TLV MUST be si | If a client receives a SUBSCRIBE response message containing a | |||
| lently ignored.</t> | SUBSCRIBE TLV, | |||
| then the response message is processed but the SUBSCRIBE TLV | ||||
| <figure align="left" anchor="subscribe_resp" title="SUBSCRIBE Response" | <bcp14>MUST</bcp14> be silently ignored.</t> | |||
| ><artwork align="left"><![CDATA[ | <figure anchor="subscribe_resp" align="left" suppress-title="false" pn | |||
| ="figure-2"> | ||||
| <name slugifiedName="name-subscribe-response-2">SUBSCRIBE Response</ | ||||
| name> | ||||
| <artwork align="left" name="" type="" alt="" pn="section-6.2.2-5.1"> | ||||
| 1 1 1 1 1 1 | 1 1 1 1 1 1 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | |||
| | MESSAGE ID | \ | | MESSAGE ID | \ | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| |QR| OPCODE(6) | Z | RCODE | | | |QR| OPCODE(6) | Z | RCODE | | | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| | QDCOUNT (MUST BE ZERO) | | | | QDCOUNT (MUST BE ZERO) | | | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > HEADER | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > HEADER | |||
| | ANCOUNT (MUST BE ZERO) | | | | ANCOUNT (MUST BE ZERO) | | | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| | NSCOUNT (MUST BE ZERO) | | | | NSCOUNT (MUST BE ZERO) | | | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| | ARCOUNT (MUST BE ZERO) | / | | ARCOUNT (MUST BE ZERO) | / | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | |||
| ]]> | ||||
| </artwork></figure> | ||||
| <?rfc needLines="20" ?> | ||||
| <t>In the SUBSCRIBE response the RCODE indicates whether or not the sub | ||||
| scription was accepted. Supported RCODEs are as follows:</t> | ||||
| <texttable title="SUBSCRIBE Response codes" anchor="subscribe_rcodes"> | ||||
| <ttcol align="left">Mnemonic</ttcol> | ||||
| <ttcol align="center">Value</ttcol> | ||||
| <ttcol align="left">Description</ttcol> | ||||
| <c>NOERROR</c><c>0</c><c>SUBSCRIBE successful.</c> | ||||
| <c>FORMERR</c><c>1</c><c>Server failed to process request due to a malf | ||||
| ormed request.</c> | ||||
| <c>SERVFAIL</c><c>2</c><c>Server failed to process request due to a pro | ||||
| blem with the server.</c> | ||||
| <c>NOTIMP</c><c>4</c><c>Server does not implement DSO.</c> | ||||
| <c>REFUSED</c><c>5</c><c>Server refuses to process request for policy o | ||||
| r security reasons.</c> | ||||
| <c>NOTAUTH</c><c>9</c><c>Server is not authoritative for the requested | ||||
| name.</c> | ||||
| <c>DSOTYPENI</c><c>11</c><c>SUBSCRIBE operation not supported.</c> | ||||
| </texttable> | ||||
| <t>This document specifies only these RCODE values for SUBSCRIBE Respon | ||||
| ses. Servers sending SUBSCRIBE Responses SHOULD use one of these values. Note th | ||||
| at NXDOMAIN is not a valid RCODE in response to a SUBSCRIBE Request. However, fu | ||||
| ture circumstances may create situations where other RCODE values are appropriat | ||||
| e in SUBSCRIBE Responses, so clients MUST be prepared to accept SUBSCRIBE Respon | ||||
| ses with any other RCODE value.</t> | ||||
| <t>If the server sends a nonzero RCODE in the SUBSCRIBE response, that | ||||
| means: | ||||
| <?rfc subcompact="yes" ?> | ||||
| <list style="letters"> | ||||
| <t>the client is (at least partially) misconfigured, or</t> | ||||
| <t>the server resources are exhausted, or</t> | ||||
| <t>there is some other unknown failure on the server.</t> | ||||
| </list> | ||||
| <?rfc subcompact="no" ?> | ||||
| In any case, the client shouldn't retry the subscription to this server | ||||
| right away. If multiple SRV records were returned as described in <xref target= | ||||
| "discovery"/>, <xref target="SRV"/>, a subsequent server MAY be tried immediatel | ||||
| y.</t> | ||||
| <t>If the client has other successful subscriptions to this server, the | ||||
| se subscriptions remain even though additional subscriptions may be refused. Nei | ||||
| ther the client nor the server are required to close the connection, although, e | ||||
| ither end may choose to do so.</t> | ||||
| <t>If the server sends a nonzero RCODE then it SHOULD append a Retry De | ||||
| lay TLV <xref target="RFC8490"/> to the response specifying a delay before the c | ||||
| lient attempts this operation again. Recommended values for the delay for differ | ||||
| ent RCODE values are given below. These recommended values apply both to the def | ||||
| ault values a server should place in the Retry Delay TLV, and the default values | ||||
| a client should assume if the server provides no Retry Delay TLV. | ||||
| <list style="bullets"> | ||||
| <t>For RCODE = 1 (FORMERR) the delay may be any value selected by t | ||||
| he implementer. A value of five minutes is RECOMMENDED, to reduce the risk of hi | ||||
| gh load from defective clients.</t> | ||||
| <t>For RCODE = 2 (SERVFAIL) the delay should be chosen according to | ||||
| the level of server overload and the anticipated duration of that overload. By | ||||
| default, a value of one minute is RECOMMENDED. If a more serious server failure | ||||
| occurs, the delay may be longer in accordance with the specific problem encounte | ||||
| red.</t> | ||||
| <t>For RCODE = 4 (NOTIMP), which occurs on a server that doesn't im | </artwork> | |||
| plement | </figure> | |||
| <xref target="RFC8490">DNS Stateful Operations</xref>, | <t pn="section-6.2.2-6">In the SUBSCRIBE response, the RCODE indicates | |||
| whether or not the | ||||
| subscription was accepted. Supported RCODEs are as follows:</t> | ||||
| <table anchor="subscribe_rcodes" align="center" pn="table-1"> | ||||
| <name slugifiedName="name-subscribe-response-codes">SUBSCRIBE Respon | ||||
| se Codes</name> | ||||
| <thead> | ||||
| <tr> | ||||
| <th align="left" colspan="1" rowspan="1">Mnemonic</th> | ||||
| <th align="center" colspan="1" rowspan="1">Value</th> | ||||
| <th align="left" colspan="1" rowspan="1">Description</th> | ||||
| </tr> | ||||
| </thead> | ||||
| <tbody> | ||||
| <tr> | ||||
| <td align="left" colspan="1" rowspan="1">NOERROR</td> | ||||
| <td align="center" colspan="1" rowspan="1">0</td> | ||||
| <td align="left" colspan="1" rowspan="1">SUBSCRIBE successful.</ | ||||
| td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left" colspan="1" rowspan="1">FORMERR</td> | ||||
| <td align="center" colspan="1" rowspan="1">1</td> | ||||
| <td align="left" colspan="1" rowspan="1">Server failed to proces | ||||
| s request due to a | ||||
| malformed request.</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left" colspan="1" rowspan="1">SERVFAIL</td> | ||||
| <td align="center" colspan="1" rowspan="1">2</td> | ||||
| <td align="left" colspan="1" rowspan="1">Server failed to proces | ||||
| s request due to a | ||||
| problem with the server.</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left" colspan="1" rowspan="1">NOTIMP</td> | ||||
| <td align="center" colspan="1" rowspan="1">4</td> | ||||
| <td align="left" colspan="1" rowspan="1">Server does not impleme | ||||
| nt DSO.</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left" colspan="1" rowspan="1">REFUSED</td> | ||||
| <td align="center" colspan="1" rowspan="1">5</td> | ||||
| <td align="left" colspan="1" rowspan="1">Server refuses to proce | ||||
| ss request for policy | ||||
| or security reasons.</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left" colspan="1" rowspan="1">NOTAUTH</td> | ||||
| <td align="center" colspan="1" rowspan="1">9</td> | ||||
| <td align="left" colspan="1" rowspan="1">Server is not authorita | ||||
| tive for the requested | ||||
| name.</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left" colspan="1" rowspan="1">DSOTYPENI</td> | ||||
| <td align="center" colspan="1" rowspan="1">11</td> | ||||
| <td align="left" colspan="1" rowspan="1">SUBSCRIBE operation not | ||||
| supported.</td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| <t pn="section-6.2.2-8">This document specifies only these RCODE value | ||||
| s for SUBSCRIBE | ||||
| Responses. Servers sending SUBSCRIBE Responses <bcp14>SHOULD</bcp14> | ||||
| use one of these values. Note that NXDOMAIN is not a valid RCODE in | ||||
| response to a SUBSCRIBE Request. However, future circumstances may | ||||
| create situations where other RCODE values are appropriate in | ||||
| SUBSCRIBE Responses, so clients <bcp14>MUST</bcp14> be prepared to | ||||
| accept and handle SUBSCRIBE Responses with any other nonzero RCODE | ||||
| error values.</t> | ||||
| <t pn="section-6.2.2-9">If the server sends a nonzero RCODE in the SUB | ||||
| SCRIBE response, | ||||
| that means: | ||||
| </t> | ||||
| <ol spacing="compact" type="a" start="1" pn="section-6.2.2-10"> | ||||
| <li pn="section-6.2.2-10.1" derivedCounter="a.">the client is (at le | ||||
| ast partially) misconfigured, or</li> | ||||
| <li pn="section-6.2.2-10.2" derivedCounter="b.">the server resources | ||||
| are exhausted, or</li> | ||||
| <li pn="section-6.2.2-10.3" derivedCounter="c.">there is some other | ||||
| unknown failure on the server.</li> | ||||
| </ol> | ||||
| <t pn="section-6.2.2-11"> | ||||
| In any case, the client shouldn't retry the subscription to this | ||||
| server right away. If multiple SRV records were returned as | ||||
| described in <xref target="SRV" format="default" sectionFormat="of" d | ||||
| erivedContent="Section 6.1, Paragraph 9, Item 7"/>, a subsequent server | ||||
| <bcp14>MAY</bcp14> be tried immediately.</t> | ||||
| <t pn="section-6.2.2-12">If the client has other successful subscripti | ||||
| ons to this server, | ||||
| these subscriptions remain even though additional subscriptions may | ||||
| be refused. Neither the client nor the server is required to close | ||||
| the connection, although either end may choose to do so.</t> | ||||
| <t pn="section-6.2.2-13">If the server sends a nonzero RCODE, then it | ||||
| <bcp14>SHOULD</bcp14> | ||||
| append a Retry Delay Additional TLV <xref target="RFC8490" format="def | ||||
| ault" sectionFormat="of" derivedContent="RFC8490"/> | ||||
| to the response specifying a delay before the client attempts this | ||||
| operation again. Recommended values for the delay for different | ||||
| RCODE values are given below. These recommended values apply both to | ||||
| the default values a server should place in the Retry Delay | ||||
| Additional TLV and | ||||
| the default values a client should assume if the server provides no | ||||
| Retry Delay Additional TLV. | ||||
| </t> | ||||
| <ul spacing="normal" empty="true" bare="false" pn="section-6.2.2-14"> | ||||
| <li pn="section-6.2.2-14.1">For RCODE = 1 (FORMERR), the delay may b | ||||
| e any value selected | ||||
| by | ||||
| the implementer. A value of five minutes is | ||||
| <bcp14>RECOMMENDED</bcp14> to reduce the risk of high load from | ||||
| defective clients.</li> | ||||
| <li pn="section-6.2.2-14.2">For RCODE = 2 (SERVFAIL), the delay shou | ||||
| ld be chosen according | ||||
| to the level of server overload and the anticipated duration of | ||||
| that overload. By default, a value of one minute is | ||||
| <bcp14>RECOMMENDED</bcp14>. If a more serious server failure | ||||
| occurs, the delay may be longer in accordance with the specific | ||||
| problem encountered.</li> | ||||
| <li pn="section-6.2.2-14.3">For RCODE = 4 (NOTIMP), which occurs on | ||||
| a server that doesn't | ||||
| implement | ||||
| DNS Stateful Operations <xref target="RFC8490" format="default" sec | ||||
| tionFormat="of" derivedContent="RFC8490"/>, | ||||
| it is unlikely that the server will begin supporting DSO | it is unlikely that the server will begin supporting DSO | |||
| in the next few minutes, so the retry delay SHOULD be one hour. | in the next few minutes, so the retry delay <bcp14>SHOULD</bcp14> | |||
| be one hour. | ||||
| Note that in such a case, a server that doesn't implement DSO | Note that in such a case, a server that doesn't implement DSO | |||
| is unlikely to place a Retry Delay TLV in its response, so this | is unlikely to place a Retry Delay Additional TLV in its | |||
| recommended value in particular applies to what a client should ass | response, so this | |||
| ume by default.</t> | recommended value in particular applies to what a client should | |||
| assume by default.</li> | ||||
| <t>For RCODE = 5 (REFUSED), which occurs on a server that implement | <li pn="section-6.2.2-14.4">For RCODE = 5 (REFUSED), which occurs on | |||
| s DNS Push Notifications, but is currently configured to disallow DNS Push Notif | a server that | |||
| ications, the retry delay may be any value selected by the implementer and/or co | implements DNS Push Notifications but is currently configured to | |||
| nfigured by the operator.</t> | disallow DNS Push Notifications, the retry delay may be any value | |||
| <t>If the server being queried is listed in a | selected by the implementer and/or configured by the | |||
| <spanx style="verb">_dns&nbhy;push&nbhy;tls._tcp.<zone></span | operator.</li> | |||
| x> | <li pn="section-6.2.2-14.5">If the server being queried is listed in | |||
| a | ||||
| <tt>_dns‑push‑tls._tcp.<zone></tt> | ||||
| SRV record for the zone, then this is a misconfiguration, | SRV record for the zone, then this is a misconfiguration, | |||
| since this server is being advertised as supporting DNS Push Notifi | since this server is being advertised as supporting DNS Push | |||
| cations for this zone, | Notifications for this zone, | |||
| but the server itself is not currently configured to perform that t | but the server itself is not currently configured to perform that | |||
| ask. | task. | |||
| Since it is possible that the misconfiguration may be repaired | Since it is possible that the misconfiguration may be repaired | |||
| at any time, the retry delay should not be set too high. By defaul | at any time, the retry delay should not be set too high. By | |||
| t, | default, | |||
| a value of 5 minutes is RECOMMENDED.</t> | a value of 5 minutes is <bcp14>RECOMMENDED</bcp14>.</li> | |||
| <li pn="section-6.2.2-14.6">For RCODE = 9 (NOTAUTH), which occurs on | ||||
| <t>For RCODE = 9 (NOTAUTH), which occurs on a server that implement | a server that | |||
| s DNS Push Notifications, but is not configured to be authoritative for the requ | implements DNS Push Notifications but is not configured to be | |||
| ested name, the retry delay may be any value selected by the implementer and/or | authoritative for the requested name, the retry delay may be any | |||
| configured by the operator.</t> | value selected by the implementer and/or configured by the | |||
| <t>If the server being queried is listed in a | operator.</li> | |||
| <spanx style="verb">_dns&nbhy;push&nbhy;tls._tcp.<zone></span | <li pn="section-6.2.2-14.7">If the server being queried is listed in | |||
| x> | a | |||
| <tt>_dns‑push‑tls._tcp.<zone></tt> | ||||
| SRV record for the zone, then this is a misconfiguration, | SRV record for the zone, then this is a misconfiguration, | |||
| since this server is being advertised as supporting DNS Push Notifi | since this server is being advertised as supporting DNS Push | |||
| cations for this zone, | Notifications for this zone, | |||
| but the server itself is not currently configured to perform that t | but the server itself is not currently configured to perform that | |||
| ask. | task. | |||
| Since it is possible that the misconfiguration may be repaired | Since it is possible that the misconfiguration may be repaired | |||
| at any time, the retry delay should not be set too high. By defaul | at any time, the retry delay should not be set too high. By | |||
| t, | default, | |||
| a value of 5 minutes is RECOMMENDED.</t> | a value of 5 minutes is <bcp14>RECOMMENDED</bcp14>.</li> | |||
| <li pn="section-6.2.2-14.8">For RCODE = 11 (DSOTYPENI), | ||||
| <t>For RCODE = 11 (DSOTYPENI), | which occurs on a server that implements DSO but doesn't | |||
| which occurs on a server that implements DSO but doesn't implement | implement DNS Push Notifications, | |||
| DNS Push Notifications, | it is unlikely that the server will begin supporting DNS Push | |||
| it is unlikely that the server will begin supporting DNS Push Notif | Notifications | |||
| ications | in the next few minutes, so the retry delay <bcp14>SHOULD</bcp14> | |||
| in the next few minutes, so the retry delay SHOULD be one hour.</t> | be one hour.</li> | |||
| <li pn="section-6.2.2-14.9">For other RCODE values, the retry delay | ||||
| <t>For other RCODE values, the retry delay should be set by the ser | should be | |||
| ver as appropriate for that error condition. By default, a value of 5 minutes is | set by the server as appropriate for that error condition. | |||
| RECOMMENDED.</t> | By default, a value of 5 minutes is | |||
| </list> | <bcp14>RECOMMENDED</bcp14>.</li> | |||
| </t> | </ul> | |||
| <t>For RCODE = 9 (NOTAUTH), the time delay applies to requests for othe | <t pn="section-6.2.2-15">For RCODE = 9 (NOTAUTH), the time delay appli | |||
| r names falling within the same zone. Requests for names falling within other zo | es to requests for | |||
| nes are not subject to the delay. For all other RCODEs the time delay applies to | other names falling within the same zone. Requests for names falling | |||
| all subsequent requests to this server.</t> | within other zones are not subject to the delay. For all other | |||
| RCODEs, the time delay applies to all subsequent requests to this | ||||
| <t>After sending an error response the server MAY allow the session to | server.</t> | |||
| remain open, | <t pn="section-6.2.2-16">After sending an error response, the server < | |||
| or MAY send a DNS Push Notification Retry Delay Operation TLV instructi | bcp14>MAY</bcp14> | |||
| ng the client to close the session, | allow the session to remain open, or <bcp14>MAY</bcp14> follow it | |||
| as described in the <xref target="RFC8490">DSO specification</xref>. | with | |||
| Clients MUST correctly handle both cases.</t> | a DSO Retry Delay operation (using the Retry Delay Primary TLV) | |||
| instructing the client to close the session as described in the | ||||
| <?rfc needLines="48" ?> | <xref target="RFC8490" format="default" sectionFormat="of" derivedCont | |||
| </section> | ent="RFC8490">DSO specification</xref>. | |||
| </section> | Clients <bcp14>MUST</bcp14> correctly handle both cases. | |||
| Note that the | ||||
| <section title="DNS Push Notification Updates" anchor="push"> | DSO Retry Delay operation (using the Retry Delay Primary TLV) | |||
| <t>Once a subscription has been successfully established, the server gene | is different to the Retry Delay Additional TLV mentioned above. | |||
| rates PUSH messages to send to the client as appropriate. In the case that the a | </t> | |||
| nswer set was already non-empty at the moment the subscription was established, | </section> | |||
| an initial PUSH message will be sent immediately following the SUBSCRIBE Respons | </section> | |||
| e. Subsequent changes to the answer set are then communicated to the client in s | <section anchor="push" numbered="true" toc="include" removeInRFC="false" p | |||
| ubsequent PUSH messages.</t> | n="section-6.3"> | |||
| <name slugifiedName="name-dns-push-notification-updat">DNS Push Notifica | ||||
| <t>A client MUST NOT send a PUSH message. | tion Updates</name> | |||
| <t pn="section-6.3-1">Once a subscription has been successfully establis | ||||
| hed, | ||||
| the server generates PUSH messages to send to the client as | ||||
| appropriate. | ||||
| In the case that the answer set was already non-empty at the moment | ||||
| the subscription was established, an initial PUSH message will be sent | ||||
| immediately following the SUBSCRIBE Response. Subsequent changes to | ||||
| the | ||||
| answer set are then communicated to the client in subsequent PUSH | ||||
| messages.</t> | ||||
| <t pn="section-6.3-2">A client <bcp14>MUST NOT</bcp14> send a PUSH messa | ||||
| ge. | ||||
| If a client does send a PUSH message, | If a client does send a PUSH message, | |||
| or a PUSH message is sent with the QR bit set indicating that it is a res | or a PUSH message is sent with the QR bit set indicating that it is a | |||
| ponse, | response, | |||
| this is a fatal error and the receiver MUST forcibly abort the connection | this is a fatal error and the receiver <bcp14>MUST</bcp14> forcibly | |||
| immediately.</t> | abort the connection immediately.</t> | |||
| <section numbered="true" toc="include" removeInRFC="false" pn="section-6 | ||||
| <section title="PUSH Message"> | .3.1"> | |||
| <name slugifiedName="name-push-message">PUSH Message</name> | ||||
| <t>A PUSH unidirectional message begins with the standard | <t pn="section-6.3.1-1">A PUSH unidirectional message begins with the | |||
| <xref target="RFC8490">DSO 12-byte header</xref>, followed by the PUSH | standard | |||
| primary TLV. | DSO 12-byte header <xref target="RFC8490" format="default" sectionForma | |||
| A PUSH message is illustrated in <xref target="push_msg"/>.</t> | t="of" derivedContent="RFC8490"/>, | |||
| followed by the PUSH Primary TLV. | ||||
| <t>In accordance with the definition of DSO unidirectional messages, | A PUSH message is illustrated in <xref target="push_msg" format="defaul | |||
| the MESSAGE ID field MUST be zero. | t" sectionFormat="of" derivedContent="Figure 3"/>.</t> | |||
| <t pn="section-6.3.1-2">In accordance with the definition of DSO unidi | ||||
| rectional messages, | ||||
| the MESSAGE ID field <bcp14>MUST</bcp14> be zero. | ||||
| There is no client response to a PUSH message.</t> | There is no client response to a PUSH message.</t> | |||
| <t pn="section-6.3.1-3">The other header fields <bcp14>MUST</bcp14> be | ||||
| <t>The other header fields MUST be set as described in the | set as described | |||
| <xref target="RFC8490">DSO spec-ification</xref>. | in the | |||
| The DNS OPCODE field contains the OPCODE value for DNS Stateful Operati | DSO specification <xref target="RFC8490" format="default" sectionFormat | |||
| ons (6). | ="of" derivedContent="RFC8490"/>. | |||
| The four count fields must be zero, and the corresponding four sections | The DNS OPCODE field contains the OPCODE value for DNS Stateful | |||
| must be empty (i.e., absent).</t> | Operations (6). | |||
| The four count fields must be zero, and the corresponding four | ||||
| <t>The DSO-TYPE is PUSH (tentatively 0x41).</t> | sections must be empty (i.e., absent).</t> | |||
| <t pn="section-6.3.1-4">The DSO-TYPE is PUSH (0x0041).</t> | ||||
| <t>The DSO-LENGTH is the length of the DSO-DATA that follows, which spe | <t pn="section-6.3.1-5">The DSO-LENGTH is the length of the DSO-DATA t | |||
| cifies | hat follows, which | |||
| specifies | ||||
| the changes being communicated.</t> | the changes being communicated.</t> | |||
| <t pn="section-6.3.1-6">The DSO-DATA contains one or more change notif | ||||
| <t>The DSO-DATA contains one or more change notifications. | ications. | |||
| A PUSH Message MUST contain at least one change notification. | A PUSH Message <bcp14>MUST</bcp14> contain at least one change | |||
| notification. | ||||
| If a PUSH Message is received that contains no change notifications, | If a PUSH Message is received that contains no change notifications, | |||
| this is a fatal error, and the client MUST forcibly abort the connectio | this is a fatal error and the client <bcp14>MUST</bcp14> forcibly | |||
| n immediately.</t> | abort the connection immediately.</t> | |||
| <t pn="section-6.3.1-7">The change notification records are formatted | ||||
| <t>The change notification records are formatted similarly to how | similarly to how | |||
| DNS Resource Records are conventionally expressed in DNS messages, | DNS Resource Records are conventionally expressed in DNS messages, | |||
| as illustrated in <xref target="push_msg"/>, | as illustrated in <xref target="push_msg" format="default" sectionForma t="of" derivedContent="Figure 3"/>, | |||
| and are interpreted as described below.</t> | and are interpreted as described below.</t> | |||
| <t pn="section-6.3.1-8">The TTL field holds an unsigned 32-bit integer | ||||
| <?rfc needLines="6" ?> | <xref target="RFC2181" format="default" sectionFormat="of" derivedContent="RFC2 | |||
| <t>The TTL field holds an unsigned 32-bit integer <xref target="RFC2181 | 181"/>. | |||
| "/>. | If the TTL is in the range 0 to 2,147,483,647 seconds (0 to | |||
| If the TTL is in the range 0 to 2,147,483,647 seconds (0 to 2^31 - 1, o | 2<sup>31</sup> - 1, or 0x7FFFFFFF), | |||
| r 0x7FFFFFFF), | then a new DNS Resource Record with the given name, type, class, and | |||
| then a new DNS Resource Record with the given name, type, class and RDA | RDATA is added. | |||
| TA is added. | Type and class <bcp14>MUST NOT</bcp14> be 255 (ANY). If either type | |||
| Type and class MUST NOT be 255 (ANY). If either type or class are 255 ( | or class are 255 (ANY), | |||
| ANY) | this is a fatal error and the client <bcp14>MUST</bcp14> forcibly | |||
| this is a fatal error, and the client MUST forcibly abort the connectio | abort the connection immediately. | |||
| n immediately. | A TTL of 0 means that this record should be retained for as long as | |||
| A TTL of 0 means that this record should be retained for as long as the | the subscription is active | |||
| subscription is active, | and should be discarded immediately the moment the subscription is | |||
| and should be discarded immediately the moment the subscription is canc | canceled.</t> | |||
| elled.</t> | <t pn="section-6.3.1-9">If the TTL has the value 0xFFFFFFFF, then the | |||
| DNS Resource Record | ||||
| <t>If the TTL has the value 0xFFFFFFFF, then the | with the given name, type, class, and RDATA is removed. Type and | |||
| DNS Resource Record with the given name, type, class and RDATA is remov | class <bcp14>MUST NOT</bcp14> be 255 (ANY). If either type or class | |||
| ed. | are 255 (ANY), this is a fatal error and the client | |||
| Type and class MUST NOT be 255 (ANY). If either type or class are 255 ( | <bcp14>MUST</bcp14> forcibly abort the connection immediately.</t> | |||
| ANY) | <t pn="section-6.3.1-10">If the TTL has the value 0xFFFFFFFE, then thi | |||
| this is a fatal error, and the client MUST forcibly abort the connectio | s is a 'collective' | |||
| n immediately.</t> | remove notification. For collective remove notifications, RDLEN | |||
| <bcp14>MUST</bcp14> be zero, and consequently, the RDATA | ||||
| <t>If the TTL has the value 0xFFFFFFFE, then this is a 'collective' rem | <bcp14>MUST</bcp14> be empty. If a change notification is received | |||
| ove notification. | where TTL = 0xFFFFFFFE and RDLEN is not zero, this is a fatal error | |||
| For collective remove notifications RDLEN MUST be zero and consequently | and the client <bcp14>MUST</bcp14> forcibly abort the connection | |||
| the RDATA MUST be empty. | immediately.</t> | |||
| If a change notification is received where TTL = 0xFFFFFFFE and RDLEN i | <t pn="section-6.3.1-11">There are three types of collective remove no | |||
| s not zero, | tification. | |||
| this is a fatal error, and the client MUST forcibly abort the connectio | For collective remove notifications:</t> | |||
| n immediately.</t> | <ul bare="false" empty="false" spacing="normal" pn="section-6.3.1-12"> | |||
| <li pn="section-6.3.1-12.1">If CLASS is not 255 (ANY) and TYPE is no | ||||
| <t>There are three types of collective remove notification:</t> | t 255 (ANY), then for the given | |||
| name, this removes all records of the specified type in the specified class. | ||||
| <t>For collective remove notifications, | </li> | |||
| if CLASS is not 255 (ANY) and TYPE is not 255 (ANY) | <li pn="section-6.3.1-12.2">If CLASS is not 255 (ANY) and TYPE is 25 | |||
| then for the given name this removes all records of the specified type | 5 (ANY), then for the given name, | |||
| in the specified class.</t> | this removes all records of all types in the specified class. | |||
| </li> | ||||
| <t>For collective remove notifications, | <li pn="section-6.3.1-12.3">If CLASS is 255 (ANY), then for the give | |||
| if CLASS is not 255 (ANY) and TYPE is 255 (ANY) | n name, this removes all records | |||
| then for the given name this removes all records of all types in the sp | of all types in all classes. In this case, TYPE <bcp14>MUST</bcp14> be set to | |||
| ecified class.</t> | zero on | |||
| transmission and <bcp14>MUST</bcp14> be silently ignored on reception. | ||||
| <t>For collective remove notifications, | </li> | |||
| if CLASS is 255 (ANY), | </ul> | |||
| then for the given name this removes all records of all types in all cl | <t pn="section-6.3.1-13">Summary of change notification types: | |||
| asses. | </t> | |||
| In this case TYPE MUST be set to zero on transmission, and MUST be sile | <ul spacing="normal" bare="false" empty="false" pn="section-6.3.1-14"> | |||
| ntly ignored on reception.</t> | <li pn="section-6.3.1-14.1"> | |||
| <t pn="section-6.3.1-14.1.1">Remove all RRsets from a name in all | ||||
| <?rfc needLines="19" ?> | classes:<br/> | |||
| <t>Summary of change notification types: | TTL = 0xFFFFFFFE, RDLEN = 0, CLASS = 255 (ANY).</t> | |||
| <list style="bullets"> | </li> | |||
| <t>Remove all RRsets from a name, in all classes<vspace /> | <li pn="section-6.3.1-14.2"> | |||
| TTL = 0xFFFFFFFE, RDLEN = 0, CLASS = 255 (ANY)</t> | <t pn="section-6.3.1-14.2.1">Remove all RRsets from a name in give | |||
| n class:<br/> | ||||
| <t>Remove all RRsets from a name, in given class:<vspace /> | TTL = 0xFFFFFFFE, RDLEN = 0, CLASS gives class, TYPE = 255 | |||
| TTL = 0xFFFFFFFE, RDLEN = 0, CLASS gives class, TYPE = 255 (ANY)</t | (ANY).</t> | |||
| > | </li> | |||
| <li pn="section-6.3.1-14.3"> | ||||
| <t>Remove specified RRset from a name, in given class:<vspace /> | <t pn="section-6.3.1-14.3.1">Remove specified RRset from a name in | |||
| TTL = 0xFFFFFFFE, RDLEN = 0<vspace /> | given class:<br/> | |||
| CLASS and TYPE specify the RRset being removed</t> | TTL = 0xFFFFFFFE, RDLEN = 0,<br/> | |||
| CLASS and TYPE specify the RRset being removed.</t> | ||||
| <t>Remove an individual RR from a name:<vspace /> | </li> | |||
| TTL = 0xFFFFFFFF<vspace /> | <li pn="section-6.3.1-14.4"> | |||
| CLASS, TYPE, RDLEN and RDATA specify the RR being removed</t> | <t pn="section-6.3.1-14.4.1">Remove an individual RR from a name:< | |||
| br/> | ||||
| <t>Add individual RR to a name<vspace /> | TTL = 0xFFFFFFFF,<br/> | |||
| TTL >= 0 and TTL <= 0x7FFFFFFF<vspace /> | CLASS, TYPE, RDLEN, and RDATA specify the RR being removed.</t> | |||
| CLASS, TYPE, RDLEN, RDATA and TTL specify the RR being added</t> | </li> | |||
| </list> | <li pn="section-6.3.1-14.5"> | |||
| </t> | <t pn="section-6.3.1-14.5.1">Add individual RR to a name:<br/> | |||
| TTL >= 0 and TTL <= 0x7FFFFFFF,<br/> | ||||
| <t>Note that it is valid for the RDATA of an added or removed DNS Resou | CLASS, TYPE, RDLEN, RDATA, and TTL specify the RR being | |||
| rce Record to be empty (zero length). | added.</t> | |||
| For example, an <xref target="RFC3123">Address Prefix List Resource Rec | </li> | |||
| ord</xref> may have empty RDATA. | </ul> | |||
| Therefore, a change notification with RDLEN = 0 does not automatically | <t pn="section-6.3.1-15">Note that it is valid for the RDATA of an add | |||
| indicate a remove notification. | ed or removed DNS | |||
| If RDLEN = 0 and TTL is the in the range 0 - 0x7FFFFFFF, this change no | Resource Record to be empty (zero length). For example, an Address | |||
| tification signals the addition of a | Prefix List Resource Record <xref target="RFC3123" format="default" se | |||
| record with the given name, type, class, and empty RDATA. | ctionFormat="of" derivedContent="RFC3123"/> may have empty RDATA. Therefore, a | |||
| If RDLEN = 0 and TTL = 0xFFFFFFFF, this change notification signals the | change | |||
| removal specifically of that single | notification with RDLEN = 0 does not automatically indicate a remove | |||
| record with the given name, type, class, and empty RDATA.</t> | notification. If RDLEN = 0 and TTL is in the range 0 to | |||
| 0x7FFFFFFF, this change notification signals the addition of a | ||||
| <t>If the TTL is any value other than 0xFFFFFFFF, 0xFFFFFFFE, or a valu | record with the given name, type, class, and empty RDATA. If RDLEN | |||
| e in the range 0 - 0x7FFFFFFF, | = 0 and TTL = 0xFFFFFFFF, this change notification signals the | |||
| then the receiver SHOULD silently ignore this particular change notific | removal specifically of that single record with the given name, | |||
| ation record. | type, class, and empty RDATA.</t> | |||
| The connection is not terminated and other valid change notification re | <t pn="section-6.3.1-16">If the TTL is any value other than 0xFFFFFFFF | |||
| cords | , 0xFFFFFFFE, or a | |||
| value in the range 0 to 0x7FFFFFFF, | ||||
| then the receiver <bcp14>SHOULD</bcp14> silently ignore this | ||||
| particular change notification record. | ||||
| The connection is not terminated and other valid change notification | ||||
| records | ||||
| within this PUSH message are processed as usual.</t> | within this PUSH message are processed as usual.</t> | |||
| <t pn="section-6.3.1-17">In the case where a single change affects mor | ||||
| <t>For efficiency, when generating a PUSH message, a server SHOULD | e than one active | |||
| include as many change notifications as it has immediately available to | subscription, only one PUSH message is sent. For example, a PUSH | |||
| send, | message adding a given record may match both a SUBSCRIBE request | |||
| rather than sending each change notification as a separate DSO message. | with the same TYPE and a different SUBSCRIBE request with TYPE = 255 | |||
| Once it has exhausted the list of change notifications immediately avai | (ANY). It is not the case that two PUSH messages are sent because | |||
| lable to send, | the new record matches two active subscriptions.</t> | |||
| a server SHOULD then send the PUSH message immediately, | <t pn="section-6.3.1-18">The server <bcp14>SHOULD</bcp14> encode chang | |||
| rather than waiting to see if additional change notifications become av | e notifications in | |||
| ailable.</t> | the most efficient manner possible. | |||
| For example, when three AAAA records are removed from a given name, | ||||
| <?rfc needLines="6" ?> | and no other AAAA | |||
| <t>For efficiency, when generating a PUSH message, a server SHOULD | records exist for that name, the server <bcp14>SHOULD</bcp14> send a | |||
| use standard DNS name compression, | "Remove specified RRset from a name in given class" PUSH message, | |||
| with offsets relative to the beginning of the DNS message <xref target= | not three separate | |||
| "RFC1035"/>. | "Remove an individual RR from a name" PUSH messages. | |||
| When multiple change notifications in a single PUSH message have the sa | Similarly, when both an SRV and a TXT record are removed from a | |||
| me owner name, | given name, and no other | |||
| this name compression can yield significant savings. | records of any kind exist for that name in that class, the server | |||
| Name compression should be performed as specified in Section 18.14 of t | <bcp14>SHOULD</bcp14> send a | |||
| he | "Remove all RRsets from a name in given class" PUSH message, not two | |||
| <xref target="RFC6762">Multicast DNS specification</xref>, namely, | separate | |||
| owner names should always be compressed, | "Remove specified RRset from a name in given class" PUSH | |||
| and names appearing within RDATA should be compressed for only the RR t | messages.</t> | |||
| ypes listed below: | <t pn="section-6.3.1-19">For efficiency, when generating a PUSH messag | |||
| <list style="hanging"> | e, rather than | |||
| <t>NS, CNAME, PTR, DNAME, SOA, MX, AFSDB, RT, KX, RP, PX, SRV, NSEC</ | sending | |||
| t> | each change notification as a separate DSO message, a server | |||
| </list></t> | <bcp14>SHOULD</bcp14> include as many change notifications as it has | |||
| immediately available to send to that client, even if those change | ||||
| <t>Servers may generate PUSH messages up to a maximum DNS message lengt | notifications apply to different subscriptions from that | |||
| h of 16,382 bytes, | client. Conceptually, a PUSH | |||
| message is a session-level mechanism, not a subscription-level | ||||
| mechanism. | ||||
| Once it has exhausted the list of change notifications immediately | ||||
| available to send to that client, | ||||
| a server <bcp14>SHOULD</bcp14> then send the PUSH message | ||||
| immediately | ||||
| rather than waiting speculatively to see if additional change | ||||
| notifications become available.</t> | ||||
| <t pn="section-6.3.1-20">For efficiency, when generating a PUSH messag | ||||
| e a server | ||||
| <bcp14>SHOULD</bcp14> use standard DNS name compression, with | ||||
| offsets | ||||
| relative to the beginning of the DNS message <xref target="RFC1035" fo | ||||
| rmat="default" sectionFormat="of" derivedContent="RFC1035"/>. When multiple cha | ||||
| nge notifications in a single | ||||
| PUSH message have the same owner name, this name compression can | ||||
| yield significant savings. Name compression should be performed as | ||||
| specified in <xref target="RFC6762" sectionFormat="of" section="18.14" | ||||
| format="default" derivedLink="https://rfc-editor.org/rfc/rfc6762#section-18.14" | ||||
| derivedContent="RFC6762">the Multicast DNS specification</xref>; namely, | ||||
| owner names | ||||
| should always be compressed, and names appearing within RDATA should | ||||
| be compressed for only the RR types listed below: | ||||
| </t> | ||||
| <dl newline="false" spacing="normal" pn="section-6.3.1-21"> | ||||
| <dt pn="section-6.3.1-21.1"/> | ||||
| <dd pn="section-6.3.1-21.2">NS, CNAME, PTR, DNAME, SOA, MX, AFSDB, R | ||||
| T, KX, RP, PX, SRV, | ||||
| NSEC</dd> | ||||
| </dl> | ||||
| <t pn="section-6.3.1-22">Servers may generate PUSH messages up to a ma | ||||
| ximum DNS message | ||||
| length of 16,382 bytes, | ||||
| counting from the start of the DSO 12-byte header. | counting from the start of the DSO 12-byte header. | |||
| Including the two-byte length prefix that is used to frame DNS over a b | Including the two-byte length prefix that is used to frame DNS over a | |||
| yte stream | byte stream | |||
| like TLS, this makes a total of 16,384 bytes. | like TLS, this makes a total of 16,384 bytes. | |||
| Servers MUST NOT generate PUSH messages larger than this. | Servers <bcp14>MUST NOT</bcp14> generate PUSH messages larger than | |||
| this. | ||||
| Where the immediately available change notifications | Where the immediately available change notifications | |||
| are sufficient to exceed a DNS message length of 16,382 bytes, | are sufficient to exceed a DNS message length of 16,382 bytes, | |||
| the change notifications MUST be communicated in separate PUSH messages | the change notifications <bcp14>MUST</bcp14> be communicated in | |||
| separate PUSH messages | ||||
| of up to 16,382 bytes each. | of up to 16,382 bytes each. | |||
| DNS name compression becomes less effective for messages larger than 16 | DNS name compression becomes less effective for messages larger than | |||
| ,384 bytes, | 16,384 bytes, | |||
| so little efficiency benefit is gained by sending messages larger than | so little efficiency benefit is gained by sending messages larger | |||
| this.</t> | than this.</t> | |||
| <t pn="section-6.3.1-23">If a client receives a PUSH message with a DN | ||||
| <t>If a client receives a PUSH message with a DNS message length larger | S message length | |||
| than 16,382 bytes, | larger than 16,382 bytes, | |||
| this is a fatal error, and the client MUST forcibly abort the connectio | this is a fatal error and the client <bcp14>MUST</bcp14> forcibly | |||
| n immediately.</t> | abort the connection immediately.</t> | |||
| <figure anchor="push_msg" align="left" suppress-title="false" pn="figu | ||||
| <figure align="left" anchor="push_msg" title="PUSH Message"><artwork al | re-3"> | |||
| ign="left"><![CDATA[ | <name slugifiedName="name-push-message-2">PUSH Message</name> | |||
| <artwork align="left" name="" type="" alt="" pn="section-6.3.1-24.1" | ||||
| > | ||||
| 1 1 1 1 1 1 | 1 1 1 1 1 1 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | |||
| | MESSAGE ID (MUST BE ZERO) | \ | | MESSAGE ID (MUST BE ZERO) | \ | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| |QR| OPCODE(6) | Z | RCODE | | | |QR| OPCODE(6) | Z | RCODE | | | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| | QDCOUNT (MUST BE ZERO) | | | | QDCOUNT (MUST BE ZERO) | | | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > HEADER | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > HEADER | |||
| | ANCOUNT (MUST BE ZERO) | | | | ANCOUNT (MUST BE ZERO) | | | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| | NSCOUNT (MUST BE ZERO) | | | | NSCOUNT (MUST BE ZERO) | | | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| | ARCOUNT (MUST BE ZERO) | / | | ARCOUNT (MUST BE ZERO) | / | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | |||
| | DSO-TYPE = PUSH (tentatively 0x41) | | | DSO-TYPE = PUSH (0x0041) | | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | |||
| | DSO-LENGTH (number of octets in DSO-DATA) | | | DSO-LENGTH (number of octets in DSO-DATA) | | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | |||
| \ NAME \ \ | \ NAME \ \ | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| | TYPE | | | | TYPE | | | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| | CLASS | | | | CLASS | | | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| | TTL | | | | TTL | | | |||
| | (32-bit unsigned big-endian integer) | > DSO-DATA | | (32-bit unsigned big-endian integer) | > DSO-DATA | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| | RDLEN (16-bit unsigned big-endian integer) | | | | RDLEN (16-bit unsigned big-endian integer) | | | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| \ RDATA (sized as necessary) \ | | \ RDATA (sized as necessary) \ | | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| : NAME, TYPE, CLASS, TTL, RDLEN, RDATA : | | : NAME, TYPE, CLASS, TTL, RDLEN, RDATA : | | |||
| : Repeated As Necessary : / | : Repeated As Necessary : / | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ /]]></artwork></figure> | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ /</artwork> | |||
| </figure> | ||||
| <t>When processing the records received in a PUSH Message, the receivin | <t pn="section-6.3.1-25">When processing the records received in a PUS | |||
| g client MUST validate | H Message, the | |||
| that the records being added or removed correspond with at least one cu | receiving client <bcp14>MUST</bcp14> validate | |||
| rrently active | that the records being added or removed correspond with at least one | |||
| subscription on that session. Specifically, the record name MUST match | currently active | |||
| the name given in the | subscription on that session. Specifically, the record name | |||
| SUBSCRIBE request, subject to the usual established DNS case-insensitiv | <bcp14>MUST</bcp14> match the name given in the | |||
| ity for US-ASCII letters. | SUBSCRIBE request, subject to the usual established DNS | |||
| case-insensitivity for US-ASCII letters. | ||||
| For individual additions and removals, | For individual additions and removals, | |||
| if the TYPE in the SUBSCRIBE request was not ANY (255) | if the TYPE in the SUBSCRIBE request was not ANY (255), | |||
| then the TYPE of the record must match the TYPE given in the SUBSCRIBE | then the TYPE of the record must either be CNAME or match the TYPE | |||
| request, and | given in the SUBSCRIBE request, and | |||
| if the CLASS in the SUBSCRIBE request was not ANY (255) | if the CLASS in the SUBSCRIBE request was not ANY (255), | |||
| then the CLASS of the record must match the CLASS given in the SUBSCRIB | then the CLASS of the record must match the CLASS given in the | |||
| E request. | SUBSCRIBE request. | |||
| For collective removals, at least one of the records being removed must | For collective removals, at least one of the records being removed | |||
| match an active subscription. | must match an active subscription. | |||
| If a matching active subscription on that session is not found, then th | If a matching active subscription on that session is not found, then | |||
| at particular | that particular | |||
| addition/removal record is silently ignored. Processing of other additi | addition/removal record is silently ignored. The processing of other | |||
| ons and removal records | additions and removal records | |||
| in this message is not affected. The DSO session is not closed. This is | in this message is not affected. The DSO session is not closed. This | |||
| to allow for | is to allow for | |||
| the unavoidable race condition where a client sends an outbound UNSUBSC | the unavoidable race condition where a client sends an outbound | |||
| RIBE while | UNSUBSCRIBE while | |||
| inbound PUSH messages for that subscription from the server are still i | inbound PUSH messages for that subscription from the server are still | |||
| n flight.</t> | in flight.</t> | |||
| <t pn="section-6.3.1-26">The TTL of an added record is stored by the c | ||||
| <t>In the case where a single change affects more than one active subsc | lient. While the | |||
| ription, only one PUSH message is sent. For example, a PUSH message adding a giv | subscription | |||
| en record may match both a SUBSCRIBE request with the same TYPE and a different | is active the TTL is not decremented, because a change to the TTL | |||
| SUBSCRIBE request with TYPE = 255 (ANY). It is not the case that two PUSH messag | would | |||
| es are sent because the new record matches two active subscriptions.</t> | ||||
| <t>The server SHOULD encode change notifications in the most efficient | ||||
| manner possible. | ||||
| For example, when three AAAA records are removed from a given name, and | ||||
| no other AAAA | ||||
| records exist for that name, the server SHOULD send a "remove an RRset | ||||
| from a name" | ||||
| PUSH message, not three separate "remove an individual RR from a name" | ||||
| PUSH messages. | ||||
| Similarly, when both an SRV and a TXT record are removed from a given n | ||||
| ame, and no other | ||||
| records of any kind exist for that name, the server SHOULD send a "remo | ||||
| ve all RRsets | ||||
| from a name" PUSH message, not two separate "remove an RRset from a nam | ||||
| e" PUSH messages.</t> | ||||
| <t>A server SHOULD combine multiple change notifications in a single PU | ||||
| SH message when possible, even if those change notifications apply to different | ||||
| subscriptions. Conceptually, a PUSH message is a session-level mechanism, not a | ||||
| subscription-level mechanism.</t> | ||||
| <t>The TTL of an added record is stored by the client. While the subsc | ||||
| ription | ||||
| is active, the TTL is not decremented, because a change to the TTL wo | ||||
| uld | ||||
| produce a new update. | produce a new update. | |||
| For as long as a relevant subscription remains active, the client | For as long as a relevant subscription remains active, the client | |||
| SHOULD assume that when a record goes away the server will notify it | <bcp14>SHOULD</bcp14> assume that when a record goes away, the | |||
| of that fact. Consequently, a client does not have to poll to verify | server will notify it | |||
| that the record is still there. Once a subscription is cancelled | of that fact. Consequently, a client does not have to poll to | |||
| (individually, or as a result of the DSO session being closed) record | verify | |||
| aging for records covered by the subscription resumes and records are | that the record is still there. Once a subscription is canceled | |||
| (individually, or as a result of the DSO session being closed), | ||||
| record | ||||
| aging for records covered by the subscription resumes and records | ||||
| are | ||||
| removed from the local cache when their TTL reaches zero.</t> | removed from the local cache when their TTL reaches zero.</t> | |||
| <?rfc needLines="48" ?> | </section> | |||
| </section> | </section> | |||
| </section> | <section anchor="unsubscribe" numbered="true" toc="include" removeInRFC="f | |||
| alse" pn="section-6.4"> | ||||
| <section title="DNS Push Notification UNSUBSCRIBE" anchor="unsubscribe"> | <name slugifiedName="name-dns-push-notification-unsub">DNS Push Notifica | |||
| <t>To cancel an individual subscription without closing the entire DSO se | tion UNSUBSCRIBE</name> | |||
| ssion, the client sends an UNSUBSCRIBE message over the established DSO session | <t pn="section-6.4-1">To cancel an individual subscription without closi | |||
| to the server.</t> | ng the entire DSO | |||
| session, the client sends an UNSUBSCRIBE message over the established | ||||
| <t>The entity that initiates an UNSUBSCRIBE message is by definition the | DSO session to the server.</t> | |||
| client. | <t pn="section-6.4-2">The entity that initiates an UNSUBSCRIBE message i | |||
| A server MUST NOT send an UNSUBSCRIBE message over an existing session fr | s by definition | |||
| om a client. | the client. | |||
| If a server does send an UNSUBSCRIBE message over a DSO session initiated | A server <bcp14>MUST NOT</bcp14> send an UNSUBSCRIBE message over an | |||
| by a client, | existing session from a client. | |||
| or an UNSUBSCRIBE message is sent with the QR bit set indicating that it | If a server does send an UNSUBSCRIBE message over a DSO session | |||
| is a response, | initiated by a client, | |||
| this is a fatal error and the receiver MUST forcibly abort the connection | or an UNSUBSCRIBE message is sent with the QR bit set indicating that | |||
| immediately.</t> | it is a response, | |||
| this is a fatal error and the receiver <bcp14>MUST</bcp14> forcibly | ||||
| <section title="UNSUBSCRIBE Message"> | abort the connection immediately.</t> | |||
| <section numbered="true" toc="include" removeInRFC="false" pn="section-6 | ||||
| <t>An UNSUBSCRIBE unidirectional message begins with the standard | .4.1"> | |||
| <xref target="RFC8490">DSO 12-byte header</xref>, followed by the UNSUB | <name slugifiedName="name-unsubscribe-message">UNSUBSCRIBE Message</na | |||
| SCRIBE primary TLV. | me> | |||
| An UNSUBSCRIBE message is illustrated in <xref target="unsubscribe_msg" | <t pn="section-6.4.1-1">An UNSUBSCRIBE unidirectional message begins w | |||
| />.</t> | ith the standard | |||
| DSO 12-byte header <xref target="RFC8490" format="default" sectionForma | ||||
| <t>In accordance with the definition of DSO unidirectional messages, | t="of" derivedContent="RFC8490"/>, | |||
| the MESSAGE ID field MUST be zero. | followed by the UNSUBSCRIBE Primary TLV. | |||
| An UNSUBSCRIBE message is illustrated in <xref target="unsubscribe_msg" | ||||
| format="default" sectionFormat="of" derivedContent="Figure 4"/>.</t> | ||||
| <t pn="section-6.4.1-2">In accordance with the definition of DSO unidi | ||||
| rectional messages, | ||||
| the MESSAGE ID field <bcp14>MUST</bcp14> be zero. | ||||
| There is no server response to an UNSUBSCRIBE message.</t> | There is no server response to an UNSUBSCRIBE message.</t> | |||
| <t pn="section-6.4.1-3">The other header fields <bcp14>MUST</bcp14> be | ||||
| <t>The other header fields MUST be set as described in the | set as described | |||
| <xref target="RFC8490">DSO spec-ification</xref>. | in the | |||
| The DNS OPCODE field contains the OPCODE value for DNS Stateful Operati | <xref target="RFC8490" format="default" sectionFormat="of" derivedConte | |||
| ons (6). | nt="RFC8490">DSO specification</xref>. | |||
| The four count fields must be zero, and the corresponding four sections | The DNS OPCODE field contains the OPCODE value for DNS Stateful | |||
| must be empty (i.e., absent).</t> | Operations (6). | |||
| The four count fields must be zero, and the corresponding four | ||||
| <t>The DSO-TYPE is UNSUBSCRIBE (tentatively 0x42).</t> | sections must be empty (i.e., absent).</t> | |||
| <t pn="section-6.4.1-4">The DSO-TYPE is UNSUBSCRIBE (0x0042).</t> | ||||
| <t>The DSO-LENGTH field contains the value 2, the length of the 2-octet | <t pn="section-6.4.1-5">The DSO-LENGTH field contains the value 2, the | |||
| MESSAGE ID contained in the DSO-DATA.</t> | length of the | |||
| 2-octet MESSAGE ID contained in the DSO-DATA.</t> | ||||
| <t>The DSO-DATA contains the value previously given in the MESSAGE ID f | <t pn="section-6.4.1-6">The DSO-DATA contains the value previously giv | |||
| ield of an active SUBSCRIBE request. | en in the MESSAGE | |||
| This is how the server knows which SUBSCRIBE request is being cancelled | ID field of an active SUBSCRIBE request. | |||
| . | This is how the server knows which SUBSCRIBE request is being | |||
| After receipt of the UNSUBSCRIBE message, the SUBSCRIBE request is no l | canceled. | |||
| onger active.</t> | After receipt of the UNSUBSCRIBE message, the SUBSCRIBE request is no | |||
| longer active.</t> | ||||
| <t>It is allowable for the client to issue an UNSUBSCRIBE message for a | <t pn="section-6.4.1-7">It is allowable for the client to issue an UNS | |||
| previous SUBSCRIBE request | UBSCRIBE message | |||
| for a previous SUBSCRIBE request | ||||
| for which the client has not yet received a SUBSCRIBE response. | for which the client has not yet received a SUBSCRIBE response. | |||
| This is to allow for the case where a client starts and stops a subscri | This is to allow for the case where a client starts and stops a | |||
| ption in less than the | subscription in less than the | |||
| round-trip time to the server. | round-trip time to the server. | |||
| The client is NOT required to wait for the SUBSCRIBE response before is | The client is NOT required to wait for the SUBSCRIBE response before | |||
| suing the UNSUBSCRIBE message.</t> | issuing the UNSUBSCRIBE message.</t> | |||
| <t pn="section-6.4.1-8">Consequently, it is possible for a server to r | ||||
| <?rfc needLines="6" ?> | eceive an | |||
| <t>Consequently, it is possible for a server to receive an UNSUBSCRIBE | UNSUBSCRIBE message | |||
| message | ||||
| that does not match any currently active subscription. | that does not match any currently active subscription. | |||
| This can occur when a client sends a SUBSCRIBE request, | This can occur when a client sends a SUBSCRIBE request, | |||
| which subsequently fails and returns an error code, | which subsequently fails and returns an error code, | |||
| but the client sent an UNSUBSCRIBE message before it | but the client sent an UNSUBSCRIBE message before it | |||
| became aware that the SUBSCRIBE request had failed. | became aware that the SUBSCRIBE request had failed. | |||
| Because of this, servers MUST silently ignore | Because of this, servers <bcp14>MUST</bcp14> silently ignore | |||
| UNSUBSCRIBE messages that do not match any currently active subscriptio | UNSUBSCRIBE messages that do not match any currently active | |||
| n.</t> | subscription.</t> | |||
| <figure anchor="unsubscribe_msg" align="left" suppress-title="false" p | ||||
| <figure align="left" anchor="unsubscribe_msg" title="UNSUBSCRIBE Messag | n="figure-4"> | |||
| e"><artwork align="left"><![CDATA[ | <name slugifiedName="name-unsubscribe-message-2">UNSUBSCRIBE Message | |||
| </name> | ||||
| <artwork align="left" name="" type="" alt="" pn="section-6.4.1-9.1"> | ||||
| 1 1 1 1 1 1 | 1 1 1 1 1 1 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | |||
| | MESSAGE ID (MUST BE ZERO) | \ | | MESSAGE ID (MUST BE ZERO) | \ | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| |QR| OPCODE(6) | Z | RCODE | | | |QR| OPCODE(6) | Z | RCODE | | | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| | QDCOUNT (MUST BE ZERO) | | | | QDCOUNT (MUST BE ZERO) | | | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > HEADER | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > HEADER | |||
| | ANCOUNT (MUST BE ZERO) | | | | ANCOUNT (MUST BE ZERO) | | | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| | NSCOUNT (MUST BE ZERO) | | | | NSCOUNT (MUST BE ZERO) | | | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| | ARCOUNT (MUST BE ZERO) | / | | ARCOUNT (MUST BE ZERO) | / | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | |||
| | DSO-TYPE = UNSUBSCRIBE (tentatively 0x42) | | | DSO-TYPE = UNSUBSCRIBE (0x0042) | | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | |||
| | DSO-LENGTH (2) | | | DSO-LENGTH (2) | | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | |||
| | SUBSCRIBE MESSAGE ID | > DSO-DATA | | SUBSCRIBE MESSAGE ID | > DSO-DATA | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ /]]></artwork></figure> | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ /</artwork> | |||
| </figure> | ||||
| <?rfc needLines="48" ?> | </section> | |||
| </section> | </section> | |||
| </section> | <section anchor="reconfirm" numbered="true" toc="include" removeInRFC="fal | |||
| se" pn="section-6.5"> | ||||
| <section title="DNS Push Notification RECONFIRM" anchor="reconfirm"> | <name slugifiedName="name-dns-push-notification-recon">DNS Push Notifica | |||
| <t>Sometimes, particularly when used with a <xref target="DisProx">Discov | tion RECONFIRM</name> | |||
| ery Proxy</xref>, a DNS Zone may contain stale data. When a client encounters da | <t pn="section-6.5-1">Sometimes, particularly when used with a Discovery | |||
| ta that it believes may be stale (e.g., an SRV record referencing a target host+ | Proxy <xref target="RFC8766" format="default" sectionFormat="of" derivedContent | |||
| port that is not responding to connection requests) the client can send a RECONF | ="RFC8766"/>, a DNS Zone may contain | |||
| IRM message to ask the server to re-verify that the data is still valid. For a D | stale data. When a client encounters data that it believes may be | |||
| iscovery Proxy, this causes it to issue new Multicast DNS queries to ascertain w | stale (e.g., an SRV record referencing a target host+port that is not | |||
| hether the target device is still present. How the Discovery Proxy causes these | responding to connection requests), the client can send a RECONFIRM | |||
| new Multicast DNS queries to be issued depends on the details of the underlying | message to ask the server to re-verify that the data is still | |||
| Multicast DNS implementation being used. | valid. For a Discovery Proxy, this causes it to issue new Multicast | |||
| For example, a Discovery Proxy built on Apple's dns_sd.h API <xref target | DNS queries to ascertain whether the target device is still | |||
| ="SD-API"/> | present. How the Discovery Proxy causes these new Multicast DNS | |||
| responds to a DNS Push Notification RECONFIRM message by calling | queries to be issued depends on the details of the underlying | |||
| the underlying API's DNSServiceReconfirmRecord() routine.</t> | Multicast DNS implementation being used. For example, a Discovery | |||
| Proxy built on Apple's dns_sd.h API <xref target="SD-API" format="defaul | ||||
| <t>For other types of DNS server, the RECONFIRM operation is currently un | t" sectionFormat="of" derivedContent="SD-API"/> responds to a DNS Push Notificat | |||
| defined, and SHOULD result in a NOERROR response, but otherwise need not cause a | ion RECONFIRM | |||
| ny action to occur.</t> | message by calling the underlying API's DNSServiceReconfirmRecord() | |||
| routine.</t> | ||||
| <t>Frequent use of RECONFIRM operations may be a sign of network unreliab | <t pn="section-6.5-2">For other types of DNS server, the RECONFIRM opera | |||
| ility, or some kind of misconfiguration, so RECONFIRM operations MAY be logged o | tion is currently | |||
| r otherwise communicated to a human administrator to assist in detecting and rem | undefined and <bcp14>SHOULD</bcp14> result in a NOERROR response, but | |||
| edying such network problems.</t> | it need not cause any other action to occur.</t> | |||
| <t pn="section-6.5-3">Frequent use of RECONFIRM operations may be a sign | ||||
| <t>If, after receiving a valid RECONFIRM message, the server determines t | of network | |||
| hat the disputed records are in fact no longer valid, then subsequent DNS PUSH M | unreliability, or some kind of misconfiguration, so RECONFIRM | |||
| essages will be generated to inform interested clients. Thus, one client discove | operations <bcp14>MAY</bcp14> be logged or otherwise communicated to a | |||
| ring that a previously-advertised device (like a network printer) is no longer p | human administrator to assist in detecting and remedying such network | |||
| resent has the side effect of informing all other interested clients that the de | problems.</t> | |||
| vice in question is now gone.</t> | <t pn="section-6.5-4">If, after receiving a valid RECONFIRM message, the | |||
| server | ||||
| <t>The entity that initiates a RECONFIRM message is by definition the cli | determines that the disputed records are in fact no longer valid, then | |||
| ent. | subsequent DNS PUSH Messages will be generated to inform interested | |||
| A server MUST NOT send a RECONFIRM message over an existing session from | clients. Thus, one client discovering that a previously advertised | |||
| a client. | device (like a network printer) is no longer present has the side | |||
| If a server does send a RECONFIRM message over a DSO session initiated by | effect of informing all other interested clients that the device in | |||
| a client, | question is now gone.</t> | |||
| or a RECONFIRM message is sent with the QR bit set indicating that it is | <t pn="section-6.5-5">The entity that initiates a RECONFIRM message is b | |||
| a response, | y definition the | |||
| this is a fatal error and the receiver MUST forcibly abort the connection | client. | |||
| immediately.</t> | A server <bcp14>MUST NOT</bcp14> send a RECONFIRM message over an | |||
| existing session from a client. | ||||
| <?rfc needLines="20" ?> | If a server does send a RECONFIRM message over a DSO session initiated | |||
| <section title="RECONFIRM Message"> | by a client, | |||
| or a RECONFIRM message is sent with the QR bit set indicating that it | ||||
| <t>A RECONFIRM unidirectional message begins with the standard | is a response, | |||
| <xref target="RFC8490">DSO 12-byte header</xref>, followed by the RECON | this is a fatal error and the receiver <bcp14>MUST</bcp14> forcibly | |||
| FIRM primary TLV.<vspace /> | abort the connection immediately.</t> | |||
| A RECONFIRM message is illustrated in <xref target="reconfirm_msg"/>.</ | <section numbered="true" toc="include" removeInRFC="false" pn="section-6 | |||
| t> | .5.1"> | |||
| <name slugifiedName="name-reconfirm-message">RECONFIRM Message</name> | ||||
| <t>In accordance with the definition of DSO unidirectional messages, | <t pn="section-6.5.1-1">A RECONFIRM unidirectional message begins with | |||
| the MESSAGE ID field MUST be zero. | the standard DSO | |||
| 12-byte header <xref target="RFC8490" format="default" sectionFormat=" | ||||
| of" derivedContent="RFC8490"/>, | ||||
| followed by the RECONFIRM Primary TLV. | ||||
| A RECONFIRM message is illustrated in <xref target="reconfirm_msg" for | ||||
| mat="default" sectionFormat="of" derivedContent="Figure 5"/>.</t> | ||||
| <t pn="section-6.5.1-2">In accordance with the definition of DSO unidi | ||||
| rectional messages, | ||||
| the MESSAGE ID field <bcp14>MUST</bcp14> be zero. | ||||
| There is no server response to a RECONFIRM message.</t> | There is no server response to a RECONFIRM message.</t> | |||
| <t pn="section-6.5.1-3">The other header fields <bcp14>MUST</bcp14> be | ||||
| <t>The other header fields MUST be set as described in the | set as described | |||
| <xref target="RFC8490">DSO spec-ification</xref>. | in the | |||
| The DNS OPCODE field contains the OPCODE value for DNS Stateful Operati | <xref target="RFC8490" format="default" sectionFormat="of" derivedConte | |||
| ons (6). | nt="RFC8490">DSO specification</xref>. | |||
| The four count fields must be zero, and the corresponding four sections | The DNS OPCODE field contains the OPCODE value for DNS Stateful | |||
| must be empty (i.e., absent).</t> | Operations (6). | |||
| The four count fields must be zero, and the corresponding four | ||||
| <t>The DSO-TYPE is RECONFIRM (tentatively 0x43).</t> | sections must be empty (i.e., absent).</t> | |||
| <t pn="section-6.5.1-4">The DSO-TYPE is RECONFIRM (0x0043).</t> | ||||
| <t>The DSO-LENGTH is the length of the data that follows, which specifi | <t pn="section-6.5.1-5">The DSO-LENGTH is the length of the data that | |||
| es | follows, which | |||
| specifies | ||||
| the name, type, class, and content of the record being disputed.</t> | the name, type, class, and content of the record being disputed.</t> | |||
| <t pn="section-6.5.1-6">A DNS Push Notifications RECONFIRM message con | ||||
| <t>The DSO-DATA for a RECONFIRM message MUST contain exactly one record | tains exactly one | |||
| . | RECONFIRM Primary TLV. | |||
| The DSO-DATA for a RECONFIRM message has no count field to specify more | The DSO-DATA in a RECONFIRM Primary TLV <bcp14>MUST</bcp14> contain | |||
| than one record. | exactly one record. | |||
| Since RECONFIRM messages are sent over TCP, multiple RECONFIRM messages | The DSO-DATA in a RECONFIRM Primary TLV has no count field to | |||
| can be concatenated in a single TCP stream and packed efficiently into | specify more than one record. | |||
| TCP segments.</t> | Since RECONFIRM messages are sent over TCP, multiple RECONFIRM | |||
| messages | ||||
| <t>TYPE MUST NOT be the value ANY (255) and CLASS MUST NOT be the value | can be concatenated in a single TCP stream and packed efficiently | |||
| ANY (255).</t> | into TCP segments. | |||
| Note that this means that DNS name compression cannot be used | ||||
| <t>DNS wildcarding is not supported. That is, a wildcard ("*") in a REC | between different RECONFIRM messages. | |||
| ONFIRM message matches only a literal wildcard character ("*") in the zone, and | However, when a client is sending multiple RECONFIRM messages this | |||
| nothing else.</t> | indicates | |||
| a situation with serious network problems, and this is not expected | ||||
| <t>Aliasing is not supported. That is, a CNAME in a RECONFIRM message m | to occur | |||
| atches only a literal CNAME record in the zone, and no other records with the sa | frequently enough that optimizing efficiency in this case is | |||
| me owner name.</t> | important. | |||
| </t> | ||||
| <t>Note that there is no RDLEN field, since the length of the RDATA can | <t pn="section-6.5.1-7">TYPE <bcp14>MUST NOT</bcp14> be the value ANY | |||
| be inferred from DSO-LENGTH, so an additional RDLEN field would be redundant.</ | (255) and CLASS | |||
| t> | <bcp14>MUST NOT</bcp14> be the value ANY (255).</t> | |||
| <t pn="section-6.5.1-8">DNS wildcarding is not supported. | ||||
| <figure align="left" anchor="reconfirm_msg" title="RECONFIRM Message">< | That is, an asterisk character ("*") in a RECONFIRM message matches | |||
| artwork align="left"><![CDATA[ | only a literal asterisk character ("*") in a name and nothing else. | |||
| Similarly, a CNAME in a RECONFIRM message matches only a CNAME | ||||
| record | ||||
| with that name in the zone and no other records with that name.</t> | ||||
| <t pn="section-6.5.1-9">Note that there is no RDLEN field, | ||||
| since the length of the RDATA can be inferred from DSO-LENGTH, | ||||
| so an additional RDLEN field would be redundant.</t> | ||||
| <t pn="section-6.5.1-10">Following the same rules as for PUSH messages | ||||
| , DNS name | ||||
| compression SHOULD | ||||
| be used within the RDATA of the RECONFIRM message, with offsets | ||||
| relative to the | ||||
| beginning of the DNS message <xref target="RFC1035" format="default" s | ||||
| ectionFormat="of" derivedContent="RFC1035"/>.</t> | ||||
| <figure anchor="reconfirm_msg" align="left" suppress-title="false" pn= | ||||
| "figure-5"> | ||||
| <name slugifiedName="name-reconfirm-message-2">RECONFIRM Message</na | ||||
| me> | ||||
| <artwork align="left" name="" type="" alt="" pn="section-6.5.1-11.1" | ||||
| > | ||||
| 1 1 1 1 1 1 | 1 1 1 1 1 1 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | |||
| | MESSAGE ID (MUST BE ZERO) | \ | | MESSAGE ID (MUST BE ZERO) | \ | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| |QR| OPCODE(6) | Z | RCODE | | | |QR| OPCODE(6) | Z | RCODE | | | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| | QDCOUNT (MUST BE ZERO) | | | | QDCOUNT (MUST BE ZERO) | | | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > HEADER | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > HEADER | |||
| | ANCOUNT (MUST BE ZERO) | | | | ANCOUNT (MUST BE ZERO) | | | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| | NSCOUNT (MUST BE ZERO) | | | | NSCOUNT (MUST BE ZERO) | | | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| | ARCOUNT (MUST BE ZERO) | / | | ARCOUNT (MUST BE ZERO) | / | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | |||
| | DSO-TYPE = RECONFIRM (tentatively 0x43) | | | DSO-TYPE = RECONFIRM (0x0043) | | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | |||
| | DSO-LENGTH (number of octets in DSO-DATA) | | | DSO-LENGTH (number of octets in DSO-DATA) | | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | |||
| \ NAME \ \ | \ NAME \ \ | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| | TYPE | | | | TYPE | | | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > DSO-DATA | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > DSO-DATA | |||
| | CLASS | | | | CLASS | | | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| \ RDATA \ / | \ RDATA \ / | |||
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ /]]></artwork></figure> | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ /</artwork> | |||
| </figure> | ||||
| <?rfc needLines="48" ?> | </section> | |||
| </section> | </section> | |||
| <section numbered="true" toc="include" removeInRFC="false" pn="section-6.6 | ||||
| </section> | "> | |||
| <section title="DNS Stateful Operations TLV Context Summary"> | <name slugifiedName="name-dns-stateful-operations-tlv">DNS Stateful Oper | |||
| <t>This document defines four new DSO TLVs. As recommended in Section 8.2 | ations TLV Context Summary</name> | |||
| of the <xref target="RFC8490">DNS Stateful Operations specification</xref>, the | <t pn="section-6.6-1">This document defines four new DSO TLVs. As recomm | |||
| valid contexts of these new TLV types are summarized below.</t> | ended in <xref target="RFC8490" sectionFormat="of" section="8.2" format="default | |||
| <t>The client TLV contexts are: | " derivedLink="https://rfc-editor.org/rfc/rfc8490#section-8.2" derivedContent="R | |||
| <?rfc subcompact="yes" ?> | FC8490">the DNS Stateful | |||
| <list style="hanging"> | Operations specification</xref>, the valid contexts of these | |||
| <t hangText="C-P:">Client request message, primary TLV</t> | new TLV types are summarized below.</t> | |||
| <t hangText="C-U:">Client unidirectional message, primary TLV</t> | <t pn="section-6.6-2">The client TLV contexts are: | |||
| <t hangText="C-A:">Client request or unidirectional message, addition | ||||
| al TLV</t> | ||||
| <t hangText="CRP:">Response back to client, primary TLV</t> | ||||
| <t hangText="CRA:">Response back to client, additional TLV</t> | ||||
| </list> | ||||
| <?rfc subcompact="no" ?> | ||||
| </t> | ||||
| <texttable title="DSO TLV Client Context Summary" anchor="tlv_client_cont | ||||
| exts"> | ||||
| <ttcol align="right">TLV Type</ttcol> | ||||
| <ttcol align="center">C-P</ttcol> | ||||
| <ttcol align="center">C-U</ttcol> | ||||
| <ttcol align="center">C-A</ttcol> | ||||
| <ttcol align="center">CRP</ttcol> | ||||
| <ttcol align="center">CRA</ttcol> | ||||
| <c>SUBSCRIBE</c><c>X</c><c></c><c></c><c></c><c></c> | ||||
| <c>PUSH</c><c></c><c></c><c></c><c></c><c></c> | ||||
| <c>UNSUBSCRIBE</c><c></c><c>X</c><c></c><c></c><c></c> | ||||
| <c>RECONFIRM</c><c></c><c>X</c><c></c><c></c><c></c> | ||||
| </texttable> | ||||
| <t>The server TLV contexts are: | ||||
| <?rfc subcompact="yes" ?> | ||||
| <list style="hanging"> | ||||
| <t hangText="S-P:">Server request message, primary TLV</t> | ||||
| <t hangText="S-U:">Server unidirectional message, primary TLV</t> | ||||
| <t hangText="S-A:">Server request or unidirectional message, additional | ||||
| TLV</t> | ||||
| <t hangText="SRP:">Response back to server, primary TLV</t> | ||||
| <t hangText="SRA:">Response back to server, additional TLV</t> | ||||
| </list> | ||||
| <?rfc subcompact="no" ?> | ||||
| </t> | ||||
| <texttable title="DSO TLV Server Context Summary" anchor="tlv_server_contex | ||||
| ts"> | ||||
| <ttcol align="right">TLV Type</ttcol> | ||||
| <ttcol align="center">S-P</ttcol> | ||||
| <ttcol align="center">S-U</ttcol> | ||||
| <ttcol align="center">S-A</ttcol> | ||||
| <ttcol align="center">SRP</ttcol> | ||||
| <ttcol align="center">SRA</ttcol> | ||||
| <c>SUBSCRIBE</c><c></c><c></c><c></c><c></c><c></c> | ||||
| <c>PUSH</c><c></c><c>X</c><c></c><c></c><c></c> | ||||
| <c>UNSUBSCRIBE</c><c></c><c></c><c></c><c></c><c></c> | ||||
| <c>RECONFIRM</c><c></c><c></c><c></c><c></c><c></c> | ||||
| </texttable> | ||||
| </section> | ||||
| <section title="Client-Initiated Termination"> | ||||
| <t>An individual subscription is terminated by sending an UNSUBSCRIBE TLV | ||||
| for that specific subscription, or all subscriptions can be cancelled at once b | ||||
| y the client closing the DSO session. When a client terminates an individual sub | ||||
| scription (via UNSUBSCRIBE) or all subscriptions on that DSO session (by ending | ||||
| the session) it is signaling to the server that it is no longer interested in re | ||||
| ceiving those particular updates. It is informing the server that the server may | ||||
| release any state information it has been keeping with regards to these particu | ||||
| lar subscriptions.</t> | ||||
| <t>After terminating its last subscription on a session via UNSUBSCRIBE, | ||||
| a client MAY close the session immediately, or it may keep it open if it anticip | ||||
| ates performing further operations on that session in the future. If a client wi | ||||
| shes to keep an idle session open, it MUST respect the maximum idle time require | ||||
| d by the server <xref target="RFC8490"/>.</t> | ||||
| <t>If a client plans to terminate one or more subscriptions on a session | ||||
| and doesn't intend to keep that session open, then as an efficiency optimization | ||||
| it MAY instead choose to simply close the session, which implicitly terminates | ||||
| all subscriptions on that session. This may occur because the client computer is | ||||
| being shut down, is going to sleep, the application requiring the subscriptions | ||||
| has terminated, or simply because the last active subscription on that session | ||||
| has been cancelled.</t> | ||||
| <t>When closing a session, a client should perform an orderly close of | </t> | |||
| the TLS session. | <dl newline="false" spacing="compact" pn="section-6.6-3"> | |||
| Typical APIs will provide a session | <dt pn="section-6.6-3.1">C-P:</dt> | |||
| close method that will send a TLS close_notify alert | <dd pn="section-6.6-3.2">Client request message, Primary TLV</dd> | |||
| (see Section 6.1 of the TLS 1.3 specification <xref target="RFC8446"/>). | <dt pn="section-6.6-3.3">C-U:</dt> | |||
| This instructs the recipient that the sender will not send any more data | <dd pn="section-6.6-3.4">Client Unidirectional message, primary TLV</d | |||
| over the session. | d> | |||
| After sending the TLS close_notify alert | <dt pn="section-6.6-3.5">C-A:</dt> | |||
| the client MUST gracefully close the underlying connection using a TCP FI | <dd pn="section-6.6-3.6">Client request or unidirectional message, Add | |||
| N, | itional TLV</dd> | |||
| so that the TLS close_notify is reliably delivered. | <dt pn="section-6.6-3.7">CRP:</dt> | |||
| The mechanisms for gracefully closing a TCP connection with a TCP FIN var | <dd pn="section-6.6-3.8">Response back to client, Primary TLV</dd> | |||
| y depending on the networking API. | <dt pn="section-6.6-3.9">CRA:</dt> | |||
| For example, in the BSD Sockets API, sending a TCP FIN is achieved by cal | <dd pn="section-6.6-3.10">Response back to client, Additional TLV</dd> | |||
| ling "shutdown(s,SHUT_WR)" | </dl> | |||
| and keeping the socket open until all remaining data has been read from i | <table anchor="tlv_client_contexts" align="center" pn="table-2"> | |||
| t.</t> | <name slugifiedName="name-dso-tlv-client-context-summ">DSO TLV Client | |||
| Context Summary</name> | ||||
| <thead> | ||||
| <tr> | ||||
| <th align="right" colspan="1" rowspan="1">TLV Type</th> | ||||
| <th align="center" colspan="1" rowspan="1">C-P</th> | ||||
| <th align="center" colspan="1" rowspan="1">C-U</th> | ||||
| <th align="center" colspan="1" rowspan="1">C-A</th> | ||||
| <th align="center" colspan="1" rowspan="1">CRP</th> | ||||
| <th align="center" colspan="1" rowspan="1">CRA</th> | ||||
| </tr> | ||||
| </thead> | ||||
| <tbody> | ||||
| <tr> | ||||
| <td align="right" colspan="1" rowspan="1">SUBSCRIBE</td> | ||||
| <td align="center" colspan="1" rowspan="1">X</td> | ||||
| <td align="center" colspan="1" rowspan="1"/> | ||||
| <td align="center" colspan="1" rowspan="1"/> | ||||
| <td align="center" colspan="1" rowspan="1"/> | ||||
| <td align="center" colspan="1" rowspan="1"/> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="right" colspan="1" rowspan="1">PUSH</td> | ||||
| <td align="center" colspan="1" rowspan="1"/> | ||||
| <td align="center" colspan="1" rowspan="1"/> | ||||
| <td align="center" colspan="1" rowspan="1"/> | ||||
| <td align="center" colspan="1" rowspan="1"/> | ||||
| <td align="center" colspan="1" rowspan="1"/> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="right" colspan="1" rowspan="1">UNSUBSCRIBE</td> | ||||
| <td align="center" colspan="1" rowspan="1"/> | ||||
| <td align="center" colspan="1" rowspan="1">X</td> | ||||
| <td align="center" colspan="1" rowspan="1"/> | ||||
| <td align="center" colspan="1" rowspan="1"/> | ||||
| <td align="center" colspan="1" rowspan="1"/> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="right" colspan="1" rowspan="1">RECONFIRM</td> | ||||
| <td align="center" colspan="1" rowspan="1"/> | ||||
| <td align="center" colspan="1" rowspan="1">X</td> | ||||
| <td align="center" colspan="1" rowspan="1"/> | ||||
| <td align="center" colspan="1" rowspan="1"/> | ||||
| <td align="center" colspan="1" rowspan="1"/> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| <t pn="section-6.6-5">The server TLV contexts are: | ||||
| <t>If the session is forcibly closed at the TCP level by sending a | </t> | |||
| <dl newline="false" spacing="compact" pn="section-6.6-6"> | ||||
| <dt pn="section-6.6-6.1">S-P:</dt> | ||||
| <dd pn="section-6.6-6.2">Server request message, Primary TLV</dd> | ||||
| <dt pn="section-6.6-6.3">S-U:</dt> | ||||
| <dd pn="section-6.6-6.4">Server Unidirectional message, primary TLV</d | ||||
| d> | ||||
| <dt pn="section-6.6-6.5">S-A:</dt> | ||||
| <dd pn="section-6.6-6.6">Server request or unidirectional message, Add | ||||
| itional TLV</dd> | ||||
| <dt pn="section-6.6-6.7">SRP:</dt> | ||||
| <dd pn="section-6.6-6.8">Response back to server, Primary TLV</dd> | ||||
| <dt pn="section-6.6-6.9">SRA:</dt> | ||||
| <dd pn="section-6.6-6.10">Response back to server, Additional TLV</dd> | ||||
| </dl> | ||||
| <table anchor="tlv_server_contexts" align="center" pn="table-3"> | ||||
| <name slugifiedName="name-dso-tlv-server-context-summ">DSO TLV Server | ||||
| Context Summary</name> | ||||
| <thead> | ||||
| <tr> | ||||
| <th align="right" colspan="1" rowspan="1">TLV Type</th> | ||||
| <th align="center" colspan="1" rowspan="1">S-P</th> | ||||
| <th align="center" colspan="1" rowspan="1">S-U</th> | ||||
| <th align="center" colspan="1" rowspan="1">S-A</th> | ||||
| <th align="center" colspan="1" rowspan="1">SRP</th> | ||||
| <th align="center" colspan="1" rowspan="1">SRA</th> | ||||
| </tr> | ||||
| </thead> | ||||
| <tbody> | ||||
| <tr> | ||||
| <td align="right" colspan="1" rowspan="1">SUBSCRIBE</td> | ||||
| <td align="center" colspan="1" rowspan="1"/> | ||||
| <td align="center" colspan="1" rowspan="1"/> | ||||
| <td align="center" colspan="1" rowspan="1"/> | ||||
| <td align="center" colspan="1" rowspan="1"/> | ||||
| <td align="center" colspan="1" rowspan="1"/> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="right" colspan="1" rowspan="1">PUSH</td> | ||||
| <td align="center" colspan="1" rowspan="1"/> | ||||
| <td align="center" colspan="1" rowspan="1">X</td> | ||||
| <td align="center" colspan="1" rowspan="1"/> | ||||
| <td align="center" colspan="1" rowspan="1"/> | ||||
| <td align="center" colspan="1" rowspan="1"/> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="right" colspan="1" rowspan="1">UNSUBSCRIBE</td> | ||||
| <td align="center" colspan="1" rowspan="1"/> | ||||
| <td align="center" colspan="1" rowspan="1"/> | ||||
| <td align="center" colspan="1" rowspan="1"/> | ||||
| <td align="center" colspan="1" rowspan="1"/> | ||||
| <td align="center" colspan="1" rowspan="1"/> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="right" colspan="1" rowspan="1">RECONFIRM</td> | ||||
| <td align="center" colspan="1" rowspan="1"/> | ||||
| <td align="center" colspan="1" rowspan="1"/> | ||||
| <td align="center" colspan="1" rowspan="1"/> | ||||
| <td align="center" colspan="1" rowspan="1"/> | ||||
| <td align="center" colspan="1" rowspan="1"/> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| </section> | ||||
| <section numbered="true" toc="include" removeInRFC="false" pn="section-6.7 | ||||
| "> | ||||
| <name slugifiedName="name-client-initiated-terminatio">Client-Initiated | ||||
| Termination</name> | ||||
| <t pn="section-6.7-1">An individual subscription is terminated by sendin | ||||
| g an UNSUBSCRIBE | ||||
| TLV for that specific subscription, or all subscriptions can be | ||||
| canceled at once by the client closing the DSO session. When a client | ||||
| terminates an individual subscription (via UNSUBSCRIBE) or all | ||||
| subscriptions on that DSO session (by ending the session), it is | ||||
| signaling to the server that it is no longer interested in receiving | ||||
| those particular updates. It is informing the server that the server | ||||
| may release any state information it has been keeping with regards to | ||||
| these particular subscriptions.</t> | ||||
| <t pn="section-6.7-2">After terminating its last subscription on a sessi | ||||
| on via | ||||
| UNSUBSCRIBE, a client <bcp14>MAY</bcp14> close the session immediately | ||||
| or it may keep it open if it anticipates performing further operations | ||||
| on that session in the future. If a client wishes to keep an idle | ||||
| session open, it <bcp14>MUST</bcp14> respect the maximum idle time | ||||
| required by the server <xref target="RFC8490" format="default" sectionFo | ||||
| rmat="of" derivedContent="RFC8490"/>.</t> | ||||
| <t pn="section-6.7-3">If a client plans to terminate one or more subscri | ||||
| ptions on a | ||||
| session and doesn't intend to keep that session open, then as an | ||||
| efficiency optimization, it <bcp14>MAY</bcp14> instead choose to | ||||
| simply | ||||
| close the session, which implicitly terminates all subscriptions on | ||||
| that session. This may occur because the client computer is being shut | ||||
| down, is going to sleep, the application requiring the subscriptions | ||||
| has terminated, or simply because the last active subscription on that | ||||
| session has been canceled.</t> | ||||
| <t pn="section-6.7-4">When closing a session, a client should perform an | ||||
| orderly close of | ||||
| the TLS session. Typical APIs will provide a session close method | ||||
| that will send a TLS close_notify alert as described in <xref target="RF | ||||
| C8446" sectionFormat="of" section="6.1" format="default" derivedLink="https://rf | ||||
| c-editor.org/rfc/rfc8446#section-6.1" derivedContent="RFC8446">the TLS 1.3 speci | ||||
| fication</xref>. | ||||
| This instructs the | ||||
| recipient that the sender will not send any more data over the | ||||
| session. After sending the TLS close_notify alert, the client | ||||
| <bcp14>MUST</bcp14> gracefully close the underlying connection using a | ||||
| TCP FIN so that the TLS close_notify is reliably delivered. The | ||||
| mechanisms for gracefully closing a TCP connection with a TCP FIN vary | ||||
| depending on the networking API. For example, in the BSD Sockets API, | ||||
| sending a TCP FIN is achieved by calling "shutdown(s,SHUT_WR)" and | ||||
| keeping the socket open until all remaining data has been read from | ||||
| it.</t> | ||||
| <t pn="section-6.7-5">If the session is forcibly closed at the TCP level | ||||
| by sending a | ||||
| RST from either end of the connection, data may be lost.</t> | RST from either end of the connection, data may be lost.</t> | |||
| <?rfc needLines="10" ?> | </section> | |||
| </section> | <section anchor="polling" numbered="true" toc="include" removeInRFC="false | |||
| " pn="section-6.8"> | ||||
| <section title="Client Fallback to Polling" anchor="polling"> | <name slugifiedName="name-client-fallback-to-polling">Client Fallback to | |||
| <t>There are cases where a client may exhaust all avenues for | Polling</name> | |||
| <t pn="section-6.8-1">There are cases where a client may exhaust all ave | ||||
| nues for | ||||
| establishing a DNS Push Notification subscription without success. | establishing a DNS Push Notification subscription without success. | |||
| This can happen if the client's configured recursive resolver | This can happen if the client's configured recursive resolver does not | |||
| does not support DNS over TLS, or | support DNS over TLS, or supports DNS over TLS but is not listening on | |||
| supports DNS over TLS but is not listening on TCP port 853, or | TCP port 853, or supports DNS over TLS on TCP port 853 but does not | |||
| supports DNS over TLS on TCP port 853 but does not support DSO on that p | support DSO on that port, or for some other reason is unable to | |||
| ort, | provide a DNS Push Notification subscription. In this case, the | |||
| or for some other reason is unable to provide a DNS Push Notification su | client | |||
| bscription. | will attempt to communicate directly with an appropriate server, and | |||
| In this case the client will attempt to communicate directly with an app | it may be that the zone apex discovery fails, or there is no | |||
| ropriate server, | <tt>_dns‑push‑tls._tcp.<zone></tt> SRV record, or | |||
| and it may be that the zone apex discovery fails, or there is no | the server indicated in the SRV record is misconfigured, overloaded, | |||
| <spanx style="verb">_dns&nbhy;push&nbhy;tls._tcp.<zone></spanx> SR | or is | |||
| V record, | unresponsive for some other reason.</t> | |||
| or server indicated in the SRV record is misconfigured, | <t pn="section-6.8-2">Regardless of the reason for the failure, after be | |||
| or is unresponsive for some other reason.</t> | ing unable to | |||
| establish the desired DNS Push Notification subscription, it is likely | ||||
| <t>Regardless of the reason for the failure, | that the client will still wish to know the answer it seeks, even if | |||
| after being unable to establish the desired DNS Push Notification subscr | that answer cannot be obtained with the timely change notifications | |||
| iption, | provided by DNS Push Notifications. In such cases, it is likely that | |||
| it is likely that the client will still wish to know the answer it seeks | the client will obtain the answer it seeks via a conventional DNS | |||
| , | query instead, repeated at some interval to detect when the answer | |||
| even if that answer cannot be obtained with the timely | RRset changes.</t> | |||
| change notifications provided by DNS Push Notifications. | <t pn="section-6.8-3">In the case where a client responds to its failure | |||
| In such cases it is likely that the client will obtain | to establish a | |||
| the answer it seeks via a conventional DNS query instead, | DNS Push Notification subscription by falling back to polling with | |||
| repeated at some interval to detect when the answer RRset changes.</t> | conventional DNS queries instead, the polling rate should be | |||
| controlled to avoid placing excessive burden on the server. The | ||||
| <t>In the case where a client responds to its | interval between successive DNS queries for the same name, type, and | |||
| failure to establish a DNS Push Notification subscription | class <bcp14>SHOULD</bcp14> be at least the minimum of 900 seconds (15 | |||
| by falling back to polling with conventional DNS queries instead, | minutes) or two seconds more than the TTL of the answer RRset.</t> | |||
| the polling rate should be controlled to avoid placing excessive burden | <t pn="section-6.8-4">The reason that for TTLs up to 898 seconds the que | |||
| on the server. | ry should | |||
| The interval between successive DNS queries for the same name, type and | not be reissued until two seconds <em>after</em> the answer RRset has | |||
| class | expired, is to ensure that the answer RRset has also expired from the | |||
| SHOULD be at least the minimum of: 900 seconds (15 minutes), | cache on the client's configured recursive resolver. Otherwise | |||
| or two seconds more than the TTL of the answer RRset.</t> | (particularly if the clocks on the client and the recursive resolver | |||
| do not run at precisely the same rate), there's a risk of a race | ||||
| <t>The reason that for TTLs shorter than 898 seconds the query should | condition where the client queries its configured recursive resolver | |||
| not be reissued until two seconds *after* the answer RRset has expired i | just as the answer RRset has one second remaining in the recursive | |||
| s | resolver's cache. The client would receive a reply telling it | |||
| to ensure that the answer RRset has also expired from | that the answer RRset has one second remaining; the client | |||
| the cache on the client's configured recursive resolver. | would then requery the recursive resolver again one second later. | |||
| Otherwise | If by this time the answer RRset has actually expired from the | |||
| (particularly if the clocks on the client and the | recursive resolver's cache, the recursive resolver would then | |||
| recursive resolver do not run at precisely the same rate) | issue a new query to fetch fresh data from the | |||
| there's a risk of a race condition where | authoritative server. Waiting until the answer RRset has definitely | |||
| the client queries its configured recursive resolver just as the answer | expired from the cache on the client's configured recursive resolver | |||
| RRset has | avoids this race condition and any unnecessary additional queries it | |||
| one second remaining in the recursive resolver's cache. | causes.</t> | |||
| The client would then receive a reply telling it that the answer RRset | <t pn="section-6.8-5">Each time a client is about to reissue its query t | |||
| has one second remaining, and then the client would then re-query the | o discover | |||
| recursive resolver again one second later when the answer RRset | ||||
| actually expires, and only then would the | ||||
| recursive resolver issue a new query to fetch new fresh | ||||
| data from the authoritative server. | ||||
| Waiting until the answer RRset has definitely expired from the | ||||
| the cache on the client's configured recursive resolver | ||||
| avoids this race condition and unnecessary additional queries it causes. | ||||
| </t> | ||||
| <t>Each time a client is about to reissue its query to discover | ||||
| changes to the answer RRset, it should first make a new attempt to | changes to the answer RRset, it should first make a new attempt to | |||
| establish a DNS Push Notification subscription, using previously | establish a DNS Push Notification subscription using previously | |||
| cached DNS answers as appropriate. | cached DNS answers as appropriate. After a temporary misconfiguration | |||
| After a temporary misconfiguration has been remedied, | has been remedied, this allows a client that is polling to return to | |||
| this allows a client that is polling to return to using | using DNS Push Notifications for asynchronous notification of | |||
| DNS Push Notifications for asynchronous notification of changes.</t> | changes.</t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="Security" numbered="true" toc="include" removeInRFC="false" | ||||
| <section title="Security Considerations" anchor="Security"> | pn="section-7"> | |||
| <t>The Strict Privacy Usage Profile for DNS over TLS is REQUIRED for DNS Pu | <name slugifiedName="name-security-considerations">Security Considerations | |||
| sh Notifications <xref target="RFC8310"/>. Cleartext connections for DNS Push No | </name> | |||
| tifications are not permissible. Since this is a new protocol, transition mechan | <t pn="section-7-1">The Strict Privacy profile for DNS over TLS is | |||
| isms from the Opportunistic Privacy profile are unnecessary.</t> | <bcp14>REQUIRED</bcp14> for DNS Push Notifications <xref target="RFC8310" | |||
| format="default" sectionFormat="of" derivedContent="RFC8310"/>. Cleartext connec | ||||
| <t>Also, see Section 9 of the DNS over (D)TLS Usage Profiles document <xref | tions for DNS Push | |||
| target="RFC8310"/> for additional recommendations for various versions of TLS u | Notifications are not permissible. Since this is a new protocol, | |||
| sage.</t> | transition mechanisms from the Opportunistic Privacy profile are | |||
| unnecessary.</t> | ||||
| <t>As a consequence of requiring TLS, client certificate authentication and | <t pn="section-7-2">Also, see | |||
| verification may also be enforced by the server for stronger client-server secu | <xref target="RFC8310" sectionFormat="of" section="9" format="default" der | |||
| rity or end-to-end security. However, recommendations for security in particular | ivedLink="https://rfc-editor.org/rfc/rfc8310#section-9" derivedContent="RFC8310" | |||
| deployment scenarios are outside the scope of this document.</t> | >the document Usage | |||
| Profiles for DNS over (D)TLS</xref> | ||||
| <t>DNSSEC is RECOMMENDED for the authentication of DNS Push Notification se | for additional | |||
| rvers. | recommendations for various versions of TLS usage.</t> | |||
| TLS alone does not provide complete security. | <t pn="section-7-3">As a consequence of requiring TLS, client certificate | |||
| TLS certificate verification can provide reasonable assurance that the clie | authentication | |||
| nt is really talking to the | and verification may also be enforced by the server for stronger | |||
| server associated with the desired host name, but since the desired host na | client-server security or end-to-end security. However, recommendations | |||
| me is learned via a DNS SRV query, | for security in particular deployment scenarios are outside the scope of | |||
| if the SRV query is subverted then the client may have a secure connection | this document.</t> | |||
| to a rogue server. | <t pn="section-7-4">DNSSEC is <bcp14>RECOMMENDED</bcp14> for the authentic | |||
| DNSSEC can provide added confidence that the SRV query has not been subvert | ation of DNS | |||
| ed.</t> | Push Notification servers. TLS alone does not provide complete | |||
| security. TLS certificate verification can provide reasonable assurance | ||||
| <?rfc needLines="14" ?> | that the client is really talking to the server associated with the | |||
| <section title="Security Services"> | desired host name, but since the desired host name is learned via a DNS | |||
| <t>It is the goal of using TLS to provide the following security services | SRV query, if the SRV query is subverted, then the client may have a | |||
| : | secure connection to a rogue server. DNSSEC can provide added | |||
| <list style="hanging"> | confidence that the SRV query has not been subverted.</t> | |||
| <t hangText="Confidentiality:">All application-layer communication is | <section numbered="true" toc="include" removeInRFC="false" pn="section-7.1 | |||
| encrypted with the goal that no party should be able to decrypt it except the i | "> | |||
| ntended receiver.</t> | <name slugifiedName="name-security-services">Security Services</name> | |||
| <t hangText="Data integrity protection:">Any changes made to the comm | <t pn="section-7.1-1">It is the goal of using TLS to provide the followi | |||
| unication in transit are detectable by the receiver.</t> | ng security | |||
| <t hangText="Authentication:">An end-point of the TLS communication i | services: | |||
| s authenticated as the intended entity to communicate with.</t> | </t> | |||
| <t hangText="Anti-replay protection:">TLS provides for the detection | <dl newline="false" spacing="normal" pn="section-7.1-2"> | |||
| of and prevention | <dt pn="section-7.1-2.1">Confidentiality:</dt> | |||
| against messages sent previously over a TLS connection (such as DNS P | <dd pn="section-7.1-2.2">All application-layer communication is encryp | |||
| ush Notifications). | ted with the goal | |||
| If prior messages are re-sent at a later time as a form of a man-in-t | that no party should be able to decrypt it except the intended | |||
| he-middle attack | receiver.</dd> | |||
| then the receiver will detect this and reject the replayed messages.< | <dt pn="section-7.1-2.3">Data integrity protection:</dt> | |||
| /t> | <dd pn="section-7.1-2.4">Any changes made to the communication in tran | |||
| </list> | sit are detectable | |||
| </t> | by the receiver.</dd> | |||
| <t>Deployment recommendations on the appropriate key lengths and cypher s | <dt pn="section-7.1-2.5">Authentication:</dt> | |||
| uites are beyond the scope of this document. Please refer to <xref target="BCP19 | <dd pn="section-7.1-2.6">An endpoint of the TLS communication is authe | |||
| 5">TLS Recommendations</xref> for the best current practices. Keep in mind that | nticated as the | |||
| best practices only exist for a snapshot in time and recommendations will contin | intended entity to communicate with.</dd> | |||
| ue to change. Updated versions or errata may exist for these recommendations.</t | <dt pn="section-7.1-2.7">Anti-replay protection:</dt> | |||
| > | <dd pn="section-7.1-2.8">TLS provides for the detection of and prevent | |||
| </section> | ion | |||
| against messages sent previously over a TLS connection (such as DNS | ||||
| <section title="TLS Name Authentication" anchor="tls_name_auth"> | Push Notifications). | |||
| <t>As described in <xref target="discovery"/>, the client discovers the D | If prior messages are re-sent at a later time as a form of a | |||
| NS Push Notification server using an SRV lookup for the record name <spanx style | man-in-the-middle attack, | |||
| ="verb">_dns&nbhy;push&nbhy;tls._tcp.<zone></spanx>. The server connection | then the receiver will detect this and reject the replayed | |||
| endpoint SHOULD then be authenticated using DANE TLSA records for the associate | messages.</dd> | |||
| d SRV record. This associates the target's name and port number with a trusted T | </dl> | |||
| LS certificate <xref target="RFC7673"/>. This procedure uses the TLS Server Name | <t pn="section-7.1-3">Deployment recommendations on the appropriate key | |||
| Indication (SNI) extension <xref target="RFC6066"/> to inform the server of the | lengths and | |||
| name the client has authenticated through the use of TLSA records. Therefore, i | cipher suites are beyond the scope of this document. Please refer to | |||
| f the SRV record passes DNSSEC validation and a TLSA record matching the target | the current | |||
| name is useable, an SNI extension must be used for the target name to ensure the | TLS Recommendations <xref target="BCP195" format="default" sectionFormat= | |||
| client is connecting to the server it has authenticated. If the target name doe | "of" derivedContent="BCP195"/> | |||
| s not have a usable TLSA record, then the use of the SNI extension is optional. | for the best current practices. | |||
| See <xref target="RFC8310">Usage Profiles for DNS over TLS and DNS over DTLS</xr | Keep in mind that best practices only exist for a snapshot in time, | |||
| ef> for more information on authenticating domain names.</t> | and recommendations will continue to change. | |||
| </section> | Updated versions or errata may exist for these recommendations.</t> | |||
| </section> | ||||
| <section title="TLS Early Data" anchor="early_data"> | <section anchor="tls_name_auth" numbered="true" toc="include" removeInRFC= | |||
| <t>DSO messages with the SUBSCRIBE TLV as the Primary TLV are permitted i | "false" pn="section-7.2"> | |||
| n TLS early data. | <name slugifiedName="name-tls-name-authentication">TLS Name Authenticati | |||
| Using TLS early data can save one network round trip, and can result in t | on</name> | |||
| he client obtaining results faster.</t> | <t pn="section-7.2-1">As described in <xref target="discovery" format="d | |||
| efault" sectionFormat="of" derivedContent="Section 6.1"/>, the | ||||
| <t>However, there are some factors to consider before using TLS early dat | client discovers the DNS Push Notification server using an SRV lookup | |||
| a.</t> | for the record name | |||
| <tt>_dns‑push‑tls._tcp.<zone></tt>. The server | ||||
| <t>TLS Early Data is not forward secret. | connection endpoint <bcp14>SHOULD</bcp14> then be authenticated using | |||
| In cases where forward secrecy of DNS Push Notification subscriptions is | DANE TLSA records for the associated SRV record. This associates the | |||
| required, | target's name and port number with a trusted TLS certificate <xref targe | |||
| the client should not use TLS Early Data.</t> | t="RFC7673" format="default" sectionFormat="of" derivedContent="RFC7673"/>. This | |||
| procedure uses the TLS | ||||
| <t>With TLS early data there are no guarantees of non-replay between conn | Server Name Indication (SNI) extension <xref target="RFC6066" format="de | |||
| ections. | fault" sectionFormat="of" derivedContent="RFC6066"/> to inform the server of the | |||
| name the client has | ||||
| authenticated through the use of TLSA records. Therefore, if the SRV | ||||
| record passes DNSSEC validation and a TLSA record matching the target | ||||
| name is usable, an SNI extension must be used for the target name to | ||||
| ensure the client is connecting to the server it has authenticated. If | ||||
| the target name does not have a usable TLSA record, then the use of | ||||
| the SNI extension is optional. See Usage Profiles for DNS over TLS and | ||||
| DNS over DTLS <xref target="RFC8310" format="default" sectionFormat="of" | ||||
| derivedContent="RFC8310"/> for more | ||||
| information on authenticating domain names.</t> | ||||
| </section> | ||||
| <section anchor="early_data" numbered="true" toc="include" removeInRFC="fa | ||||
| lse" pn="section-7.3"> | ||||
| <name slugifiedName="name-tls-early-data">TLS Early Data</name> | ||||
| <t pn="section-7.3-1">DSO messages with the SUBSCRIBE TLV as the Primary | ||||
| TLV are | ||||
| permitted in TLS early data. | ||||
| Using TLS early data can save one network round trip and can result in | ||||
| the client obtaining results faster.</t> | ||||
| <t pn="section-7.3-2">However, there are some factors to consider before | ||||
| using TLS early | ||||
| data.</t> | ||||
| <t pn="section-7.3-3">TLS early data is not forward secret. | ||||
| In cases where forward secrecy of DNS Push Notification subscriptions | ||||
| is required, | ||||
| the client should not use TLS early data.</t> | ||||
| <t pn="section-7.3-4">With TLS early data, there are no guarantees of no | ||||
| n-replay between | ||||
| connections. | ||||
| If packets are duplicated and delayed in the network, | If packets are duplicated and delayed in the network, | |||
| the later arrivals could be mistaken for new subscription requests. | the later arrivals could be mistaken for new subscription requests. | |||
| Generally this is not a major concern, | Generally, this is not a major concern | |||
| since the amount of state generated on the server for | since the amount of state generated on the server for | |||
| these spurious subscriptions is small and short-lived, | these spurious subscriptions is small and short lived | |||
| since the TCP connection will not complete the three-way handshake. | since the TCP connection will not complete the three-way handshake. | |||
| Servers MAY choose to implement rate-limiting measures that are activated | Servers <bcp14>MAY</bcp14> choose to implement rate-limiting measures | |||
| when | that are activated when | |||
| the server detects an excessive number of spurious subscription requests. | the server detects an excessive number of spurious subscription | |||
| </t> | requests.</t> | |||
| <t pn="section-7.3-5">For further guidance on use of TLS early data, ple | ||||
| <t>For further guidance please see discussion of zero round-trip data | ase see | |||
| (Section 2.3, Section 8, and Appendix E.5) | discussion of zero round-trip data | |||
| in the TLS 1.3 specification, <xref target="RFC8446"/>.</t> | in Sections <xref target="RFC8446" sectionFormat="bare" section="2.3" for | |||
| </section> | mat="default" derivedLink="https://rfc-editor.org/rfc/rfc8446#section-2.3" deriv | |||
| edContent="RFC8446"/> | ||||
| <section title="TLS Session Resumption" anchor="resumption"> | and | |||
| <t>TLS Session Resumption <xref target="RFC8446"/> | <xref target="RFC8446" sectionFormat="bare" section="8" format="default" | |||
| derivedLink="https://rfc-editor.org/rfc/rfc8446#section-8" derivedContent="RFC84 | ||||
| 46"/>, and Appendix | ||||
| <xref target="RFC8446" sectionFormat="bare" section="E.5" format="default | ||||
| " derivedLink="https://rfc-editor.org/rfc/rfc8446#appendix-E.5" derivedContent=" | ||||
| RFC8446"/>, of <xref target="RFC8446" format="default" sectionFormat="of" derive | ||||
| dContent="RFC8446">the TLS 1.3 specification</xref>.</t> | ||||
| </section> | ||||
| <section anchor="resumption" numbered="true" toc="include" removeInRFC="fa | ||||
| lse" pn="section-7.4"> | ||||
| <name slugifiedName="name-tls-session-resumption">TLS Session Resumption | ||||
| </name> | ||||
| <t pn="section-7.4-1">TLS session resumption <xref target="RFC8446" form | ||||
| at="default" sectionFormat="of" derivedContent="RFC8446"/> | ||||
| is permissible on DNS Push Notification servers. | is permissible on DNS Push Notification servers. | |||
| However, closing the TLS connection terminates the DSO session. | However, closing the TLS connection terminates the DSO session. | |||
| When the TLS session is resumed, the DNS Push Notification server will no | When the TLS session is resumed, the DNS Push Notification server will | |||
| t | not | |||
| have any subscription state and will proceed as with any other new DSO se | have any subscription state and will proceed as with any other new DSO | |||
| ssion. | session. | |||
| Use of TLS Session Resumption may allow a TLS connection to be set up mor | Use of TLS session resumption may allow a TLS connection to be set up | |||
| e quickly, | more quickly, | |||
| but the client will still have to recreate any desired subscriptions.</t> | but the client will still have to recreate any desired | |||
| <?rfc needLines="30" ?> | subscriptions.</t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="IANA" numbered="true" toc="include" removeInRFC="false" pn= | ||||
| <section title="IANA Considerations" anchor="IANA"> | "section-8"> | |||
| <name slugifiedName="name-iana-considerations">IANA Considerations</name> | ||||
| <t>This document defines a new service name, only applicable for the TCP pr | <t pn="section-8-1">This document defines a new service name, only applica | |||
| otocol, | ble for the TCP | |||
| to be recorded in the IANA Service Type Registry <xref target="RFC6335"/><x | protocol, | |||
| ref target="SRVTYPE"/>.</t> | which has been recorded in the IANA "Service Name and Transport Protocol | |||
| <texttable title="IANA Service Type Assignments" anchor="iana_service_table | Port Number Registry" <xref target="RFC6335" format="default" sectionForma | |||
| "> | t="of" derivedContent="RFC6335"/> <xref target="SRVTYPE" format="default" sectio | |||
| <ttcol width="25%" align="left">Name</ttcol> | nFormat="of" derivedContent="SRVTYPE"/>.</t> | |||
| <ttcol align="center">Port</ttcol> | <table anchor="iana_service_table" align="center" pn="table-4"> | |||
| <ttcol align="center">Value</ttcol> | <name slugifiedName="name-iana-service-type-assignmen">IANA Service Type | |||
| <ttcol align="left">Definition</ttcol> | Assignments</name> | |||
| <c>DNS Push Notification Service Type</c> | <thead> | |||
| <c>None</c> | <tr> | |||
| <c><spanx style="verb">_dns&nbhy;push&nbhy;tls._tcp</spanx></c> | <th align="left" colspan="1" rowspan="1">Name</th> | |||
| <c><xref target="discovery"/></c> | <th align="center" colspan="1" rowspan="1">Port</th> | |||
| </texttable> | <th align="center" colspan="1" rowspan="1">Value</th> | |||
| <th align="center" colspan="1" rowspan="1">Section</th> | ||||
| <t>This document defines four new DNS Stateful Operation TLV types | </tr> | |||
| to be recorded in the IANA DSO Type Code Registry <xref target="RFC8490"/>< | </thead> | |||
| xref target="DSOTYPE"/>.</t> | <tbody> | |||
| <texttable title="IANA DSO TLV Type Code Assignments" anchor="iana_tlv_tabl | <tr> | |||
| e"> | <td align="left" colspan="1" rowspan="1">DNS Push Notification Servi | |||
| <ttcol align="left" >Name</ttcol> | ce Type</td> | |||
| <ttcol align="center" width="18%">Value</ttcol> | <td align="center" colspan="1" rowspan="1">None</td> | |||
| <ttcol align="center" >Early Data</ttcol> | <td align="center" colspan="1" rowspan="1"> | |||
| <ttcol align="center" width="28%">Status</ttcol> | <tt>_dns‑push‑tls._tcp</tt></td> | |||
| <ttcol align="left" width="20%">Definition</ttcol> | <td align="center" colspan="1" rowspan="1"> | |||
| <c>SUBSCRIBE</c> | <xref target="discovery" format="counter" sectionFormat="of" deriv | |||
| <c>TBA (0x40)</c> | edContent="6.1"/></td> | |||
| <c>OK</c> | </tr> | |||
| <c>Standards Track</c> | </tbody> | |||
| <c><xref target="subscribe"/></c> | </table> | |||
| <c>PUSH</c> | <t pn="section-8-3">This document defines four new DNS Stateful Operation | |||
| <c>TBA (0x41)</c> | TLV types, | |||
| <c>NO</c> | which have been recorded in the IANA "DSO Type Codes" registry <xref target | |||
| <c>Standards Track</c> | ="RFC8490" format="default" sectionFormat="of" derivedContent="RFC8490"/> <xref | |||
| <c><xref target="push"/></c> | target="DSOTYPE" format="default" sectionFormat="of" derivedContent="DSOTYPE"/>. | |||
| <c>UNSUBSCRIBE</c> | </t> | |||
| <c>TBA (0x42)</c> | <table anchor="iana_tlv_table" align="center" pn="table-5"> | |||
| <c>NO</c> | <name slugifiedName="name-iana-dso-tlv-type-code-assi">IANA DSO TLV Type | |||
| <c>Standards Track</c> | Code Assignments</name> | |||
| <c><xref target="unsubscribe"/></c> | <thead> | |||
| <c>RECONFIRM</c> | <tr> | |||
| <c>TBA (0x43)</c> | <th align="left" colspan="1" rowspan="1">Name</th> | |||
| <c>NO</c> | <th align="center" colspan="1" rowspan="1">Value</th> | |||
| <c>Standards Track</c> | <th align="center" colspan="1" rowspan="1">Early Data</th> | |||
| <c><xref target="reconfirm"/></c> | <th align="center" colspan="1" rowspan="1">Status</th> | |||
| </texttable> | <th align="center" colspan="1" rowspan="1">Section</th> | |||
| </tr> | ||||
| <t>This document defines no new DNS OPCODEs or RCODEs.</t> | </thead> | |||
| <tbody> | ||||
| <?rfc needLines="12" ?> | <tr> | |||
| </section> | <td align="left" colspan="1" rowspan="1">SUBSCRIBE</td> | |||
| <td align="center" colspan="1" rowspan="1">0x0040</td> | ||||
| <section title="Acknowledgements" anchor="Acknowledgements"> | <td align="center" colspan="1" rowspan="1">OK</td> | |||
| <t>The authors would like to thank Kiren Sekar and Marc Krochmal for previo | <td align="center" colspan="1" rowspan="1">Standards Track</td> | |||
| us work completed in this field.</t> | <td align="center" colspan="1" rowspan="1"> | |||
| <xref target="subscribe" format="counter" sectionFormat="of" deriv | ||||
| <t>This draft has been improved due to comments from | edContent="6.2"/></td> | |||
| Ran Atkinson, | </tr> | |||
| Tim Chown, | <tr> | |||
| Sara Dickinson, | <td align="left" colspan="1" rowspan="1">PUSH</td> | |||
| Mark Delany, | <td align="center" colspan="1" rowspan="1">0x0041</td> | |||
| Ralph Droms, | <td align="center" colspan="1" rowspan="1">NO</td> | |||
| Jan Komissar, | <td align="center" colspan="1" rowspan="1">Standards Track</td> | |||
| Eric Rescorla, | <td align="center" colspan="1" rowspan="1"> | |||
| Michael Richardson, | <xref target="push" format="counter" sectionFormat="of" derivedCon | |||
| David Schinazi, | tent="6.3"/></td> | |||
| Manju Shankar Rao, | </tr> | |||
| Robert Sparks, | <tr> | |||
| Markus Stenberg, | <td align="left" colspan="1" rowspan="1">UNSUBSCRIBE</td> | |||
| Andrew Sullivan, | <td align="center" colspan="1" rowspan="1">0x0042</td> | |||
| Michael Sweet, | <td align="center" colspan="1" rowspan="1">NO</td> | |||
| Dave Thaler, | <td align="center" colspan="1" rowspan="1">Standards Track</td> | |||
| Brian Trammell, | <td align="center" colspan="1" rowspan="1"> | |||
| Bernie Volz, | <xref target="unsubscribe" format="counter" sectionFormat="of" der | |||
| Eric Vyncke, | ivedContent="6.4"/></td> | |||
| Christopher Wood, | </tr> | |||
| Liang Xia, | <tr> | |||
| <td align="left" colspan="1" rowspan="1">RECONFIRM</td> | ||||
| <td align="center" colspan="1" rowspan="1">0x0043</td> | ||||
| <td align="center" colspan="1" rowspan="1">NO</td> | ||||
| <td align="center" colspan="1" rowspan="1">Standards Track</td> | ||||
| <td align="center" colspan="1" rowspan="1"> | ||||
| <xref target="reconfirm" format="counter" sectionFormat="of" deriv | ||||
| edContent="6.5"/></td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| <t pn="section-8-5">This document defines no new DNS OPCODEs or RCODEs.</t | ||||
| > | ||||
| </section> | ||||
| </middle> | ||||
| <back> | ||||
| <displayreference target="I-D.ietf-tcpm-rack" to="TCPRACK"/> | ||||
| <references pn="section-9"> | ||||
| <name slugifiedName="name-references">References</name> | ||||
| <references pn="section-9.1"> | ||||
| <name slugifiedName="name-normative-references">Normative References</na | ||||
| me> | ||||
| <reference anchor="DSOTYPE" target="https://www.iana.org/assignments/dns | ||||
| -parameters/" quoteTitle="true" derivedAnchor="DSOTYPE"> | ||||
| <front> | ||||
| <title>Domain Name System (DNS) Parameters</title> | ||||
| <author> | ||||
| <organization showOnFrontPage="true">IANA</organization> | ||||
| </author> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="RFC0020" target="https://www.rfc-editor.org/info/rfc2 | ||||
| 0" quoteTitle="true" derivedAnchor="RFC0020"> | ||||
| <front> | ||||
| <title>ASCII format for network interchange</title> | ||||
| <author initials="V.G." surname="Cerf" fullname="V.G. Cerf"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="1969" month="October"/> | ||||
| </front> | ||||
| <seriesInfo name="STD" value="80"/> | ||||
| <seriesInfo name="RFC" value="20"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC0020"/> | ||||
| </reference> | ||||
| <reference anchor="RFC0768" target="https://www.rfc-editor.org/info/rfc7 | ||||
| 68" quoteTitle="true" derivedAnchor="RFC0768"> | ||||
| <front> | ||||
| <title>User Datagram Protocol</title> | ||||
| <author initials="J." surname="Postel" fullname="J. Postel"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="1980" month="August"/> | ||||
| </front> | ||||
| <seriesInfo name="STD" value="6"/> | ||||
| <seriesInfo name="RFC" value="768"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC0768"/> | ||||
| </reference> | ||||
| <reference anchor="RFC0793" target="https://www.rfc-editor.org/info/rfc7 | ||||
| 93" quoteTitle="true" derivedAnchor="RFC0793"> | ||||
| <front> | ||||
| <title>Transmission Control Protocol</title> | ||||
| <author initials="J." surname="Postel" fullname="J. Postel"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="1981" month="September"/> | ||||
| </front> | ||||
| <seriesInfo name="STD" value="7"/> | ||||
| <seriesInfo name="RFC" value="793"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC0793"/> | ||||
| </reference> | ||||
| <reference anchor="RFC1034" target="https://www.rfc-editor.org/info/rfc1 | ||||
| 034" quoteTitle="true" derivedAnchor="RFC1034"> | ||||
| <front> | ||||
| <title>Domain names - concepts and facilities</title> | ||||
| <author initials="P.V." surname="Mockapetris" fullname="P.V. Mockape | ||||
| tris"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="1987" month="November"/> | ||||
| <abstract> | ||||
| <t>This RFC is the revised basic definition of The Domain Name Sys | ||||
| tem. It obsoletes RFC-882. This memo describes the domain style names and thei | ||||
| 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 | ||||
| em.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="STD" value="13"/> | ||||
| <seriesInfo name="RFC" value="1034"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC1034"/> | ||||
| </reference> | ||||
| <reference anchor="RFC1035" target="https://www.rfc-editor.org/info/rfc1 | ||||
| 035" quoteTitle="true" derivedAnchor="RFC1035"> | ||||
| <front> | ||||
| <title>Domain names - implementation and specification</title> | ||||
| <author initials="P.V." surname="Mockapetris" fullname="P.V. Mockape | ||||
| tris"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="1987" month="November"/> | ||||
| <abstract> | ||||
| <t>This RFC is the revised specification of the protocol and forma | ||||
| t used in the implementation of the Domain Name System. It obsoletes RFC-883. T | ||||
| his memo documents the details of the domain name client - server communication. | ||||
| </t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="STD" value="13"/> | ||||
| <seriesInfo name="RFC" value="1035"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC1035"/> | ||||
| </reference> | ||||
| <reference anchor="RFC1123" target="https://www.rfc-editor.org/info/rfc1 | ||||
| 123" quoteTitle="true" derivedAnchor="RFC1123"> | ||||
| <front> | ||||
| <title>Requirements for Internet Hosts - Application and Support</ti | ||||
| tle> | ||||
| <author initials="R." surname="Braden" fullname="R. Braden" role="ed | ||||
| itor"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="1989" month="October"/> | ||||
| <abstract> | ||||
| <t>This RFC is an official specification for the Internet communit | ||||
| y. It incorporates by reference, amends, corrects, and supplements the primary | ||||
| protocol standards documents relating to hosts. [STANDARDS-TRACK]</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="STD" value="3"/> | ||||
| <seriesInfo name="RFC" value="1123"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC1123"/> | ||||
| </reference> | ||||
| <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2 | ||||
| 119" quoteTitle="true" derivedAnchor="RFC2119"> | ||||
| <front> | ||||
| <title>Key words for use in RFCs to Indicate Requirement Levels</tit | ||||
| le> | ||||
| <author initials="S." surname="Bradner" fullname="S. Bradner"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="1997" month="March"/> | ||||
| <abstract> | ||||
| <t>In many standards track documents several words are used to sig | ||||
| nify the requirements in the specification. These words are often capitalized. | ||||
| This document defines these words as they should be interpreted in IETF document | ||||
| s. This document specifies an Internet Best Current Practices for the Internet | ||||
| Community, and requests discussion and suggestions for improvements.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="BCP" value="14"/> | ||||
| <seriesInfo name="RFC" value="2119"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC2119"/> | ||||
| </reference> | ||||
| <reference anchor="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="RFC2181" target="https://www.rfc-editor.org/info/rfc2 | ||||
| 181" quoteTitle="true" derivedAnchor="RFC2181"> | ||||
| <front> | ||||
| <title>Clarifications to the DNS Specification</title> | ||||
| <author initials="R." surname="Elz" fullname="R. Elz"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="R." surname="Bush" fullname="R. Bush"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="1997" month="July"/> | ||||
| <abstract> | ||||
| <t>This document considers some areas that have been identified as | ||||
| problems with the specification of the Domain Name System, and proposes remedie | ||||
| s for the defects identified. [STANDARDS-TRACK]</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="2181"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC2181"/> | ||||
| </reference> | ||||
| <reference anchor="RFC2782" target="https://www.rfc-editor.org/info/rfc2 | ||||
| 782" quoteTitle="true" derivedAnchor="RFC2782"> | ||||
| <front> | ||||
| <title>A DNS RR for specifying the location of services (DNS SRV)</t | ||||
| itle> | ||||
| <author initials="A." surname="Gulbrandsen" fullname="A. Gulbrandsen | ||||
| "> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="P." surname="Vixie" fullname="P. Vixie"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="L." surname="Esibov" fullname="L. Esibov"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2000" month="February"/> | ||||
| <abstract> | ||||
| <t>This document describes a DNS RR which specifies the location o | ||||
| f the server(s) for a specific protocol and domain. [STANDARDS-TRACK]</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="2782"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC2782"/> | ||||
| </reference> | ||||
| <reference anchor="RFC6066" target="https://www.rfc-editor.org/info/rfc6 | ||||
| 066" quoteTitle="true" derivedAnchor="RFC6066"> | ||||
| <front> | ||||
| <title>Transport Layer Security (TLS) Extensions: Extension Definiti | ||||
| ons</title> | ||||
| <author initials="D." surname="Eastlake 3rd" fullname="D. Eastlake 3 | ||||
| rd"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2011" month="January"/> | ||||
| <abstract> | ||||
| <t>This document provides specifications for existing TLS extensio | ||||
| ns. It is a companion document for RFC 5246, "The Transport Layer Security (TLS | ||||
| ) Protocol Version 1.2". The extensions specified are server_name, max_fragment | ||||
| _length, client_certificate_url, trusted_ca_keys, truncated_hmac, and status_req | ||||
| uest. [STANDARDS-TRACK]</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="6066"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC6066"/> | ||||
| </reference> | ||||
| <reference anchor="RFC6335" target="https://www.rfc-editor.org/info/rfc6 | ||||
| 335" quoteTitle="true" derivedAnchor="RFC6335"> | ||||
| <front> | ||||
| <title>Internet Assigned Numbers Authority (IANA) Procedures for the | ||||
| Management of the Service Name and Transport Protocol Port Number Registry</tit | ||||
| le> | ||||
| <author initials="M." surname="Cotton" fullname="M. Cotton"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="L." surname="Eggert" fullname="L. Eggert"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="J." surname="Touch" fullname="J. Touch"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="M." surname="Westerlund" fullname="M. Westerlund"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="S." surname="Cheshire" fullname="S. Cheshire"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2011" month="August"/> | ||||
| <abstract> | ||||
| <t>This document defines the procedures that the Internet Assigned | ||||
| Numbers Authority (IANA) uses when handling assignment and other requests relat | ||||
| ed to the Service Name and Transport Protocol Port Number registry. It also dis | ||||
| cusses the rationale and principles behind these procedures and how they facilit | ||||
| ate the long-term sustainability of the registry.</t> | ||||
| <t>This document updates IANA's procedures by obsoleting the previ | ||||
| ous UDP and TCP port assignment procedures defined in Sections 8 and 9.1 of the | ||||
| IANA Allocation Guidelines, and it updates the IANA service name and port assign | ||||
| ment procedures for UDP-Lite, the Datagram Congestion Control Protocol (DCCP), a | ||||
| nd the Stream Control Transmission Protocol (SCTP). It also updates the DNS SRV | ||||
| specification to clarify what a service name is and how it is registered. This | ||||
| memo documents an Internet Best Current Practice.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="BCP" value="165"/> | ||||
| <seriesInfo name="RFC" value="6335"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC6335"/> | ||||
| </reference> | ||||
| <reference anchor="RFC6895" target="https://www.rfc-editor.org/info/rfc6 | ||||
| 895" quoteTitle="true" derivedAnchor="RFC6895"> | ||||
| <front> | ||||
| <title>Domain Name System (DNS) IANA Considerations</title> | ||||
| <author initials="D." surname="Eastlake 3rd" fullname="D. Eastlake 3 | ||||
| rd"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2013" month="April"/> | ||||
| <abstract> | ||||
| <t>This document specifies Internet Assigned Numbers Authority (IA | ||||
| NA) parameter assignment considerations for the allocation of Domain Name System | ||||
| (DNS) resource record types, CLASSes, operation codes, error codes, DNS protoco | ||||
| l message header bits, and AFSDB resource record subtypes. It obsoletes RFC 619 | ||||
| 5 and updates RFCs 1183, 2845, 2930, and 3597.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="BCP" value="42"/> | ||||
| <seriesInfo name="RFC" value="6895"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC6895"/> | ||||
| </reference> | ||||
| <reference anchor="RFC7673" target="https://www.rfc-editor.org/info/rfc7 | ||||
| 673" quoteTitle="true" derivedAnchor="RFC7673"> | ||||
| <front> | ||||
| <title>Using DNS-Based Authentication of Named Entities (DANE) TLSA | ||||
| Records with SRV Records</title> | ||||
| <author initials="T." surname="Finch" fullname="T. Finch"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="M." surname="Miller" fullname="M. Miller"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="P." surname="Saint-Andre" fullname="P. Saint-Andre | ||||
| "> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2015" month="October"/> | ||||
| <abstract> | ||||
| <t>The DNS-Based Authentication of Named Entities (DANE) specifica | ||||
| tion (RFC 6698) describes how to use TLSA resource records secured by DNSSEC (RF | ||||
| C 4033) to associate a server's connection endpoint with its Transport Layer Sec | ||||
| urity (TLS) certificate (thus enabling administrators of domain names to specify | ||||
| the keys used in that domain's TLS servers). However, application protocols th | ||||
| at use SRV records (RFC 2782) to indirectly name the target server connection en | ||||
| dpoints for a service domain name cannot apply the rules from RFC 6698. Therefo | ||||
| re, this document provides guidelines that enable such protocols to locate and u | ||||
| se TLSA records.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="7673"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC7673"/> | ||||
| </reference> | ||||
| <reference anchor="RFC7766" target="https://www.rfc-editor.org/info/rfc7 | ||||
| 766" quoteTitle="true" derivedAnchor="RFC7766"> | ||||
| <front> | ||||
| <title>DNS Transport over TCP - Implementation Requirements</title> | ||||
| <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="R." surname="Bellis" fullname="R. Bellis"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="A." surname="Mankin" fullname="A. Mankin"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="D." surname="Wessels" fullname="D. Wessels"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2016" month="March"/> | ||||
| <abstract> | ||||
| <t>This document specifies the requirement for support of TCP as a | ||||
| transport protocol for DNS implementations and provides guidelines towards DNS- | ||||
| over-TCP performance on par with that of DNS-over-UDP. This document obsoletes R | ||||
| FC 5966 and therefore updates RFC 1035 and RFC 1123.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="7766"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC7766"/> | ||||
| </reference> | ||||
| <reference anchor="RFC7858" target="https://www.rfc-editor.org/info/rfc7 | ||||
| 858" quoteTitle="true" derivedAnchor="RFC7858"> | ||||
| <front> | ||||
| <title>Specification for DNS over Transport Layer Security (TLS)</ti | ||||
| tle> | ||||
| <author initials="Z." surname="Hu" fullname="Z. Hu"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="L." surname="Zhu" fullname="L. Zhu"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="J." surname="Heidemann" fullname="J. Heidemann"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="A." surname="Mankin" fullname="A. Mankin"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="D." surname="Wessels" fullname="D. Wessels"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="P." surname="Hoffman" fullname="P. Hoffman"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2016" month="May"/> | ||||
| <abstract> | ||||
| <t>This document describes the use of Transport Layer Security (TL | ||||
| S) to provide privacy for DNS. Encryption provided by TLS eliminates opportunit | ||||
| ies for eavesdropping and on-path tampering with DNS queries in the network, suc | ||||
| h as discussed in RFC 7626. In addition, this document specifies two usage prof | ||||
| iles for DNS over TLS and provides advice on performance considerations to minim | ||||
| ize overhead from using TCP and TLS with DNS.</t> | ||||
| <t>This document focuses on securing stub-to-recursive traffic, as | ||||
| per the charter of the DPRIVE Working Group. It does not prevent future applic | ||||
| ations of the protocol to recursive-to-authoritative traffic.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="7858"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC7858"/> | ||||
| </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="RFC8310" target="https://www.rfc-editor.org/info/rfc8 | ||||
| 310" quoteTitle="true" derivedAnchor="RFC8310"> | ||||
| <front> | ||||
| <title>Usage Profiles for DNS over TLS and DNS over DTLS</title> | ||||
| <author initials="S." surname="Dickinson" fullname="S. Dickinson"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="D." surname="Gillmor" fullname="D. Gillmor"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="T." surname="Reddy" fullname="T. Reddy"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2018" month="March"/> | ||||
| <abstract> | ||||
| <t>This document discusses usage profiles, based on one or more au | ||||
| thentication mechanisms, which can be used for DNS over Transport Layer Security | ||||
| (TLS) or Datagram TLS (DTLS). These profiles can increase the privacy of DNS t | ||||
| ransactions compared to using only cleartext DNS. This document also specifies | ||||
| new authentication mechanisms -- it describes several ways that a DNS client can | ||||
| use an authentication domain name to authenticate a (D)TLS connection to a DNS | ||||
| server. Additionally, it defines (D)TLS protocol profiles for DNS clients and s | ||||
| ervers implementing DNS over (D)TLS. This document updates RFC 7858.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="8310"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8310"/> | ||||
| </reference> | ||||
| <reference anchor="RFC8446" target="https://www.rfc-editor.org/info/rfc8 | ||||
| 446" quoteTitle="true" derivedAnchor="RFC8446"> | ||||
| <front> | ||||
| <title>The Transport Layer Security (TLS) Protocol Version 1.3</titl | ||||
| e> | ||||
| <author initials="E." surname="Rescorla" fullname="E. Rescorla"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2018" month="August"/> | ||||
| <abstract> | ||||
| <t>This document specifies version 1.3 of the Transport Layer Secu | ||||
| rity (TLS) protocol. TLS allows client/server applications to communicate over | ||||
| the Internet in a way that is designed to prevent eavesdropping, tampering, and | ||||
| message forgery.</t> | ||||
| <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 50 | ||||
| 77, 5246, and 6961. This document also specifies new requirements for TLS 1.2 i | ||||
| mplementations.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="8446"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8446"/> | ||||
| </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="SRVTYPE" target="https://www.iana.org/assignments/ser | ||||
| vice-names-port-numbers/" quoteTitle="true" derivedAnchor="SRVTYPE"> | ||||
| <front> | ||||
| <title>Service Name and Transport Protocol Port Number Registry</tit | ||||
| le> | ||||
| <author> | ||||
| <organization showOnFrontPage="true">IANA</organization> | ||||
| </author> | ||||
| </front> | ||||
| </reference> | ||||
| </references> | ||||
| <references pn="section-9.2"> | ||||
| <name slugifiedName="name-informative-references">Informative References | ||||
| </name> | ||||
| <reference anchor="BCP195" target="https://www.rfc-editor.org/info/bcp19 | ||||
| 5" quoteTitle="true" derivedAnchor="BCP195"> | ||||
| <front> | ||||
| <title>Recommendations for Secure Use of Transport Layer Security (T | ||||
| LS) and Datagram Transport Layer Security (DTLS)</title> | ||||
| <author initials="Y." surname="Sheffer" fullname="Y. Sheffer"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="R." surname="Holz" fullname="R. Holz"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="P." surname="Saint-Andre" fullname="P. Saint-Andre | ||||
| "> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2015" month="May"/> | ||||
| </front> | ||||
| <seriesInfo name="BCP" value="195"/> | ||||
| <seriesInfo name="RFC" value="7525"/> | ||||
| </reference> | ||||
| <reference anchor="OBS" target="https://en.wikipedia.org/w/index.php?tit | ||||
| le=Observer_pattern&oldid=939702131" quoteTitle="true" derivedAnchor="OBS"> | ||||
| <front> | ||||
| <title>Observer pattern</title> | ||||
| <author> | ||||
| <organization showOnFrontPage="true">Wikipedia</organization> | ||||
| </author> | ||||
| <date month="February" year="2020"/> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="RFC2308" target="https://www.rfc-editor.org/info/rfc2 | ||||
| 308" quoteTitle="true" derivedAnchor="RFC2308"> | ||||
| <front> | ||||
| <title>Negative Caching of DNS Queries (DNS NCACHE)</title> | ||||
| <author initials="M." surname="Andrews" fullname="M. Andrews"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="1998" month="March"/> | ||||
| <abstract> | ||||
| <t>RFC1034 provided a description of how to cache negative respons | ||||
| es. It however had a fundamental flaw in that it did not allow a name server to | ||||
| hand out those cached responses to other resolvers, thereby greatly reducing th | ||||
| e effect of the caching. This document addresses issues raise in the light of e | ||||
| xperience and replaces RFC1034 Section 4.3.4. [STANDARDS-TRACK]</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="2308"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC2308"/> | ||||
| </reference> | ||||
| <reference anchor="RFC3123" target="https://www.rfc-editor.org/info/rfc3 | ||||
| 123" quoteTitle="true" derivedAnchor="RFC3123"> | ||||
| <front> | ||||
| <title>A DNS RR Type for Lists of Address Prefixes (APL RR)</title> | ||||
| <author initials="P." surname="Koch" fullname="P. Koch"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2001" month="June"/> | ||||
| <abstract> | ||||
| <t>The Domain Name System (DNS) is primarily used to translate dom | ||||
| ain names into IPv4 addresses using A RRs (Resource Records). Several approache | ||||
| s exist to describe networks or address ranges. This document specifies a new D | ||||
| NS RR type "APL" for address prefix lists. This memo defines an Experimental Pr | ||||
| otocol for the Internet community.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="3123"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC3123"/> | ||||
| </reference> | ||||
| <reference anchor="RFC4287" target="https://www.rfc-editor.org/info/rfc4 | ||||
| 287" quoteTitle="true" derivedAnchor="RFC4287"> | ||||
| <front> | ||||
| <title>The Atom Syndication Format</title> | ||||
| <author initials="M." surname="Nottingham" fullname="M. Nottingham" | ||||
| role="editor"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="R." surname="Sayre" fullname="R. Sayre" role="edit | ||||
| or"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2005" month="December"/> | ||||
| <abstract> | ||||
| <t>This document specifies Atom, an XML-based Web content and meta | ||||
| data syndication format. [STANDARDS-TRACK]</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="4287"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC4287"/> | ||||
| </reference> | ||||
| <reference anchor="RFC4953" target="https://www.rfc-editor.org/info/rfc4 | ||||
| 953" quoteTitle="true" derivedAnchor="RFC4953"> | ||||
| <front> | ||||
| <title>Defending TCP Against Spoofing Attacks</title> | ||||
| <author initials="J." surname="Touch" fullname="J. Touch"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2007" month="July"/> | ||||
| <abstract> | ||||
| <t>Recent analysis of potential attacks on core Internet infrastru | ||||
| cture indicates an increased vulnerability of TCP connections to spurious resets | ||||
| (RSTs), sent with forged IP source addresses (spoofing). TCP has always been s | ||||
| usceptible to such RST spoofing attacks, which were indirectly protected by chec | ||||
| king that the RST sequence number was inside the current receive window, as well | ||||
| as via the obfuscation of TCP endpoint and port numbers. For pairs of well-kno | ||||
| wn endpoints often over predictable port pairs, such as BGP or between web serve | ||||
| rs and well-known large-scale caches, increases in the path bandwidth-delay prod | ||||
| uct of a connection have sufficiently increased the receive window space that of | ||||
| f-path third parties can brute-force generate a viable RST sequence number. The | ||||
| susceptibility to attack increases with the square of the bandwidth, and thus p | ||||
| resents a significant vulnerability for recent high-speed networks. This docume | ||||
| nt addresses this vulnerability, discussing proposed solutions at the transport | ||||
| level and their inherent challenges, as well as existing network level solutions | ||||
| and the feasibility of their deployment. This document focuses on vulnerabilit | ||||
| ies due to spoofed TCP segments, and includes a discussion of related ICMP spoof | ||||
| ing attacks on TCP connections. This memo provides information for the Internet | ||||
| community.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="4953"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC4953"/> | ||||
| </reference> | ||||
| <reference anchor="RFC6281" target="https://www.rfc-editor.org/info/rfc6 | ||||
| 281" quoteTitle="true" derivedAnchor="RFC6281"> | ||||
| <front> | ||||
| <title>Understanding Apple's Back to My Mac (BTMM) Service</title> | ||||
| <author initials="S." surname="Cheshire" fullname="S. Cheshire"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="Z." surname="Zhu" fullname="Z. Zhu"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="R." surname="Wakikawa" fullname="R. Wakikawa"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="L." surname="Zhang" fullname="L. Zhang"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2011" month="June"/> | ||||
| <abstract> | ||||
| <t>This document describes the implementation of Apple Inc.'s Back | ||||
| to My Mac (BTMM) service. BTMM provides network connectivity between devices s | ||||
| o that a user can perform file sharing and screen sharing among multiple compute | ||||
| rs at home, at work, or on the road. The implementation of BTMM addresses the i | ||||
| ssues of single sign-on authentication, secure data communication, service disco | ||||
| very, and end-to-end connectivity in the face of Network Address Translators (NA | ||||
| Ts) and mobility of devices. This document is not an Internet Standards Track | ||||
| specification; it is published for informational purposes.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="6281"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC6281"/> | ||||
| </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="RFC6886" target="https://www.rfc-editor.org/info/rfc6 | ||||
| 886" quoteTitle="true" derivedAnchor="RFC6886"> | ||||
| <front> | ||||
| <title>NAT Port Mapping Protocol (NAT-PMP)</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="April"/> | ||||
| <abstract> | ||||
| <t>This document describes a protocol for automating the process o | ||||
| f creating Network Address Translation (NAT) port mappings. Included in the pro | ||||
| tocol is a method for retrieving the external IPv4 address of a NAT gateway, thu | ||||
| s allowing a client to make its external IPv4 address and port known to peers th | ||||
| at may wish to communicate with it. From 2005 onwards, this protocol was impleme | ||||
| nted in Apple products including Mac OS X, Bonjour for Windows, and AirPort wire | ||||
| less base stations. In 2013, NAT Port Mapping Protocol (NAT-PMP) was superseded | ||||
| by the IETF Standards Track RFC "Port Control Protocol (PCP)", which builds on | ||||
| NAT-PMP and uses a compatible packet format, but adds a number of significant en | ||||
| hancements.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="6886"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC6886"/> | ||||
| </reference> | ||||
| <reference anchor="RFC6887" target="https://www.rfc-editor.org/info/rfc6 | ||||
| 887" quoteTitle="true" derivedAnchor="RFC6887"> | ||||
| <front> | ||||
| <title>Port Control Protocol (PCP)</title> | ||||
| <author initials="D." surname="Wing" fullname="D. Wing" role="editor | ||||
| "> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="S." surname="Cheshire" fullname="S. Cheshire"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="M." surname="Boucadair" fullname="M. Boucadair"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="R." surname="Penno" fullname="R. Penno"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="P." surname="Selkirk" fullname="P. Selkirk"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2013" month="April"/> | ||||
| <abstract> | ||||
| <t>The Port Control Protocol allows an IPv6 or IPv4 host to contro | ||||
| l how incoming IPv6 or IPv4 packets are translated and forwarded by a Network Ad | ||||
| dress Translator (NAT) or simple firewall, and also allows a host to optimize it | ||||
| s outgoing NAT keepalive messages.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="6887"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC6887"/> | ||||
| </reference> | ||||
| <reference anchor="RFC7413" target="https://www.rfc-editor.org/info/rfc7 | ||||
| 413" quoteTitle="true" derivedAnchor="RFC7413"> | ||||
| <front> | ||||
| <title>TCP Fast Open</title> | ||||
| <author initials="Y." surname="Cheng" fullname="Y. Cheng"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="J." surname="Chu" fullname="J. Chu"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="S." surname="Radhakrishnan" fullname="S. Radhakris | ||||
| hnan"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="A." surname="Jain" fullname="A. Jain"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2014" month="December"/> | ||||
| <abstract> | ||||
| <t>This document describes an experimental TCP mechanism called TC | ||||
| P Fast Open (TFO). TFO allows data to be carried in the SYN and SYN-ACK packets | ||||
| and consumed by the receiving end during the initial connection handshake, and | ||||
| saves up to one full round-trip time (RTT) compared to the standard TCP, which r | ||||
| equires a three-way handshake (3WHS) to complete before data can be exchanged. | ||||
| However, TFO deviates from the standard TCP semantics, since the data in the SYN | ||||
| could be replayed to an application in some rare circumstances. Applications s | ||||
| hould not use TFO unless they can tolerate this issue, as detailed in the Applic | ||||
| ability section.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="7413"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC7413"/> | ||||
| </reference> | ||||
| <reference anchor="RFC8010" target="https://www.rfc-editor.org/info/rfc8 | ||||
| 010" quoteTitle="true" derivedAnchor="RFC8010"> | ||||
| <front> | ||||
| <title>Internet Printing Protocol/1.1: Encoding and Transport</title | ||||
| > | ||||
| <author initials="M." surname="Sweet" fullname="M. Sweet"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="I." surname="McDonald" fullname="I. McDonald"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2017" month="January"/> | ||||
| <abstract> | ||||
| <t>The Internet Printing Protocol (IPP) is an application-level pr | ||||
| otocol for distributed printing using Internet tools and technologies. This doc | ||||
| ument defines the rules for encoding IPP operations, attributes, and values into | ||||
| the Internet MIME media type called "application/ipp". It also defines the rul | ||||
| es for transporting a message body whose Content-Type is "application/ipp" over | ||||
| HTTP and/or HTTPS. The IPP data model and operation semantics are described in | ||||
| "Internet Printing Protocol/1.1: Model and | ||||
| Semantics" (RFC 8011).</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="STD" value="92"/> | ||||
| <seriesInfo name="RFC" value="8010"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8010"/> | ||||
| </reference> | ||||
| <reference anchor="RFC8011" target="https://www.rfc-editor.org/info/rfc8 | ||||
| 011" quoteTitle="true" derivedAnchor="RFC8011"> | ||||
| <front> | ||||
| <title>Internet Printing Protocol/1.1: Model and Semantics</title> | ||||
| <author initials="M." surname="Sweet" fullname="M. Sweet"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="I." surname="McDonald" fullname="I. McDonald"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2017" month="January"/> | ||||
| <abstract> | ||||
| <t>The Internet Printing Protocol (IPP) is an application-level pr | ||||
| otocol for distributed printing using Internet tools and technologies. This doc | ||||
| ument describes a simplified model consisting of abstract objects, attributes, a | ||||
| nd operations that is independent of encoding and transport. The model consists | ||||
| of several objects, including Printers and Jobs. Jobs optionally support multi | ||||
| ple Documents.</t> | ||||
| <t>IPP semantics allow End Users and Operators to query Printer ca | ||||
| pabilities; submit Print Jobs; inquire about the status of Print Jobs and Printe | ||||
| rs; and cancel, hold, and release Print Jobs. IPP semantics also allow Operator | ||||
| s to pause and resume Jobs and Printers.</t> | ||||
| <t>Security, internationalization, and directory issues are also a | ||||
| ddressed by the model and semantics. The IPP message encoding and transport are | ||||
| described in "Internet Printing Protocol/1.1: Encoding | ||||
| and Transport" (RFC 8010).</t> | ||||
| <t>This document obsoletes RFCs 2911, 3381, and 3382.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="STD" value="92"/> | ||||
| <seriesInfo name="RFC" value="8011"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8011"/> | ||||
| </reference> | ||||
| <reference anchor="RFC8499" target="https://www.rfc-editor.org/info/rfc8 | ||||
| 499" quoteTitle="true" derivedAnchor="RFC8499"> | ||||
| <front> | ||||
| <title>DNS Terminology</title> | ||||
| <author initials="P." surname="Hoffman" fullname="P. Hoffman"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="A." surname="Sullivan" fullname="A. Sullivan"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="K." surname="Fujiwara" fullname="K. Fujiwara"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2019" month="January"/> | ||||
| <abstract> | ||||
| <t>The Domain Name System (DNS) is defined in literally dozens of | ||||
| different RFCs. The terminology used by implementers and developers of DNS prot | ||||
| ocols, and by operators of DNS systems, has sometimes changed in the decades sin | ||||
| ce the DNS was first defined. This document gives current definitions for many | ||||
| of the terms used in the DNS in a single document.</t> | ||||
| <t>This document obsoletes RFC 7719 and updates RFC 2308.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="BCP" value="219"/> | ||||
| <seriesInfo name="RFC" value="8499"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8499"/> | ||||
| </reference> | ||||
| <reference anchor="RFC8684" target="https://www.rfc-editor.org/info/rfc8 | ||||
| 684" quoteTitle="true" derivedAnchor="RFC8684"> | ||||
| <front> | ||||
| <title>TCP Extensions for Multipath Operation with Multiple Addresse | ||||
| s</title> | ||||
| <author initials="A." surname="Ford" fullname="A. Ford"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="C." surname="Raiciu" fullname="C. Raiciu"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="M." surname="Handley" fullname="M. Handley"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="O." surname="Bonaventure" fullname="O. Bonaventure | ||||
| "> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="C." surname="Paasch" fullname="C. Paasch"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2020" month="March"/> | ||||
| <abstract> | ||||
| <t>TCP/IP communication is currently restricted to a single path p | ||||
| er connection, yet multiple paths often exist between peers. The simultaneous us | ||||
| e of these multiple paths for a TCP/IP session would improve resource usage with | ||||
| in the network and thus improve user experience through higher throughput and im | ||||
| proved resilience to network failure.</t> | ||||
| <t>Multipath TCP provides the ability to simultaneously use multip | ||||
| le paths between peers. This document presents a set of extensions to traditiona | ||||
| l TCP to support multipath operation. The protocol offers the same type of servi | ||||
| ce to applications as TCP (i.e., a reliable bytestream), and it provides the com | ||||
| ponents necessary to establish and use multiple TCP flows across potentially dis | ||||
| joint paths.</t> | ||||
| <t>This document specifies v1 of Multipath TCP, obsoleting v0 as s | ||||
| pecified in RFC 6824, through clarifications and modifications primarily driven | ||||
| by deployment experience.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="8684"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8684"/> | ||||
| </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="RFC8766" target="https://www.rfc-editor.org/info/rfc8 | ||||
| 766" quoteTitle="true" derivedAnchor="RFC8766"> | ||||
| <front> | ||||
| <title>Discovery Proxy for Multicast DNS-Based Service Discovery</ti | ||||
| tle> | ||||
| <author initials="S" surname="Cheshire" fullname="Stuart Cheshire"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date month="June" year="2020"/> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="8766"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8766"/> | ||||
| </reference> | ||||
| <reference anchor="SD-API" target="https://opensource.apple.com/source/m | ||||
| DNSResponder/mDNSResponder-878.70.2/mDNSShared/dns_sd.h.auto.html" quoteTitle="t | ||||
| rue" derivedAnchor="SD-API"> | ||||
| <front> | ||||
| <title>dns_sd.h</title> | ||||
| <author> | ||||
| <organization showOnFrontPage="true">Apple Inc.</organization> | ||||
| </author> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="SYN" target="https://www.cisco.com/web/about/ac123/ac | ||||
| 147/archived_issues/ipj_9-4/ipj_9-4.pdf" quoteTitle="true" derivedAnchor="SYN"> | ||||
| <front> | ||||
| <title>Defenses Against TCP SYN Flooding Attacks</title> | ||||
| <author initials="W." surname="Eddy" fullname="Wesley Eddy"> | ||||
| <organization showOnFrontPage="true">Verizon Federal Network Syste | ||||
| ms</organization> | ||||
| <address> | ||||
| <email>weddy@grc.nasa.gov</email> | ||||
| </address> | ||||
| </author> | ||||
| <date year="2006" month="December"/> | ||||
| <keyword>TCP</keyword> | ||||
| </front> | ||||
| <refcontent>The Internet Protocol Journal</refcontent> | ||||
| <refcontent>Cisco Systems</refcontent> | ||||
| <refcontent>Volume 9</refcontent> | ||||
| <refcontent>Number 4</refcontent> | ||||
| </reference> | ||||
| <reference anchor="I-D.ietf-tcpm-rack" quoteTitle="true" target="https:/ | ||||
| /tools.ietf.org/html/draft-ietf-tcpm-rack-08" derivedAnchor="TCPRACK"> | ||||
| <front> | ||||
| <title>RACK: a time-based fast loss detection algorithm for TCP</tit | ||||
| le> | ||||
| <author initials="Y" surname="Cheng" fullname="Yuchung Cheng"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="N" surname="Cardwell" fullname="Neal Cardwell"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="N" surname="Dukkipati" fullname="Nandita Dukkipati | ||||
| "> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="P" surname="Jha" fullname="Priyaranjan Jha"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date month="March" day="9" year="2020"/> | ||||
| <abstract> | ||||
| <t>This document presents a new TCP loss detection algorithm calle | ||||
| d RACK ("Recent ACKnowledgment"). RACK uses the notion of time, instead of pack | ||||
| et or sequence counts, to detect losses, for modern TCP implementations that can | ||||
| support per-packet timestamps and the selective acknowledgment (SACK) option. | ||||
| It is intended to be an alternative to the DUPACK threshold approach [RFC6675], | ||||
| as well as other nonstandard approaches such as FACK [FACK].</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="Internet-Draft" value="draft-ietf-tcpm-rack-08"/> | ||||
| <format type="TXT" target="http://www.ietf.org/internet-drafts/draft-i | ||||
| etf-tcpm-rack-08.txt"/> | ||||
| <refcontent>Work in Progress</refcontent> | ||||
| </reference> | ||||
| <reference anchor="XEP0060" target="https://xmpp.org/extensions/xep-0060 | ||||
| .html" quoteTitle="true" derivedAnchor="XEP0060"> | ||||
| <front> | ||||
| <title>Publish-Subscribe</title> | ||||
| <author initials="P." surname="Millard" fullname="Peter Millard"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| <address> | ||||
| <email/> | ||||
| </address> | ||||
| </author> | ||||
| <author initials="P." surname="Saint-Andre" fullname="Peter | ||||
| Saint-Andre"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| <address> | ||||
| <email>peter@andyet.net</email> | ||||
| </address> | ||||
| </author> | ||||
| <author initials="R." surname="Meijer" fullname="Ralph Meijer"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| <address> | ||||
| <email>ralphm@ik.nu</email> | ||||
| </address> | ||||
| </author> | ||||
| <date month="October" year="2019"/> | ||||
| </front> | ||||
| <refcontent>XSF XEP 0060 | ||||
| </refcontent> | ||||
| </reference> | ||||
| </references> | ||||
| </references> | ||||
| <section anchor="Acknowledgments" numbered="false" toc="include" removeInRFC | ||||
| ="false" pn="section-appendix.a"> | ||||
| <name slugifiedName="name-acknowledgments">Acknowledgments</name> | ||||
| <t pn="section-appendix.a-1">The authors would like to thank <contact full | ||||
| name="Kiren Sekar"/> and | ||||
| <contact fullname="Marc Krochmal"/> for previous work completed in this | ||||
| field.</t> | ||||
| <t pn="section-appendix.a-2">This document has been improved due to commen | ||||
| ts from | ||||
| <contact fullname="Ran Atkinson"/>, | ||||
| <contact fullname="Tim Chown"/>, | ||||
| <contact fullname="Sara Dickinson"/>, | ||||
| <contact fullname="Mark Delany"/>, | ||||
| <contact fullname="Ralph Droms"/>, | ||||
| <contact fullname="Jan Komissar"/>, | ||||
| <contact fullname="Eric Rescorla"/>, | ||||
| <contact fullname="Michael Richardson"/>, | ||||
| <contact fullname="David Schinazi"/>, | ||||
| <contact fullname="Manju Shankar Rao"/>, | ||||
| <contact fullname="Robert Sparks"/>, | ||||
| <contact fullname="Markus Stenberg"/>, | ||||
| <contact fullname="Andrew Sullivan"/>, | ||||
| <contact fullname="Michael Sweet"/>, | ||||
| <contact fullname="Dave Thaler"/>, | ||||
| <contact fullname="Brian Trammell"/>, | ||||
| <contact fullname="Bernie Volz"/>, | ||||
| <contact fullname="Éric Vyncke"/>, | ||||
| <contact fullname="Christopher Wood"/>, | ||||
| <contact fullname="Liang Xia"/>, | ||||
| and | and | |||
| Soraia Zlatkovic. | <contact fullname="Soraia Zlatkovic"/>. | |||
| Ted Lemon provided clarifying text that was greatly appreciated.</t> | <contact fullname="Ted Lemon"/> provided clarifying text that was greatly | |||
| <?rfc needLines="15" ?> | appreciated.</t> | |||
| </section> | </section> | |||
| </middle> | <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc | |||
| ="include" pn="section-appendix.b"> | ||||
| <!-- *****BACK MATTER ***** --> | <name slugifiedName="name-authors-addresses">Authors' Addresses</name> | |||
| <author fullname="Tom Pusateri" initials="T." surname="Pusateri"> | ||||
| <back> | <organization showOnFrontPage="true">Unaffiliated</organization> | |||
| <!-- References split into informative and normative --> | <address> | |||
| <postal> | ||||
| <!-- There are 2 ways to insert reference entries from the citation libraries | <street/> | |||
| : | <city>Raleigh</city> | |||
| 1. define an ENTITY at the top, and use "ampersand character"RFC2629; here ( | <region>NC</region> | |||
| as shown) | <code>27608</code> | |||
| 2. simply use a PI "less than character"?rfc include="reference.RFC.2119.xml | <country>United States of America</country> | |||
| "?> here | </postal> | |||
| (for I-Ds: include="reference.I-D.narten-iana-considerations-rfc2434bis.x | <phone>+1 919 867 1330</phone> | |||
| ml") | <email>pusateri@bangj.com</email> | |||
| </address> | ||||
| Both are cited textually in the same manner: by using xref elements. | </author> | |||
| If you use the PI option, xml2rfc will, by default, try to find included fil | <author fullname="Stuart Cheshire" initials="S." surname="Cheshire"> | |||
| es in the same | <organization showOnFrontPage="true">Apple Inc.</organization> | |||
| directory as the including file. You can also define the XML_LIBRARY environ | <address> | |||
| ment variable | <postal> | |||
| with a value containing a set of directories to search. These can be either | <street>One Apple Park Way</street> | |||
| in the local | <city>Cupertino</city> | |||
| filing system or remote ones accessed by http (http://domain/dir/... ).--> | <region>CA</region> | |||
| <code>95014</code> | ||||
| <references title="Normative References"> | <country>United States of America</country> | |||
| &RFC0020; | </postal> | |||
| &RFC0768; | <phone>+1 (408) 996-1010</phone> | |||
| &RFC0793; | <email>cheshire@apple.com</email> | |||
| &RFC1034; | </address> | |||
| &RFC1035; | </author> | |||
| &RFC1123; | </section> | |||
| &RFC2119; | </back> | |||
| &RFC2136; | ||||
| &RFC2181; | ||||
| &RFC2782; | ||||
| &RFC6066; | ||||
| <?rfc include="reference.RFC.6335" ?> | ||||
| &RFC6895; | ||||
| &RFC7673; | ||||
| &RFC7766; | ||||
| &RFC7858; | ||||
| &RFC8174; | ||||
| &RFC8310; | ||||
| &RFC8446; | ||||
| &RFC8490; | ||||
| <reference anchor="SRVTYPE" | ||||
| target="http://www.iana.org/assignments/service-names-port-numbers/"> | ||||
| <front> | ||||
| <title>Service Name and Transport Protocol Port Number Registry</title> | ||||
| <author/> | ||||
| <date/> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="DSOTYPE" | ||||
| target="https://www.iana.org/assignments/dns-parameters/"> | ||||
| <front> | ||||
| <title>DSO Type Code Registry</title> | ||||
| <author/> | ||||
| <date/> | ||||
| </front> | ||||
| </reference> | ||||
| </references> | ||||
| <!-- Use needLines to make sure "Authors' Addresses" line doesn't appear as the | ||||
| last line on the page --> | ||||
| <?rfc needLines="9" ?> | ||||
| <references title="Informative References"> | ||||
| <reference anchor="BCP195" target="http://www.rfc-editor.org/info/bcp195">< | ||||
| front> | ||||
| <title>Recommendations for Secure Use of Transport Layer Security (TL | ||||
| S) and Datagram Transport Layer Security (DTLS)</title> | ||||
| <author initials="Y." surname="Sheffer" fullname="Yaron Sheffer"/> | ||||
| <author initials="R." surname="Holz" fullname="Ralph Holz"/> | ||||
| <author initials="P." surname="Saint-Andre" fullname="Peter Saint-And | ||||
| re"/> | ||||
| <date year="2015" month="May"/> | ||||
| </front><seriesInfo name="BCP" value="195"/><seriesInfo name="RFC" valu | ||||
| e="7525"/></reference> | ||||
| &RFC2308; | ||||
| &RFC3123; | ||||
| &RFC4287; | ||||
| &RFC4953; | ||||
| &RFC6281; | ||||
| &RFC6762; | ||||
| &RFC6763; | ||||
| &RFC6824; | ||||
| &RFC6886; | ||||
| &RFC6887; | ||||
| &RFC7413; | ||||
| &RFC7719; | ||||
| &RFC8010; | ||||
| &RFC8011; | ||||
| &RFC8499; | ||||
| &I-D.ietf-tcpm-rack; | ||||
| <reference anchor='LLQ'> | ||||
| <front> | ||||
| <title>DNS Long-Lived Queries</title> | ||||
| <author initials='S' surname='Cheshire' fullname='Stuart Cheshire'> | ||||
| <organization /> | ||||
| </author> | ||||
| <author initials='M' surname='Krochmal' fullname='Marc Krochmal'> | ||||
| <organization /> | ||||
| </author> | ||||
| <date month='March' day='4' year='2019' /> | ||||
| <abstract><t>DNS Long-Lived Queries (LLQ) is a protocol for extending the DNS pr | ||||
| otocol to support change notification, thus allowing clients to learn about chan | ||||
| ges to DNS data without polling the server. From 2007 onwards, LLQ was implemen | ||||
| ted in Apple products including Mac OS X, Bonjour for Windows, and AirPort wirel | ||||
| ess base stations. In 2019, the LLQ protocol was superseded by the IETF Standar | ||||
| ds Track RFC "DNS Push Notifications", which builds on experience gained with th | ||||
| e LLQ protocol to create a superior replacement.</t></abstract> | ||||
| </front> | ||||
| <seriesInfo name='Internet-Draft' value='draft-sekar-dns-llq-03' /> | ||||
| <format type='TXT' | ||||
| target='http://www.ietf.org/internet-drafts/draft-sekar-dns-llq-03.txt' | ||||
| /> | ||||
| </reference> | ||||
| <reference anchor='DisProx'> | ||||
| <front> | ||||
| <title>Discovery Proxy for Multicast DNS-Based Service Discovery</title> | ||||
| <author initials='S' surname='Cheshire' fullname='Stuart Cheshire'> | ||||
| <organization /> | ||||
| </author> | ||||
| <date month='March' day='24' year='2019' /> | ||||
| <abstract><t>This document specifies a network proxy that uses Multicast DNS to | ||||
| automatically populate the wide-area unicast Domain Name System namespace with r | ||||
| ecords describing devices and services found on the local link.</t></abstract> | ||||
| </front> | ||||
| <seriesInfo name='Internet-Draft' value='draft-ietf-dnssd-hybrid-10' /> | ||||
| <format type='TXT' | ||||
| target='http://www.ietf.org/internet-drafts/draft-ietf-dnssd-hybrid-10.t | ||||
| xt' /> | ||||
| </reference> | ||||
| <reference anchor='SYN'> | ||||
| <front> | ||||
| <title>Defenses Against TCP SYN Flooding Attacks</title> | ||||
| <author initials='W.' surname='Eddy' fullname='Wesley Eddy'> | ||||
| <organization>Verizon Federal Network Systems</organization> | ||||
| <address> | ||||
| <email>weddy@grc.nasa.gov</email> | ||||
| </address> | ||||
| </author> | ||||
| <date year='2006' month='December' /> | ||||
| <keyword>TCP</keyword> | ||||
| </front> | ||||
| <seriesInfo name="The Internet Protocol Journal," value='Cisco Systems' / | ||||
| > | ||||
| <seriesInfo name='Volume' value='9' /> | ||||
| <seriesInfo name='Number' value='4' /> | ||||
| <format type='PDF' octets='882020' target="http://www.cisco.com/web/about | ||||
| /ac123/ac147/archived_issues/ipj_9-4/ipj_9-4.pdf" /> | ||||
| <format type='HTML' octets='65566' target="http://www.cisco.com/web/about | ||||
| /ac123/ac147/archived_issues/ipj_9-4/syn_flooding_attacks.html" /> | ||||
| </reference> | ||||
| <reference anchor='obs' target="https://en.wikipedia.org/wiki/Observer_patt | ||||
| ern"> | ||||
| <front> | ||||
| <title>Observer Pattern</title> | ||||
| <author/> | ||||
| <date/> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor='SD-API' target="https://opensource.apple.com/source/mDNS | ||||
| Responder/mDNSResponder-878.70.2/mDNSShared/dns_sd.h.auto.html"> | ||||
| <front> | ||||
| <title>dns_sd.h API</title> | ||||
| <author/> | ||||
| <date/> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="XEP0060"> | ||||
| <front> | ||||
| <title>Publish-Subscribe</title> | ||||
| <author initials="P." surname="Millard" fullname="Peter Millard"> | ||||
| <organization/> | ||||
| <address> | ||||
| <email/> | ||||
| </address> | ||||
| </author> | ||||
| <author initials="P." surname="Saint-Andre" fullname="Peter Saint-Andre | ||||
| "> | ||||
| <organization/> | ||||
| <address> | ||||
| <email>peter@andyet.net</email> | ||||
| </address> | ||||
| </author> | ||||
| <author initials="R." surname="Meijer" fullname="Ralph Meijer"> | ||||
| <organization/> | ||||
| <address> | ||||
| <email>ralphm@ik.nu</email> | ||||
| </address> | ||||
| </author> | ||||
| <date day="01" month="July" year="2010"/> | ||||
| </front> | ||||
| <seriesInfo name="XSF XEP" value="0060"/> | ||||
| <format type="HTML" target="http://xmpp.org/extensions/xep-0060.html"/> | ||||
| </reference> | ||||
| </references> | ||||
| </back> | ||||
| </rfc> | </rfc> | |||
| End of changes. 82 change blocks. | ||||
| 1934 lines changed or deleted | 3318 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/ | ||||