draft-ietf-dnssd-push-09.txt | draft-ietf-dnssd-push-10.txt | |||
---|---|---|---|---|
Internet Engineering Task Force T. Pusateri | Internet Engineering Task Force T. Pusateri | |||
Internet-Draft Seeking affiliation | Internet-Draft Seeking affiliation | |||
Intended status: Standards Track S. Cheshire | Intended status: Standards Track S. Cheshire | |||
Expires: May 4, 2017 Apple Inc. | Expires: September 14, 2017 Apple Inc. | |||
October 31, 2016 | March 13, 2017 | |||
DNS Push Notifications | DNS Push Notifications | |||
draft-ietf-dnssd-push-09 | draft-ietf-dnssd-push-10 | |||
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 is 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. But there exists no mechanism for a | the updated results when polled. But there exists no mechanism | |||
client to be asynchronously notified when these changes occur. This | for a client to be asynchronously notified when these changes occur. | |||
document defines a mechanism for a client to be notified of such | This document defines a mechanism for a client to be notified | |||
changes to DNS records, called DNS Push Notifications. | of such changes to 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 http://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 4, 2017. | This Internet-Draft will expire on September 14, 2017. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2016 IETF Trust and the persons identified as the | Copyright (c) 2017 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 | (http://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 . . . . . . . . . . . . . . . . . . . . . . . . 2 | 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 . . . . . . . . . . . . . . . . . . . . 6 | 5. State Considerations . . . . . . . . . . . . . . . . . . . . 8 | |||
6. Protocol Operation . . . . . . . . . . . . . . . . . . . . . 7 | 6. Protocol Operation . . . . . . . . . . . . . . . . . . . . . 9 | |||
6.1. Discovery . . . . . . . . . . . . . . . . . . . . . . . . 8 | 6.1. Discovery . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
6.2. DNS Push Notification SUBSCRIBE . . . . . . . . . . . . . 10 | 6.2. DNS Push Notification SUBSCRIBE . . . . . . . . . . . . . 12 | |||
6.2.1. SUBSCRIBE Request . . . . . . . . . . . . . . . . . . 11 | 6.2.1. SUBSCRIBE Request . . . . . . . . . . . . . . . . . . 13 | |||
6.2.2. SUBSCRIBE Response . . . . . . . . . . . . . . . . . 14 | 6.2.2. SUBSCRIBE Response . . . . . . . . . . . . . . . . . 15 | |||
6.3. DNS Push Notification Update Messages . . . . . . . . . . 18 | 6.3. DNS Push Notification Updates . . . . . . . . . . . . . . 18 | |||
6.3.1. PUSH Message format . . . . . . . . . . . . . . . . . 18 | 6.3.1. PUSH Message . . . . . . . . . . . . . . . . . . . . 19 | |||
6.4. DNS Push Notification UNSUBSCRIBE . . . . . . . . . . . . 21 | 6.3.2. PUSH Response . . . . . . . . . . . . . . . . . . . . 21 | |||
6.4.1. UNSUBSCRIBE Request . . . . . . . . . . . . . . . . . 22 | 6.4. DNS Push Notification UNSUBSCRIBE . . . . . . . . . . . . 22 | |||
6.4.1. UNSUBSCRIBE Request . . . . . . . . . . . . . . . . . 23 | ||||
6.4.2. UNSUBSCRIBE Response . . . . . . . . . . . . . . . . 24 | 6.4.2. UNSUBSCRIBE Response . . . . . . . . . . . . . . . . 24 | |||
6.5. DNS Session Signaling Push Notification RECONFIRM . . . . 26 | 6.5. DNS Push Notification RECONFIRM . . . . . . . . . . . . . 26 | |||
6.6. Client-Initiated Termination . . . . . . . . . . . . . . 28 | 6.5.1. RECONFIRM Request . . . . . . . . . . . . . . . . . . 26 | |||
7. Security Considerations . . . . . . . . . . . . . . . . . . . 28 | 6.5.2. RECONFIRM Response . . . . . . . . . . . . . . . . . 28 | |||
7.1. Security Services . . . . . . . . . . . . . . . . . . . . 29 | 6.6. Client-Initiated Termination . . . . . . . . . . . . . . 30 | |||
7.2. TLS Name Authentication . . . . . . . . . . . . . . . . . 29 | 7. Security Considerations . . . . . . . . . . . . . . . . . . . 31 | |||
7.3. TLS Compression . . . . . . . . . . . . . . . . . . . . . 30 | 7.1. Security Services . . . . . . . . . . . . . . . . . . . . 31 | |||
7.4. TLS Session Resumption . . . . . . . . . . . . . . . . . 30 | 7.2. TLS Name Authentication . . . . . . . . . . . . . . . . . 31 | |||
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 30 | 7.3. TLS Compression . . . . . . . . . . . . . . . . . . . . . 32 | |||
9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 30 | 7.4. TLS Session Resumption . . . . . . . . . . . . . . . . . 32 | |||
10. References . . . . . . . . . . . . . . . . . . . . . . . . . 31 | 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 32 | |||
10.1. Normative References . . . . . . . . . . . . . . . . . . 31 | 9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 32 | |||
10.2. Informative References . . . . . . . . . . . . . . . . . 32 | 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 33 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 34 | 10.1. Normative References . . . . . . . . . . . . . . . . . . 33 | |||
10.2. Informative References . . . . . . . . . . . . . . . . . 34 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 36 | ||||
1. Introduction | 1. Introduction | |||
DNS records may be updated using DNS Update [RFC2136]. Other | DNS records may be updated using DNS Update [RFC2136]. Other | |||
mechanisms such as a Hybrid Proxy [I-D.ietf-dnssd-hybrid] can also | mechanisms such as a Discovery Proxy [DisProx] can also generate | |||
generate changes to a DNS zone. This document specifies a protocol | changes to a DNS zone. This document specifies a protocol for DNS | |||
for DNS clients to subscribe to receive asynchronous notifications of | clients to subscribe to receive asynchronous notifications of changes | |||
changes to RRSets of interest. It is immediately relevant in the | to RRSets of interest. It is immediately relevant in the case of DNS | |||
case of DNS Service Discovery [RFC6763] but is not limited to that | Service Discovery [RFC6763] but is not limited to that use case, and | |||
use case, and provides a general DNS mechanism for DNS record change | provides a general DNS mechanism for DNS record change notifications. | |||
notifications. Familiarity with the DNS protocol and DNS packet | Familiarity with the DNS protocol and DNS packet formats is assumed | |||
formats is assumed [RFC1034] [RFC1035] [RFC6895]. | [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", and | |||
"OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
"Key words for use in RFCs to Indicate Requirement Levels" [RFC2119]. | "Key words for use in RFCs to Indicate Requirement Levels" [RFC2119]. | |||
2. Motivation | 2. Motivation | |||
skipping to change at page 3, line 30 ¶ | skipping to change at page 4, line 23 ¶ | |||
generally highly tuned and capable of a high rate of query/response | generally highly tuned and capable of a high rate of query/response | |||
traffic, adding a publish/subscribe model for tracking changes to DNS | traffic, adding a publish/subscribe model for tracking changes to DNS | |||
records can result in more timely notification of changes with | records can result in more timely notification of changes with | |||
reduced CPU usage and lower network traffic. | reduced CPU usage 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 new services and updates are sent | |||
for all group members to receive. Therefore, Multicast DNS already | for all group members to receive. Therefore, Multicast DNS already | |||
has asynchronous change notification capability. However, when DNS | has asynchronous change notification capability. However, when DNS | |||
Service Discovery [RFC6763] is used across a wide area network using | Service Discovery [RFC6763] is used across a wide area network using | |||
Unicast DNS (possibly facilitated via a Hybrid Proxy | Unicast DNS (possibly facilitated via a Discovery Proxy [DisProx]) it | |||
[I-D.ietf-dnssd-hybrid]) it would be beneficial to have an equivalent | would be beneficial to have an equivalent capability for Unicast DNS, | |||
capability for Unicast DNS, to allow clients to learn about DNS | to allow clients to learn about DNS record changes in a timely manner | |||
record changes in a timely manner without polling. | without polling. | |||
DNS Long-Lived Queries (LLQ) [I-D.sekar-dns-llq] is an existing | ||||
deployed solution to provide asynchronous change notifications. Even | ||||
though it can be used over TCP, LLQ is defined primarily as a UDP- | ||||
based protocol, and as such it defines its own equivalents of | ||||
existing TCP features like the three-way handshake, flow control, and | ||||
reliability. This document builds on experience gained with the LLQ | ||||
protocol, with an improved design. Instead of using UDP, this | ||||
specification uses long-lived TCP connections | ||||
[I-D.ietf-dnsop-session-signal], and therefore doesn't need to | ||||
reinvent existing TCP functionality. Instead of inventing a new | ||||
vocabulary of messages to communicate DNS zone changes, this | ||||
specification adopts the syntax and semantics of DNS Update messages | ||||
[RFC2136]. | ||||
DNS Push Notifications impose less load on the responding server than | ||||
rapid polling would, but Push Notifications do still have a cost, so | ||||
DNS Push Notification clients MUST NOT recklessly create an excessive | ||||
number of Push Notification subscriptions. A subscription SHOULD | ||||
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 | The DNS Long-Lived Queries (LLQ) [I-D.sekar-dns-llq] mechanism is an | |||
Notification subscription active 24 hours a day 7 days a week just to | existing deployed solution to provide asynchronous change | |||
keep a list in memory up to date so that it will be really fast if | notifications, used by Apple's Back to My Mac Service [RFC6281]. | |||
the user does choose to bring up an on-screen display of that data. | Back to My Mac was designed in an era when the data centre operations | |||
DNS Push Notifications are designed to be fast enough that there is | staff asserted that it was impossible for a server to handle large | |||
no need to pre-load a "warm" list in memory just in case it might be | numbers of mostly-idle TCP connections, so LLQ had to defined as a | |||
needed later. | UDP-based protocol, effectively replicating much of TCP's connection | |||
state management logic in user space, and creating its own poor | ||||
imitations of existing TCP features like the three-way handshake, | ||||
flow control, and reliability. | ||||
Generally, a client SHOULD NOT keep a connection to a server open | This document builds on experience gained with the LLQ protocol, with | |||
indefinitely if it has no active subscriptions on that connection. | an improved design. Instead of using UDP, this specification uses | |||
After 30 seconds with no active subscriptions the client SHOULD close | TCP, and therefore doesn't need to reinvent existing TCP | |||
the idle connection, and, if needed in the future, open a new | functionality. Using TCP also gives long-lived low-traffic | |||
connection. | connections better longevity through NAT gateways without resorting | |||
to excessive keepalive traffic [SessSig]. Instead of inventing a new | ||||
vocabulary of messages to communicate DNS zone changes as LLQ did, | ||||
this specification adopts the 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 | |||
skipping to change at page 6, line 5 ¶ | skipping to change at page 6, line 8 ¶ | |||
comes to an authoritative server informing a client of changes to DNS | comes to an authoritative server informing a client of changes to DNS | |||
records. | 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". | DNS class "IN". | |||
DNS Push Notifications impose less load on the responding server than | ||||
rapid polling would, but Push Notifications do still have a cost, so | ||||
DNS Push Notification clients MUST NOT recklessly create an excessive | ||||
number of Push Notification subscriptions. A subscription SHOULD | ||||
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 | ||||
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 Session Signaling specification | ||||
[SessSig], a client MUST NOT keep a connection to a server open | ||||
indefinitely if it has no subscriptions (or other operations) active | ||||
on that connection. A client MAY close a connection as soon as it | ||||
becomes idle, and then if needed in the future, open a new connection | ||||
when required. Alternatively, a client MAY speculatively keep an | ||||
idle connection open for some time, subject to the constraint that it | ||||
MUST NOT keep a connection open that has been idle for more than the | ||||
session's idle timeout (15 seconds by default). | ||||
4. Transport | 4. Transport | |||
Implementations of DNS Update [RFC2136] MAY use either User Datagram | Implementations of DNS Update [RFC2136] MAY use either User Datagram | |||
Protocol (UDP) [RFC0768] or Transmission Control Protocol (TCP) | Protocol (UDP) [RFC0768] or Transmission Control Protocol (TCP) | |||
[RFC0793] as the transport protocol, in keeping with the historical | [RFC0793] as the transport protocol, in keeping with the historical | |||
precedent that DNS queries must first be sent over UDP [RFC1123]. | precedent that DNS queries must first be sent over UDP [RFC1123]. | |||
This requirement to use UDP has subsequently been relaxed [RFC7766]. | 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 TLS | |||
skipping to change at page 6, line 49 ¶ | skipping to change at page 8, line 12 ¶ | |||
and DANE TLSA records [RFC7673] is strongly encouraged. See below in | and DANE TLSA records [RFC7673] is strongly encouraged. See below in | |||
Section 7.2 for details. | Section 7.2 for details. | |||
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 connection to a DNS server, | |||
each record subscription is individually accepted or rejected. | each subscription is individually accepted or rejected. Servers may | |||
Servers may employ various techniques to limit subscriptions to a | employ various techniques to limit subscriptions to a manageable | |||
manageable level. Correspondingly, the client is free to establish | level. Correspondingly, the client is free to establish simultaneous | |||
simultaneous connections to alternate DNS servers that support DNS | connections to alternate DNS servers that support DNS Push | |||
Push Notifications for the zone and distribute record subscriptions | Notifications for the zone and distribute subscriptions at its | |||
at its discretion. In this way, both clients and servers can react | discretion. In this way, both clients and servers can react to | |||
to resource constraints. Token bucket rate limiting schemes are also | resource constraints. Token bucket rate limiting schemes are also | |||
effective in providing fairness by a server across numerous client | effective 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 Session Signaling | and makes use of DNS Session Signaling [SessSig]. | |||
[I-D.ietf-dnsop-session-signal]. | ||||
For details of the DNS Session Signaling message format refer to the | ||||
DNS Session Signaling specification [SessSig]. Those details are not | ||||
repeated here. | ||||
DNS Push Notification clients and servers MUST support DNS Session | DNS Push Notification clients and servers MUST support DNS Session | |||
Signaling, but the server must not issue any DNS Session Signaling | Signaling, but the server MUST NOT issue any DNS Session Signaling | |||
operations until after the client has first initiated a DNS Session | operations until after the client has first initiated a DNS Session | |||
Signaling operation of its own. A single server can support DNS | Signaling operation of its own. A single server can support DNS | |||
Queries, DNS Updates, and DNS Push Notifications (using DNS Session | Queries, DNS Updates, and DNS Push Notifications (using DNS Session | |||
Signaling) on the same TCP port, and until the client has sent at | Signaling) on the same TCP port, and until the client has sent at | |||
least one DNS Session Signaling operation the server does not know | least one DNS Session Signaling operation the server does not know | |||
what kind of client has connected to it. Once the client has | what kind of client has connected to it. Once the client has | |||
indicated willingness to use DNS Session Signaling operations by | indicated willingness to use DNS Session Signaling operations by | |||
sending one of its own, either side of the connection may then | sending one of its own, either side of the connection may then | |||
initiate further Session Signaling operations at any time. | initiate further Session Signaling 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 DNS | |||
Session Signaling Idle Timeout operation to request a session timeout | Session Signaling Keepalive operation to request a session timeout or | |||
longer than the the 30-second default, but this is NOT REQUIRED. A | keepalive interval longer than the the 15-second defaults, but this | |||
DNS Push Notification client MAY issue other requests on the | is NOT REQUIRED. A DNS Push Notification client MAY issue other | |||
connection first, and only issue a DNS Session Signaling Idle Timeout | requests on the connection first, and only issue a DNS Session | |||
operation later if it determines that to be necessary. | Signaling Keepalive operation later if it determines that to be | |||
necessary. | ||||
Once the connection is made, the client may then add and remove Push | Once the connection 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. | |||
skipping to change at page 8, line 14 ¶ | skipping to change at page 10, line 14 ¶ | |||
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 client MUST also determine which TCP port on | the desired zone. The client MUST also determine which TCP port on | |||
the server is listening for connections, which need not be (and often | the server is listening for connections, which need not be (and often | |||
is not) the typical TCP port 53 used for conventional DNS, or TCP | is not) the typical TCP port 53 used for conventional DNS, or TCP | |||
port 853 used for DNS over TLS [RFC7858]. | port 853 used for DNS over TLS [RFC7858]. | |||
1. The client begins the discovery by sending a DNS query to the | 1. The client begins the discovery by sending a DNS query to its | |||
local resolver with record type SOA [RFC1035] for the name of the | local resolver, with record type SOA [RFC1035], for the domain | |||
record it wishes to subscribe. | name to which it wishes to subscribe. | |||
2. If the SOA record exists, it MUST be returned in the Answer | 2. If the SOA record exists, it MUST be returned in the Answer | |||
Section of the response. If not, the local resolver SHOULD | Section of the response. If not, the local resolver SHOULD | |||
include the SOA record for the zone of the requested name in the | include the SOA record for the zone of the requested name in the | |||
Authority Section. | Authority Section. | |||
3. If no SOA record is returned, the client then strips off the | 3. If no SOA record is returned, the client then strips off the | |||
leading label from the requested name. If the resulting name has | leading label from the requested name. If the resulting name has | |||
at least one label in it, the client sends a new SOA query and | at least one label in it, the client sends a new SOA query and | |||
processing continues at step 2 above. If the resulting name is | processing continues at step 2 above. If the resulting name is | |||
empty (the root label) then this is a network configuration error | empty (the root label) then this is a network configuration error | |||
and the client gives up. The client MAY retry the operation at a | and the client gives up. The client MAY retry the operation at a | |||
later time. | later time, of the client's choosing, such after a change in | |||
network attachment. | ||||
4. Once the SOA is known (either by virtue of being seen in the | 4. 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. | |||
5. If the zone in question does not offer DNS Push Notifications | 5. If the zone in question does not offer DNS Push Notifications | |||
then SRV record MUST NOT exist and the SRV query will return a | then SRV record MUST NOT exist and the SRV query will return a | |||
negative answer. | negative answer. | |||
skipping to change at page 9, line 24 ¶ | skipping to change at page 11, line 25 ¶ | |||
connection, it SHOULD repeat the discovery process in order to | connection, it SHOULD repeat the discovery process in order to | |||
determine the preferred DNS server for subscriptions at that time. | determine the preferred DNS server for subscriptions at that time. | |||
Note that this repeated discovery step is typically very fast and | Note that this repeated discovery step is typically very fast and | |||
typically results in no queries on the network. The client device | typically results in no queries on the network. The client device | |||
MUST respect the DNS TTL values on records it receives, and store | MUST respect the DNS TTL values on records it receives, and store | |||
them in its local cache with this lifetime. This means that, as long | them in its local cache with this lifetime. This means that, as long | |||
as the DNS TTL values on the authoritative records were set to | as the DNS TTL values on the authoritative records were set to | |||
reasonable values, repeated application of this discovery process can | reasonable values, repeated application of this discovery process can | |||
be completed nearly instantaneously by the client, using only | be completed nearly instantaneously by the client, using only | |||
locally-stored data. | locally-stored cached data. | |||
6.2. DNS Push Notification SUBSCRIBE | 6.2. DNS Push Notification SUBSCRIBE | |||
After connecting, and requesting a longer idle timeout if necessary, | After connecting, and requesting a longer idle timeout and/or | |||
a DNS Push Notification client then indicates its desire to receive | keepalive interval if necessary, a DNS Push Notification client then | |||
DNS Push Notifications for a given domain name by sending a SUBSCRIBE | indicates its desire to receive DNS Push Notifications for a given | |||
request over the established TLS connection to the server. A | domain name by sending a SUBSCRIBE request over the established TLS | |||
SUBSCRIBE request is encoded in a DNS Session Signaling | connection to the server. A SUBSCRIBE request is encoded in a DNS | |||
[I-D.ietf-dnsop-session-signal] message. This specification defines | Session Signaling [SessSig] message. This specification defines a | |||
a new DNS Session Signaling TLV for DNS Push Notification SUBSCRIBE | DNS Session Signaling TLV for DNS Push Notification SUBSCRIBE | |||
Requests/Responses (tentatively Session Signaling Type Code 64). | Requests/Responses (tentatively Session Signaling Type Code 0x40). | |||
A server may not initiate a SUBSCRIBE request. | A server MUST NOT initiate a SUBSCRIBE request. | |||
6.2.1. SUBSCRIBE Request | 6.2.1. SUBSCRIBE Request | |||
A SUBSCRIBE request message begins with the standard DNS Session | A SUBSCRIBE request message begins with the standard DNS Session | |||
Signaling 4-byte header [I-D.ietf-dnsop-session-signal], followed by | Signaling 12-byte header [SessSig], followed by the SUBSCRIBE TLV. | |||
the SUBSCRIBE TLV. | The SSOP-DATA for the the SUBSCRIBE TLV is as follows: | |||
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 | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| SSOP-TYPE (SUBSCRIBE) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| SSOP-LENGTH | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| | | | | | |||
\ QNAME \ | \ NAME \ | |||
\ \ | \ \ | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | |||
| QTYPE | | | TYPE | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | |||
| QCLASS | | | CLASS | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | |||
Figure 1 | Figure 1 | |||
The MESSAGE ID field MUST be set to a unique value, that the client | 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 | 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 | 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 | client has used it in a request for which it has not yet received a | |||
response, or if if the client has used it for a subscription which it | response, or if if the client has used it for a subscription which it | |||
has not yet cancelled using UNSUBSCRIBE. In the SUBSCRIBE response | has not yet cancelled using UNSUBSCRIBE. In the SUBSCRIBE response | |||
the server MUST echo back the MESSAGE ID value unchanged. | the server MUST echo back the MESSAGE ID value unchanged. | |||
In a request the DNS Header QR bit MUST be zero. | In the SUBSCRIBE TLV the SSOP-TYPE is SUBSCRIBE (tentatively 0x40). | |||
The SSOP-LENGTH is the length of the SSOP-DATA that follows, which | ||||
The DNS Header Opcode field holds the Session Signaling Opcode value | ||||
(tentatively 6). | ||||
The Z bits MUST be zero on transmission, and MUST be silently ignored | ||||
on reception. | ||||
The return code (RCODE) field MUST be set to 0 in a request. | ||||
In the SUBSCRIBE TLV the SSOP-TYPE is SUBSCRIBE (tentatively 64). | ||||
The SSOP-LENGTH is the length of the data that follows, which | ||||
specifies the name, type, and class of the record(s) being sought. | specifies the name, type, and class of the record(s) being sought. | |||
A SUBSCRIBE request MUST contain exactly one question. There is no | A SUBSCRIBE request MUST contain exactly one question. The SUBSCRIBE | |||
QCOUNT field to specify more than one question. Since SUBSCRIBE | TLV has no QDCOUNT field to specify more than one question. Since | |||
requests are sent over TCP, multiple SUBSCRIBE requests can be | SUBSCRIBE requests are sent over TCP, multiple SUBSCRIBE request | |||
concatenated in a single TCP stream and packed efficiently into TCP | messages can be concatenated in a single TCP stream and packed | |||
segments. | 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 connection | |||
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 connection MUST be unique. A client | |||
MUST NOT send a SUBSCRIBE message that duplicates the QNAME, QTYPE | MUST NOT send a SUBSCRIBE message that duplicates the NAME, TYPE and | |||
and QCLASS of an existing active subscription on that TLS/TCP | CLASS of an existing active subscription on that TLS/TCP connection. | |||
connection. For the purpose of this matching, the established DNS | For the purpose of this matching, the established DNS case- | |||
case-insensitivity for US-ASCII letters applies (e.g., "foo.com" and | insensitivity for US-ASCII letters applies (e.g., "foo.com" and | |||
"Foo.com" are the same). If a server receives such a duplicate | "Foo.com" are the same). If a server receives such a duplicate | |||
SUBSCRIBE message this is an error and the server MUST immediately | SUBSCRIBE message this is an error and the server MUST immediately | |||
close the TCP connection. | immediately terminate the connection with a TCP RST (or equivalent | |||
for other 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 | |||
the zone(s) the server is responsible for) and this is not an error. | the zone(s) the server is responsible for) and this is not an error. | |||
The server MUST accept these requests and send Push Notifications if | The server MUST accept these requests and send Push Notifications if | |||
and when matching records are found in the future. | and when matching records are found in the future. | |||
If neither QTYPE nor QCLASS are ANY (255) then this is a specific | If neither TYPE nor CLASS are ANY (255) then this is a specific | |||
subscription to changes for the given QNAME, QTYPE and QCLASS. If | subscription to changes for the given NAME, TYPE and CLASS. If one | |||
one or both of QTYPE or QCLASS are ANY (255) then this subscription | or both of TYPE or CLASS are ANY (255) then this subscription matches | |||
matches any type and/or any class, as appropriate. | any type and/or any class, as appropriate. | |||
NOTE: A little-known quirk of DNS is that in DNS QUERY requests, | NOTE: A little-known quirk of DNS is that in DNS QUERY requests, | |||
QTYPE and QCLASS 255 mean "ANY" not "ALL". They indicate that the | QTYPE and QCLASS 255 mean "ANY" not "ALL". They indicate that the | |||
server should respond with ANY matching records of its choosing, not | server should respond with ANY matching records of its choosing, not | |||
necessarily ALL matching records. This can lead to some surprising | necessarily ALL matching records. This can lead to some surprising | |||
and unexpected results, were a query returns some valid answers but | and unexpected results, were a query returns some valid answers but | |||
not all of them, and makes QTYPE=ANY queries less useful than people | not all of them, and makes QTYPE=ANY queries less useful than people | |||
sometimes imagine. | sometimes imagine. | |||
When used in conjunction with SUBSCRIBE, QTYPE and QCLASS 255 should | When used in conjunction with SUBSCRIBE, TYPE and CLASS 255 should be | |||
be interpreted to mean "ALL", not "ANY". After accepting a | interpreted to mean "ALL", not "ANY". After accepting a subscription | |||
subscription where one or both of QTYPE or QCLASS are 255, the server | where one or both of TYPE or CLASS are 255, the server MUST send Push | |||
MUST send Push Notification Updates for ALL record changes that match | Notification Updates for ALL record changes that match the | |||
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 Session | A SUBSCRIBE response message begins with the standard DNS Session | |||
Signaling 4-byte header [I-D.ietf-dnsop-session-signal], possibly | Signaling 12-byte header [SessSig], possibly followed by one or more | |||
followed by one or more optional modifier TLVs such as a Terminate | optional Modifier TLVs, such as a Retry Delay Modifier TLV. | |||
modifier TLV [I-D.ietf-dnsop-session-signal]. | ||||
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 | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
Figure 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 | |||
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. | |||
In a response the DNS Header QR bit MUST be one. | A SUBSCRIBE response message MUST NOT contain a Session Signaling | |||
If the QR bit is not one the message is not a response. | Operation TLV. The Session Signaling Operation TLV is NOT copied | |||
from the SUBSCRIBE request. | ||||
The DNS Header Opcode field holds the Session Signaling Opcode value | ||||
(tentatively 6). | ||||
The Z bits MUST be zero on transmission, and MUST be silently ignored | ||||
on reception. | ||||
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. | | |||
skipping to change at page 16, line 12 ¶ | skipping to change at page 16, line 12 ¶ | |||
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, either | |||
the client is (at least partially) misconfigured or the server | the client is (at least partially) misconfigured or the server | |||
resources are exhausted. In either case, the client shouldn't retry | resources are exhausted. In either case, the client shouldn't retry | |||
the subscription right away. Either end can terminate the | the subscription right away. Either end can terminate the | |||
connection, but the client may want to try this subscription again or | connection, but the client may want to try this subscription again or | |||
it may have other successful subscriptions that it doesn't want to | it may have other successful subscriptions that it doesn't want to | |||
abandon. If the server sends a nonzero RCODE then it SHOULD append a | abandon. If the server sends a nonzero RCODE then it SHOULD append a | |||
Terminate modifier TLV [I-D.ietf-dnsop-session-signal] to the | Retry Delay Modifier TLV [SessSig] to the response specifying a delay | |||
response specifying a delay before the client attempts this operation | before the client attempts this operation again. Recommended values | |||
again. Recommended values for the delay for different RCODE values | for the delay for different RCODE values are given below: | |||
are given below: | ||||
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 avoid | implementer. A value of five minutes is RECOMMENDED, to reduce | |||
high load from defective clients. | the risk of high load from defective clients. | |||
For RCODE = 2 (SERVFAIL), which occurs due to resource exhaustion, | For RCODE = 2 (SERVFAIL), which occurs due to resource exhaustion, | |||
the delay should be chosen according to the level of server | the delay should be chosen according to the level of server | |||
overload and the anticipated duration of that overload. By | overload and the anticipated duration of that overload. By | |||
default, a value of one minute is RECOMMENDED. | default, a value of one minute is RECOMMENDED. | |||
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 Session Signaling [I-D.ietf-dnsop-session-signal], | implement DNS Session Signaling [SessSig], it is unlikely that the | |||
it is unlikely that the server will begin supporting DNS Session | server will begin supporting DNS Session Signaling in the next few | |||
Signaling in the next few minutes, so the retry delay SHOULD be | minutes, so the retry delay SHOULD be one hour. | |||
one hour. | ||||
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 17, line 22 ¶ | skipping to change at page 17, line 22 ¶ | |||
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 connection | |||
to remain open, or MAY send a DNS Push Notification Terminate Session | to remain open, or MAY send a DNS Push Notification Retry Delay | |||
operation TLV and then close the TCP connection, as described in the | Operation TLV and then close the TCP connection, as described in the | |||
DNS Session Signaling specification [I-D.ietf-dnsop-session-signal]. | DNS Session Signaling specification [SessSig]. Clients MUST | |||
Clients MUST correctly handle both cases. | correctly handle both cases. | |||
6.3. DNS Push Notification Update Messages | 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. An | generates PUSH messages to send to the client as appropriate. In the | |||
initial PUSH message will be sent immediately in the case that the | case that the answer set was non-empty at the moment the subscription | |||
answer set was non-empty at the moment the subscription was | was established, an initial PUSH message will be sent immediately | |||
established. Subsequent changes to the answer set are then | following the SUBSCRIBE Response. Subsequent changes to the answer | |||
communicated to the client in subsequent PUSH messages. | set are then communicated to the client in subsequent PUSH messages. | |||
6.3.1. PUSH Message format | ||||
A PUSH message begins with the standard DNS Session Signaling 4-byte | ||||
header [I-D.ietf-dnsop-session-signal], followed by the PUSH TLV. | ||||
The format of PUSH messages borrows from the existing DNS Update | ||||
[RFC2136] protocol, with some simplifications. | ||||
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 | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| SSOP-TYPE (PUSH) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| SSOP-LENGTH | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| UPCOUNT | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| | | ||||
\ Resource Records... \ | ||||
\ \ | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
Figure 3 | ||||
The MESSAGE ID field MUST be set to zero on transmission, and | ||||
silently ignored on reception. A PUSH message could potentially | ||||
match more than one subscription, or could relate to a subscription | ||||
that the client has just cancelled with an UNSUBSCRIBE message, so | ||||
the MESSAGE ID field serves no useful purpose. | ||||
In a PUSH message the DNS Header QR bit MUST be zero. | ||||
The DNS Header Opcode field holds the Session Signaling Opcode value | 6.3.1. PUSH Message | |||
(tentatively 6). | ||||
The Z bits MUST be zero on transmission, and MUST be silently ignored | A PUSH message begins with the standard DNS Session Signaling 12-byte | |||
on reception. | header [SessSig], followed by the PUSH TLV. | |||
The return code (RCODE) field MUST be set to 0 in a request. | The MESSAGE ID field MUST be set to a unique value, that the server | |||
is not currently using for any other active outgoing request that it | ||||
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. | ||||
In the PUSH message TLV the SSOP-TYPE is PUSH (tentatively 65). The | In the PUSH TLV the SSOP-TYPE is PUSH (tentatively 0x41). The SSOP- | |||
SSOP-LENGTH is the length of the SSOP-DATA that follows. | LENGTH is the length of the SSOP-DATA that follows, which specifies | |||
the changes being communicated. | ||||
The SSOP-DATA contains a two-byte count of the number of records that | The SSOP-DATA contains one or more Update records, in customary | |||
follow, followed by the records, in customary Resource Record format | Resource Record format, as used in DNS Update [RFC2136] messages. A | |||
(as used in DNS Update [RFC2136] messages). | PUSH Message MUST contain at least one Update record. If a PUSH | |||
Message is received that contains no Update records this is a fatal | ||||
error, and the receiver MUST immediately terminate the connection | ||||
with a TCP RST (or equivalent for other protocols). | ||||
The SSOP-DATA contains the relevant change information for the | The SSOP-DATA contains the relevant change information for the | |||
client, formatted identically to a DNS Update [RFC2136]. To recap: | client, formatted identically to a DNS Update [RFC2136]. To recap: | |||
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. | |||
skipping to change at page 19, line 39 ¶ | skipping to change at page 19, line 51 ¶ | |||
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. | |||
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 | connection. Specifically, the record name MUST match the name given | |||
in the SUBSCRIBE request, subject to the usual established DNS case- | in the SUBSCRIBE request, subject to the usual established DNS case- | |||
insensitivity for US-ASCII letters. If the QTYPE 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 | |||
QTYPE given in the SUBSCRIBE request. If the QCLASS 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 | |||
QCLASS 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 connection 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 TCP | |||
connection is not closed. This is to allow for the unavoidable race | connection 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 QTYPE and a different SUBSCRIBE request with QTYPE=ANY. It | the same TYPE and a different SUBSCRIBE request with TYPE=ANY. It is | |||
is not the case that two PUSH messages are sent because the new | not the case that two PUSH messages are sent because the new record | |||
record matches two active subscriptions. | matches two active subscriptions. | |||
The server SHOULD encode change notifications in the most efficient | The server SHOULD encode change notifications in the most efficient | |||
manner possible. For example, when three AAAA records are deleted | manner possible. For example, when three AAAA records are deleted | |||
from a given name, and no other AAAA records exist for that name, the | from a given name, and no other AAAA records exist for that name, the | |||
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 messages is a | to different subscriptions. Conceptually, a PUSH message is a | |||
connection-level concept, not a subscription-level concept. | connection-level mechanism, not a subscription-level mechanism. | |||
Reception of a PUSH message does not directly generate a response | Reception of a PUSH message by a client generates a PUSH response | |||
back to the server. (Updates may indirectly generate other | back to the server. | |||
operations; e.g., a Push Notification Update Message declaring the | ||||
appearance of a PTR record could lead to a query for the SRV record | ||||
named in the rdata of that PTR record [RFC6763].) | ||||
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 TCP connection being closed) | |||
record ageing resumes and records are removed from the local cache | record ageing resumes and records are removed from the local cache | |||
when their TTL reaches zero. | when their 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 Session | ||||
Signaling 12-byte header [SessSig], 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 | ||||
PUSH message. | ||||
A PUSH response message MUST NOT contain a Session Signaling | ||||
Operation TLV. The Session Signaling 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 | |||
connection, the client sends an UNSUBSCRIBE message over the | connection, the client sends an UNSUBSCRIBE message over the | |||
established TCP connection to the server. The UNSUBSCRIBE message is | established TCP connection to the server. The UNSUBSCRIBE message is | |||
encoded in a DNS Session Signaling [I-D.ietf-dnsop-session-signal] | encoded in a DNS Session Signaling [SessSig] message. This | |||
message. This specification defines a new DNS Session Signaling TLV | specification defines a DNS Session Signaling TLV for DNS Push | |||
for DNS Push Notification UNSUBSCRIBE Requests/Responses (tentatively | Notification UNSUBSCRIBE Requests/Responses (tentatively Session | |||
Session Signaling Type Code 66). | Signaling Type Code 0x42). | |||
A server may not initiate an UNSUBSCRIBE request. | A server MUST NOT initiate an UNSUBSCRIBE request. | |||
6.4.1. UNSUBSCRIBE Request | 6.4.1. UNSUBSCRIBE Request | |||
An UNSUBSCRIBE request message begins with the standard DNS Session | An UNSUBSCRIBE request message begins with the standard DNS Session | |||
Signaling 4-byte header [I-D.ietf-dnsop-session-signal], followed by | Signaling 12-byte header [SessSig], followed by the UNSUBSCRIBE TLV. | |||
the UNSUBSCRIBE TLV. | ||||
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 | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| SSOP-TYPE (UNSUBSCRIBE) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| SSOP-LENGTH (0) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
Figure 4 | In the UNSUBSCRIBE TLV the SSOP-TYPE is UNSUBSCRIBE (tentatively | |||
0x42). The SSOP-LENGTH is zero. There is no SSOP-DATA for | ||||
UNSUBSCRIBE. | ||||
The MESSAGE ID field MUST match the value given in the ID field of an | The MESSAGE ID field MUST match the value given in the ID field of an | |||
active SUBSCRIBE request. This is how the server knows which | active SUBSCRIBE request. This is how the server knows which | |||
SUBSCRIBE request is being cancelled. After receipt of the | SUBSCRIBE request is being cancelled. After receipt of the | |||
UNSUBSCRIBE request, the SUBSCRIBE request is no longer active. If a | UNSUBSCRIBE request, the SUBSCRIBE request is no longer active. If a | |||
server receives an UNSUBSCRIBE message where the MESSAGE ID does not | server receives an UNSUBSCRIBE message where the MESSAGE ID does not | |||
match the ID of an active SUBSCRIBE request this is an error and the | match the ID of an active SUBSCRIBE request the server MUST return a | |||
the server MUST return a response containing RCODE = 1 (FORMERR). In | response containing RCODE = 3 (NXDOMAIN). | |||
the UNSUBSCRIBE response the server MUST echo back the MESSAGE ID | ||||
value unchanged. It is allowable for the client to issue an | ||||
UNSUBSCRIBE request for a previous SUBSCRIBE request for which the | ||||
client has not yet received a SUBSCRIBE response. This is to allow | ||||
for the case where a client starts and stops a subscription in less | ||||
than the round-trip time to the server. The client is NOT required | ||||
to wait for the SUBSCRIBE response before issuing the UNSUBSCRIBE | ||||
request. | ||||
In a request the DNS Header QR bit MUST be zero. | ||||
The DNS Header Opcode field holds the Session Signaling Opcode value | ||||
(tentatively 6). | ||||
The Z bits MUST be zero on transmission, and MUST be silently ignored | ||||
on reception. | ||||
The return code (RCODE) field MUST be set to 0 in a request. | ||||
In the UNSUBSCRIBE TLV the SSOP-TYPE is UNSUBSCRIBE (tentatively 66). | It is allowable for the client to issue an UNSUBSCRIBE request for a | |||
previous SUBSCRIBE request for which the client has not yet received | ||||
a SUBSCRIBE response. This is to allow for the case where a client | ||||
starts and stops a subscription in less than the round-trip time to | ||||
the server. The client is NOT required to wait for the SUBSCRIBE | ||||
response before issuing the UNSUBSCRIBE request. A consequence of | ||||
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. | ||||
The SSOP-LENGTH is zero. | Note that when the client issues an UNSUBSCRIBE request for an as-yet | |||
unacknowledged SUBSCRIBE request, at that moment the client will have | ||||
two outstanding DNS Session Signaling operations with same MESSAGE | ||||
ID, a SUBSCRIBE request and an UNSUBSCRIBE request, which will both | ||||
receive responses, in that order. When the client has multiple | ||||
outstanding DNS Session Signaling operations with same MESSAGE ID, | ||||
care should be taken that when a DNS Session Signaling response | ||||
message is received for that MESSAGE ID, it is associated with the | ||||
*first* unacknowledged request. | ||||
6.4.2. UNSUBSCRIBE Response | 6.4.2. UNSUBSCRIBE Response | |||
Each UNSUBSCRIBE request generates exactly one UNSUBSCRIBE response | Each UNSUBSCRIBE request generates exactly one UNSUBSCRIBE response | |||
from the server. | from the server. | |||
An UNSUBSCRIBE response message contains with the standard DNS | An UNSUBSCRIBE response message begins with the standard DNS Session | |||
Session Signaling 4-byte header [I-D.ietf-dnsop-session-signal]. | Signaling 12-byte header [SessSig], possibly followed by one or more | |||
optional Modifier TLVs, such as a Retry Delay Modifier TLV. | ||||
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 | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
Figure 5 | ||||
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 | |||
UNSUBSCRIBE request. This is how the client knows which request is | UNSUBSCRIBE request. This is how the client knows which request is | |||
being responded to. | being responded to. | |||
In a response the DNS Header QR bit MUST be one. | An UNSUBSCRIBE response message MUST NOT contain a Session Signaling | |||
If the QR bit is not one the message is not a response. | Operation TLV. The Session Signaling Operation TLV is NOT copied | |||
from the UNSUBSCRIBE request. | ||||
The DNS Header Opcode field holds the Session Signaling Opcode value | ||||
(tentatively 6). | ||||
The Z bits MUST be zero on transmission, and MUST be silently ignored | ||||
on reception. | ||||
In the UNSUBSCRIBE response the RCODE indicates whether or not the | In the UNSUBSCRIBE response the RCODE indicates whether or not the | |||
unsubscribe request was successful. Supported RCODEs are as follows: | unsubscribe request was successful. Supported RCODEs are as follows: | |||
+------------+-------+----------------------------------------------+ | +------------+-------+----------------------------------------------+ | |||
| Mnemonic | Value | Description | | | Mnemonic | Value | Description | | |||
+------------+-------+----------------------------------------------+ | +------------+-------+----------------------------------------------+ | |||
| NOERROR | 0 | UNSUBSCRIBE successful. | | | NOERROR | 0 | UNSUBSCRIBE 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. | | |||
| NXDOMAIN | 3 | Specified subscription does not exist. | | ||||
| NOTIMP | 4 | Server does not recognize DNS Session | | | NOTIMP | 4 | Server does not recognize DNS Session | | |||
| | | Signaling Opcode. | | | | | Signaling Opcode. | | |||
| SSOPNOTIMP | 11 | UNSUBSCRIBE operation not supported. | | | SSOPNOTIMP | 11 | UNSUBSCRIBE operation not supported. | | |||
+------------+-------+----------------------------------------------+ | +------------+-------+----------------------------------------------+ | |||
UNSUBSCRIBE Response codes | UNSUBSCRIBE Response codes | |||
This document specifies only these RCODE values for UNSUBSCRIBE | This document specifies only these RCODE values for UNSUBSCRIBE | |||
Responses. Servers sending UNSUBSCRIBE Responses SHOULD use one of | Responses. Servers sending UNSUBSCRIBE Responses SHOULD use one of | |||
these values. However, future circumstances may create situations | these values. However, future circumstances may create situations | |||
skipping to change at page 25, line 20 ¶ | skipping to change at page 25, line 5 ¶ | |||
RCODE value. | RCODE value. | |||
Having being successfully revoked with a correctly-formatted | Having being successfully revoked with a correctly-formatted | |||
UNSUBSCRIBE message (resulting in a response with RCODE NOERROR) the | UNSUBSCRIBE message (resulting in a response with RCODE NOERROR) the | |||
previously referenced subscription is no longer active and the server | previously referenced subscription is no longer active and the server | |||
MAY discard the state associated with it immediately, or later, at | MAY discard the state associated with it immediately, or later, at | |||
the server's discretion. | the server's discretion. | |||
Nonzero RCODE values signal some kind of error. | Nonzero RCODE values signal some kind of error. | |||
RCODE value FORMERR indicates an incorrect MESSAGE ID or other | RCODE value FORMERR indicates a message format error. | |||
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. | RCODE values NOTIMP and SSOPNOTIMP should not occur in practice. | |||
A server would only generate NOTIMP if it did not support Session | A server would only generate NOTIMP if it did not support Session | |||
Signaling, and if the server does not support Session Signaling then | Signaling, and if the server does not support Session Signaling then | |||
it should not be possible for a client to have an active subscription | it should not be possible for a client to have an active subscription | |||
to cancel. | to cancel. | |||
Similarly, a server would only generate SSOPNOTIMP if it did not | Similarly, a server would only generate SSOPNOTIMP if it did not | |||
support Push Notifications, and if the server does not support Push | support Push Notifications, and if the server does not support Push | |||
Notifications then it should not be possible for a client to have an | Notifications then it should not be possible for a client to have an | |||
active subscription to cancel. | active subscription to cancel. | |||
All nonzero RCODE values indicate a serious problem with the client. | Nonzero RCODE values other than NXDOMAIN indicate a serious problem | |||
After sending an error response, the server SHOULD send a DNS Push | with the client. After sending an error response other than | |||
Notification Terminate Session operation TLV and then close the TCP | NXDOMAIN, the server SHOULD send a DNS Session Signaling Retry Delay | |||
connection, as described in the DNS Session Signaling specification | Operation TLV and then close the TCP connection, as described in the | |||
[I-D.ietf-dnsop-session-signal]. | DNS Session Signaling specification [SessSig]. | |||
6.5. DNS Session Signaling Push Notification RECONFIRM | 6.5. DNS Push Notification RECONFIRM | |||
Sometimes, particularly when used with a Hybrid Proxy | Sometimes, particularly when used with a Discovery Proxy [DisProx], a | |||
[I-D.ietf-dnssd-hybrid], a DNS Zone may contain stale data. When a | DNS Zone may contain stale data. When a client encounters data that | |||
client encounters data that it believe may be stale (e.g., an SRV | it believe may be stale (e.g., an SRV record referencing a target | |||
record referencing a target host+port that is not responding to | host+port that is not responding to connection requests) the client | |||
connection requests) the client can send a RECONFIRM message to | can send a RECONFIRM request to ask the server to re-verify that the | |||
request that the server re-verify that the data is still valid. For | data is still valid. For a Discovery Proxy, this causes it to issue | |||
a Hybrid Proxy, this causes it to issue new Multicast DNS requests to | new Multicast DNS requests to ascertain whether the target device is | |||
ascertain whether the target device is still present. For other | still present. For other types of DNS server, the RECONFIRM | |||
types of DNS server, the RECONFIRM operation is currently undefined | operation is currently undefined, and SHOULD result in a NOERROR | |||
and SHOULD be silently ignored. | response, but otherwise need not cause any action to occur. Frequent | |||
RECONFIRM operations may be a sign of network unreliability, or some | ||||
kind of misconfiguration, so RECONFIRM operations MAY be logged or | ||||
otherwise communicated to a human administrator to assist in | ||||
detecting, and remedying, such network problems. | ||||
A RECONFIRM request is formatted identically to a SUBSCRIBE request, | If, after receiving a valid RECONFIRM request, the server determines | |||
except that the TLV type is RECONFIRM (tentatively 67) instead of | that the disputed records are in fact no longer valid, then | |||
SUBSCRIBE. Additionally, QTYPE MUST NOT be the value ANY (255) and | subsequent DNS PUSH Messages will be generated to inform interested | |||
QCLASS MUST NOT be the value ANY (255). | clients. Thus, one client discovering that a previously-advertised | |||
device (like a network printer) is no longer present has the side | ||||
effect of informing all other interested clients that the device in | ||||
question is now gone. | ||||
Like all DNS Session Signaling [I-D.ietf-dnsop-session-signal] | 6.5.1. RECONFIRM Request | |||
requests, a RECONFIRM request MUST contain a unique MESSAGE ID, not | ||||
currently in use in this session. | ||||
A RECONFIRM request generates exactly one RECONFIRM response from the | A RECONFIRM request message begins with the standard DNS Session | |||
server, formatted identically to a SUBSCRIBE response, which echoes | Signaling 12-byte header [SessSig], followed by the RECONFIRM TLV. | |||
back the unique MESSAGE ID from the RECONFIRM request. | The SSOP-DATA for the the RECONFIRM TLV is as follows: | |||
In the RECONFIRM response the RCODE indicates whether or not the | 1 1 1 1 1 1 | |||
request was successful. Supported RCODEs are as follows: | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| | | ||||
\ NAME \ | ||||
\ \ | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| TYPE | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| CLASS | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| RDLEN | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| | | ||||
\ RDATA \ | ||||
\ \ | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
Figure 2 | ||||
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 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. | ||||
In the RECONFIRM TLV 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. | ||||
A RECONFIRM request MUST contain exactly one record. The RECONFIRM | ||||
TLV has no count field to specify more than one record. Since | ||||
RECONFIRM requests are sent over TCP, multiple RECONFIRM request | ||||
messages can be concatenated in a single TCP stream and packed | ||||
efficiently into TCP segments. | ||||
TYPE MUST NOT be the value ANY (255) and CLASS MUST NOT be the value | ||||
ANY (255). | ||||
DNS wildcarding is not supported. That is, a wildcard ("*") in a | ||||
RECONFIRM message matches only a literal wildcard character ("*") in | ||||
the zone, and nothing else. | ||||
Aliasing is not supported. That is, a CNAME in a RECONFIRM message | ||||
matches only a literal CNAME record in the zone, and nothing else. | ||||
6.5.2. RECONFIRM Response | ||||
Each RECONFIRM request generates exactly one RECONFIRM response from | ||||
the server. | ||||
A RECONFIRM response message begins with the standard DNS Session | ||||
Signaling 12-byte header [SessSig], 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 | ||||
RECONFIRM request. This is how the client knows which request is | ||||
being responded to. | ||||
A RECONFIRM response message MUST NOT contain a Session Signaling | ||||
Operation TLV. The Session Signaling Operation TLV is NOT copied | ||||
from the RECONFIRM request. | ||||
In the RECONFIRM response the RCODE confirms receipt of the | ||||
reconfirmation request. Supported RCODEs are as follows: | ||||
+------------+-------+----------------------------------------------+ | +------------+-------+----------------------------------------------+ | |||
| Mnemonic | Value | Description | | | Mnemonic | Value | Description | | |||
+------------+-------+----------------------------------------------+ | +------------+-------+----------------------------------------------+ | |||
| NOERROR | 0 | RECONFIRM successful. | | | 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 | | ||||
| | | resource exhaustion. | | ||||
| NXDOMAIN | 3 | NOT APPLICABLE. DNS Push Notification | | ||||
| | | servers MUST NOT return NXDOMAIN errors in | | ||||
| | | response to RECONFIRM requests. | | ||||
| NOTIMP | 4 | Server does not recognize DNS Session | | | NOTIMP | 4 | Server does not recognize DNS Session | | |||
| | | Signaling Opcode. | | | | | Signaling Opcode. | | |||
| REFUSED | 5 | Server refuses to process request for policy | | ||||
| | | or security reasons. | | ||||
| NOTAUTH | 9 | Server is not authoritative for the | | ||||
| | | requested name. | | ||||
| SSOPNOTIMP | 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. | |||
A correctly-formatted RECONFIRM message results in a response with | Nonzero RCODE values signal some kind of error. | |||
RCODE NOERROR. | ||||
Nonzero RCODE values signal some kind of error. If the server sends | RCODE value FORMERR indicates a message format error, for example | |||
a nonzero RCODE then it SHOULD append a Terminate modifier TLV | TYPE or CLASS being ANY (255). | |||
[I-D.ietf-dnsop-session-signal] to the response specifying a delay | ||||
before the client attempts this operation again. The RECOMMENDED | ||||
value for the delay is five minutes. For serious errors, after | ||||
sending the error response, the server SHOULD send a DNS Push | ||||
Notification Terminate Session operation TLV and then close the TCP | ||||
connection, as described in the DNS Session Signaling specification | ||||
[I-D.ietf-dnsop-session-signal]. | ||||
If, after receiving a valid RECONFIRM request, the server determines | RCODE value SERVFAIL indicates that the server is overloaded. | |||
that the records are in fact no longer valid, then subsequent DNS | ||||
PUSH Messages will be generated to inform interested clients. Thus, | RCODE values NOTIMP indicates that the server does not support | |||
one client discovering that a previously-advertised printer is no | Session Signaling, and Session Signaling is required for RECONFIRM | |||
longer present has the side effect of informing all other interested | requests. | |||
clients that the printer in question is now gone. | ||||
RCODE value REFUSED indicates that the server supports RECONFIRM | ||||
requests but is currently not configured to accept them from this | ||||
client. | ||||
RCODE value NOTAUTH indicates that the server is not authoritative | ||||
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 | ||||
to pass on the RECONFIRM request to the ultimate source of the | ||||
information, and in these cases the server should return NOERROR. | ||||
RCODE value SSOPNOTIMP indicates that the server does not support | ||||
RECONFIRM requests. | ||||
Similarly, a server would only generate SSOPNOTIMP if it did not | ||||
support Push Notifications, and if the server does not support Push | ||||
Notifications then it should not be possible for a client to have an | ||||
active subscription to cancel. | ||||
Nonzero RCODE values SERVFAIL, REFUSED and SSOPNOTIMP are benign from | ||||
the client's point of view. The client may log them to aid in | ||||
debugging, but otherwise they require no special action. | ||||
Nonzero RCODE values other than these three indicate a serious | ||||
problem with the client. After sending an error response other than | ||||
one of these three, the server SHOULD send a DNS Session Signaling | ||||
Retry Delay Operation TLV and then close the TCP connection, as | ||||
described in the DNS Session Signaling specification [SessSig]. | ||||
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 connection. 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 connection (by closing the connection) 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 connection via | |||
UNSUBSCRIBE, a client MAY close the connection immediately, or it may | UNSUBSCRIBE, a client MAY close the connection immediately, or it may | |||
keep it open if it anticipates performing further operations on that | keep it open if it anticipates performing further operations on that | |||
connection in the future. If a client wishes to keep an idle | connection in the future. If a client wishes to keep an idle | |||
connection open, it MUST continue to meet its keepalive obligations | connection open, it MUST respect the maximum idle time required by | |||
[I-D.ietf-dnsop-session-signal] or the server is entitled to close | the server [SessSig]. | |||
the connection (see below). | ||||
If a client plans to terminate one or more subscriptions on a | If a client plans to terminate one or more subscriptions on a | |||
connection and doesn't intend to keep that connection open, then as | connection and doesn't intend to keep that connection open, then as | |||
an efficiency optimization it MAY instead choose to simply close the | an efficiency optimization it MAY instead choose to simply close the | |||
connection, which implicitly terminates all subscriptions on that | connection, which implicitly terminates all subscriptions on that | |||
connection. This may occur because the client computer is being shut | connection. This may occur because the client computer is being shut | |||
down, is going to sleep, the application requiring the subscriptions | down, is going to sleep, the application requiring the subscriptions | |||
has terminated, or simply because the last active subscription on | has terminated, or simply because the last active subscription on | |||
that connection has been cancelled. | that connection has been cancelled. | |||
skipping to change at page 30, line 29 ¶ | skipping to change at page 32, line 33 ¶ | |||
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 connection. | |||
Use of TLS Session Resumption allows a new TLS connection to be set | Use of TLS Session Resumption allows a new TLS connection to be set | |||
up more quickly, but the client will still have to recreate any | up more quickly, but the client will still have to recreate any | |||
desired subscriptions. | 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 Service Name Registry | |||
[RFC6335][SN]. | ||||
This document defines three DNS Session Signaling TLV types: | This document defines three DNS Session Signaling TLV types: | |||
SUBSCRIBE with (tentative) value 64, PUSH with (tentative) value 65, | SUBSCRIBE with (tentative) value 0x40 (64), PUSH with (tentative) | |||
UNSUBSCRIBE with (tentative) value 66, and RECONFIRM with (tentative) | value 0x41 (65), UNSUBSCRIBE with (tentative) value 0x42 (66), and | |||
value 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, and Soraia Zlatkovic. | Shankar Rao, Markus Stenberg, Dave Thaler, and Soraia Zlatkovic. | |||
10. References | 10. References | |||
10.1. Normative References | 10.1. Normative References | |||
[I-D.ietf-dnsop-session-signal] | ||||
Bellis, R., Cheshire, S., Dickinson, J., Dickinson, S., | ||||
Mankin, A., and T. Pusateri, "DNS Session Signaling", | ||||
draft-ietf-dnsop-session-signal-00 (work in progress), | ||||
August 2016. | ||||
[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-18 (work in progress), | Version 1.3", draft-ietf-tls-tls13-18 (work in progress), | |||
October 2016. | October 2016. | |||
[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, | DOI 10.17487/RFC0768, August 1980, | |||
<http://www.rfc-editor.org/info/rfc768>. | <http://www.rfc-editor.org/info/rfc768>. | |||
[RFC0793] Postel, J., "Transmission Control Protocol", STD 7, | [RFC0793] Postel, J., "Transmission Control Protocol", STD 7, | |||
skipping to change at page 32, line 20 ¶ | skipping to change at page 34, line 15 ¶ | |||
[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, | DOI 10.17487/RFC5246, August 2008, | |||
<http://www.rfc-editor.org/info/rfc5246>. | <http://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, | DOI 10.17487/RFC6066, January 2011, | |||
<http://www.rfc-editor.org/info/rfc6066>. | <http://www.rfc-editor.org/info/rfc6066>. | |||
[RFC6335] Cotton, M., Eggert, L., Touch, J., Westerlund, M., and S. | ||||
Cheshire, "Internet Assigned Numbers Authority (IANA) | ||||
Procedures for the Management of the Service Name and | ||||
Transport Protocol Port Number Registry", BCP 165, | ||||
RFC 6335, DOI 10.17487/RFC6335, August 2011, | ||||
<http://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, | |||
April 2013, <http://www.rfc-editor.org/info/rfc6895>. | April 2013, <http://www.rfc-editor.org/info/rfc6895>. | |||
[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, <http://www.rfc-editor.org/info/rfc7673>. | 2015, <http://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, | |||
<http://www.rfc-editor.org/info/rfc7766>. | <http://www.rfc-editor.org/info/rfc7766>. | |||
[SessSig] Bellis, R., Cheshire, S., Dickinson, J., Dickinson, S., | ||||
Mankin, A., and T. Pusateri, "DNS Session Signaling", | ||||
draft-ietf-dnsop-session-signal-02 (work in progress), | ||||
March 2017. | ||||
[SN] "Service Name and Transport Protocol Port Number | ||||
Registry", <http://www.iana.org/assignments/ | ||||
service-names-port-numbers/>. | ||||
10.2. Informative References | 10.2. Informative References | |||
[DisProx] Cheshire, S., "Hybrid Unicast/Multicast DNS-Based Service | ||||
Discovery", draft-ietf-dnssd-hybrid-06 (work in progress), | ||||
March 2017. | ||||
[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-dnssd-hybrid] | ||||
Cheshire, S., "Hybrid Unicast/Multicast DNS-Based Service | ||||
Discovery", draft-ietf-dnssd-hybrid-03 (work in progress), | ||||
February 2016. | ||||
[I-D.sekar-dns-llq] | [I-D.sekar-dns-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] | [IPJ.9-4-TCPSYN] | |||
Eddy, W., "Defenses Against TCP SYN Flooding Attacks", The | Eddy, W., "Defenses Against TCP SYN Flooding Attacks", The | |||
Internet Protocol Journal, Cisco Systems, Volume 9, | Internet Protocol Journal, Cisco Systems, Volume 9, | |||
Number 4, December 2006. | Number 4, December 2006. | |||
[obs] "Observer Pattern", <https://en.wikipedia.org/wiki/ | [obs] "Observer Pattern", <https://en.wikipedia.org/wiki/ | |||
skipping to change at page 33, line 30 ¶ | skipping to change at page 35, line 40 ¶ | |||
[RFC4953] Touch, J., "Defending TCP Against Spoofing Attacks", | [RFC4953] Touch, J., "Defending TCP Against Spoofing Attacks", | |||
RFC 4953, DOI 10.17487/RFC4953, July 2007, | RFC 4953, DOI 10.17487/RFC4953, July 2007, | |||
<http://www.rfc-editor.org/info/rfc4953>. | <http://www.rfc-editor.org/info/rfc4953>. | |||
[RFC5077] Salowey, J., Zhou, H., Eronen, P., and H. Tschofenig, | [RFC5077] Salowey, J., Zhou, H., Eronen, P., and H. Tschofenig, | |||
"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, <http://www.rfc-editor.org/info/rfc5077>. | January 2008, <http://www.rfc-editor.org/info/rfc5077>. | |||
[RFC6281] Cheshire, S., Zhu, Z., Wakikawa, R., and L. Zhang, | ||||
"Understanding Apple's Back to My Mac (BTMM) Service", | ||||
RFC 6281, DOI 10.17487/RFC6281, June 2011, | ||||
<http://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, | DOI 10.17487/RFC6762, February 2013, | |||
<http://www.rfc-editor.org/info/rfc6762>. | <http://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, | |||
<http://www.rfc-editor.org/info/rfc6763>. | <http://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 | |||
End of changes. 86 change blocks. | ||||
394 lines changed or deleted | 460 lines changed or added | |||
This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |