draft-ietf-dnssd-push-13.txt | draft-ietf-dnssd-push-14.txt | |||
---|---|---|---|---|
Internet Engineering Task Force T. Pusateri | Internet Engineering Task Force T. Pusateri | |||
Internet-Draft Unaffiliated | Internet-Draft Unaffiliated | |||
Intended status: Standards Track S. Cheshire | Intended status: Standards Track S. Cheshire | |||
Expires: May 2, 2018 Apple Inc. | Expires: September 19, 2018 Apple Inc. | |||
October 29, 2017 | March 18, 2018 | |||
DNS Push Notifications | DNS Push Notifications | |||
draft-ietf-dnssd-push-13 | draft-ietf-dnssd-push-14 | |||
Abstract | Abstract | |||
The Domain Name System (DNS) was designed to return matching records | The Domain Name System (DNS) was designed to return matching records | |||
efficiently for queries for data that is relatively static. When | efficiently for queries for data that are relatively static. When | |||
those records change frequently, DNS is still efficient at returning | those records change frequently, DNS is still efficient at returning | |||
the updated results when polled, as long as the polling rate is not | the updated results when polled, as long as the polling rate is not | |||
too high. But there exists no mechanism for a client to be | too high. But there exists no mechanism for a client to be | |||
asynchronously notified when these changes occur. This document | asynchronously notified when these changes occur. This document | |||
defines a mechanism for a client to be notified of such changes to | defines a mechanism for a client to be notified of such changes to | |||
DNS records, called DNS Push Notifications. | DNS records, called DNS Push Notifications. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on May 2, 2018. | This Internet-Draft will expire on September 19, 2018. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2017 IETF Trust and the persons identified as the | Copyright (c) 2018 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
1.1. Requirements Language . . . . . . . . . . . . . . . . . . 3 | 1.1. Requirements Language . . . . . . . . . . . . . . . . . . 3 | |||
2. Motivation . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Motivation . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
3. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 3. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
4. Transport . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 4. Transport . . . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
5. State Considerations . . . . . . . . . . . . . . . . . . . . 7 | 5. State Considerations . . . . . . . . . . . . . . . . . . . . 8 | |||
6. Protocol Operation . . . . . . . . . . . . . . . . . . . . . 8 | 6. Protocol Operation . . . . . . . . . . . . . . . . . . . . . 9 | |||
6.1. Discovery . . . . . . . . . . . . . . . . . . . . . . . . 9 | 6.1. Discovery . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
6.2. DNS Push Notification SUBSCRIBE . . . . . . . . . . . . . 12 | 6.2. DNS Push Notification SUBSCRIBE . . . . . . . . . . . . . 13 | |||
6.2.1. SUBSCRIBE Request . . . . . . . . . . . . . . . . . . 13 | 6.2.1. SUBSCRIBE Request . . . . . . . . . . . . . . . . . . 13 | |||
6.2.2. SUBSCRIBE Response . . . . . . . . . . . . . . . . . 16 | 6.2.2. SUBSCRIBE Response . . . . . . . . . . . . . . . . . 16 | |||
6.3. DNS Push Notification Updates . . . . . . . . . . . . . . 19 | 6.3. DNS Push Notification Updates . . . . . . . . . . . . . . 19 | |||
6.3.1. PUSH Message . . . . . . . . . . . . . . . . . . . . 20 | 6.3.1. PUSH Message . . . . . . . . . . . . . . . . . . . . 19 | |||
6.3.2. PUSH Response . . . . . . . . . . . . . . . . . . . . 23 | 6.4. DNS Push Notification UNSUBSCRIBE . . . . . . . . . . . . 22 | |||
6.4. DNS Push Notification UNSUBSCRIBE . . . . . . . . . . . . 24 | 6.4.1. UNSUBSCRIBE Request . . . . . . . . . . . . . . . . . 22 | |||
6.4.1. UNSUBSCRIBE Request . . . . . . . . . . . . . . . . . 25 | 6.5. DNS Push Notification RECONFIRM . . . . . . . . . . . . . 24 | |||
6.4.2. UNSUBSCRIBE Response . . . . . . . . . . . . . . . . 27 | 6.5.1. RECONFIRM Request . . . . . . . . . . . . . . . . . . 24 | |||
6.5. DNS Push Notification RECONFIRM . . . . . . . . . . . . . 29 | 6.5.2. RECONFIRM Response . . . . . . . . . . . . . . . . . 26 | |||
6.5.1. RECONFIRM Request . . . . . . . . . . . . . . . . . . 30 | 6.6. Client-Initiated Termination . . . . . . . . . . . . . . 28 | |||
6.5.2. RECONFIRM Response . . . . . . . . . . . . . . . . . 32 | 7. Security Considerations . . . . . . . . . . . . . . . . . . . 29 | |||
6.6. Client-Initiated Termination . . . . . . . . . . . . . . 34 | 7.1. Security Services . . . . . . . . . . . . . . . . . . . . 29 | |||
7. Security Considerations . . . . . . . . . . . . . . . . . . . 35 | 7.2. TLS Name Authentication . . . . . . . . . . . . . . . . . 29 | |||
7.1. Security Services . . . . . . . . . . . . . . . . . . . . 35 | 7.3. TLS Compression . . . . . . . . . . . . . . . . . . . . . 30 | |||
7.2. TLS Name Authentication . . . . . . . . . . . . . . . . . 35 | 7.4. TLS Session Resumption . . . . . . . . . . . . . . . . . 30 | |||
7.3. TLS Compression . . . . . . . . . . . . . . . . . . . . . 36 | 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 30 | |||
7.4. TLS Session Resumption . . . . . . . . . . . . . . . . . 36 | 9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 31 | |||
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 36 | 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 31 | |||
9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 37 | 10.1. Normative References . . . . . . . . . . . . . . . . . . 31 | |||
10. References . . . . . . . . . . . . . . . . . . . . . . . . . 37 | 10.2. Informative References . . . . . . . . . . . . . . . . . 33 | |||
10.1. Normative References . . . . . . . . . . . . . . . . . . 37 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 35 | |||
10.2. Informative References . . . . . . . . . . . . . . . . . 39 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 41 | ||||
1. Introduction | 1. Introduction | |||
DNS records may be updated using DNS Update [RFC2136]. Other | Domain Name System (DNS) records may be updated using DNS Update | |||
mechanisms such as a Discovery Proxy [DisProx] can also generate | [RFC2136]. Other mechanisms such as a Discovery Proxy [DisProx] can | |||
changes to a DNS zone. This document specifies a protocol for DNS | also generate changes to a DNS zone. This document specifies a | |||
clients to subscribe to receive asynchronous notifications of changes | protocol for DNS clients to subscribe to receive asynchronous | |||
to RRSets of interest. It is immediately relevant in the case of DNS | notifications of changes to RRSets of interest. It is immediately | |||
Service Discovery [RFC6763] but is not limited to that use case, and | relevant in the case of DNS Service Discovery [RFC6763] but is not | |||
provides a general DNS mechanism for DNS record change notifications. | limited to that use case, and provides a general DNS mechanism for | |||
Familiarity with the DNS protocol and DNS packet formats is assumed | DNS record change notifications. Familiarity with the DNS protocol | |||
[RFC1034] [RFC1035] [RFC6895]. | and DNS packet formats is assumed [RFC1034] [RFC1035] [RFC6895]. | |||
1.1. Requirements Language | 1.1. Requirements Language | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", | |||
"OPTIONAL" in this document are to be interpreted as described in | and "OPTIONAL" in this document are to be interpreted as described | |||
"Key words for use in RFCs to Indicate Requirement Levels" [RFC2119]. | in "Key words for use in RFCs to Indicate Requirement Levels", | |||
when, and only when, they appear in all capitals, as shown here | ||||
[RFC2119] [RFC8174]. | ||||
2. Motivation | 2. Motivation | |||
As the domain name system continues to adapt to new uses and changes | As the domain name system continues to adapt to new uses and changes | |||
in deployment, polling has the potential to burden DNS servers at | in deployment, polling has the potential to burden DNS servers at | |||
many levels throughout the network. Other network protocols have | many levels throughout the network. Other network protocols have | |||
successfully deployed a publish/subscribe model to state changes | successfully deployed a publish/subscribe model following the | |||
following the Observer design pattern [obs]. XMPP Publish-Subscribe | Observer design pattern [obs]. XMPP Publish-Subscribe [XEP0060] and | |||
[XEP0060] and Atom [RFC4287] are examples. While DNS servers are | Atom [RFC4287] are examples. While DNS servers are generally highly | |||
generally highly tuned and capable of a high rate of query/response | tuned and capable of a high rate of query/response traffic, adding a | |||
traffic, adding a publish/subscribe model for tracking changes to DNS | publish/subscribe model for tracking changes to DNS records can | |||
records can result in more timely notification of changes with | deliver more timely notification of changes with reduced CPU usage | |||
reduced CPU usage and lower network traffic. | and lower network traffic. | |||
Multicast DNS [RFC6762] implementations always listen on a well known | Multicast DNS [RFC6762] implementations always listen on a well known | |||
link-local IP multicast group, and new services and updates are sent | link-local IP multicast group, and record changes are sent to that | |||
for all group members to receive. Therefore, Multicast DNS already | multicast group address for all group members to receive. Therefore, | |||
has asynchronous change notification capability. However, when DNS | Multicast DNS already has asynchronous change notification | |||
Service Discovery [RFC6763] is used across a wide area network using | capability. However, when DNS Service Discovery [RFC6763] is used | |||
Unicast DNS (possibly facilitated via a Discovery Proxy [DisProx]) it | across a wide area network using Unicast DNS (possibly facilitated | |||
would be beneficial to have an equivalent capability for Unicast DNS, | via a Discovery Proxy [DisProx]) it would be beneficial to have an | |||
to allow clients to learn about DNS record changes in a timely manner | equivalent capability for Unicast DNS, to allow clients to learn | |||
without polling. | about DNS record changes in a timely manner without polling. | |||
The DNS Long-Lived Queries (LLQ) [I-D.sekar-dns-llq] mechanism is an | The DNS Long-Lived Queries (LLQ) mechanism [LLQ] is an existing | |||
existing deployed solution to provide asynchronous change | deployed solution to provide asynchronous change notifications, used | |||
notifications, used by Apple's Back to My Mac Service [RFC6281] | by Apple's Back to My Mac Service [RFC6281] introduced in Mac OS X | |||
introduced in Mac OS X 10.5 Leopard in 2007. Back to My Mac was | 10.5 Leopard in 2007. Back to My Mac was designed in an era when the | |||
designed in an era when the data centre operations staff asserted | data center operations staff asserted that it was impossible for a | |||
that it was impossible for a server to handle large numbers of | server to handle large numbers of mostly-idle TCP connections, so LLQ | |||
mostly-idle TCP connections, so LLQ had to defined as a UDP-based | was defined as a UDP-based protocol, effectively replicating much of | |||
protocol, effectively replicating much of TCP's connection state | TCP's connection state management logic in user space, and creating | |||
management logic in user space, and creating its own poor imitations | its own poor imitations of existing TCP features like the three-way | |||
of existing TCP features like the three-way handshake, flow control, | handshake, flow control, and reliability. | |||
and reliability. | ||||
This document builds on experience gained with the LLQ protocol, with | This document builds on experience gained with the LLQ protocol, with | |||
an improved design. Instead of using UDP, this specification uses | an improved design. Instead of using UDP, this specification uses | |||
TCP, and therefore doesn't need to reinvent existing TCP | DNS Stateful Operations (DSO) [DSO] running over TLS over TCP, and | |||
functionality. Using TCP also gives long-lived low-traffic | therefore doesn't need to reinvent existing TCP functionality. Using | |||
connections better longevity through NAT gateways without resorting | TCP also gives long-lived low-traffic connections better longevity | |||
to excessive keepalive traffic. Instead of inventing a new | through NAT gateways without resorting to excessive keepalive | |||
vocabulary of messages to communicate DNS zone changes as LLQ did, | traffic. Instead of inventing a new vocabulary of messages to | |||
this specification adopts the syntax and semantics of DNS Update | communicate DNS zone changes as LLQ did, this specification borrows | |||
messages [RFC2136]. | the established syntax and semantics of DNS Update messages | |||
[RFC2136]. | ||||
3. Overview | 3. Overview | |||
The existing DNS Update protocol [RFC2136] provides a mechanism for | The existing DNS Update protocol [RFC2136] provides a mechanism for | |||
clients to add or delete individual resource records (RRs) or entire | clients to add or delete individual resource records (RRs) or entire | |||
resource record sets (RRSets) on the zone's server. | resource record sets (RRSets) on the zone's server. | |||
This specification adopts a simplified subset of these existing | This specification adopts a simplified subset of these existing | |||
syntax and semantics, and uses them for DNS Push Notification | syntax and semantics, and uses them for DNS Push Notification | |||
messages going in the opposite direction, from server to client, to | messages going in the opposite direction, from server to client, to | |||
communicate changes to a zone. The client subscribes for Push | communicate changes to a zone. The client subscribes for Push | |||
Notifications by connecting to the server and sending DNS message(s) | Notifications by connecting to the server and sending DNS message(s) | |||
indicating the RRSet(s) of interest. When the client loses interest | indicating the RRSet(s) of interest. When the client loses interest | |||
in updates to these records, it unsubscribes. | in receiving further updates to these records, it unsubscribes. | |||
The DNS Push Notification server for a zone is any server capable | The DNS Push Notification server for a 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 master, slave, or stealth name server [RFC7719]. | It may be a master, slave, or stealth name server [RFC7719]. | |||
Consequently, the "_dns-push-tls._tcp.<zone>" SRV record for a | Consequently, the "_dns-push-tls._tcp.<zone>" SRV record for a | |||
zone MAY reference the same target host and port as that zone's | zone MAY reference the same target host and port as that zone's | |||
"_dns-update-tls._tcp.<zone>" SRV record. When the same target host | "_dns-update-tls._tcp.<zone>" SRV record. When the same target host | |||
and port is offered for both DNS Updates and DNS Push Notifications, | and port is offered for both DNS Updates and DNS Push Notifications, | |||
a client MAY use a single TCP connection to that server for both DNS | a client MAY use a single TCP connection to that server for both DNS | |||
Updates and DNS Push Notification Queries. | Updates and DNS Push Notification Queries. | |||
skipping to change at page 5, line 19 ¶ | skipping to change at page 6, line 4 ¶ | |||
received with the RD bit set, matching records for names falling | received with the RD bit set, matching records for names falling | |||
within the server's zones should be returned with the RA (Recursion | within the server's zones should be returned with the RA (Recursion | |||
Available) bit clear. If the query is for a name not in the server's | Available) bit clear. If the query is for a name not in the server's | |||
zone, an error with RCODE NOTAUTH (Not Authoritative) should be | zone, an error with RCODE NOTAUTH (Not Authoritative) should be | |||
returned. | returned. | |||
DNS Push Notification clients are NOT required to implement DNS | DNS Push Notification clients are NOT required to implement DNS | |||
Update Prerequisite processing. Prerequisites are used to perform | Update Prerequisite processing. Prerequisites are used to perform | |||
tentative atomic test-and-set type operations when a client updates | tentative atomic test-and-set type operations when a client updates | |||
records on a server, and that concept has no applicability when it | records on a server, and that concept has no applicability when it | |||
comes to an authoritative server informing a client of changes to DNS | comes to an authoritative server unilaterally informing a client of | |||
records. | changes to DNS records. | |||
This DNS Push Notification specification includes support for DNS | This DNS Push Notification specification includes support for DNS | |||
classes, for completeness. However, in practice, it is anticipated | classes, for completeness. However, in practice, it is anticipated | |||
that for the foreseeable future the only DNS class in use will be DNS | that for the foreseeable future the only DNS class in use will be DNS | |||
class "IN", as is the reality today with existing DNS servers and | class "IN", as is the reality today with existing DNS servers and | |||
clients. A DNS Push Notification server MAY choose to implement only | clients. A DNS Push Notification server MAY choose to implement only | |||
DNS class "IN". If messages are received for a class other than | DNS class "IN". If messages are received for a class other than | |||
"IN", and that class is not supported, an error with RCODE NOTIMPL | "IN", and that class is not supported, an error with RCODE NOTIMPL | |||
(Not Implemented) should be returned. | (Not Implemented) should be returned. | |||
DNS Push Notifications impose less load on the responding server than | DNS Push Notifications impose less load on the responding server than | |||
rapid polling would, but Push Notifications do still have a cost, so | rapid polling would, but Push Notifications do still have a cost, so | |||
DNS Push Notification clients must not recklessly create an excessive | DNS Push Notification clients must not recklessly create an excessive | |||
number of Push Notification subscriptions. A subscription should | number of Push Notification subscriptions. Specifically: | |||
only be active when there is a valid reason to need live data (for | ||||
example, an on-screen display is currently showing the results to the | ||||
user) and the subscription SHOULD be cancelled as soon as the need | ||||
for that data ends (for example, when the user dismisses that | ||||
display). Implementations MAY want to implement idle timeouts, so | ||||
that if the user ceases interacting with the device, the display | ||||
showing the result of the DNS Push Notification subscription is | ||||
automatically dismissed after a certain period of inactivity. For | ||||
example, if a user presses the "Print" button on their smartphone, | ||||
and then leaves the phone showing the printer discovery screen until | ||||
the phone goes to sleep, then the printer discovery screen should be | ||||
automatically dismissed as the device goes to sleep. If the user | ||||
does still intend to print, this will require them to press the | ||||
"Print" button again when they wake their phone up. | ||||
A DNS Push Notification client must not routinely keep a DNS Push | (a) A subscription should only be active when there is a valid reason | |||
Notification subscription active 24 hours a day, 7 days a week, just | to need live data (for example, an on-screen display is currently | |||
to keep a list in memory up to date so that if the user does choose | showing the results to the user) and the subscription SHOULD be | |||
to bring up an on-screen display of that data, it can be displayed | cancelled as soon as the need for that data ends (for example, when | |||
really fast. DNS Push Notifications are designed to be fast enough | the user dismisses that display). Implementations MAY want to | |||
that there is no need to pre-load a "warm" list in memory just in | implement idle timeouts, so that if the user ceases interacting with | |||
case it might be needed later. | the device, the display showing the result of the DNS Push | |||
Notification subscription is automatically dismissed after a certain | ||||
period of inactivity. For example, if a user presses the "Print" | ||||
button on their smartphone, and then leaves the phone showing the | ||||
printer discovery screen until the phone goes to sleep, then the | ||||
printer discovery screen should be automatically dismissed as the | ||||
device goes to sleep. If the user does still intend to print, this | ||||
will require them to press the "Print" button again when they wake | ||||
their phone up. | ||||
(b) A DNS Push Notification client SHOULD NOT routinely keep a DNS | ||||
Push Notification subscription active 24 hours a day, 7 days a week, | ||||
just to keep a list in memory up to date so that if the user does | ||||
choose to bring up an on-screen display of that data, it can be | ||||
displayed really fast. DNS Push Notifications are designed to be | ||||
fast enough that there is no need to pre-load a "warm" list in memory | ||||
just in case it might be needed later. | ||||
Generally, as described in the DNS Stateful Operations specification | Generally, as described in the DNS Stateful Operations specification | |||
[StatefulOp], a client must not keep a connection to a server open | [DSO], a client must not keep a session to a server open indefinitely | |||
indefinitely if it has no subscriptions (or other operations) active | if it has no subscriptions (or other operations) active on that | |||
on that connection. A client MAY close a connection as soon as it | session. A client MAY close a session as soon as it becomes idle, | |||
becomes idle, and then if needed in the future, open a new connection | and then if needed in the future, open a new session when required. | |||
when required. Alternatively, a client MAY speculatively keep an | Alternatively, a client MAY speculatively keep an idle session open | |||
idle connection open for some time, subject to the constraint that it | for some time, subject to the constraint that it MUST NOT keep a | |||
MUST NOT keep a connection open that has been idle for more than the | session open that has been idle for more than the session's idle | |||
session's idle timeout (15 seconds by default). | timeout (15 seconds by default). | |||
4. Transport | 4. Transport | |||
Implementations of DNS Update [RFC2136] MAY use either User Datagram | Other DNS operations like DNS Update [RFC2136] MAY use either User | |||
Protocol (UDP) [RFC0768] or Transmission Control Protocol (TCP) | Datagram Protocol (UDP) [RFC0768] or Transmission Control Protocol | |||
[RFC0793] as the transport protocol, in keeping with the historical | (TCP) [RFC0793] as the transport protocol, in keeping with the | |||
precedent that DNS queries must first be sent over UDP [RFC1123]. | historical precedent that DNS queries must first be sent over UDP | |||
This requirement to use UDP has subsequently been relaxed [RFC7766]. | [RFC1123]. This requirement to use UDP has subsequently been relaxed | |||
[RFC7766]. | ||||
In keeping with the more recent precedent, DNS Push Notification is | In keeping with the more recent precedent, DNS Push Notification is | |||
defined only for TCP. DNS Push Notification clients MUST use TLS | defined only for TCP. DNS Push Notification clients MUST use DNS | |||
over TCP [RFC7858]. | Stateful Operations (DSO) [DSO] running over TLS over TCP [RFC7858]. | |||
Connection setup over TCP ensures return reachability and alleviates | Connection setup over TCP ensures return reachability and alleviates | |||
concerns of state overload at the server through anonymous | concerns of state overload at the server through anonymous | |||
subscriptions. All subscribers are guaranteed to be reachable by the | subscriptions. All subscribers are guaranteed to be reachable by the | |||
server by virtue of the TCP three-way handshake. Flooding attacks | server by virtue of the TCP three-way handshake. Flooding attacks | |||
are possible with any protocol, and a benefit of TCP is that there | are possible with any protocol, and a benefit of TCP is that there | |||
are already established industry best practices to guard against SYN | are already established industry best practices to guard against SYN | |||
flooding and similar attacks [IPJ.9-4-TCPSYN] [RFC4953]. | flooding and similar attacks [SYN] [RFC4953]. | |||
Use of TCP also allows DNS Push Notifications to take advantage of | Use of TCP also allows DNS Push Notifications to take advantage of | |||
current and future developments in TCP, such as Multipath TCP (MPTCP) | current and future developments in TCP, such as Multipath TCP (MPTCP) | |||
[RFC6824], TCP Fast Open (TFO) [RFC7413], Tail Loss Probe (TLP) | [RFC6824], TCP Fast Open (TFO) [RFC7413], Tail Loss Probe (TLP) | |||
[I-D.dukkipati-tcpm-tcp-loss-probe], and so on. | [I-D.dukkipati-tcpm-tcp-loss-probe], and so on. | |||
Transport Layer Security (TLS) [RFC5246] is well understood and | Transport Layer Security (TLS) [RFC5246] is well understood and | |||
deployed across many protocols running over TCP. It is designed to | deployed across many protocols running over TCP. It is designed to | |||
prevent eavesdropping, tampering, and message forgery. TLS is | prevent eavesdropping, tampering, and message forgery. TLS is | |||
REQUIRED for every connection between a client subscriber and server | REQUIRED for every connection between a client subscriber and server | |||
in this protocol specification. Additional security measures such as | in this protocol specification. Additional security measures such as | |||
client authentication during TLS negotiation MAY also be employed to | client authentication during TLS negotiation MAY also be employed to | |||
increase the trust relationship between client and server. | increase the trust relationship between client and server. | |||
5. State Considerations | 5. State Considerations | |||
Each DNS Push Notification server is capable of handling some finite | Each DNS Push Notification server is capable of handling some finite | |||
number of Push Notification subscriptions. This number will vary | number of Push Notification subscriptions. This number will vary | |||
from server to server and is based on physical machine | from server to server and is based on physical machine | |||
characteristics, network bandwidth, and operating system resource | characteristics, network bandwidth, and operating system resource | |||
allocation. After a client establishes a connection to a DNS server, | allocation. After a client establishes a session to a DNS server, | |||
each subscription is individually accepted or rejected. Servers may | each subscription is individually accepted or rejected. Servers may | |||
employ various techniques to limit subscriptions to a manageable | employ various techniques to limit subscriptions to a manageable | |||
level. Correspondingly, the client is free to establish simultaneous | level. Correspondingly, the client is free to establish simultaneous | |||
connections to alternate DNS servers that support DNS Push | sessions to alternate DNS servers that support DNS Push Notifications | |||
Notifications for the zone and distribute subscriptions at its | for the zone and distribute subscriptions at the client's discretion. | |||
discretion. In this way, both clients and servers can react to | In this way, both clients and servers can react to resource | |||
resource constraints. Token bucket rate limiting schemes are also | constraints. Token bucket rate limiting schemes are also effective | |||
effective in providing fairness by a server across numerous client | in providing fairness by a server across numerous client requests. | |||
requests. | ||||
6. Protocol Operation | 6. Protocol Operation | |||
The DNS Push Notification protocol is a session-oriented protocol, | The DNS Push Notification protocol is a session-oriented protocol, | |||
and makes use of DNS Stateful Operations [StatefulOp]. | and makes use of DNS Stateful Operations (DSO) [DSO]. | |||
For details of the DNS Stateful Operations message format refer to | For details of the DSO message format refer to the DNS Stateful | |||
the DNS Stateful Operations specification [StatefulOp]. Those | Operations specification [DSO]. Those details are not repeated here. | |||
details are not repeated here. | ||||
DNS Push Notification clients and servers MUST support DNS Stateful | DNS Push Notification clients and servers MUST support DSO, but (as | |||
Operations, but the server SHOULD NOT issue any DNS Stateful | stated in the DSO specification [DSO]) the server SHOULD NOT issue | |||
Operations messages until after the client has first initiated a DNS | any DSO messages until after the client has first initiated an | |||
Stateful Operation of its own. A single server can support DNS | acknowledged DSO message of its own. A single server can support DNS | |||
Queries, DNS Updates, and DNS Push Notifications (using DNS Stateful | Queries, DNS Updates, and DNS Push Notifications (using DSO) on the | |||
Operations) on the same TCP port, and until the client has sent at | same TCP port, and until the client has sent at least one DSO | |||
least one DNS Stateful Operations message, the server does not know | message, the server does not know what kind of client has connected | |||
what kind of client has connected to it. Once the client has | to it. Once the client has indicated willingness to use DSO by | |||
indicated willingness to use DNS Stateful Operations by sending one | sending one of its own, either side of the session may then initiate | |||
of its own, either side of the connection may then initiate further | further DSO messages at any time. | |||
Stateful Operations at any time. | ||||
A DNS Push Notification exchange begins with the client discovering | A DNS Push Notification exchange begins with the client discovering | |||
the appropriate server, using the procedure described in Section 6.1, | the appropriate server, using the procedure described in Section 6.1, | |||
and then making a TLS/TCP connection to it. | and then making a TLS/TCP connection to it. | |||
A typical DNS Push Notification client will immediately issue a DNS | A typical DNS Push Notification client will immediately issue a DSO | |||
Stateful Operations Keepalive operation to request a session timeout | Keepalive operation to request a session timeout or keepalive | |||
or keepalive interval longer than the the 15-second defaults, but | interval longer than the the 15-second defaults, but this is not | |||
this is not required. A DNS Push Notification client MAY issue other | required. A DNS Push Notification client MAY issue other requests on | |||
requests on the connection first, and only issue a DNS Stateful | the session first, and only issue a DSO Keepalive operation later if | |||
Operations Keepalive operation later if it determines that to be | it determines that to be necessary. | |||
necessary. | ||||
Once the connection is made, the client may then add and remove Push | Once the session is made, the client may then add and remove Push | |||
Notification subscriptions. In accordance with the current set of | Notification subscriptions. In accordance with the current set of | |||
active subscriptions the server sends relevant asynchronous Push | active subscriptions the server sends relevant asynchronous Push | |||
Notifications to the client. Note that a client MUST be prepared to | Notifications to the client. Note that a client MUST be prepared to | |||
receive (and silently ignore) Push Notifications for subscriptions it | receive (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 to | situation where a Push Notification is in flight from server to | |||
client while the client's UNSUBSCRIBE message cancelling that | client while the client's UNSUBSCRIBE message cancelling that | |||
subscription is simultaneously in flight from client to server. | subscription is simultaneously in flight from client to server. | |||
The exchange between client and server terminates when either end | ||||
closes the TCP connection with a TCP FIN or RST. | ||||
6.1. Discovery | 6.1. Discovery | |||
The first step in DNS Push Notification subscription is to discover | The first step in DNS Push Notification subscription is to discover | |||
an appropriate DNS server that supports DNS Push Notifications for | an appropriate DNS server that supports DNS Push Notifications for | |||
the desired zone. | the desired zone. | |||
The client begins by opening a DNS Session to its normal configured | The client begins by opening a DSO Session to its normal configured | |||
DNS recursive resolver and requesting a Push Notification | DNS recursive resolver and requesting a Push Notification | |||
subscription. If this is successful, then the recursive resolver | subscription. If this is successful, then the recursive resolver | |||
will make appropriate Push Notification subscriptions on the client's | will make appropriate Push Notification subscriptions on the client's | |||
behalf, and the client will recieve appropriate results. If the | behalf, and the client will receive appropriate results. If the | |||
recursive resolver does not support Push Notification subscriptions, | recursive resolver does not support Push Notification subscriptions, | |||
then it will return an error code, and the client should proceed to | then it will return an error code, and the client should proceed to | |||
discover the appropriate server to talk to directly. The client MUST | discover the appropriate server for direct communication. The client | |||
also determine which TCP port on the server is listening for | MUST also determine which TCP port on the server is listening for | |||
connections, which need not be (and often is not) the typical TCP | connections, which need not be (and often is not) the typical TCP | |||
port 53 used for conventional DNS, or TCP port 853 used for DNS over | port 53 used for conventional DNS, or TCP port 853 used for DNS over | |||
TLS [RFC7858]. | TLS [RFC7858]. | |||
The algorithm described here is an iterative algorithm, which starts | ||||
with the full name of the record to which the client wishes to | ||||
subscribe. Successive SOA queries are then issued, trimming one | ||||
label each time, until the closest enclosing authoritative server is | ||||
discovered. There is also an optimization to enable the client to | ||||
take a "short cut" directly to the SOA record of the closest | ||||
enclosing authoritative server in many cases. | ||||
1. The client begins the discovery by sending a DNS query to its | 1. The client begins the discovery by sending a DNS query to its | |||
local resolver, with record type SOA [RFC1035] for the record to | local resolver, with record type SOA [RFC1035] for the record | |||
which it wishes to subscribe. As an example, if it wishes to | name to which it wishes to subscribe. As an example, suppose the | |||
subscribe to PTR records with the name | client wishes to subscribe to PTR records with the name | |||
_printers._tcp.foo.example.com, it sends an SOA query for | _ipp._tcp.foo.example.com (to discover Internet Printing Protocol | |||
_printers._tcp.foo.example.com. The goal is to determine the | (IPP) printers [RFC8010] [RFC8011] being advertised at | |||
authoritative server for _printers._tcp.foo.example.com. | "foo.example.com"). The client begins by sending an SOA query | |||
for _ipp._tcp.foo.example.com to the local recursive resolver. | ||||
The goal is to determine the server authoritative for the name | ||||
_ipp._tcp.foo.example.com. The DNS zone containing the name | ||||
_ipp._tcp.foo.example.com could be example.com, or | ||||
foo.example.com, or _tcp.foo.example.com, or even | ||||
_ipp._tcp.foo.example.com. The client does not know in advance | ||||
where the closest enclosing zone cut occurs, which is why it uses | ||||
the procedure described here to discover this information. | ||||
2. If the SOA record exists as exactly specified in the query, it is | 2. If the requested SOA record exists, it will be returned in the | |||
expected to be returned in the Answer section with a NOERROR | Answer section with a NOERROR response code, and the client has | |||
response code. If the exact SOA record does not exist, the | succeeded in discovering the information it needs. (This text is | |||
client may get back a NOERROR/NODATA response or it may get back | not placing any new requirements on DNS recursive resolvers. It | |||
a NXDOMAIN/Name Error response. This depends on the resolver | is merely describing the existing operation of the DNS protocol | |||
implementation and whether the domain exists. The client is | [RFC1034] [RFC1035].) | |||
looking for an SOA record to be returned in either the Answer | ||||
section or the Authority section with a NOERROR response code. | ||||
If the client receives an NXDOMAIN/Name Error response code or a | ||||
response containing no SOA record, it should strip the leading | ||||
label from the query name and if the resulting name has at least | ||||
one label in it, the client should send a new SOA query, | ||||
repeating this until a NOERROR response code is received or the | ||||
query name is empty. In the case of an empty name, the client | ||||
may retry the operation at a later time, of the client's | ||||
choosing, such after a change in network attachment. | ||||
3. In the example above, if an SOA record query is sent for | 3. If the requested SOA record does not exist, the client will get | |||
_printers._tcp.foo.example.com and an NXDOMAIN/Name Error is | back a NOERROR/NODATA response or an NXDOMAIN/Name Error | |||
returned with an SOA record in the Authority section for | response. In either case, the local resolver SHOULD include the | |||
foo.example.com, the client should strip the leading label and | SOA record for the zone of the requested name in the Authority | |||
query an SOA record for _tcp.foo.example.com. If a NOERROR/ | Section. If the SOA record is received in the Authority Section, | |||
NODATA response is received with an SOA record in the Authority | then the client has succeeded in discovering the information it | |||
section for foo.example.com, this is sufficent. If an NXDOMAIN/ | needs. (This text is not placing any new requirements on DNS | |||
Name Error response is received, the client should again strip | recursive resolvers. It is merely describing the existing | |||
the leading label and query an SOA record for foo.example.com. | operation of the DNS protocol regarding negative responses | |||
If the foo.example.com domain exists, this should result in a | [RFC2308].) | |||
NOERROR response with the SOA record in the Answer section. If | ||||
the domain foo.example.com does not exist, the response will | ||||
likely be an NXDOMAIN/Name Error with an SOA record for | ||||
example.com in the Authority section. This means the subdomain | ||||
foo.example.com has not been properly delegated by example.com. | ||||
4. If a NOERROR/NODATA response is received but contains no SOA in | 4. If the client receives a response containing no SOA record, then | |||
the Authority section, the client could try stripping the leading | it proceeds with the iterative approach. The client strips the | |||
label and issuing another SOA query. Additional information | leading label from the current query name and if the resulting | |||
about negative responses can be found in Section 2 of [RFC2308]. | name has at least one label in it, the client sends a new SOA | |||
query, and processing continues at step 2 above, repeating the | ||||
iterative search until either an SOA is received, or the query | ||||
name is empty. In the case of an empty name, this is a network | ||||
configuration error which should not happen and the client gives | ||||
up. The client may retry the operation at a later time, of the | ||||
client's choosing, such after a change in network attachment. | ||||
5. Once the SOA is known (either by virtue of being seen in the | 5. Once the SOA is known (either by virtue of being seen in the | |||
Answer Section, or in the Authority Section), the client sends a | Answer Section, or in the Authority Section), the client sends a | |||
DNS query with type SRV [RFC2782] for the record name | DNS query with type SRV [RFC2782] for the record name | |||
"_dns-push-tls._tcp.<zone>", where <zone> is the owner name of | "_dns-push-tls._tcp.<zone>", where <zone> is the owner name of | |||
the discovered SOA record. | the discovered SOA record. | |||
6. For implementors of this specification, an authoritative answer | 6. If the zone in question does not offer DNS Push Notifications | |||
for that SRV record, and only such an answer, will determine | then SRV record MUST NOT exist, and the SRV query will return a | |||
whether the zone supports DNS Push Notifications. | negative answer. (The "_dns-push-tls._tcp" service type is | |||
allocated by IANA for this purpose, and, like any allocated IANA | ||||
service type, MUST NOT be used for other services. Other | ||||
services that require an IANA service type should use a unique | ||||
service type allocated by IANA for that service [RFC6335][ST].) | ||||
7. If the SRV record does exist, the SRV "target" contains the name | 7. If the zone in question is set up to offer DNS Push Notifications | |||
of the server providing DNS Push Notifications for the zone. The | then this SRV record MUST exist. (If this SRV record does not | |||
port number on which to contact the server is in the SRV record | exist then the zone is not correctly configured for DNS Push | |||
"port" field. The address(es) of the target host MAY be included | Notifications as specified in this document.) The SRV "target" | |||
in the Additional Section, however, the address records SHOULD be | contains the name of the server providing DNS Push Notifications | |||
authenticated before use as described below in Section 7.2 and | for the zone. The port number on which to contact the server is | |||
[RFC7673]. | in the SRV record "port" field. The address(es) of the target | |||
host MAY be included in the Additional Section, however, the | ||||
address records SHOULD be authenticated before use as described | ||||
below in Section 7.2 and in the specification for using DANE TLSA | ||||
Records with SRV Records [RFC7673]. | ||||
8. More than one SRV record may be returned. In this case, the | 8. More than one SRV record may be returned. In this case, the | |||
"priority" and "weight" values in the returned SRV records are | "priority" and "weight" values in the returned SRV records are | |||
used to determine the order in which to contact the servers for | used to determine the order in which to contact the servers for | |||
subscription requests. As described in the SRV specification | subscription requests. As described in the SRV specification | |||
[RFC2782], the server with the lowest "priority" is first | [RFC2782], the server with the lowest "priority" is first | |||
contacted. If more than one server has the same "priority", the | contacted. If more than one server has the same "priority", the | |||
"weight" indicates the weighted probability that the client | "weight" indicates the weighted probability that the client | |||
should contact that server. Higher weights have higher | should contact that server. Higher weights have higher | |||
probabilities of being selected. If a server is not reachable or | probabilities of being selected. If a server is not willing to | |||
is not willing to accept a subscription request, then a | accept a subscription request, or is not reachable within a | |||
subsequent server is to be contacted. | reasonable time, as determined by the client, then a subsequent | |||
server is to be contacted. | ||||
Each time a client makes a new DNS Push Notification subscription | Each time a client makes a new DNS Push Notification subscription | |||
connection, it SHOULD repeat the discovery process in order to | session, it SHOULD repeat the discovery process in order to determine | |||
determine the preferred DNS server for subscriptions at that time. | the preferred DNS server for subscriptions at that time. However, | |||
However, the client device MUST respect the DNS TTL values on records | the client device MUST respect the DNS TTL values on records it | |||
it receives, and store them in its local cache with this lifetime. | receives, and store them in its local cache with this lifetime. This | |||
This means that, as long as the DNS TTL values on the authoritative | means that, as long as the DNS TTL values on the authoritative | |||
records were set to reasonable values, repeated application of this | records were set to reasonable values, repeated application of this | |||
discovery process can be completed nearly instantaneously by the | discovery process can be completed nearly instantaneously by the | |||
client, using only locally-stored cached data. | client, using only locally-stored cached data. | |||
6.2. DNS Push Notification SUBSCRIBE | 6.2. DNS Push Notification SUBSCRIBE | |||
After connecting, and requesting a longer idle timeout and/or | After connecting, and requesting a longer idle timeout and/or | |||
keepalive interval if necessary, a DNS Push Notification client then | keepalive interval if necessary, a DNS Push Notification client then | |||
indicates its desire to receive DNS Push Notifications for a given | indicates its desire to receive DNS Push Notifications for a given | |||
domain name by sending a SUBSCRIBE request over the established TLS | domain name by sending a SUBSCRIBE request over the established DSO | |||
connection to the server. A SUBSCRIBE request is encoded in a DNS | session to the server. A SUBSCRIBE request is encoded in a DSO [DSO] | |||
Stateful Operations [StatefulOp] message. This specification defines | message. This specification defines a DSO TLV for DNS Push | |||
a DNS Stateful Operations TLV for DNS Push Notification SUBSCRIBE | Notification SUBSCRIBE Requests/Responses (tentatively DSO Type Code | |||
Requests/Responses (tentatively Stateful Operations Type Code 0x40). | 0x40). | |||
The entity that initiates a SUBSCRIBE request is by definition the | The entity that initiates a SUBSCRIBE request is by definition the | |||
client. A server should not send a SUBSCRIBE request over an | client. A server MUST NOT send a SUBSCRIBE request over an existing | |||
existing connection from a client. If a server does send a SUBSCRIBE | session from a client. If a server does send a SUBSCRIBE request | |||
request over the connection initiated by a client, it is an error and | over a DSO session initiated by a client, this is a fatal error and | |||
the client should acknowledge the request with the error response | the client should immediately abort the connection with a TCP RST (or | |||
RCODE NOTAUTH (Not Authoritative). | equivalent for other protocols). | |||
6.2.1. SUBSCRIBE Request | 6.2.1. SUBSCRIBE Request | |||
A SUBSCRIBE request message begins with the standard DNS Stateful | A SUBSCRIBE request begins with the standard DSO 12-byte header | |||
Operations 12-byte header [StatefulOp], followed by the SUBSCRIBE | [DSO], followed by the SUBSCRIBE TLV. A SUBSCRIBE request message is | |||
TLV. A SUBSCRIBE request message is illustrated below: | illustrated in Figure 1. | |||
The MESSAGE ID field MUST be set to a unique value, that the client | ||||
is not using for any other active operation on this session. For the | ||||
purposes here, a MESSAGE ID is in use on this session if the client | ||||
has used it in a request for which it has not yet received a | ||||
response, or if the client has used it for a subscription which it | ||||
has not yet cancelled using UNSUBSCRIBE. In the SUBSCRIBE response | ||||
the server MUST echo back the MESSAGE ID value unchanged. | ||||
The other header fields MUST be set as described in the DSO | ||||
specification [DSO]. The DNS Opcode is the DSO Opcode (tentatively | ||||
6). The four count fields MUST be zero, and the corresponding four | ||||
sections MUST be empty (i.e., absent). | ||||
The DSO-TYPE is SUBSCRIBE (tentatively 0x40). The DSO-LENGTH is the | ||||
length of the DSO-DATA that follows, which specifies the name, type, | ||||
and class of the record(s) being sought. | ||||
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 | \ | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | ||||
|QR| Opcode | Z | RCODE | | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | ||||
| QDCOUNT (MUST BE ZERO) | | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > HEADER | ||||
| ANCOUNT (MUST BE ZERO) | | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | ||||
| NSCOUNT (MUST BE ZERO) | | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | ||||
| ARCOUNT (MUST BE ZERO) | / | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | ||||
| DSO-TYPE = SUBSCRIBE (tentatively 0x40) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | |||
| MESSAGE ID | | | DSO-LENGTH (number of octets in DSO-DATA) | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
|QR| Opcode | Z | RCODE | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| QDCOUNT (MUST BE ZERO) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| ANCOUNT (MUST BE ZERO) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| NSCOUNT (MUST BE ZERO) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| ARCOUNT (MUST BE ZERO) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| SSOP-TYPE = SUBSCRIBE (tentatively 0x40) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| SSOP-LENGTH (number of octets in SSOP-DATA) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | |||
| | \ | | | \ | |||
\ NAME \ | | \ NAME \ | | |||
\ \ | | \ \ | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > SSOP-DATA | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > DSO-DATA | |||
| TYPE | | | | TYPE | | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| CLASS | / | | CLASS | / | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | |||
Figure 1 | Figure 1: SUBSCRIBE Request | |||
The MESSAGE ID field MUST be set to a unique value, that the client | ||||
is not using for any other active operation on this connection. For | ||||
the purposes here, a MESSAGE ID is in use on this connection if the | ||||
client has used it in a request for which it has not yet received a | ||||
response, or if the client has used it for a subscription which it | ||||
has not yet cancelled using UNSUBSCRIBE. In the SUBSCRIBE response | ||||
the server MUST echo back the MESSAGE ID value unchanged. | ||||
The other header fields MUST be set as described in the DNS Stateful | ||||
Operations specification [StatefulOp]. The DNS Opcode is the | ||||
Stateful Operations Opcode (tentatively 6). The four count fields | ||||
MUST be zero, and the corresponding four sections MUST be empty | ||||
(i.e., absent). | ||||
The SSOP-TYPE is SUBSCRIBE (tentatively 0x40). The SSOP-LENGTH is | ||||
the length of the SSOP-DATA that follows, which specifies the name, | ||||
type, and class of the record(s) being sought. | ||||
The SSOP-DATA for a SUBSCRIBE request MUST contain exactly one | The DSO-DATA for a SUBSCRIBE request MUST contain exactly one | |||
question. The SSOP-DATA for a SUBSCRIBE request has no QDCOUNT field | question. The DSO-DATA for a SUBSCRIBE request has no QDCOUNT field | |||
to specify more than one question. Since SUBSCRIBE requests are sent | to specify more than one question. Since SUBSCRIBE requests are sent | |||
over TCP, multiple SUBSCRIBE request messages can be concatenated in | over TCP, multiple SUBSCRIBE request messages can be concatenated in | |||
a single TCP stream and packed efficiently into TCP segments. | a single TCP stream and packed efficiently into TCP segments. | |||
If accepted, the subscription will stay in effect until the client | If accepted, the subscription will stay in effect until the client | |||
cancels the subscription using UNSUBSCRIBE or until the connection | cancels the subscription using UNSUBSCRIBE or until the DSO session | |||
between the client and the server is closed. | between the client and the server is closed. | |||
SUBSCRIBE requests on a given connection MUST be unique. A client | SUBSCRIBE requests on a given session MUST be unique. A client MUST | |||
MUST NOT send a SUBSCRIBE message that duplicates the NAME, TYPE and | NOT send a SUBSCRIBE message that duplicates the NAME, TYPE and CLASS | |||
CLASS of an existing active subscription on that TLS/TCP connection. | of an existing active subscription on that DSO session. For the | |||
For the purpose of this matching, the established DNS case- | purpose of this matching, the established DNS case-insensitivity for | |||
insensitivity for US-ASCII letters applies (e.g., "example.com" and | US-ASCII letters applies (e.g., "example.com" and "Example.com" are | |||
"Example.com" are the same). If a server receives such a duplicate | the same). If a server receives such a duplicate SUBSCRIBE message | |||
SUBSCRIBE message this is an error and the server MUST immediately | this is an error and the server MUST immediately terminate the | |||
terminate the connection with a TCP RST (or equivalent for other | connection with a TCP RST (or equivalent for other protocols). | |||
protocols). | ||||
DNS wildcarding is not supported. That is, a wildcard ("*") in a | DNS wildcarding is not supported. That is, a wildcard ("*") in a | |||
SUBSCRIBE message matches only a literal wildcard character ("*") in | SUBSCRIBE message matches only a literal wildcard character ("*") in | |||
the zone, and nothing else. | the zone, and nothing else. | |||
Aliasing is not supported. That is, a CNAME in a SUBSCRIBE message | Aliasing is not supported. That is, a CNAME in a SUBSCRIBE message | |||
matches only a literal CNAME record in the zone, and nothing else. | matches only a literal CNAME record in the zone, and nothing else. | |||
A client may SUBSCRIBE to records that are unknown to the server at | A client may SUBSCRIBE to records that are unknown to the server at | |||
the time of the request (providing that the name falls within one of | the time of the request (providing that the name falls within one of | |||
skipping to change at page 16, line 10 ¶ | skipping to change at page 16, line 10 ¶ | |||
interpreted to mean "ALL", not "ANY". After accepting a subscription | interpreted to mean "ALL", not "ANY". After accepting a subscription | |||
where one or both of TYPE or CLASS are 255, the server MUST send Push | where one or both of TYPE or CLASS are 255, the server MUST send Push | |||
Notification Updates for ALL record changes that match the | Notification Updates for ALL record changes that match the | |||
subscription, not just some of them. | subscription, not just some of them. | |||
6.2.2. SUBSCRIBE Response | 6.2.2. SUBSCRIBE Response | |||
Each SUBSCRIBE request generates exactly one SUBSCRIBE response from | Each SUBSCRIBE request generates exactly one SUBSCRIBE response from | |||
the server. | the server. | |||
A SUBSCRIBE response message begins with the standard DNS Stateful | A SUBSCRIBE response message begins with the standard DSO 12-byte | |||
Operations 12-byte header [StatefulOp], possibly followed by one or | header [DSO], possibly followed by one or more optional TLVs, such as | |||
more optional Modifier TLVs, such as a Retry Delay Modifier TLV. | a Retry Delay TLV. | |||
The MESSAGE ID field MUST echo the value given in the ID field of the | The MESSAGE ID field MUST echo the value given in the ID field of the | |||
SUBSCRIBE request. This is how the client knows which request is | SUBSCRIBE request. This is how the client knows which request is | |||
being responded to. | being responded to. | |||
A SUBSCRIBE response message MUST NOT contain a Stateful Operations | A SUBSCRIBE response message MUST NOT include a SUBSCRIBE TLV. If a | |||
Operation TLV. The Stateful Operations Operation TLV is NOT copied | client receives a SUBSCRIBE response message containing a SUBSCRIBE | |||
from the SUBSCRIBE request. | TLV then the response message is processed but the SUBSCRIBE TLV MUST | |||
be silently ignored. | ||||
In the SUBSCRIBE response the RCODE indicates whether or not the | In the SUBSCRIBE response the RCODE indicates whether or not the | |||
subscription was accepted. Supported RCODEs are as follows: | subscription was accepted. Supported RCODEs are as follows: | |||
+------------+-------+----------------------------------------------+ | +-----------+-------+-----------------------------------------------+ | |||
| Mnemonic | Value | Description | | | Mnemonic | Value | Description | | |||
+------------+-------+----------------------------------------------+ | +-----------+-------+-----------------------------------------------+ | |||
| NOERROR | 0 | SUBSCRIBE successful. | | | NOERROR | 0 | SUBSCRIBE successful. | | |||
| FORMERR | 1 | Server failed to process request due to a | | | FORMERR | 1 | Server failed to process request due to a | | |||
| | | malformed request. | | | | | malformed request. | | |||
| SERVFAIL | 2 | Server failed to process request due to a | | | SERVFAIL | 2 | Server failed to process request due to a | | |||
| | | problem with the server. | | | | | problem with the server. | | |||
| NXDOMAIN | 3 | NOT APPLICABLE. DNS Push Notification | | | NXDOMAIN | 3 | NOT APPLICABLE. DNS Push Notification servers | | |||
| | | servers MUST NOT return NXDOMAIN errors in | | | | | MUST NOT return NXDOMAIN errors in response | | |||
| | | response to SUBSCRIBE requests. | | | | | to SUBSCRIBE requests. | | |||
| NOTIMP | 4 | Server does not recognize DNS Stateful | | | NOTIMP | 4 | Server does not implement DSO. | | |||
| | | Operations Opcode. | | | REFUSED | 5 | Server refuses to process request for policy | | |||
| REFUSED | 5 | Server refuses to process request for policy | | | | | or security reasons. | | |||
| | | or security reasons. | | | NOTAUTH | 9 | Server is not authoritative for the requested | | |||
| NOTAUTH | 9 | Server is not authoritative for the | | | | | name. | | |||
| | | requested name. | | | DSOTYPENI | 11 | SUBSCRIBE operation not supported. | | |||
| SSOPNOTIMP | 11 | SUBSCRIBE operation not supported. | | +-----------+-------+-----------------------------------------------+ | |||
+------------+-------+----------------------------------------------+ | ||||
SUBSCRIBE Response codes | SUBSCRIBE Response codes | |||
This document specifies only these RCODE values for SUBSCRIBE | This document specifies only these RCODE values for SUBSCRIBE | |||
Responses. Servers sending SUBSCRIBE Responses SHOULD use one of | Responses. Servers sending SUBSCRIBE Responses SHOULD use one of | |||
these values. However, future circumstances may create situations | these values. However, future circumstances may create situations | |||
where other RCODE values are appropriate in SUBSCRIBE Responses, so | where other RCODE values are appropriate in SUBSCRIBE Responses, so | |||
clients MUST be prepared to accept SUBSCRIBE Responses with any RCODE | clients MUST be prepared to accept SUBSCRIBE Responses with any RCODE | |||
value. | value. | |||
If the server sends a nonzero RCODE in the SUBSCRIBE response, either | If the server sends a nonzero RCODE in the SUBSCRIBE response, that | |||
the client is (at least partially) misconfigured, the server | means (a) the client is (at least partially) misconfigured, (b) the | |||
resources are exhausted, or there is some other unknown failure on | server resources are exhausted, or (c) there is some other unknown | |||
the server. In any case, the client shouldn't retry the subscription | failure on the server. In any case, the client shouldn't retry the | |||
right away. Either end can terminate the connection, but the client | subscription right away. Either end can terminate the session, but | |||
may want to try this subscription again, or it may have other | the client may want to try this subscription again, or it may have | |||
successful subscriptions that it doesn't want to abandon. If the | other successful subscriptions that it doesn't want to abandon. If | |||
server sends a nonzero RCODE then it SHOULD append a Retry Delay | the server sends a nonzero RCODE then it SHOULD append a Retry Delay | |||
Modifier TLV [StatefulOp] to the response specifying a delay before | TLV [DSO] to the response specifying a delay before the client | |||
the client attempts this operation again. Recommended values for the | attempts this operation again. Recommended values for the delay for | |||
delay for different RCODE values are given below: | different RCODE values are given below. These recommended values | |||
apply both to the default 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. | ||||
For RCODE = 1 (FORMERR) the delay may be any value selected by the | For RCODE = 1 (FORMERR) the delay may be any value selected by the | |||
implementer. A value of five minutes is RECOMMENDED, to reduce | implementer. A value of five minutes is RECOMMENDED, to reduce | |||
the risk of high load from defective clients. | the risk of high load from defective clients. | |||
For RCODE = 2 (SERVFAIL) the delay should be chosen according to | For RCODE = 2 (SERVFAIL) the delay should be chosen according to | |||
the level of server overload and the anticipated duration of that | the level of server overload and the anticipated duration of that | |||
overload. By default, a value of one minute is RECOMMENDED. If a | overload. By default, a value of one minute is RECOMMENDED. If a | |||
more serious server failure occurs, the delay may be longer in | more serious server failure occurs, the delay may be longer in | |||
accordance with the specific problem encountered. | accordance with the specific problem encountered. | |||
For RCODE = 4 (NOTIMP), which occurs on a server that doesn't | For RCODE = 4 (NOTIMP), which occurs on a server that doesn't | |||
implement DNS Stateful Operations [StatefulOp], it is unlikely | implement DSO [DSO], it is unlikely that the server will begin | |||
that the server will begin supporting DNS Stateful Operations in | supporting DSO in the next few minutes, so the retry delay SHOULD | |||
the next few minutes, so the retry delay SHOULD be one hour. | be one hour. 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 recommended value in particular applies to what | ||||
a client should assume by default. | ||||
For RCODE = 5 (REFUSED), which occurs on a server that implements | For RCODE = 5 (REFUSED), which occurs on a server that implements | |||
DNS Push Notifications, but is currently configured to disallow | DNS Push Notifications, but is currently configured to disallow | |||
DNS Push Notifications, the retry delay may be any value selected | DNS Push Notifications, the retry delay may be any value selected | |||
by the implementer and/or configured by the operator. | by the implementer and/or configured by the operator. | |||
This is a misconfiguration, since this server is listed in a | This is a misconfiguration, since this server is listed in a | |||
"_dns-push-tls._tcp.<zone>" SRV record, but the server itself is | "_dns-push-tls._tcp.<zone>" SRV record, but the server itself is | |||
not currently configured to support DNS Push Notifications. Since | not currently configured to support DNS Push Notifications. Since | |||
it is possible that the misconfiguration may be repaired at any | it is possible that the misconfiguration may be repaired at any | |||
time, the retry delay should not be set too high. By default, a | time, the retry delay should not be set too high. By default, a | |||
skipping to change at page 18, line 21 ¶ | skipping to change at page 18, line 28 ¶ | |||
For other RCODE values, the retry delay should be set by the | For other RCODE values, the retry delay should be set by the | |||
server as appropriate for that error condition. By default, a | server as appropriate for that error condition. By default, a | |||
value of 5 minutes is RECOMMENDED. | value of 5 minutes is RECOMMENDED. | |||
For RCODE = 9 (NOTAUTH), the time delay applies to requests for other | For RCODE = 9 (NOTAUTH), the time delay applies to requests for other | |||
names falling within the same zone. Requests for names falling | names falling within the same zone. Requests for names falling | |||
within other zones are not subject to the delay. For all other | within other zones are not subject to the delay. For all other | |||
RCODEs the time delay applies to all subsequent requests to this | RCODEs the time delay applies to all subsequent requests to this | |||
server. | server. | |||
After sending an error response the server MAY allow the connection | After sending an error response the server MAY allow the session to | |||
to remain open, or MAY send a DNS Push Notification Retry Delay | remain open, or MAY send a DNS Push Notification Retry Delay | |||
Operation TLV instructing the client to close the TCP connection, as | Operation TLV instructing the client to close the session, as | |||
described in the DNS Stateful Operations specification [StatefulOp]. | described in the DSO specification [DSO]. Clients MUST correctly | |||
Clients MUST correctly handle both cases. | handle both cases. | |||
6.3. DNS Push Notification Updates | 6.3. DNS Push Notification Updates | |||
Once a subscription has been successfully established, the server | Once a subscription has been successfully established, the server | |||
generates PUSH messages to send to the client as appropriate. In the | generates PUSH messages to send to the client as appropriate. In the | |||
case that the answer set was non-empty at the moment the subscription | case that the answer set was non-empty at the moment the subscription | |||
was established, an initial PUSH message will be sent immediately | was established, an initial PUSH message will be sent immediately | |||
following the SUBSCRIBE Response. Subsequent changes to the answer | following the SUBSCRIBE Response. Subsequent changes to the answer | |||
set are then communicated to the client in subsequent PUSH messages. | set are then communicated to the client in subsequent PUSH messages. | |||
6.3.1. PUSH Message | 6.3.1. PUSH Message | |||
A PUSH message begins with the standard DNS Stateful Operations | A PUSH message begins with the standard DSO 12-byte header [DSO], | |||
12-byte header [StatefulOp], followed by the PUSH TLV. A PUSH | followed by the PUSH TLV. A PUSH message is illustrated in Figure 2. | |||
message is illustrated below: | ||||
1 1 1 1 1 1 | ||||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| MESSAGE ID | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
|QR| Opcode | Z | RCODE | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| QDCOUNT (MUST BE ZERO) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| ANCOUNT (MUST BE ZERO) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| NSCOUNT (MUST BE ZERO) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| ARCOUNT (MUST BE ZERO) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| SSOP-TYPE = PUSH (tentatively 0x42) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| SSOP-LENGTH (number of octets in SSOP-DATA) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | ||||
\ NAME \ \ | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | ||||
| TYPE | | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | ||||
| CLASS | | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | ||||
| RDLEN | | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | ||||
\ RDATA \ | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > SSOP-DATA | ||||
\ NAME \ | | ||||
+--+--+--+--+--+--+- | | | ||||
| TYPE Repeated | | | ||||
+--+--+--+--+--+--+- | | | ||||
| CLASS As | | | ||||
+--+--+--+--+--+--+- | | | ||||
| RDLEN Necessary | | | ||||
+--+--+--+--+--+--+- | | | ||||
\ RDATA \ / | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | ||||
Figure 2 | ||||
The MESSAGE ID field MUST be set to a unique value, that the server | The MESSAGE ID field MUST be zero. There is no client response to a | |||
is not currently using for any other active outgoing request that it | PUSH message. | |||
has sent on this connection. The MESSAGE ID in the outgoing PUSH | ||||
message is selected by the server and has no relationship to the | ||||
MESSAGE ID in any of the client subscriptions it may relate to. In | ||||
the PUSH response the client MUST echo back the MESSAGE ID value | ||||
unchanged. | ||||
The other header fields MUST be set as described in the DNS Stateful | The other header fields MUST be set as described in the DSO | |||
Operations specification [StatefulOp]. The DNS Opcode is the | specification [DSO]. The DNS Opcode is the DSO Opcode (tentatively | |||
Stateful Operations Opcode (tentatively 6). The four count fields | 6). The four count fields MUST be zero, and the corresponding four | |||
MUST be zero, and the corresponding four sections MUST be empty | sections MUST be empty (i.e., absent). | |||
(i.e., absent). | ||||
The SSOP-TYPE is PUSH (tentatively 0x41). The SSOP-LENGTH is the | The DSO-TYPE is PUSH (tentatively 0x41). The DSO-LENGTH is the | |||
length of the SSOP-DATA that follows, which specifies the changes | length of the DSO-DATA that follows, which specifies the changes | |||
being communicated. | being communicated. | |||
The SSOP-DATA contains one or more Update records. A PUSH Message | The DSO-DATA contains one or more Update records. A PUSH Message | |||
MUST contain at least one Update record. If a PUSH Message is | MUST contain at least one Update record. If a PUSH Message is | |||
received that contains no Update records, this is a fatal error, and | received that contains no Update records, this is a fatal error, and | |||
the receiver MUST immediately terminate the connection with a TCP RST | the receiver MUST immediately terminate the connection with a TCP RST | |||
(or equivalent for other protocols). The Update records are | (or equivalent for other protocols). The Update records are | |||
formatted in the customary way for Resource Records in DNS messages | formatted in the customary way for Resource Records in DNS messages. | |||
with the stipulation that DNS name compression is not permitted in | Update records in a PUSH Message are interpreted according to the | |||
DNS Stateful Operations TLVs. Update records in a PUSH Message are | same rules as for DNS Update [RFC2136] messages, namely: | |||
interpreted according to the same rules as for DNS Update [RFC2136] | ||||
messages, namely: | ||||
Delete all RRsets from a name: | Delete all RRsets from a name: | |||
TTL=0, CLASS=ANY, RDLENGTH=0, TYPE=ANY. | TTL=0, CLASS=ANY, RDLENGTH=0, TYPE=ANY. | |||
Delete an RRset from a name: | Delete an RRset from a name: | |||
TTL=0, CLASS=ANY, RDLENGTH=0; | TTL=0, CLASS=ANY, RDLENGTH=0; | |||
TYPE specifies the RRset being deleted. | TYPE specifies the RRset being deleted. | |||
Delete an individual RR from a name: | Delete an individual RR from a name: | |||
TTL=0, CLASS=NONE; | TTL=0, CLASS=NONE; | |||
TYPE, RDLENGTH and RDATA specifies the RR being deleted. | TYPE, RDLENGTH and RDATA specifies the RR being deleted. | |||
Add to an RRset: | Add to an RRset: | |||
TTL, CLASS, TYPE, RDLENGTH and RDATA specifies the RR being added. | TTL, CLASS, TYPE, RDLENGTH and RDATA specifies the RR being added. | |||
1 1 1 1 1 1 | ||||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | ||||
| MESSAGE ID | \ | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | ||||
|QR| Opcode | Z | RCODE | | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | ||||
| QDCOUNT (MUST BE ZERO) | | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > HEADER | ||||
| ANCOUNT (MUST BE ZERO) | | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | ||||
| NSCOUNT (MUST BE ZERO) | | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | ||||
| ARCOUNT (MUST BE ZERO) | / | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | ||||
| DSO-TYPE = PUSH (tentatively 0x41) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| DSO-LENGTH (number of octets in DSO-DATA) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | ||||
\ NAME \ \ | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | ||||
| TYPE | | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | ||||
| CLASS | | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | ||||
| TTL | | | ||||
| (32 bits) | > DSO-DATA | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | ||||
| RDLEN | | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | ||||
\ RDATA \ | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | ||||
: NAME, TYPE, CLASS, TTL, RDLEN, RDATA : | | ||||
: Repeated As Necessary : / | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | ||||
Figure 2: PUSH Message | ||||
When processing the records received in a PUSH Message, the receiving | When processing the records received in a PUSH Message, the receiving | |||
client MUST validate that the records being added or deleted | client MUST validate that the records being added or deleted | |||
correspond with at least one currently active subscription on that | correspond with at least one currently active subscription on that | |||
connection. Specifically, the record name MUST match the name given | session. Specifically, the record name MUST match the name given in | |||
in the SUBSCRIBE request, subject to the usual established DNS case- | the SUBSCRIBE request, subject to the usual established DNS case- | |||
insensitivity for US-ASCII letters. If the TYPE in the SUBSCRIBE | insensitivity for US-ASCII letters. If the TYPE in the SUBSCRIBE | |||
request was not ANY (255) then the TYPE of the record must match the | request was not ANY (255) then the TYPE of the record must match the | |||
TYPE given in the SUBSCRIBE request. If the CLASS in the SUBSCRIBE | TYPE given in the SUBSCRIBE request. If the CLASS in the SUBSCRIBE | |||
request was not ANY (255) then the CLASS of the record must match the | request was not ANY (255) then the CLASS of the record must match the | |||
CLASS given in the SUBSCRIBE request. If a matching active | CLASS given in the SUBSCRIBE request. If a matching active | |||
subscription on that connection is not found, then that individual | subscription on that session is not found, then that individual | |||
record addition/deletion is silently ignored. Processing of other | record addition/deletion is silently ignored. Processing of other | |||
additions and deletions in this message is not affected. The TCP | additions and deletions in this message is not affected. The DSO | |||
connection is not closed. This is to allow for the unavoidable race | session is not closed. This is to allow for the unavoidable race | |||
condition where a client sends an outbound UNSUBSCRIBE while inbound | condition where a client sends an outbound UNSUBSCRIBE while inbound | |||
PUSH messages for that subscription from the server are still in | PUSH messages for that subscription from the server are still in | |||
flight. | flight. | |||
In the case where a single change affects more than one active | In the case where a single change affects more than one active | |||
subscription, only one PUSH message is sent. For example, a PUSH | subscription, only one PUSH message is sent. For example, a PUSH | |||
message adding a given record may match both a SUBSCRIBE request with | message adding a given record may match both a SUBSCRIBE request with | |||
the same TYPE and a different SUBSCRIBE request with TYPE=ANY. It is | the same TYPE and a different SUBSCRIBE request with TYPE=ANY. It is | |||
not the case that two PUSH messages are sent because the new record | not the case that two PUSH messages are sent because the new record | |||
matches two active subscriptions. | matches two active subscriptions. | |||
skipping to change at page 22, line 37 ¶ | skipping to change at page 21, line 32 ¶ | |||
server SHOULD send a "delete an RRset from a name" PUSH message, not | server SHOULD send a "delete an RRset from a name" PUSH message, not | |||
three separate "delete an individual RR from a name" PUSH messages. | three separate "delete an individual RR from a name" PUSH messages. | |||
Similarly, when both an SRV and a TXT record are deleted from a given | Similarly, when both an SRV and a TXT record are deleted from a given | |||
name, and no other records of any kind exist for that name, the | name, and no other records of any kind exist for that name, the | |||
server SHOULD send a "delete all RRsets from a name" PUSH message, | server SHOULD send a "delete all RRsets from a name" PUSH message, | |||
not two separate "delete an RRset from a name" PUSH messages. | not two separate "delete an RRset from a name" PUSH messages. | |||
A server SHOULD combine multiple change notifications in a single | A server SHOULD combine multiple change notifications in a single | |||
PUSH message when possible, even if those change notifications apply | PUSH message when possible, even if those change notifications apply | |||
to different subscriptions. Conceptually, a PUSH message is a | to different subscriptions. Conceptually, a PUSH message is a | |||
connection-level mechanism, not a subscription-level mechanism. | session-level mechanism, not a subscription-level mechanism. | |||
Reception of a PUSH message by a client generates a PUSH response | ||||
back to the server. | ||||
The TTL of an added record is stored by the client and decremented as | The TTL of an added record is stored by the client and decremented as | |||
time passes, with the caveat that for as long as a relevant | time passes, with the caveat that for as long as a relevant | |||
subscription is active, the TTL does not decrement below 1 second. | subscription is active, the TTL does not decrement below 1 second. | |||
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 | SHOULD assume that when a record goes away the server will notify it | |||
of that fact. Consequently, a client does not have to poll to verify | of that fact. Consequently, a client does not have to poll to verify | |||
that the record is still there. Once a subscription is cancelled | that the record is still there. Once a subscription is cancelled | |||
(individually, or as a result of the TCP connection being closed) | (individually, or as a result of the DSO session being closed) record | |||
record aging resumes and records are removed from the local cache | aging resumes and records are removed from the local cache when their | |||
when their TTL reaches zero. | TTL reaches zero. | |||
6.3.2. PUSH Response | ||||
Each PUSH message generates exactly one PUSH response from the | ||||
receiver. | ||||
A PUSH response message begins with the standard DNS Stateful | ||||
Operations 12-byte header [StatefulOp], possibly followed by one or | ||||
more optional Modifier TLVs. | ||||
The MESSAGE ID field MUST echo the value given in the ID field of the | ||||
PUSH message. | ||||
A PUSH response message MUST NOT contain a Stateful Operations | ||||
Operation TLV. The Stateful Operations Operation TLV is NOT copied | ||||
from the PUSH message. | ||||
In a PUSH response the RCODE MUST be zero. Receiving a PUSH response | ||||
with a nonzero RCODE is a fatal error, and the receiver MUST | ||||
immediately terminate the connection with a TCP RST (or equivalent | ||||
for other protocols). | ||||
6.4. DNS Push Notification UNSUBSCRIBE | 6.4. DNS Push Notification UNSUBSCRIBE | |||
To cancel an individual subscription without closing the entire | To cancel an individual subscription without closing the entire DSO | |||
connection, the client sends an UNSUBSCRIBE message over the | session, the client sends an UNSUBSCRIBE message over the established | |||
established TCP connection to the server. The UNSUBSCRIBE message is | DSO session to the server. The UNSUBSCRIBE message is encoded in a | |||
encoded in a DNS Stateful Operations [StatefulOp] message. This | DSO [DSO] message. This specification defines a DSO TLV for DNS Push | |||
specification defines a DNS Stateful Operations TLV for DNS Push | Notification UNSUBSCRIBE Requests/Responses (tentatively DSO Type | |||
Notification UNSUBSCRIBE Requests/Responses (tentatively Stateful | Code 0x42). | |||
Operations Type Code 0x42). | ||||
A server MUST NOT initiate an UNSUBSCRIBE request. If a server does | A server MUST NOT initiate an UNSUBSCRIBE request. If a server does | |||
send a UNSUBSCRIBE request over the connection initiated by a client, | send an UNSUBSCRIBE request over a DSO session initiated by a client, | |||
it is an error and the client should acknowledge the request with the | this is a fatal error and the client should immediately abort the | |||
error response RCODE NOTAUTH (Not Authoritative). | connection with a TCP RST (or equivalent for other protocols). | |||
6.4.1. UNSUBSCRIBE Request | 6.4.1. UNSUBSCRIBE Request | |||
An UNSUBSCRIBE request message begins with the standard DNS Stateful | An UNSUBSCRIBE request begins with the standard DSO 12-byte header | |||
Operations 12-byte header [StatefulOp], followed by the UNSUBSCRIBE | [DSO], followed by the UNSUBSCRIBE TLV. An UNSUBSCRIBE request | |||
TLV. | message is illustrated in Figure 3. | |||
1 1 1 1 1 1 | The MESSAGE ID field MUST be zero. There is no server response to a | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | UNSUBSCRIBE message. | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| MESSAGE ID | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
|QR| Opcode | Z | RCODE | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| QDCOUNT (MUST BE ZERO) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| ANCOUNT (MUST BE ZERO) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| NSCOUNT (MUST BE ZERO) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| ARCOUNT (MUST BE ZERO) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| SSOP-TYPE = UNSUBSCRIBE (tentatively 0x42) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| SSOP-LENGTH (2 octets) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| SUBSCRIBE MESSAGE ID | SSOP-DATA | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
Figure 3 | The other header fields MUST be set as described in the DSO | |||
specification [DSO]. The DNS Opcode is the DSO Opcode (tentatively | ||||
6). The four count fields MUST be zero, and the corresponding four | ||||
sections MUST be empty (i.e., absent). | ||||
In the UNSUBSCRIBE TLV the SSOP-TYPE is UNSUBSCRIBE (tentatively | In the UNSUBSCRIBE TLV the DSO-TYPE is UNSUBSCRIBE (tentatively | |||
0x42). The SSOP-LENGTH is 2 octets. | 0x42). The DSO-LENGTH is 2 octets. | |||
The SSOP-DATA contains the MESSAGE ID field of the value given in the | The DSO-DATA contains the MESSAGE ID field of the value given in the | |||
ID field of an active SUBSCRIBE request. This is how the server | ID field of an active SUBSCRIBE request. This is how the server | |||
knows which SUBSCRIBE request is being cancelled. After receipt of | knows which SUBSCRIBE request is being cancelled. After receipt of | |||
the UNSUBSCRIBE request, the SUBSCRIBE request is no longer active. | the UNSUBSCRIBE request, the SUBSCRIBE request is no longer active. | |||
If a server receives an UNSUBSCRIBE message where the MESSAGE ID does | ||||
not match the ID of an active SUBSCRIBE request the server MUST | ||||
return a response containing RCODE = 3 (NXDOMAIN). | ||||
It is allowable for the client to issue an UNSUBSCRIBE request for a | It is allowable for the client to issue an UNSUBSCRIBE request for a | |||
previous SUBSCRIBE request for which the client has not yet received | previous SUBSCRIBE request for which the client has not yet received | |||
a SUBSCRIBE response. This is to allow for the case where a client | a SUBSCRIBE response. This is to allow for the case where a client | |||
starts and stops a subscription in less than the round-trip time to | starts and stops a subscription in less than the round-trip time to | |||
the server. The client is NOT required to wait for the SUBSCRIBE | the server. The client is NOT required to wait for the SUBSCRIBE | |||
response before issuing the UNSUBSCRIBE request. A consequence of | response before issuing the UNSUBSCRIBE request. | |||
this is that if the client issues an UNSUBSCRIBE request for an as- | ||||
yet unacknowledged SUBSCRIBE request, and the SUBSCRIBE request is | ||||
subsequently unsuccessful for some reason, then when the UNSUBSCRIBE | ||||
request is eventually processed it will be an UNSUBSCRIBE request for | ||||
a nonexistent subscription, which will result NXDOMAIN response. | ||||
6.4.2. UNSUBSCRIBE Response | ||||
Each UNSUBSCRIBE request generates exactly one UNSUBSCRIBE response | ||||
from the server. | ||||
An UNSUBSCRIBE response message begins with the standard DNS Stateful | ||||
Operations 12-byte header [StatefulOp], possibly followed by one or | ||||
more optional Modifier TLVs, such as a Retry Delay Modifier TLV. | ||||
The MESSAGE ID field MUST echo the value given in the ID field of the | ||||
UNSUBSCRIBE request. This is how the client knows which request is | ||||
being responded to. | ||||
An UNSUBSCRIBE response message MUST NOT contain a Stateful | ||||
Operations Operation TLV. The Stateful Operations Operation TLV is | ||||
NOT copied from the UNSUBSCRIBE request. | ||||
In the UNSUBSCRIBE response the RCODE indicates whether or not the | ||||
unsubscribe request was successful. Supported RCODEs are as follows: | ||||
+------------+-------+----------------------------------------------+ | ||||
| Mnemonic | Value | Description | | ||||
+------------+-------+----------------------------------------------+ | ||||
| NOERROR | 0 | UNSUBSCRIBE successful. | | ||||
| FORMERR | 1 | Server failed to process request due to a | | ||||
| | | malformed request. | | ||||
| NXDOMAIN | 3 | Specified subscription does not exist. | | ||||
| NOTIMP | 4 | Server does not recognize DNS Stateful | | ||||
| | | Operations Opcode. | | ||||
| SSOPNOTIMP | 11 | UNSUBSCRIBE operation not supported. | | ||||
+------------+-------+----------------------------------------------+ | ||||
UNSUBSCRIBE Response codes | ||||
This document specifies only these RCODE values for UNSUBSCRIBE | ||||
Responses. Servers sending UNSUBSCRIBE Responses SHOULD use one of | ||||
these values. However, future circumstances may create situations | ||||
where other RCODE values are appropriate in UNSUBSCRIBE Responses, so | ||||
clients MUST be prepared to accept UNSUBSCRIBE Responses with any | ||||
RCODE value. | ||||
Having being successfully revoked with a correctly-formatted | ||||
UNSUBSCRIBE message (resulting in a response with RCODE NOERROR) the | ||||
previously referenced subscription is no longer active and the server | ||||
MAY discard the state associated with it immediately, or later, at | ||||
the server's discretion. | ||||
Nonzero RCODE values signal some kind of error. | ||||
RCODE value FORMERR indicates a message format error. | ||||
RCODE value NXDOMAIN indicates a MESSAGE ID that does not correspond | ||||
to any active subscription. | ||||
RCODE values NOTIMP and SSOPNOTIMP should not occur in practice. | ||||
A server would only generate NOTIMP if it did not support Stateful | ||||
Operations, and if the server does not support Stateful Operations | ||||
then it should not be possible for a client to have an active | ||||
subscription to cancel. | ||||
Similarly, a server would only generate SSOPNOTIMP if it did not | 1 1 1 1 1 1 | |||
support Push Notifications, and if the server does not support Push | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | |||
Notifications then it should not be possible for a client to have an | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | |||
active subscription to cancel. | | MESSAGE ID | \ | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | ||||
|QR| Opcode | Z | RCODE | | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | ||||
| QDCOUNT (MUST BE ZERO) | | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > HEADER | ||||
| ANCOUNT (MUST BE ZERO) | | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | ||||
| NSCOUNT (MUST BE ZERO) | | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | ||||
| ARCOUNT (MUST BE ZERO) | / | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | ||||
| DSO-TYPE = UNSUBSCRIBE (tentatively 0x42) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| DSO-LENGTH (2 octets) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | ||||
| SUBSCRIBE MESSAGE ID | > DSO-DATA | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | ||||
Nonzero RCODE values other than NXDOMAIN indicate a serious problem | Figure 3: UNSUBSCRIBE Request | |||
with the client. After sending an error response other than | ||||
NXDOMAIN, the server SHOULD send a DNS Stateful Operations Retry | ||||
Delay Operation TLV and then close the TCP connection, as described | ||||
in the DNS Stateful Operations specification [StatefulOp]. | ||||
6.5. DNS Push Notification RECONFIRM | 6.5. DNS Push Notification RECONFIRM | |||
Sometimes, particularly when used with a Discovery Proxy [DisProx], a | Sometimes, particularly when used with a Discovery Proxy [DisProx], a | |||
DNS Zone may contain stale data. When a client encounters data that | DNS Zone may contain stale data. When a client encounters data that | |||
it believe may be stale (e.g., an SRV record referencing a target | it believe may be stale (e.g., an SRV record referencing a target | |||
host+port that is not responding to connection requests) the client | host+port that is not responding to connection requests) the client | |||
can send a RECONFIRM request to ask the server to re-verify that the | can send a RECONFIRM request to ask the server to re-verify that the | |||
data is still valid. For a Discovery Proxy, this causes it to issue | data is still valid. For a Discovery Proxy, this causes it to issue | |||
new Multicast DNS requests to ascertain whether the target device is | new Multicast DNS requests to ascertain whether the target device is | |||
skipping to change at page 30, line 7 ¶ | skipping to change at page 24, line 32 ¶ | |||
If, after receiving a valid RECONFIRM request, the server determines | If, after receiving a valid RECONFIRM request, the server determines | |||
that the disputed records are in fact no longer valid, then | that the disputed records are in fact no longer valid, then | |||
subsequent DNS PUSH Messages will be generated to inform interested | subsequent DNS PUSH Messages will be generated to inform interested | |||
clients. Thus, one client discovering that a previously-advertised | clients. Thus, one client discovering that a previously-advertised | |||
device (like a network printer) is no longer present has the side | device (like a network printer) is no longer present has the side | |||
effect of informing all other interested clients that the device in | effect of informing all other interested clients that the device in | |||
question is now gone. | question is now gone. | |||
6.5.1. RECONFIRM Request | 6.5.1. RECONFIRM Request | |||
A RECONFIRM request message begins with the standard DNS Stateful | A RECONFIRM request begins with the standard DSO 12-byte header | |||
Operations 12-byte header [StatefulOp], followed by the RECONFIRM | [DSO], followed by the RECONFIRM TLV. A RECONFIRM request message is | |||
TLV. A RECONFIRM request message is illustrated below: | illustrated in Figure 4. | |||
The MESSAGE ID field MUST be set to a unique 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 on this session if the | ||||
client has used it in a request for which it has not yet received a | ||||
response, or if the client has used it for a subscription which it | ||||
has not yet cancelled using UNSUBSCRIBE. In the RECONFIRM response | ||||
the server MUST echo back the MESSAGE ID value unchanged. | ||||
The other header fields MUST be set as described in the DSO | ||||
specification [DSO]. The DNS Opcode is the DSO Opcode (tentatively | ||||
6). The four count fields MUST be zero, and the corresponding four | ||||
sections MUST be empty (i.e., absent). | ||||
The DSO-TYPE is RECONFIRM (tentatively 0x43). The DSO-LENGTH is the | ||||
length of the data that follows, which specifies the name, type, | ||||
class, and content of the record being disputed. | ||||
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 | \ | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | ||||
|QR| Opcode | Z | RCODE | | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | ||||
| QDCOUNT (MUST BE ZERO) | | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > HEADER | ||||
| ANCOUNT (MUST BE ZERO) | | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | ||||
| NSCOUNT (MUST BE ZERO) | | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | ||||
| ARCOUNT (MUST BE ZERO) | / | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | ||||
| DSO-TYPE = RECONFIRM (tentatively 0x43) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | |||
| MESSAGE ID | | | DSO-LENGTH (number of octets in DSO-DATA) | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
|QR| Opcode | Z | RCODE | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| QDCOUNT (MUST BE ZERO) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| ANCOUNT (MUST BE ZERO) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| NSCOUNT (MUST BE ZERO) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| ARCOUNT (MUST BE ZERO) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| SSOP-TYPE = RECONFIRM (tentatively 0x43) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| SSOP-LENGTH (number of octets in SSOP-DATA) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | |||
\ NAME \ \ | \ NAME \ \ | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| TYPE | | | | TYPE | | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > DSO-DATA | |||
| CLASS | > SSOP-DATA | | CLASS | | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | ||||
| RDLEN | | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
\ RDATA \ / | \ RDATA \ / | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | |||
Figure 4 | Figure 4: RECONFIRM Request | |||
The MESSAGE ID field MUST be set to a unique value, that the client | ||||
is not using for any other active operation on this connection. For | ||||
the purposes here, a MESSAGE ID is in use on this connection if the | ||||
client has used it in a request for which it has not yet received a | ||||
response, or if the client has used it for a subscription which it | ||||
has not yet cancelled using UNSUBSCRIBE. In the RECONFIRM response | ||||
the server MUST echo back the MESSAGE ID value unchanged. | ||||
The other header fields MUST be set as described in the DNS Stateful | ||||
Operations specification [StatefulOp]. The DNS Opcode is the | ||||
Stateful Operations Opcode (tentatively 6). The four count fields | ||||
MUST be zero, and the corresponding four sections MUST be empty | ||||
(i.e., absent). | ||||
The SSOP-TYPE is RECONFIRM (tentatively 0x43). The SSOP-LENGTH is | ||||
the length of the data that follows, which specifies the name, type, | ||||
class, and content of the record being disputed. | ||||
The SSOP-DATA for a RECONFIRM request MUST contain exactly one | The DSO-DATA for a RECONFIRM request MUST contain exactly one record. | |||
record. The SSOP-DATA for a RECONFIRM request has no count field to | The DSO-DATA for a RECONFIRM request has no count field to specify | |||
specify more than one record. Since RECONFIRM requests are sent over | more than one record. Since RECONFIRM requests are sent over TCP, | |||
TCP, multiple RECONFIRM request messages can be concatenated in a | multiple RECONFIRM request messages can be concatenated in a single | |||
single TCP stream and packed efficiently into TCP segments. | TCP stream and packed efficiently into TCP segments. | |||
TYPE MUST NOT be the value ANY (255) and CLASS MUST NOT be the value | TYPE MUST NOT be the value ANY (255) and CLASS MUST NOT be the value | |||
ANY (255). | ANY (255). | |||
DNS wildcarding is not supported. That is, a wildcard ("*") in a | DNS wildcarding is not supported. That is, a wildcard ("*") in a | |||
RECONFIRM message matches only a literal wildcard character ("*") in | RECONFIRM message matches only a literal wildcard character ("*") in | |||
the zone, and nothing else. | the zone, and nothing else. | |||
Aliasing is not supported. That is, a CNAME in a RECONFIRM message | Aliasing is not supported. That is, a CNAME in a RECONFIRM message | |||
matches only a literal CNAME record in the zone, and nothing else. | matches only a literal CNAME record in the zone, and nothing else. | |||
6.5.2. RECONFIRM Response | 6.5.2. RECONFIRM Response | |||
Each RECONFIRM request generates exactly one RECONFIRM response from | Each RECONFIRM request generates exactly one RECONFIRM response from | |||
the server. | the server. | |||
A RECONFIRM response message begins with the standard DNS Stateful | A RECONFIRM response message begins with the standard DSO 12-byte | |||
Operations 12-byte header [StatefulOp], possibly followed by one or | header [DSO], possibly followed by one or more optional TLVs, such as | |||
more optional Modifier TLVs, such as a Retry Delay Modifier TLV. | a Retry Delay TLV. For suggested values for the Retry Delay TLV, see | |||
Section 6.2.2. | ||||
The MESSAGE ID field MUST echo the value given in the ID field of the | The MESSAGE ID field MUST echo the value given in the ID field of the | |||
RECONFIRM request. This is how the client knows which request is | RECONFIRM request. This is how the client knows which request is | |||
being responded to. | being responded to. | |||
A RECONFIRM response message MUST NOT contain a Stateful Operations | A RECONFIRM response message MUST NOT include a DSO RECONFIRM TLV. | |||
Operation TLV. The Stateful Operations Operation TLV is NOT copied | If a client receives a RECONFIRM response message containing a | |||
from the RECONFIRM request. | RECONFIRM TLV then the response message is processed but the | |||
RECONFIRM TLV MUST be silently ignored. | ||||
In the RECONFIRM response the RCODE confirms receipt of the | In the RECONFIRM response the RCODE confirms receipt of the | |||
reconfirmation request. Supported RCODEs are as follows: | reconfirmation request. Supported RCODEs are as follows: | |||
+------------+-------+----------------------------------------------+ | +-----------+-------+-----------------------------------------------+ | |||
| Mnemonic | Value | Description | | | Mnemonic | Value | Description | | |||
+------------+-------+----------------------------------------------+ | +-----------+-------+-----------------------------------------------+ | |||
| NOERROR | 0 | RECONFIRM accepted. | | | NOERROR | 0 | RECONFIRM accepted. | | |||
| FORMERR | 1 | Server failed to process request due to a | | | FORMERR | 1 | Server failed to process request due to a | | |||
| | | malformed request. | | | | | malformed request. | | |||
| SERVFAIL | 2 | Server failed to process request due to a | | | SERVFAIL | 2 | Server failed to process request due to a | | |||
| | | problem with the server. | | | | | problem with the server. | | |||
| NXDOMAIN | 3 | NOT APPLICABLE. DNS Push Notification | | | NXDOMAIN | 3 | NOT APPLICABLE. DNS Push Notification servers | | |||
| | | servers MUST NOT return NXDOMAIN errors in | | | | | MUST NOT return NXDOMAIN errors in response | | |||
| | | response to RECONFIRM requests. | | | | | to RECONFIRM requests. | | |||
| NOTIMP | 4 | Server does not recognize DNS Stateful | | | NOTIMP | 4 | Server does not implement DSO. | | |||
| | | Operations Opcode. | | | REFUSED | 5 | Server refuses to process request for policy | | |||
| REFUSED | 5 | Server refuses to process request for policy | | | | | or security reasons. | | |||
| | | or security reasons. | | | NOTAUTH | 9 | Server is not authoritative for the requested | | |||
| NOTAUTH | 9 | Server is not authoritative for the | | | | | name. | | |||
| | | requested name. | | | DSOTYPENI | 11 | RECONFIRM operation not supported. | | |||
| SSOPNOTIMP | 11 | RECONFIRM operation not supported. | | +-----------+-------+-----------------------------------------------+ | |||
+------------+-------+----------------------------------------------+ | ||||
RECONFIRM Response codes | RECONFIRM Response codes | |||
This document specifies only these RCODE values for RECONFIRM | This document specifies only these RCODE values for RECONFIRM | |||
Responses. Servers sending RECONFIRM Responses SHOULD use one of | Responses. Servers sending RECONFIRM Responses SHOULD use one of | |||
these values. However, future circumstances may create situations | these values. However, future circumstances may create situations | |||
where other RCODE values are appropriate in RECONFIRM Responses, so | where other RCODE values are appropriate in RECONFIRM Responses, so | |||
clients MUST be prepared to accept RECONFIRM Responses with any RCODE | clients MUST be prepared to accept RECONFIRM Responses with any RCODE | |||
value. | value. | |||
Nonzero RCODE values signal some kind of error. | Nonzero RCODE values signal some kind of error. | |||
RCODE value FORMERR indicates a message format error, for example | RCODE value FORMERR indicates a message format error, for example | |||
TYPE or CLASS being ANY (255). | TYPE or CLASS being ANY (255). | |||
RCODE value SERVFAIL indicates that the server has exhausted its | RCODE value SERVFAIL indicates that the server has exhausted its | |||
resources or other serious problem occurred. | resources or other serious problem occurred. | |||
RCODE values NOTIMP indicates that the server does not support | RCODE values NOTIMP indicates that the server does not support DSO, | |||
Stateful Operations, and Stateful Operations is required for | and DSO is required for RECONFIRM requests. | |||
RECONFIRM requests. | ||||
RCODE value REFUSED indicates that the server supports RECONFIRM | RCODE value REFUSED indicates that the server supports RECONFIRM | |||
requests but is currently not configured to accept them from this | requests but is currently not configured to accept them from this | |||
client. | client. | |||
RCODE value NOTAUTH indicates that the server is not authoritative | RCODE value NOTAUTH indicates that the server is not authoritative | |||
for the requested name, and can do nothing to remedy the apparent | for the requested name, and can do nothing to remedy the apparent | |||
error. Note that there may be future cases in which a server is able | error. Note that there may be future cases in which a server is able | |||
to pass on the RECONFIRM request to the ultimate source of the | to pass on the RECONFIRM request to the ultimate source of the | |||
information, and in these cases the server should return NOERROR. | information, and in these cases the server should return NOERROR. | |||
RCODE value SSOPNOTIMP indicates that the server does not support | RCODE value DSOTYPENI indicates that the server does not support | |||
RECONFIRM requests. | RECONFIRM requests. | |||
Nonzero RCODE values SERVFAIL, REFUSED and SSOPNOTIMP are benign from | Nonzero RCODE values SERVFAIL, REFUSED and DSOTYPENI are benign from | |||
the client's point of view. The client may log them to aid in | the client's point of view. The client may log them to aid in | |||
debugging, but otherwise they require no special action. | debugging, but otherwise they require no special action. | |||
Nonzero RCODE values other than these three indicate a serious | Nonzero RCODE values other than these three indicate a serious | |||
problem with the client. After sending an error response other than | problem with the client. After sending an error response other than | |||
one of these three, the server SHOULD send a DNS Stateful Operations | one of these three, the server SHOULD send a DSO Retry Delay TLV to | |||
Retry Delay Operation TLV and then close the TCP connection, as | end the DSO session, as described in the DSO specification [DSO]. | |||
described in the DNS Stateful Operations specification [StatefulOp]. | ||||
6.6. Client-Initiated Termination | 6.6. Client-Initiated Termination | |||
An individual subscription is terminated by sending an UNSUBSCRIBE | An individual subscription is terminated by sending an UNSUBSCRIBE | |||
TLV for that specific subscription, or all subscriptions can be | TLV for that specific subscription, or all subscriptions can be | |||
cancelled at once by the client closing the connection. When a | cancelled at once by the client closing the DSO session. When a | |||
client terminates an individual subscription (via UNSUBSCRIBE) or all | client terminates an individual subscription (via UNSUBSCRIBE) or all | |||
subscriptions on that connection (by closing the connection) it is | subscriptions on that DSO session (by ending the session) it is | |||
signaling to the server that it is longer interested in receiving | signaling to the server that it is longer interested in receiving | |||
those particular updates. It is informing the server that the server | those particular updates. It is informing the server that the server | |||
may release any state information it has been keeping with regards to | may release any state information it has been keeping with regards to | |||
these particular subscriptions. | these particular subscriptions. | |||
After terminating its last subscription on a connection via | After terminating its last subscription on a session via UNSUBSCRIBE, | |||
UNSUBSCRIBE, a client MAY close the connection immediately, or it may | a client MAY close the session immediately, or it may keep it open if | |||
keep it open if it anticipates performing further operations on that | it anticipates performing further operations on that session in the | |||
connection in the future. If a client wishes to keep an idle | future. If a client wishes to keep an idle session open, it MUST | |||
connection open, it MUST respect the maximum idle time required by | respect the maximum idle time required by the server [DSO]. | |||
the server [StatefulOp]. | ||||
If a client plans to terminate one or more subscriptions on a | If a client plans to terminate one or more subscriptions on a session | |||
connection and doesn't intend to keep that connection open, then as | and doesn't intend to keep that session open, then as an efficiency | |||
an efficiency optimization it MAY instead choose to simply close the | optimization it MAY instead choose to simply close the session, which | |||
connection, which implicitly terminates all subscriptions on that | implicitly terminates all subscriptions on that session. This may | |||
connection. This may occur because the client computer is being shut | occur because the client computer is being shut down, is going to | |||
down, is going to sleep, the application requiring the subscriptions | sleep, the application requiring the subscriptions has terminated, or | |||
has terminated, or simply because the last active subscription on | simply because the last active subscription on that session has been | |||
that connection has been cancelled. | cancelled. | |||
When closing a connection, a client will generally do an abortive | When closing a session, a client will generally do an abortive | |||
disconnect, sending a TCP RST. This immediately discards all | disconnect, sending a TCP RST. This immediately discards all | |||
remaining inbound and outbound data, which is appropriate if the | remaining inbound and outbound data, which is appropriate if the | |||
client no longer has any interest in this data. In the BSD Sockets | client no longer has any interest in this data. In the BSD Sockets | |||
API, sending a TCP RST is achieved by setting the SO_LINGER option | API, sending a TCP RST is achieved by setting the SO_LINGER option | |||
with a time of 0 seconds and then closing the socket. | with a time of 0 seconds and then closing the socket. | |||
If a client has performed operations on this connection that it would | If a client has performed operations on this session that it would | |||
not want lost (like DNS updates) then the client SHOULD do an orderly | not want lost (like DNS updates) then the client SHOULD do an orderly | |||
disconnect, sending a TCP FIN. In the BSD Sockets API, sending a TCP | disconnect, sending a TLS close_notify followed by a TCP FIN. (In | |||
FIN is achieved by calling "shutdown(s,SHUT_WR)" and keeping the | the BSD Sockets API, sending a TCP FIN is achieved by calling | |||
socket open until all remaining data has been read from it. | "shutdown(s,SHUT_WR)" and keeping the socket open until all remaining | |||
data has been read from it.) | ||||
7. Security Considerations | 7. Security Considerations | |||
The Strict Privacy Usage Profile for DNS over TLS is strongly | The Strict Privacy Usage Profile for DNS over TLS is strongly | |||
recommended for DNS Push Notifications as defined in Authentication | recommended for DNS Push Notifications as defined in "Authentication | |||
and (D)TLS Profile for DNS-over-(D)TLS | and (D)TLS Profile for DNS-over-(D)TLS" | |||
[I-D.ietf-dprive-dtls-and-tls-profiles]. The Opportunistic Privacy | [I-D.ietf-dprive-dtls-and-tls-profiles]. The Opportunistic Privacy | |||
Usage Profile is permissible as a way to support incremental | Usage Profile is permissible as a way to support incremental | |||
deployment of security capabilities. Cleartext connections for DNS | deployment of security capabilities. Cleartext connections for DNS | |||
Push Notifications are not permissible. | Push Notifications are not permissible. | |||
DNSSEC is RECOMMENDED for the authentication of DNS Push Notification | DNSSEC is RECOMMENDED for the authentication of DNS Push Notification | |||
servers. TLS alone does not provide complete security. TLS | servers. TLS alone does not provide complete security. TLS | |||
certificate verification can provide reasonable assurance that the | certificate verification can provide reasonable assurance that the | |||
client is really talking to the server associated with the desired | client is really talking to the server associated with the desired | |||
host name, but since the desired host name is learned via a DNS SRV | host name, but since the desired host name is learned via a DNS SRV | |||
skipping to change at page 36, line 34 ¶ | skipping to change at page 30, line 34 ¶ | |||
In order to reduce the chances of compression-related attacks, TLS- | In order to reduce the chances of compression-related attacks, TLS- | |||
level compression SHOULD be disabled when using TLS versions 1.2 and | level compression SHOULD be disabled when using TLS versions 1.2 and | |||
earlier. In the draft version of TLS 1.3 [I-D.ietf-tls-tls13], TLS- | earlier. In the draft version of TLS 1.3 [I-D.ietf-tls-tls13], TLS- | |||
level compression has been removed completely. | level compression has been removed completely. | |||
7.4. TLS Session Resumption | 7.4. TLS Session Resumption | |||
TLS Session Resumption is permissible on DNS Push Notification | TLS Session Resumption is permissible on DNS Push Notification | |||
servers. The server may keep TLS state with Session IDs [RFC5246] or | servers. The server may keep TLS state with Session IDs [RFC5246] or | |||
operate in stateless mode by sending a Session Ticket [RFC5077] to | operate in stateless mode by sending a Session Ticket [RFC5077] to | |||
the client for it to store. However, once the connection is closed, | the client for it to store. However, once the DSO session is closed, | |||
any existing subscriptions will be dropped. When the TLS session is | any existing subscriptions will be dropped. When the TLS session is | |||
resumed, the DNS Push Notification server will not have any | resumed, the DNS Push Notification server will not have any | |||
subscription state and will proceed as with any other new connection. | subscription state and will proceed as with any other new DSO | |||
Use of TLS Session Resumption allows a new TLS connection to be set | session. Use of TLS Session Resumption allows a new TLS connection | |||
up more quickly, but the client will still have to recreate any | to be set up more quickly, but the client will still have to recreate | |||
desired subscriptions. | any desired subscriptions. | |||
8. IANA Considerations | 8. IANA Considerations | |||
This document defines the service name: "_dns-push-tls._tcp". | This document defines the service name: "_dns-push-tls._tcp". | |||
It is only applicable for the TCP protocol. | It is only applicable for the TCP protocol. | |||
This name is to be published in the IANA Service Name Registry | This name is to be published in the IANA Registry Service Types | |||
[RFC6335][SN]. | [RFC6335][ST]. | |||
This document defines four DNS Stateful Operations TLV types: | This document defines four DNS Stateful Operations TLV types: | |||
SUBSCRIBE with (tentative) value 0x40 (64), PUSH with (tentative) | SUBSCRIBE with (tentative) value 0x40 (64), PUSH with (tentative) | |||
value 0x41 (65), UNSUBSCRIBE with (tentative) value 0x42 (66), and | value 0x41 (65), UNSUBSCRIBE with (tentative) value 0x42 (66), and | |||
RECONFIRM with (tentative) value 0x43 (67). | RECONFIRM with (tentative) value 0x43 (67). | |||
9. Acknowledgements | 9. Acknowledgements | |||
The authors would like to thank Kiren Sekar and Marc Krochmal for | The authors would like to thank Kiren Sekar and Marc Krochmal for | |||
previous work completed in this field. | previous work completed in this field. | |||
This draft has been improved due to comments from Ran Atkinson, Tim | This draft has been improved due to comments from Ran Atkinson, Tim | |||
Chown, Mark Delany, Ralph Droms, Bernie Volz, Jan Komissar, Manju | Chown, Mark Delany, Ralph Droms, Bernie Volz, Jan Komissar, Manju | |||
Shankar Rao, Markus Stenberg, Dave Thaler, Soraia Zlatkovic, Sara | Shankar Rao, Markus Stenberg, Dave Thaler, Soraia Zlatkovic, Sara | |||
Dickinson, and Andrew Sullivan. | Dickinson, and Andrew Sullivan. | |||
10. References | 10. References | |||
10.1. Normative References | 10.1. Normative References | |||
[DSO] Bellis, R., Cheshire, S., Dickinson, J., Dickinson, S., | ||||
Mankin, A., and T. Pusateri, "DNS Stateful Operations", | ||||
draft-ietf-dnsop-session-signal-05 (work in progress), | ||||
January 2018. | ||||
[I-D.ietf-tls-tls13] | [I-D.ietf-tls-tls13] | |||
Rescorla, E., "The Transport Layer Security (TLS) Protocol | Rescorla, E., "The Transport Layer Security (TLS) Protocol | |||
Version 1.3", draft-ietf-tls-tls13-21 (work in progress), | Version 1.3", draft-ietf-tls-tls13-26 (work in progress), | |||
July 2017. | March 2018. | |||
[RFC0768] Postel, J., "User Datagram Protocol", STD 6, RFC 768, | [RFC0768] Postel, J., "User Datagram Protocol", STD 6, RFC 768, | |||
DOI 10.17487/RFC0768, August 1980, <https://www.rfc- | DOI 10.17487/RFC0768, August 1980, | |||
editor.org/info/rfc768>. | <https://www.rfc-editor.org/info/rfc768>. | |||
[RFC0793] Postel, J., "Transmission Control Protocol", STD 7, | [RFC0793] Postel, J., "Transmission Control Protocol", STD 7, | |||
RFC 793, DOI 10.17487/RFC0793, September 1981, | RFC 793, DOI 10.17487/RFC0793, September 1981, | |||
<https://www.rfc-editor.org/info/rfc793>. | <https://www.rfc-editor.org/info/rfc793>. | |||
[RFC1034] Mockapetris, P., "Domain names - concepts and facilities", | [RFC1034] Mockapetris, P., "Domain names - concepts and facilities", | |||
STD 13, RFC 1034, DOI 10.17487/RFC1034, November 1987, | STD 13, RFC 1034, DOI 10.17487/RFC1034, November 1987, | |||
<https://www.rfc-editor.org/info/rfc1034>. | <https://www.rfc-editor.org/info/rfc1034>. | |||
[RFC1035] Mockapetris, P., "Domain names - implementation and | [RFC1035] Mockapetris, P., "Domain names - implementation and | |||
specification", STD 13, RFC 1035, DOI 10.17487/RFC1035, | specification", STD 13, RFC 1035, DOI 10.17487/RFC1035, | |||
November 1987, <https://www.rfc-editor.org/info/rfc1035>. | November 1987, <https://www.rfc-editor.org/info/rfc1035>. | |||
[RFC1123] Braden, R., Ed., "Requirements for Internet Hosts - | [RFC1123] Braden, R., Ed., "Requirements for Internet Hosts - | |||
Application and Support", STD 3, RFC 1123, | Application and Support", STD 3, RFC 1123, | |||
DOI 10.17487/RFC1123, October 1989, <https://www.rfc- | DOI 10.17487/RFC1123, October 1989, | |||
editor.org/info/rfc1123>. | <https://www.rfc-editor.org/info/rfc1123>. | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, <https://www.rfc- | DOI 10.17487/RFC2119, March 1997, | |||
editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC2136] Vixie, P., Ed., Thomson, S., Rekhter, Y., and J. Bound, | [RFC2136] Vixie, P., Ed., Thomson, S., Rekhter, Y., and J. Bound, | |||
"Dynamic Updates in the Domain Name System (DNS UPDATE)", | "Dynamic Updates in the Domain Name System (DNS UPDATE)", | |||
RFC 2136, DOI 10.17487/RFC2136, April 1997, | RFC 2136, DOI 10.17487/RFC2136, April 1997, | |||
<https://www.rfc-editor.org/info/rfc2136>. | <https://www.rfc-editor.org/info/rfc2136>. | |||
[RFC2782] Gulbrandsen, A., Vixie, P., and L. Esibov, "A DNS RR for | [RFC2782] Gulbrandsen, A., Vixie, P., and L. Esibov, "A DNS RR for | |||
specifying the location of services (DNS SRV)", RFC 2782, | specifying the location of services (DNS SRV)", RFC 2782, | |||
DOI 10.17487/RFC2782, February 2000, <https://www.rfc- | DOI 10.17487/RFC2782, February 2000, | |||
editor.org/info/rfc2782>. | <https://www.rfc-editor.org/info/rfc2782>. | |||
[RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security | [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security | |||
(TLS) Protocol Version 1.2", RFC 5246, | (TLS) Protocol Version 1.2", RFC 5246, | |||
DOI 10.17487/RFC5246, August 2008, <https://www.rfc- | DOI 10.17487/RFC5246, August 2008, | |||
editor.org/info/rfc5246>. | <https://www.rfc-editor.org/info/rfc5246>. | |||
[RFC6066] Eastlake 3rd, D., "Transport Layer Security (TLS) | [RFC6066] Eastlake 3rd, D., "Transport Layer Security (TLS) | |||
Extensions: Extension Definitions", RFC 6066, | Extensions: Extension Definitions", RFC 6066, | |||
DOI 10.17487/RFC6066, January 2011, <https://www.rfc- | DOI 10.17487/RFC6066, January 2011, | |||
editor.org/info/rfc6066>. | <https://www.rfc-editor.org/info/rfc6066>. | |||
[RFC6335] Cotton, M., Eggert, L., Touch, J., Westerlund, M., and S. | [RFC6335] Cotton, M., Eggert, L., Touch, J., Westerlund, M., and S. | |||
Cheshire, "Internet Assigned Numbers Authority (IANA) | Cheshire, "Internet Assigned Numbers Authority (IANA) | |||
Procedures for the Management of the Service Name and | Procedures for the Management of the Service Name and | |||
Transport Protocol Port Number Registry", BCP 165, | Transport Protocol Port Number Registry", BCP 165, | |||
RFC 6335, DOI 10.17487/RFC6335, August 2011, | RFC 6335, DOI 10.17487/RFC6335, August 2011, | |||
<https://www.rfc-editor.org/info/rfc6335>. | <https://www.rfc-editor.org/info/rfc6335>. | |||
[RFC6895] Eastlake 3rd, D., "Domain Name System (DNS) IANA | [RFC6895] Eastlake 3rd, D., "Domain Name System (DNS) IANA | |||
Considerations", BCP 42, RFC 6895, DOI 10.17487/RFC6895, | Considerations", BCP 42, RFC 6895, DOI 10.17487/RFC6895, | |||
skipping to change at page 38, line 46 ¶ | skipping to change at page 33, line 5 ¶ | |||
[RFC7673] Finch, T., Miller, M., and P. Saint-Andre, "Using DNS- | [RFC7673] Finch, T., Miller, M., and P. Saint-Andre, "Using DNS- | |||
Based Authentication of Named Entities (DANE) TLSA Records | Based Authentication of Named Entities (DANE) TLSA Records | |||
with SRV Records", RFC 7673, DOI 10.17487/RFC7673, October | with SRV Records", RFC 7673, DOI 10.17487/RFC7673, October | |||
2015, <https://www.rfc-editor.org/info/rfc7673>. | 2015, <https://www.rfc-editor.org/info/rfc7673>. | |||
[RFC7766] Dickinson, J., Dickinson, S., Bellis, R., Mankin, A., and | [RFC7766] Dickinson, J., Dickinson, S., Bellis, R., Mankin, A., and | |||
D. Wessels, "DNS Transport over TCP - Implementation | D. Wessels, "DNS Transport over TCP - Implementation | |||
Requirements", RFC 7766, DOI 10.17487/RFC7766, March 2016, | Requirements", RFC 7766, DOI 10.17487/RFC7766, March 2016, | |||
<https://www.rfc-editor.org/info/rfc7766>. | <https://www.rfc-editor.org/info/rfc7766>. | |||
[SN] "Service Name and Transport Protocol Port Number | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | ||||
May 2017, <https://www.rfc-editor.org/info/rfc8174>. | ||||
[ST] "Service Name and Transport Protocol Port Number | ||||
Registry", <http://www.iana.org/assignments/ | Registry", <http://www.iana.org/assignments/ | |||
service-names-port-numbers/>. | service-names-port-numbers/>. | |||
[StatefulOp] | ||||
Bellis, R., Cheshire, S., Dickinson, J., Dickinson, S., | ||||
Mankin, A., and T. Pusateri, "DNS Stateful Operations", | ||||
draft-ietf-dnsop-session-signal-04 (work in progress), | ||||
September 2017. | ||||
10.2. Informative References | 10.2. Informative References | |||
[DisProx] Cheshire, S., "Hybrid Unicast/Multicast DNS-Based Service | [DisProx] Cheshire, S., "Discovery Proxy for Multicast DNS-Based | |||
Discovery", draft-ietf-dnssd-hybrid-07 (work in progress), | Service Discovery", draft-ietf-dnssd-hybrid-08 (work in | |||
September 2017. | progress), March 2018. | |||
[I-D.dukkipati-tcpm-tcp-loss-probe] | [I-D.dukkipati-tcpm-tcp-loss-probe] | |||
Dukkipati, N., Cardwell, N., Cheng, Y., and M. Mathis, | Dukkipati, N., Cardwell, N., Cheng, Y., and M. Mathis, | |||
"Tail Loss Probe (TLP): An Algorithm for Fast Recovery of | "Tail Loss Probe (TLP): An Algorithm for Fast Recovery of | |||
Tail Losses", draft-dukkipati-tcpm-tcp-loss-probe-01 (work | Tail Losses", draft-dukkipati-tcpm-tcp-loss-probe-01 (work | |||
in progress), February 2013. | in progress), February 2013. | |||
[I-D.ietf-dprive-dtls-and-tls-profiles] | [I-D.ietf-dprive-dtls-and-tls-profiles] | |||
Dickinson, S., Gillmor, D., and T. Reddy, "Usage and | Dickinson, S., Gillmor, D., and T. Reddy, "Usage and | |||
(D)TLS Profiles for DNS-over-(D)TLS", draft-ietf-dprive- | (D)TLS Profiles for DNS-over-(D)TLS", draft-ietf-dprive- | |||
dtls-and-tls-profiles-11 (work in progress), September | dtls-and-tls-profiles-11 (work in progress), September | |||
2017. | 2017. | |||
[I-D.sekar-dns-llq] | [LLQ] Sekar, K., "DNS Long-Lived Queries", draft-sekar-dns- | |||
Sekar, K., "DNS Long-Lived Queries", draft-sekar-dns- | ||||
llq-01 (work in progress), August 2006. | llq-01 (work in progress), August 2006. | |||
[IPJ.9-4-TCPSYN] | [obs] "Observer Pattern", | |||
Eddy, W., "Defenses Against TCP SYN Flooding Attacks", The | <https://en.wikipedia.org/wiki/Observer_pattern>. | |||
Internet Protocol Journal, Cisco Systems, Volume 9, | ||||
Number 4, December 2006. | ||||
[obs] "Observer Pattern", <https://en.wikipedia.org/wiki/ | ||||
Observer_pattern>. | ||||
[RFC2308] Andrews, M., "Negative Caching of DNS Queries (DNS | [RFC2308] Andrews, M., "Negative Caching of DNS Queries (DNS | |||
NCACHE)", RFC 2308, DOI 10.17487/RFC2308, March 1998, | NCACHE)", RFC 2308, DOI 10.17487/RFC2308, March 1998, | |||
<https://www.rfc-editor.org/info/rfc2308>. | <https://www.rfc-editor.org/info/rfc2308>. | |||
[RFC4287] Nottingham, M., Ed. and R. Sayre, Ed., "The Atom | [RFC4287] Nottingham, M., Ed. and R. Sayre, Ed., "The Atom | |||
Syndication Format", RFC 4287, DOI 10.17487/RFC4287, | Syndication Format", RFC 4287, DOI 10.17487/RFC4287, | |||
December 2005, <https://www.rfc-editor.org/info/rfc4287>. | December 2005, <https://www.rfc-editor.org/info/rfc4287>. | |||
[RFC4953] Touch, J., "Defending TCP Against Spoofing Attacks", | [RFC4953] Touch, J., "Defending TCP Against Spoofing Attacks", | |||
skipping to change at page 40, line 16 ¶ | skipping to change at page 34, line 11 ¶ | |||
"Transport Layer Security (TLS) Session Resumption without | "Transport Layer Security (TLS) Session Resumption without | |||
Server-Side State", RFC 5077, DOI 10.17487/RFC5077, | Server-Side State", RFC 5077, DOI 10.17487/RFC5077, | |||
January 2008, <https://www.rfc-editor.org/info/rfc5077>. | January 2008, <https://www.rfc-editor.org/info/rfc5077>. | |||
[RFC6281] Cheshire, S., Zhu, Z., Wakikawa, R., and L. Zhang, | [RFC6281] Cheshire, S., Zhu, Z., Wakikawa, R., and L. Zhang, | |||
"Understanding Apple's Back to My Mac (BTMM) Service", | "Understanding Apple's Back to My Mac (BTMM) Service", | |||
RFC 6281, DOI 10.17487/RFC6281, June 2011, | RFC 6281, DOI 10.17487/RFC6281, June 2011, | |||
<https://www.rfc-editor.org/info/rfc6281>. | <https://www.rfc-editor.org/info/rfc6281>. | |||
[RFC6762] Cheshire, S. and M. Krochmal, "Multicast DNS", RFC 6762, | [RFC6762] Cheshire, S. and M. Krochmal, "Multicast DNS", RFC 6762, | |||
DOI 10.17487/RFC6762, February 2013, <https://www.rfc- | DOI 10.17487/RFC6762, February 2013, | |||
editor.org/info/rfc6762>. | <https://www.rfc-editor.org/info/rfc6762>. | |||
[RFC6763] Cheshire, S. and M. Krochmal, "DNS-Based Service | [RFC6763] Cheshire, S. and M. Krochmal, "DNS-Based Service | |||
Discovery", RFC 6763, DOI 10.17487/RFC6763, February 2013, | Discovery", RFC 6763, DOI 10.17487/RFC6763, February 2013, | |||
<https://www.rfc-editor.org/info/rfc6763>. | <https://www.rfc-editor.org/info/rfc6763>. | |||
[RFC6824] Ford, A., Raiciu, C., Handley, M., and O. Bonaventure, | [RFC6824] Ford, A., Raiciu, C., Handley, M., and O. Bonaventure, | |||
"TCP Extensions for Multipath Operation with Multiple | "TCP Extensions for Multipath Operation with Multiple | |||
Addresses", RFC 6824, DOI 10.17487/RFC6824, January 2013, | Addresses", RFC 6824, DOI 10.17487/RFC6824, January 2013, | |||
<https://www.rfc-editor.org/info/rfc6824>. | <https://www.rfc-editor.org/info/rfc6824>. | |||
skipping to change at page 40, line 47 ¶ | skipping to change at page 34, line 42 ¶ | |||
[RFC7719] Hoffman, P., Sullivan, A., and K. Fujiwara, "DNS | [RFC7719] Hoffman, P., Sullivan, A., and K. Fujiwara, "DNS | |||
Terminology", RFC 7719, DOI 10.17487/RFC7719, December | Terminology", RFC 7719, DOI 10.17487/RFC7719, December | |||
2015, <https://www.rfc-editor.org/info/rfc7719>. | 2015, <https://www.rfc-editor.org/info/rfc7719>. | |||
[RFC7858] Hu, Z., Zhu, L., Heidemann, J., Mankin, A., Wessels, D., | [RFC7858] Hu, Z., Zhu, L., Heidemann, J., Mankin, A., Wessels, D., | |||
and P. Hoffman, "Specification for DNS over Transport | and P. Hoffman, "Specification for DNS over Transport | |||
Layer Security (TLS)", RFC 7858, DOI 10.17487/RFC7858, May | Layer Security (TLS)", RFC 7858, DOI 10.17487/RFC7858, May | |||
2016, <https://www.rfc-editor.org/info/rfc7858>. | 2016, <https://www.rfc-editor.org/info/rfc7858>. | |||
[RFC8010] Sweet, M. and I. McDonald, "Internet Printing | ||||
Protocol/1.1: Encoding and Transport", RFC 8010, | ||||
DOI 10.17487/RFC8010, January 2017, | ||||
<https://www.rfc-editor.org/info/rfc8010>. | ||||
[RFC8011] Sweet, M. and I. McDonald, "Internet Printing | ||||
Protocol/1.1: Model and Semantics", RFC 8011, | ||||
DOI 10.17487/RFC8011, January 2017, | ||||
<https://www.rfc-editor.org/info/rfc8011>. | ||||
[SYN] Eddy, W., "Defenses Against TCP SYN Flooding Attacks", The | ||||
Internet Protocol Journal, Cisco Systems, Volume 9, | ||||
Number 4, December 2006. | ||||
[XEP0060] Millard, P., Saint-Andre, P., and R. Meijer, "Publish- | [XEP0060] Millard, P., Saint-Andre, P., and R. Meijer, "Publish- | |||
Subscribe", XSF XEP 0060, July 2010. | Subscribe", XSF XEP 0060, July 2010. | |||
Authors' Addresses | Authors' Addresses | |||
Tom Pusateri | Tom Pusateri | |||
Unaffiliated | Unaffiliated | |||
Raleigh, NC 27608 | Raleigh, NC 27608 | |||
USA | USA | |||
End of changes. 121 change blocks. | ||||
680 lines changed or deleted | 593 lines changed or added | |||
This html diff was produced by rfcdiff 1.46. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |