draft-ietf-dnssd-push-10.txt | draft-ietf-dnssd-push-11.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: September 14, 2017 Apple Inc. | Expires: December 19, 2017 Apple Inc. | |||
March 13, 2017 | June 17, 2017 | |||
DNS Push Notifications | DNS Push Notifications | |||
draft-ietf-dnssd-push-10 | draft-ietf-dnssd-push-11 | |||
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 | the updated results when polled. But there exists no mechanism | |||
for a client to be asynchronously notified when these changes occur. | for a client to be asynchronously notified when these changes occur. | |||
This document defines a mechanism for a client to be notified | This document defines a mechanism for a client to be notified | |||
of such changes to DNS records, called DNS Push Notifications. | of such changes to DNS records, called DNS Push Notifications. | |||
skipping to change at page 1, line 37 ¶ | skipping to change at page 1, line 37 ¶ | |||
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 September 14, 2017. | This Internet-Draft will expire on December 19, 2017. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2017 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 . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
1.1. Requirements Language . . . . . . . . . . . . . . . . . . 3 | 1.1. Requirements Language . . . . . . . . . . . . . . . . . . 3 | |||
2. Motivation . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 2. Motivation . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
3. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 3. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
4. Transport . . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 4. Transport . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
5. State Considerations . . . . . . . . . . . . . . . . . . . . 8 | 5. State Considerations . . . . . . . . . . . . . . . . . . . . 7 | |||
6. Protocol Operation . . . . . . . . . . . . . . . . . . . . . 9 | 6. Protocol Operation . . . . . . . . . . . . . . . . . . . . . 8 | |||
6.1. Discovery . . . . . . . . . . . . . . . . . . . . . . . . 10 | 6.1. Discovery . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
6.2. DNS Push Notification SUBSCRIBE . . . . . . . . . . . . . 12 | 6.2. DNS Push Notification SUBSCRIBE . . . . . . . . . . . . . 11 | |||
6.2.1. SUBSCRIBE Request . . . . . . . . . . . . . . . . . . 13 | 6.2.1. SUBSCRIBE Request . . . . . . . . . . . . . . . . . . 12 | |||
6.2.2. SUBSCRIBE Response . . . . . . . . . . . . . . . . . 15 | 6.2.2. SUBSCRIBE Response . . . . . . . . . . . . . . . . . 15 | |||
6.3. DNS Push Notification Updates . . . . . . . . . . . . . . 18 | 6.3. DNS Push Notification Updates . . . . . . . . . . . . . . 18 | |||
6.3.1. PUSH Message . . . . . . . . . . . . . . . . . . . . 19 | 6.3.1. PUSH Message . . . . . . . . . . . . . . . . . . . . 19 | |||
6.3.2. PUSH Response . . . . . . . . . . . . . . . . . . . . 21 | 6.3.2. PUSH Response . . . . . . . . . . . . . . . . . . . . 22 | |||
6.4. DNS Push Notification UNSUBSCRIBE . . . . . . . . . . . . 22 | 6.4. DNS Push Notification UNSUBSCRIBE . . . . . . . . . . . . 23 | |||
6.4.1. UNSUBSCRIBE Request . . . . . . . . . . . . . . . . . 23 | 6.4.1. UNSUBSCRIBE Request . . . . . . . . . . . . . . . . . 24 | |||
6.4.2. UNSUBSCRIBE Response . . . . . . . . . . . . . . . . 24 | 6.4.2. UNSUBSCRIBE Response . . . . . . . . . . . . . . . . 26 | |||
6.5. DNS Push Notification RECONFIRM . . . . . . . . . . . . . 26 | 6.5. DNS Push Notification RECONFIRM . . . . . . . . . . . . . 28 | |||
6.5.1. RECONFIRM Request . . . . . . . . . . . . . . . . . . 26 | 6.5.1. RECONFIRM Request . . . . . . . . . . . . . . . . . . 29 | |||
6.5.2. RECONFIRM Response . . . . . . . . . . . . . . . . . 28 | 6.5.2. RECONFIRM Response . . . . . . . . . . . . . . . . . 31 | |||
6.6. Client-Initiated Termination . . . . . . . . . . . . . . 30 | 6.6. Client-Initiated Termination . . . . . . . . . . . . . . 33 | |||
7. Security Considerations . . . . . . . . . . . . . . . . . . . 31 | 7. Security Considerations . . . . . . . . . . . . . . . . . . . 34 | |||
7.1. Security Services . . . . . . . . . . . . . . . . . . . . 31 | 7.1. Security Services . . . . . . . . . . . . . . . . . . . . 34 | |||
7.2. TLS Name Authentication . . . . . . . . . . . . . . . . . 31 | 7.2. TLS Name Authentication . . . . . . . . . . . . . . . . . 34 | |||
7.3. TLS Compression . . . . . . . . . . . . . . . . . . . . . 32 | 7.3. TLS Compression . . . . . . . . . . . . . . . . . . . . . 35 | |||
7.4. TLS Session Resumption . . . . . . . . . . . . . . . . . 32 | 7.4. TLS Session Resumption . . . . . . . . . . . . . . . . . 35 | |||
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 32 | 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 35 | |||
9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 32 | 9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 36 | |||
10. References . . . . . . . . . . . . . . . . . . . . . . . . . 33 | 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 36 | |||
10.1. Normative References . . . . . . . . . . . . . . . . . . 33 | 10.1. Normative References . . . . . . . . . . . . . . . . . . 36 | |||
10.2. Informative References . . . . . . . . . . . . . . . . . 34 | 10.2. Informative References . . . . . . . . . . . . . . . . . 38 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 36 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 40 | |||
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 Discovery Proxy [DisProx] can also generate | mechanisms such as a Discovery Proxy [DisProx] can also generate | |||
changes to a DNS zone. This document specifies a protocol for DNS | changes to a DNS zone. This document specifies a protocol for DNS | |||
clients to subscribe to receive asynchronous notifications of changes | clients to subscribe to receive asynchronous notifications of changes | |||
to RRSets of interest. It is immediately relevant in the case of DNS | to RRSets of interest. It is immediately relevant in the case of DNS | |||
Service Discovery [RFC6763] but is not limited to that use case, and | Service Discovery [RFC6763] but is not limited to that use case, and | |||
provides a general DNS mechanism for DNS record change notifications. | provides a general DNS mechanism for DNS record change notifications. | |||
skipping to change at page 4, line 44 ¶ | skipping to change at page 4, line 14 ¶ | |||
UDP-based protocol, effectively replicating much of TCP's connection | UDP-based protocol, effectively replicating much of TCP's connection | |||
state management logic in user space, and creating its own poor | state management logic in user space, and creating its own poor | |||
imitations of existing TCP features like the three-way handshake, | imitations of existing TCP features like the three-way handshake, | |||
flow control, and reliability. | flow control, and reliability. | |||
This document builds on experience gained with the LLQ protocol, with | This document builds on experience gained with the LLQ protocol, with | |||
an improved design. Instead of using UDP, this specification uses | an improved design. Instead of using UDP, this specification uses | |||
TCP, and therefore doesn't need to reinvent existing TCP | TCP, and therefore doesn't need to reinvent existing TCP | |||
functionality. Using TCP also gives long-lived low-traffic | functionality. Using TCP also gives long-lived low-traffic | |||
connections better longevity through NAT gateways without resorting | connections better longevity through NAT gateways without resorting | |||
to excessive keepalive traffic [SessSig]. Instead of inventing a new | to excessive keepalive traffic. Instead of inventing a new | |||
vocabulary of messages to communicate DNS zone changes as LLQ did, | vocabulary of messages to communicate DNS zone changes as LLQ did, | |||
this specification adopts the syntax and semantics of DNS Update | this specification adopts the syntax and semantics of DNS Update | |||
messages [RFC2136]. | messages [RFC2136]. | |||
3. Overview | 3. Overview | |||
The existing DNS Update protocol [RFC2136] provides a mechanism for | The existing DNS Update protocol [RFC2136] provides a mechanism for | |||
clients to add or delete individual resource records (RRs) or entire | clients to add or delete individual resource records (RRs) or entire | |||
resource record sets (RRSets) on the zone's server. | resource record sets (RRSets) on the zone's server. | |||
This specification adopts a simplified subset of these existing | This specification adopts a simplified subset of these existing | |||
syntax and semantics, and uses them for DNS Push Notification | syntax and semantics, and uses them for DNS Push Notification | |||
messages going in the opposite direction, from server to client, to | messages going in the opposite direction, from server to client, to | |||
communicate changes to a zone. The client subscribes for Push | communicate changes to a zone. The client subscribes for Push | |||
Notifications by connecting to the server and sending DNS message(s) | Notifications by connecting to the server and sending DNS message(s) | |||
indicating the RRSet(s) of interest. When the client loses interest | indicating the RRSet(s) of interest. When the client loses interest | |||
in updates to these records, it unsubscribes. | in updates to these records, it unsubscribes. | |||
The DNS Push Notification server for a zone is any server capable | The DNS Push Notification server for a zone is any server capable | |||
of generating the correct change notifications for a name. | of generating the correct change notifications for a name. | |||
It may be a master, slave, or stealth name server [RFC1996]. | It may be a master, slave, or stealth name server [RFC7719]. | |||
Consequently, the "_dns-push-tls._tcp.<zone>" SRV record for a | Consequently, the "_dns-push-tls._tcp.<zone>" SRV record for a | |||
zone MAY reference the same target host and port as that zone's | zone MAY reference the same target host and port as that zone's | |||
"_dns-update-tls._tcp.<zone>" SRV record. When the same target host | "_dns-update-tls._tcp.<zone>" SRV record. When the same target host | |||
and port is offered for both DNS Updates and DNS Push Notifications, | and port is offered for both DNS Updates and DNS Push Notifications, | |||
a client MAY use a single TCP connection to that server for both DNS | a client MAY use a single TCP connection to that server for both DNS | |||
Updates and DNS Push Notification Queries. | Updates and DNS Push Notification Queries. | |||
Supporting DNS Updates and DNS Push Notifications on the same server | Supporting DNS Updates and DNS Push Notifications on the same server | |||
is OPTIONAL. A DNS Push Notification server does NOT also have to | is OPTIONAL. A DNS Push Notification server does NOT also have to | |||
support DNS Update. | support DNS Update. | |||
DNS Updates and DNS Push Notifications may be handled on different | DNS Updates and DNS Push Notifications may be handled on different | |||
ports on the same target host, in which case they are not considered | ports on the same target host, in which case they are not considered | |||
to be the "same server" for the purposes of this specification, and | to be the "same server" for the purposes of this specification, and | |||
communications with these two ports are handled independently. | communications with these two ports are handled independently. | |||
Standard DNS Queries MAY be sent over a DNS Push Notification | Standard DNS Queries MAY be sent over a DNS Push Notification | |||
connection, provided that these are queries for names falling within | connection, provided that these are queries for names falling within | |||
the server's zone (the <zone> in the "_dns-push-tls._tcp.<zone>" SRV | the server's zone (the <zone> in the "_dns-push-tls._tcp.<zone>" SRV | |||
record). The RD (Recursion Desired) bit MUST be zero. | record). The RD (Recursion Desired) bit MUST be zero. If a query is | |||
received with the RD bit set, matching records for names falling | ||||
within the server's zones should be returned with the RA (Recursion | ||||
Available) bit clear. If the query is for a name not in the server's | ||||
zone, an error with RCODE NOTAUTH (Not Authoritative) should be | ||||
returned. | ||||
DNS Push Notification clients are NOT required to implement DNS | DNS Push Notification clients are NOT required to implement DNS | |||
Update Prerequisite processing. Prerequisites are used to perform | Update Prerequisite processing. Prerequisites are used to perform | |||
tentative atomic test-and-set type operations when a client updates | tentative atomic test-and-set type operations when a client updates | |||
records on a server, and that concept has no applicability when it | records on a server, and that concept has no applicability when it | |||
comes to an authoritative server informing a client of changes to DNS | comes to an authoritative server 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". If messages are received for a class other than | |||
"IN", and that class is not supported, an error with RCODE NOTIMPL | ||||
(Not Implemented) should be returned. | ||||
DNS Push Notifications impose less load on the responding server than | DNS Push Notifications impose less load on the responding server than | |||
rapid polling would, but Push Notifications do still have a cost, so | rapid polling would, but Push Notifications do still have a cost, so | |||
DNS Push Notification clients MUST NOT recklessly create an excessive | DNS Push Notification clients must not recklessly create an excessive | |||
number of Push Notification subscriptions. A subscription SHOULD | number of Push Notification subscriptions. A subscription should | |||
only be active when there is a valid reason to need live data (for | 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 | example, an on-screen display is currently showing the results to the | |||
user) and the subscription SHOULD be cancelled as soon as the need | user) and the subscription SHOULD be cancelled as soon as the need | |||
for that data ends (for example, when the user dismisses that | for that data ends (for example, when the user dismisses that | |||
display). Implementations MAY want to implement idle timeouts, so | display). Implementations MAY want to implement idle timeouts, so | |||
that if the user ceases interacting with the device, the display | that if the user ceases interacting with the device, the display | |||
showing the result of the DNS Push Notification subscription is | showing the result of the DNS Push Notification subscription is | |||
automatically dismissed after a certain period of inactivity. For | automatically dismissed after a certain period of inactivity. For | |||
example, if a user presses the "Print" button on their smartphone, | example, if a user presses the "Print" button on their smartphone, | |||
and then leaves the phone showing the printer discovery screen until | and then leaves the phone showing the printer discovery screen until | |||
the phone goes to sleep, then the printer discovery screen should be | the phone goes to sleep, then the printer discovery screen should be | |||
automatically dismissed as the device goes to sleep. If the user | automatically dismissed as the device goes to sleep. If the user | |||
does still intend to print, this will require them to press the | does still intend to print, this will require them to press the | |||
"Print" button again when they wake their phone up. | "Print" button again when they wake their phone up. | |||
A DNS Push Notification client MUST NOT routinely keep a DNS Push | A DNS Push Notification client must not routinely keep a DNS Push | |||
Notification subscription active 24 hours a day, 7 days a week, just | 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 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 | 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 | 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 | that there is no need to pre-load a "warm" list in memory just in | |||
case it might be needed later. | case it might be needed later. | |||
Generally, as described in the DNS Session Signaling specification | Generally, as described in the DNS Session Signaling specification | |||
[SessSig], a client MUST NOT keep a connection to a server open | [SessSig], a client must not keep a connection to a server open | |||
indefinitely if it has no subscriptions (or other operations) active | indefinitely if it has no subscriptions (or other operations) active | |||
on that connection. A client MAY close a connection as soon as it | 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 | becomes idle, and then if needed in the future, open a new connection | |||
when required. Alternatively, a client MAY speculatively keep an | when required. Alternatively, a client MAY speculatively keep an | |||
idle connection open for some time, subject to the constraint that it | 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 | MUST NOT keep a connection open that has been idle for more than the | |||
session's idle timeout (15 seconds by default). | 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 | |||
over TCP. | over TCP, see RFC 7858 [RFC7858]. | |||
Connection setup over TCP ensures return reachability and alleviates | Connection setup over TCP ensures return reachability and alleviates | |||
concerns of state overload at the server through anonymous | concerns of state overload at the server through anonymous | |||
subscriptions. All subscribers are guaranteed to be reachable by the | subscriptions. All subscribers are guaranteed to be reachable by the | |||
server by virtue of the TCP three-way handshake. Flooding attacks | server by virtue of the TCP three-way handshake. Flooding attacks | |||
are possible with any protocol, and a benefit of TCP is that there | are possible with any protocol, and a benefit of TCP is that there | |||
are already established industry best practices to guard against SYN | are already established industry best practices to guard against SYN | |||
flooding and similar attacks [IPJ.9-4-TCPSYN] [RFC4953]. | flooding and similar attacks [IPJ.9-4-TCPSYN] [RFC4953]. | |||
Use of TCP also allows DNS Push Notifications to take advantage of | Use of TCP also allows DNS Push Notifications to take advantage of | |||
skipping to change at page 7, line 38 ¶ | skipping to change at page 7, line 5 ¶ | |||
[I-D.dukkipati-tcpm-tcp-loss-probe], and so on. | [I-D.dukkipati-tcpm-tcp-loss-probe], and so on. | |||
Transport Layer Security (TLS) [RFC5246] is well understood and | Transport Layer Security (TLS) [RFC5246] is well understood and | |||
deployed across many protocols running over TCP. It is designed to | deployed across many protocols running over TCP. It is designed to | |||
prevent eavesdropping, tampering, or message forgery. TLS is | prevent eavesdropping, tampering, or message forgery. TLS is | |||
REQUIRED for every connection between a client subscriber and server | REQUIRED for every connection between a client subscriber and server | |||
in this protocol specification. Additional security measures such as | in this protocol specification. Additional security measures such as | |||
client authentication during TLS negotiation MAY also be employed to | client authentication during TLS negotiation MAY also be employed to | |||
increase the trust relationship between client and server. | increase the trust relationship between client and server. | |||
Additional authentication of the SRV target using DNSSEC verification | ||||
and DANE TLSA records [RFC7673] is strongly encouraged. See below in | ||||
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 subscription is individually accepted or rejected. Servers may | each subscription is individually accepted or rejected. Servers may | |||
employ various techniques to limit subscriptions to a manageable | employ various techniques to limit subscriptions to a manageable | |||
level. Correspondingly, the client is free to establish simultaneous | level. Correspondingly, the client is free to establish simultaneous | |||
skipping to change at page 9, line 15 ¶ | skipping to change at page 8, line 15 ¶ | |||
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 [SessSig]. | and makes use of DNS Session Signaling [SessSig]. | |||
For details of the DNS Session Signaling message format refer to the | For details of the DNS Session Signaling message format refer to the | |||
DNS Session Signaling specification [SessSig]. Those details are not | DNS Session Signaling specification [SessSig]. Those details are not | |||
repeated here. | 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 SHOULD 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 Keepalive operation to request a session timeout or | Session Signaling Keepalive operation to request a session timeout or | |||
keepalive interval longer than the the 15-second defaults, but this | keepalive interval longer than the the 15-second defaults, but this | |||
is NOT REQUIRED. A DNS Push Notification client MAY issue other | is not required. A DNS Push Notification client MAY issue other | |||
requests on the connection first, and only issue a DNS Session | requests on the connection first, and only issue a DNS Session | |||
Signaling Keepalive operation later if it determines that to be | Signaling Keepalive operation later if it determines that to be | |||
necessary. | 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 | |||
skipping to change at page 10, line 15 ¶ | skipping to change at page 9, line 15 ¶ | |||
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 its | 1. The client begins the discovery by sending a DNS query to its | |||
local resolver, with record type SOA [RFC1035], for the domain | local resolver, with record type SOA [RFC1035] for the record to | |||
name to which it wishes to subscribe. | which it wishes to subscribe. As an example, if it wishes to | |||
subscribe to PTR records with the name | ||||
_printers._tcp.foo.example.com, it sends an SOA query for | ||||
_printers._tcp.foo.example.com. The goal is to determine the | ||||
authoritative server for foo.example.com. | ||||
2. If the SOA record exists, it MUST be returned in the Answer | 2. If the SOA record exists as exactly specified in the query, it is | |||
Section of the response. If not, the local resolver SHOULD | expected to be returned in the Answer section with a NOERROR | |||
include the SOA record for the zone of the requested name in the | response code. If the exact SOA record does not exist, the | |||
Authority Section. | client may get back a NOERROR/NODATA response or it may get back | |||
a NXDOMAIN/Name Error response. This depends on the resolver | ||||
implementation and whether the domain exists. The client is | ||||
looking for an SOA record to be returned in either the Answer | ||||
section or the Authority section with a NOERROR response code. | ||||
If the client receives an NXDOMAIN/Name Error response code, it | ||||
should strip the leading label from the query name and if the | ||||
resulting name has at least one label in it, the client should | ||||
send a new SOA query, repeating this until a NOERROR response | ||||
code is received or the query name is empty. In the case of an | ||||
empty name, the client may retry the operation at a later time, | ||||
of the client's choosing, such after a change in network | ||||
attachment. | ||||
3. If no SOA record is returned, the client then strips off the | 3. In the example above, if an SOA record query is sent for | |||
leading label from the requested name. If the resulting name has | _printers._tcp.foo.example.com and an NXDOMAIN/Name Error is | |||
at least one label in it, the client sends a new SOA query and | returned with an SOA record in the Authority section for | |||
processing continues at step 2 above. If the resulting name is | foo.example.com, the client should strip the leading label and | |||
empty (the root label) then this is a network configuration error | query an SOA record for _tcp.foo.example.com. If a NOERROR/ | |||
and the client gives up. The client MAY retry the operation at a | NODATA response is received with an SOA record in the Authority | |||
later time, of the client's choosing, such after a change in | section for foo.example.com, this is sufficent. If an NXDOMAIN/ | |||
network attachment. | Name Error response is received, the client should again strip | |||
the leading label and query an SOA record for foo.example.com. | ||||
If the foo.example.com domain exists, this should result in a | ||||
NOERROR response with the SOA record in the Answer section. If | ||||
the domain foo.example.com does not exist, the response will | ||||
likely be an NXDOMAIN/Name Error with an SOA record for | ||||
example.com in the Authority section. This means the subdomain | ||||
foo.example.com has not been properly delegated by example.com. | ||||
4. Once the SOA is known (either by virtue of being seen in the | 4. If a NOERROR/NODATA response is received but contains no SOA in | |||
the Authority section, the client could try stripping the leading | ||||
label and issuing another SOA query. Additional information | ||||
about negative responses can be found in Section 2 of [RFC2308]. | ||||
5. Once the SOA is known (either by virtue of being seen in the | ||||
Answer Section, or in the Authority Section), the client sends a | Answer Section, or in the Authority Section), the client sends a | |||
DNS query with type SRV [RFC2782] for the record name | DNS query with type SRV [RFC2782] for the record name | |||
"_dns-push-tls._tcp.<zone>", where <zone> is the owner name of | "_dns-push-tls._tcp.<zone>", where <zone> is the owner name of | |||
the discovered SOA record. | the discovered SOA record. | |||
5. If the zone in question does not offer DNS Push Notifications | 6. For implementors of this specification, an authoritative answer | |||
then SRV record MUST NOT exist and the SRV query will return a | for that SRV record, and only such an answer, will determine | |||
negative answer. | whether the zone supports DNS Push Notifications. | |||
6. If the zone in question is set up to offer DNS Push Notifications | 7. If the SRV record does exist, the SRV "target" contains the name | |||
then this SRV record MUST exist. The SRV "target" contains the | of the server providing DNS Push Notifications for the zone. The | |||
name of the server providing DNS Push Notifications for the zone. | port number on which to contact the server is in the SRV record | |||
The port number on which to contact the server is in the SRV | "port" field. The address(es) of the target host MAY be included | |||
record "port" field. The address(es) of the target host MAY be | in the Additional Section, however, the address records SHOULD be | |||
included in the Additional Section, however, the address records | authenticated before use as described below in Section 7.2 and | |||
SHOULD be authenticated before use as described below in | [RFC7673]. | |||
Section 7.2 [RFC7673]. | ||||
7. More than one SRV record may be returned. In this case, the | 8. More than one SRV record may be returned. In this case, the | |||
"priority" and "weight" values in the returned SRV records are | "priority" and "weight" values in the returned SRV records are | |||
used to determine the order in which to contact the servers for | used to determine the order in which to contact the servers for | |||
subscription requests. As described in the SRV specification | subscription requests. As described in the SRV specification | |||
[RFC2782], the server with the lowest "priority" is first | [RFC2782], the server with the lowest "priority" is first | |||
contacted. If more than one server has the same "priority", the | contacted. If more than one server has the same "priority", the | |||
"weight" indicates the weighted probability that the client | "weight" indicates the weighted probability that the client | |||
should contact that server. Higher weights have higher | should contact that server. Higher weights have higher | |||
probabilities of being selected. If a server is not reachable or | probabilities of being selected. If a server is not reachable or | |||
is not willing to accept a subscription request, then a | is not willing to accept a subscription request, then a | |||
subsequent server is to be contacted. | subsequent server is to be contacted. | |||
Each time a client makes a new DNS Push Notification subscription | Each time a client makes a new DNS Push Notification subscription | |||
connection, it SHOULD repeat the discovery process in order to | 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. | |||
However, the client device MUST respect the DNS TTL values on records | ||||
Note that this repeated discovery step is typically very fast and | it receives, and store them in its local cache with this lifetime. | |||
typically results in no queries on the network. The client device | This means that, as long as the DNS TTL values on the authoritative | |||
MUST respect the DNS TTL values on records it receives, and store | records were set to reasonable values, repeated application of this | |||
them in its local cache with this lifetime. This means that, as long | discovery process can be completed nearly instantaneously by the | |||
as the DNS TTL values on the authoritative records were set to | client, using only locally-stored cached data. | |||
reasonable values, repeated application of this discovery process can | ||||
be completed nearly instantaneously by the client, using only | ||||
locally-stored cached data. | ||||
6.2. DNS Push Notification SUBSCRIBE | 6.2. DNS Push Notification SUBSCRIBE | |||
After connecting, and requesting a longer idle timeout and/or | After connecting, and requesting a longer idle timeout and/or | |||
keepalive interval if necessary, a DNS Push Notification client then | keepalive interval if necessary, a DNS Push Notification client then | |||
indicates its desire to receive DNS Push Notifications for a given | indicates its desire to receive DNS Push Notifications for a given | |||
domain name by sending a SUBSCRIBE request over the established TLS | domain name by sending a SUBSCRIBE request over the established TLS | |||
connection to the server. A SUBSCRIBE request is encoded in a DNS | connection to the server. A SUBSCRIBE request is encoded in a DNS | |||
Session Signaling [SessSig] message. This specification defines a | Session Signaling [SessSig] message. This specification defines a | |||
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 0x40). | Requests/Responses (tentatively Session Signaling Type Code 0x40). | |||
A server MUST NOT initiate a SUBSCRIBE request. | The entity that initiates a SUBSCRIBE request is by definition the | |||
client. A server should not send a SUBSCRIBE request over an | ||||
existing connection from a client. If a server does send a SUBSCRIBE | ||||
request over the connection initiated by a client, it is an error and | ||||
the client should acknowledge the request with the error response | ||||
RCODE NOTAUTH (Not Authoritative). | ||||
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 12-byte header [SessSig], followed by the SUBSCRIBE TLV. | Signaling 12-byte header [SessSig], followed by the SUBSCRIBE TLV. A | |||
The SSOP-DATA for the the SUBSCRIBE TLV is as follows: | SUBSCRIBE request message is illustrated below: | |||
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 | | |||
\ NAME \ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | |||
\ \ | |QR| Opcode | Z | RCODE | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | |||
| TYPE | | | QDCOUNT (MUST BE ZERO) | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | |||
| CLASS | | | ANCOUNT (MUST BE ZERO) | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | |||
| NSCOUNT (MUST BE ZERO) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| ARCOUNT (MUST BE ZERO) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| SSOP-TYPE = SUBSCRIBE (tentatively 0x40) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| SSOP-LENGTH (number of octets in SSOP-DATA) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | ||||
| | \ | ||||
\ NAME \ | | ||||
\ \ | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > SSOP-DATA | ||||
| TYPE | | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | ||||
| 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 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 the SUBSCRIBE TLV the SSOP-TYPE is SUBSCRIBE (tentatively 0x40). | The other header fields MUST be set as described in the DNS Session | |||
The SSOP-LENGTH is the length of the SSOP-DATA that follows, which | Signaling specification [SessSig]. The DNS Opcode is the Session | |||
specifies the name, type, and class of the record(s) being sought. | Signaling Opcode (tentatively 6). The four count fields MUST be | |||
empty, and the corresponding four sections MUST be empty (i.e., | ||||
absent). | ||||
A SUBSCRIBE request MUST contain exactly one question. The SUBSCRIBE | The SSOP-TYPE is SUBSCRIBE (tentatively 0x40). The SSOP-LENGTH is | |||
TLV has no QDCOUNT field to specify more than one question. Since | the length of the SSOP-DATA that follows, which specifies the name, | |||
SUBSCRIBE requests are sent over TCP, multiple SUBSCRIBE request | type, and class of the record(s) being sought. | |||
messages can be concatenated in a single TCP stream and packed | ||||
efficiently into TCP segments. | The SSOP-DATA for a SUBSCRIBE request MUST contain exactly one | |||
question. The SSOP-DATA for a SUBSCRIBE request has no QDCOUNT field | ||||
to specify more than one question. Since SUBSCRIBE requests are sent | ||||
over TCP, multiple SUBSCRIBE request messages can be concatenated in | ||||
a single TCP stream and packed efficiently into TCP segments. | ||||
If accepted, the subscription will stay in effect until the client | If accepted, the subscription will stay in effect until the client | |||
cancels the subscription using UNSUBSCRIBE or until the connection | cancels the subscription using UNSUBSCRIBE or until the 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 NAME, TYPE and | MUST NOT send a SUBSCRIBE message that duplicates the NAME, TYPE and | |||
CLASS of an existing active subscription on that TLS/TCP connection. | CLASS of an existing active subscription on that TLS/TCP connection. | |||
For the purpose of this matching, the established DNS case- | For the purpose of this matching, the established DNS 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 | |||
immediately terminate the connection with a TCP RST (or equivalent | terminate the connection with a TCP RST (or equivalent for other | |||
for other protocols). | protocols). | |||
DNS wildcarding is not supported. That is, a wildcard ("*") in a | DNS wildcarding is not supported. That is, a wildcard ("*") in a | |||
SUBSCRIBE message matches only a literal wildcard character ("*") in | SUBSCRIBE message matches only a literal wildcard character ("*") in | |||
the zone, and nothing else. | the zone, and nothing else. | |||
Aliasing is not supported. That is, a CNAME in a SUBSCRIBE message | Aliasing is not supported. That is, a CNAME in a SUBSCRIBE message | |||
matches only a literal CNAME record in the zone, and nothing else. | matches only a literal CNAME record in the zone, and nothing else. | |||
A client may SUBSCRIBE to records that are unknown to the server at | A client may SUBSCRIBE to records that are unknown to the server at | |||
the time of the request (providing that the name falls within one of | the time of the request (providing that the name falls within one of | |||
skipping to change at page 14, line 30 ¶ | skipping to change at page 14, line 9 ¶ | |||
If neither TYPE nor CLASS 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 NAME, TYPE and CLASS. If one | subscription to changes for the given NAME, TYPE and CLASS. If one | |||
or both of TYPE or CLASS are ANY (255) then this subscription matches | or both of TYPE or CLASS are ANY (255) then this subscription 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, where 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, TYPE and CLASS 255 should be | When used in conjunction with SUBSCRIBE, TYPE and CLASS 255 should be | |||
interpreted to mean "ALL", not "ANY". After accepting a subscription | interpreted to mean "ALL", not "ANY". After accepting a subscription | |||
where one or both of TYPE or CLASS are 255, the server MUST send Push | where one or both of TYPE or CLASS are 255, the server MUST send Push | |||
Notification Updates for ALL record changes that match the | Notification Updates for ALL record changes that match the | |||
subscription, not just some of them. | subscription, not just some of them. | |||
6.2.2. SUBSCRIBE Response | 6.2.2. SUBSCRIBE Response | |||
skipping to change at page 15, line 31 ¶ | skipping to change at page 15, line 31 ¶ | |||
In the SUBSCRIBE response the RCODE indicates whether or not the | In the SUBSCRIBE response the RCODE indicates whether or not the | |||
subscription was accepted. Supported RCODEs are as follows: | subscription was accepted. Supported RCODEs are as follows: | |||
+------------+-------+----------------------------------------------+ | +------------+-------+----------------------------------------------+ | |||
| Mnemonic | Value | Description | | | Mnemonic | Value | Description | | |||
+------------+-------+----------------------------------------------+ | +------------+-------+----------------------------------------------+ | |||
| NOERROR | 0 | SUBSCRIBE successful. | | | NOERROR | 0 | SUBSCRIBE successful. | | |||
| FORMERR | 1 | Server failed to process request due to a | | | FORMERR | 1 | Server failed to process request due to a | | |||
| | | malformed request. | | | | | malformed request. | | |||
| SERVFAIL | 2 | Server failed to process request due to | | | SERVFAIL | 2 | Server failed to process request due to a | | |||
| | | resource exhaustion. | | | | | problem with the server. | | |||
| NXDOMAIN | 3 | NOT APPLICABLE. DNS Push Notification | | | NXDOMAIN | 3 | NOT APPLICABLE. DNS Push Notification | | |||
| | | servers MUST NOT return NXDOMAIN errors in | | | | | servers MUST NOT return NXDOMAIN errors in | | |||
| | | response to SUBSCRIBE requests. | | | | | response to SUBSCRIBE 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 | | | REFUSED | 5 | Server refuses to process request for policy | | |||
| | | or security reasons. | | | | | or security reasons. | | |||
| NOTAUTH | 9 | Server is not authoritative for the | | | NOTAUTH | 9 | Server is not authoritative for the | | |||
| | | requested name. | | | | | requested name. | | |||
| SSOPNOTIMP | 11 | SUBSCRIBE operation not supported. | | | SSOPNOTIMP | 11 | SUBSCRIBE operation not supported. | | |||
skipping to change at page 16, line 6 ¶ | skipping to change at page 16, line 6 ¶ | |||
SUBSCRIBE Response codes | SUBSCRIBE Response codes | |||
This document specifies only these RCODE values for SUBSCRIBE | This document specifies only these RCODE values for SUBSCRIBE | |||
Responses. Servers sending SUBSCRIBE Responses SHOULD use one of | Responses. Servers sending SUBSCRIBE Responses SHOULD use one of | |||
these values. However, future circumstances may create situations | these values. However, future circumstances may create situations | |||
where other RCODE values are appropriate in SUBSCRIBE Responses, so | where other RCODE values are appropriate in SUBSCRIBE Responses, so | |||
clients MUST be prepared to accept SUBSCRIBE Responses with any RCODE | clients MUST be prepared to accept SUBSCRIBE Responses with any RCODE | |||
value. | value. | |||
If the server sends a nonzero RCODE in the SUBSCRIBE response, either | If the server sends a nonzero RCODE in the SUBSCRIBE response, either | |||
the client is (at least partially) misconfigured or the server | the client is (at least partially) misconfigured, the server | |||
resources are exhausted. In either case, the client shouldn't retry | resources are exhausted, or there is some other unknown failure on | |||
the subscription right away. Either end can terminate the | the server. In any case, the client shouldn't retry the subscription | |||
connection, but the client may want to try this subscription again or | right away. Either end can terminate the connection, but the client | |||
it may have other successful subscriptions that it doesn't want to | may want to try this subscription again or it may have other | |||
abandon. If the server sends a nonzero RCODE then it SHOULD append a | successful subscriptions that it doesn't want to abandon. If the | |||
Retry Delay Modifier TLV [SessSig] to the response specifying a delay | server sends a nonzero RCODE then it SHOULD append a Retry Delay | |||
before the client attempts this operation again. Recommended values | Modifier TLV [SessSig] to the response specifying a delay before the | |||
for the delay for different RCODE values are given below: | client attempts this operation again. Recommended values for the | |||
delay for different RCODE values 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 reduce | implementer. A value of five minutes is RECOMMENDED, to reduce | |||
the risk of high load from defective clients. | the risk of high load from defective clients. | |||
For RCODE = 2 (SERVFAIL), which occurs due to resource exhaustion, | For RCODE = 2 (SERVFAIL) the delay should be chosen according to | |||
the delay should be chosen according to the level of server | the level of server overload and the anticipated duration of that | |||
overload and the anticipated duration of that overload. By | overload. By default, a value of one minute is RECOMMENDED. If a | |||
default, a value of one minute is RECOMMENDED. | more serious server failure occurs, the delay may be longer in | |||
accordance with the specific problem encountered. | ||||
For RCODE = 4 (NOTIMP), which occurs on a server that doesn't | For RCODE = 4 (NOTIMP), which occurs on a server that doesn't | |||
implement DNS Session Signaling [SessSig], it is unlikely that the | implement DNS Session Signaling [SessSig], it is unlikely that the | |||
server will begin supporting DNS Session Signaling in the next few | server will begin supporting DNS Session Signaling in the next few | |||
minutes, so the retry delay SHOULD be one hour. | minutes, so the retry delay SHOULD be 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. | |||
skipping to change at page 17, line 23 ¶ | skipping to change at page 17, line 23 ¶ | |||
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 Retry Delay | 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 asserting the client close the TCP connection, as | |||
DNS Session Signaling specification [SessSig]. Clients MUST | described in the DNS Session Signaling specification [SessSig]. | |||
correctly handle both cases. | Clients MUST correctly handle both cases. | |||
6.3. DNS Push Notification Updates | 6.3. DNS Push Notification Updates | |||
Once a subscription has been successfully established, the server | Once a subscription has been successfully established, the server | |||
generates PUSH messages to send to the client as appropriate. In the | generates PUSH messages to send to the client as appropriate. In the | |||
case that the answer set was non-empty at the moment the subscription | case that the answer set was non-empty at the moment the subscription | |||
was established, an initial PUSH message will be sent immediately | was established, an initial PUSH message will be sent immediately | |||
following the SUBSCRIBE Response. Subsequent changes to the answer | following the SUBSCRIBE Response. Subsequent changes to the answer | |||
set are then communicated to the client in subsequent PUSH messages. | set are then communicated to the client in subsequent PUSH messages. | |||
6.3.1. PUSH Message | 6.3.1. PUSH Message | |||
A PUSH message begins with the standard DNS Session Signaling 12-byte | A PUSH message begins with the standard DNS Session Signaling 12-byte | |||
header [SessSig], followed by the PUSH TLV. | header [SessSig], followed by the PUSH TLV. A PUSH message is | |||
illustrated below: | ||||
1 1 1 1 1 1 | ||||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| MESSAGE ID | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
|QR| Opcode | Z | RCODE | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| QDCOUNT (MUST BE ZERO) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| ANCOUNT (MUST BE ZERO) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| NSCOUNT (MUST BE ZERO) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| ARCOUNT (MUST BE ZERO) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| SSOP-TYPE = PUSH (tentatively 0x42) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| SSOP-LENGTH (number of octets in SSOP-DATA) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | ||||
\ NAME \ \ | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | ||||
| TYPE | | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | ||||
| CLASS | | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | ||||
| RDLEN | | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | ||||
\ RDATA \ | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > SSOP-DATA | ||||
\ NAME \ | | ||||
+--+--+--+--+--+--+- | | | ||||
| TYPE Repeated | | | ||||
+--+--+--+--+--+--+- | | | ||||
| CLASS As | | | ||||
+--+--+--+--+--+--+- | | | ||||
| RDLEN Necessary | | | ||||
+--+--+--+--+--+--+- | | | ||||
\ RDATA \ / | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | ||||
Figure 2 | ||||
The MESSAGE ID field MUST be set to a unique value, that the server | The MESSAGE ID field MUST be set to a unique value, that the server | |||
is not currently using for any other active outgoing request that it | is not currently using for any other active outgoing request that it | |||
has sent on this connection. The MESSAGE ID in the outgoing PUSH | 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 is selected by the server and has no relationship to the | |||
MESSAGE ID in any of the client subscriptions it may relate to. In | 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 | the PUSH response the client MUST echo back the MESSAGE ID value | |||
unchanged. | unchanged. | |||
In the PUSH TLV the SSOP-TYPE is PUSH (tentatively 0x41). The SSOP- | The other header fields MUST be set as described in the DNS Session | |||
LENGTH is the length of the SSOP-DATA that follows, which specifies | Signaling specification [SessSig]. The DNS Opcode is the Session | |||
the changes being communicated. | Signaling Opcode (tentatively 6). The four count fields MUST be | |||
empty, and the corresponding four sections MUST be empty (i.e., | ||||
absent). | ||||
The SSOP-DATA contains one or more Update records, in customary | The SSOP-TYPE is PUSH (tentatively 0x41). The SSOP-LENGTH is the | |||
Resource Record format, as used in DNS Update [RFC2136] messages. A | length of the SSOP-DATA that follows, which specifies the changes | |||
PUSH Message MUST contain at least one Update record. If a PUSH | being communicated. | |||
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 one or more Update records. A PUSH Message | |||
client, formatted identically to a DNS Update [RFC2136]. To recap: | 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 Update records are | ||||
formatted in the customary way for Resource Records in DNS messages | ||||
with the stipulation that DNS name compression is not permitted in | ||||
DNS Session Signaling TLVs. Update records in a PUSH Message are | ||||
interpreted according to the same rules as for DNS Update [RFC2136] | ||||
messages, namely: | ||||
Delete all RRsets from a name: | Delete all RRsets from a name: | |||
TTL=0, CLASS=ANY, RDLENGTH=0, TYPE=ANY. | TTL=0, CLASS=ANY, RDLENGTH=0, TYPE=ANY. | |||
Delete an RRset from a name: | Delete an RRset from a name: | |||
TTL=0, CLASS=ANY, RDLENGTH=0; | TTL=0, CLASS=ANY, RDLENGTH=0; | |||
TYPE specifies the RRset being deleted. | TYPE specifies the RRset being deleted. | |||
Delete an individual RR from a name: | Delete an individual RR from a name: | |||
TTL=0, CLASS=NONE; | TTL=0, CLASS=NONE; | |||
skipping to change at page 20, line 48 ¶ | skipping to change at page 21, line 50 ¶ | |||
back to the server. | back to the server. | |||
The TTL of an added record is stored by the client and decremented as | The TTL of an added record is stored by the client and decremented as | |||
time passes, with the caveat that for as long as a relevant | time passes, with the caveat that for as long as a relevant | |||
subscription is active, the TTL does not decrement below 1 second. | subscription is active, the TTL does not decrement below 1 second. | |||
For as long as a relevant subscription remains active, the client | For as long as a relevant subscription remains active, the client | |||
SHOULD assume that when a record goes away the server will notify it | SHOULD assume that when a record goes away the server will notify it | |||
of that fact. Consequently, a client does not have to poll to verify | of that fact. Consequently, a client does not have to poll to verify | |||
that the record is still there. Once a subscription is cancelled | that the record is still there. Once a subscription is cancelled | |||
(individually, or as a result of the TCP connection being closed) | (individually, or as a result of the TCP connection being closed) | |||
record ageing resumes and records are removed from the local cache | record aging resumes and records are removed from the local cache | |||
when their TTL reaches zero. | when their TTL reaches zero. | |||
6.3.2. PUSH Response | 6.3.2. PUSH Response | |||
Each PUSH message generates exactly one PUSH response from the | Each PUSH message generates exactly one PUSH response from the | |||
receiver. | receiver. | |||
A PUSH response message begins with the standard DNS Session | A PUSH response message begins with the standard DNS Session | |||
Signaling 12-byte header [SessSig], possibly followed by one or more | Signaling 12-byte header [SessSig], possibly followed by one or more | |||
optional Modifier TLVs, such as a Retry Delay Modifier TLV. | optional Modifier TLVs, such as a Retry Delay Modifier TLV. | |||
skipping to change at page 22, line 15 ¶ | skipping to change at page 23, line 15 ¶ | |||
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 [SessSig] message. This | encoded in a DNS Session Signaling [SessSig] message. This | |||
specification defines a DNS Session Signaling TLV for DNS Push | specification defines a DNS Session Signaling TLV for DNS Push | |||
Notification UNSUBSCRIBE Requests/Responses (tentatively Session | Notification UNSUBSCRIBE Requests/Responses (tentatively Session | |||
Signaling Type Code 0x42). | Signaling Type Code 0x42). | |||
A server MUST NOT initiate an UNSUBSCRIBE request. | A server MUST NOT initiate an UNSUBSCRIBE request. If a server does | |||
send a UNSUBSCRIBE request over the connection initiated by a client, | ||||
it is an error and the client should acknowledge the request with the | ||||
error response RCODE NOTAUTH (Not Authoritative). | ||||
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 12-byte header [SessSig], followed by the UNSUBSCRIBE TLV. | Signaling 12-byte header [SessSig], followed by 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 | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| QDCOUNT (MUST BE ZERO) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| ANCOUNT (MUST BE ZERO) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| NSCOUNT (MUST BE ZERO) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| ARCOUNT (MUST BE ZERO) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| SSOP-TYPE = UNSUBSCRIBE (tentatively 0x42) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| SSOP-LENGTH (2 octets) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
| SUBSCRIBE MESSAGE ID | SSOP-DATA | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | ||||
Figure 3 | ||||
In the UNSUBSCRIBE TLV the SSOP-TYPE is UNSUBSCRIBE (tentatively | In the UNSUBSCRIBE TLV the SSOP-TYPE is UNSUBSCRIBE (tentatively | |||
0x42). The SSOP-LENGTH is zero. There is no SSOP-DATA for | 0x42). The SSOP-LENGTH is 2 octets. | |||
UNSUBSCRIBE. | ||||
The MESSAGE ID field MUST match the value given in the ID field of an | The SSOP-DATA contains the MESSAGE ID field of the value given in the | |||
active SUBSCRIBE request. This is how the server knows which | ID field of an active SUBSCRIBE request. This is how the server | |||
SUBSCRIBE request is being cancelled. After receipt of the | knows which SUBSCRIBE request is being cancelled. After receipt of | |||
UNSUBSCRIBE request, the SUBSCRIBE request is no longer active. If a | the UNSUBSCRIBE request, the SUBSCRIBE request is no longer active. | |||
server receives an UNSUBSCRIBE message where the MESSAGE ID does not | If a server receives an UNSUBSCRIBE message where the MESSAGE ID does | |||
match the ID of an active SUBSCRIBE request the server MUST return a | not match the ID of an active SUBSCRIBE request the server MUST | |||
response containing RCODE = 3 (NXDOMAIN). | return a response containing RCODE = 3 (NXDOMAIN). | |||
It is allowable for the client to issue an UNSUBSCRIBE request for a | It is allowable for the client to issue an UNSUBSCRIBE request for a | |||
previous SUBSCRIBE request for which the client has not yet received | previous SUBSCRIBE request for which the client has not yet received | |||
a SUBSCRIBE response. This is to allow for the case where a client | a SUBSCRIBE response. This is to allow for the case where a client | |||
starts and stops a subscription in less than the round-trip time to | starts and stops a subscription in less than the round-trip time to | |||
the server. The client is NOT required to wait for the SUBSCRIBE | the server. The client is NOT required to wait for the SUBSCRIBE | |||
response before issuing the UNSUBSCRIBE request. A consequence of | response before issuing the UNSUBSCRIBE request. A consequence of | |||
this is that if the client issues an UNSUBSCRIBE request for an as- | this is that if the client issues an UNSUBSCRIBE request for an as- | |||
yet unacknowledged SUBSCRIBE request, and the SUBSCRIBE request is | yet unacknowledged SUBSCRIBE request, and the SUBSCRIBE request is | |||
subsequently unsuccessful for some reason, then when the UNSUBSCRIBE | subsequently unsuccessful for some reason, then when the UNSUBSCRIBE | |||
request is eventually processed it will be an UNSUBSCRIBE request for | request is eventually processed it will be an UNSUBSCRIBE request for | |||
a nonexistent subscription, which will result NXDOMAIN response. | a nonexistent subscription, which will result NXDOMAIN response. | |||
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 begins with the standard DNS Session | An UNSUBSCRIBE response message begins with the standard DNS Session | |||
Signaling 12-byte header [SessSig], possibly followed by one or more | Signaling 12-byte header [SessSig], possibly followed by one or more | |||
optional Modifier TLVs, such as a Retry Delay Modifier TLV. | 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 | The MESSAGE ID field MUST echo the value given in the ID field of the | |||
skipping to change at page 26, line 33 ¶ | skipping to change at page 29, line 8 ¶ | |||
that the disputed records are in fact no longer valid, then | that the disputed records are in fact no longer valid, then | |||
subsequent DNS PUSH Messages will be generated to inform interested | subsequent DNS PUSH Messages will be generated to inform interested | |||
clients. Thus, one client discovering that a previously-advertised | clients. Thus, one client discovering that a previously-advertised | |||
device (like a network printer) is no longer present has the side | device (like a network printer) is no longer present has the side | |||
effect of informing all other interested clients that the device in | effect of informing all other interested clients that the device in | |||
question is now gone. | question is now gone. | |||
6.5.1. RECONFIRM Request | 6.5.1. RECONFIRM Request | |||
A RECONFIRM request message begins with the standard DNS Session | A RECONFIRM request message begins with the standard DNS Session | |||
Signaling 12-byte header [SessSig], followed by the RECONFIRM TLV. | Signaling 12-byte header [SessSig], followed by the RECONFIRM TLV. A | |||
The SSOP-DATA for the the RECONFIRM TLV is as follows: | RECONFIRM request message is illustrated below: | |||
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 | | |||
\ NAME \ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | |||
\ \ | |QR| Opcode | Z | RCODE | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | |||
| TYPE | | | QDCOUNT (MUST BE ZERO) | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | |||
| CLASS | | | ANCOUNT (MUST BE ZERO) | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | |||
| RDLEN | | | NSCOUNT (MUST BE ZERO) | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | |||
| | | | ARCOUNT (MUST BE ZERO) | | |||
\ RDATA \ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | |||
\ \ | | SSOP-TYPE = RECONFIRM (tentatively 0x43) | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | |||
| SSOP-LENGTH (number of octets in SSOP-DATA) | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | ||||
\ NAME \ \ | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | ||||
| TYPE | | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | ||||
| CLASS | > SSOP-DATA | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | ||||
| RDLEN | | | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | ||||
\ RDATA \ / | ||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | ||||
Figure 2 | Figure 4 | |||
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 the client has used it for a subscription which it | |||
has not yet cancelled using UNSUBSCRIBE. In the RECONFIRM response | has not yet cancelled using UNSUBSCRIBE. In the RECONFIRM response | |||
the server MUST echo back the MESSAGE ID value unchanged. | the server MUST echo back the MESSAGE ID value unchanged. | |||
In the RECONFIRM TLV the SSOP-TYPE is RECONFIRM (tentatively 0x43). | The other header fields MUST be set as described in the DNS Session | |||
The SSOP-LENGTH is the length of the data that follows, which | Signaling specification [SessSig]. The DNS Opcode is the Session | |||
specifies the name, type, class, and content of the record being | Signaling Opcode (tentatively 6). The four count fields MUST be | |||
disputed. | empty, and the corresponding four sections MUST be empty (i.e., | |||
absent). | ||||
A RECONFIRM request MUST contain exactly one record. The RECONFIRM | The SSOP-TYPE is RECONFIRM (tentatively 0x43). The SSOP-LENGTH is | |||
TLV has no count field to specify more than one record. Since | the length of the data that follows, which specifies the name, type, | |||
RECONFIRM requests are sent over TCP, multiple RECONFIRM request | class, and content of the record being disputed. | |||
messages can be concatenated in a single TCP stream and packed | ||||
efficiently into TCP segments. | The SSOP-DATA for a RECONFIRM request MUST contain exactly one | |||
record. The SSOP-DATA for a RECONFIRM request 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 | TYPE MUST NOT be the value ANY (255) and CLASS MUST NOT be the value | |||
ANY (255). | ANY (255). | |||
DNS wildcarding is not supported. That is, a wildcard ("*") in a | DNS wildcarding is not supported. That is, a wildcard ("*") in a | |||
RECONFIRM message matches only a literal wildcard character ("*") in | RECONFIRM message matches only a literal wildcard character ("*") in | |||
the zone, and nothing else. | the zone, and nothing else. | |||
Aliasing is not supported. That is, a CNAME in a RECONFIRM message | Aliasing is not supported. That is, a CNAME in a RECONFIRM message | |||
matches only a literal CNAME record in the zone, and nothing else. | matches only a literal CNAME record in the zone, and nothing else. | |||
skipping to change at page 28, line 31 ¶ | skipping to change at page 31, line 31 ¶ | |||
In the RECONFIRM response the RCODE confirms receipt of the | In the RECONFIRM response the RCODE confirms receipt of the | |||
reconfirmation request. Supported RCODEs are as follows: | reconfirmation request. Supported RCODEs are as follows: | |||
+------------+-------+----------------------------------------------+ | +------------+-------+----------------------------------------------+ | |||
| Mnemonic | Value | Description | | | Mnemonic | Value | Description | | |||
+------------+-------+----------------------------------------------+ | +------------+-------+----------------------------------------------+ | |||
| NOERROR | 0 | RECONFIRM accepted. | | | NOERROR | 0 | RECONFIRM accepted. | | |||
| FORMERR | 1 | Server failed to process request due to a | | | FORMERR | 1 | Server failed to process request due to a | | |||
| | | malformed request. | | | | | malformed request. | | |||
| SERVFAIL | 2 | Server failed to process request due to | | | SERVFAIL | 2 | Server failed to process request due to a | | |||
| | | resource exhaustion. | | | | | problem with the server. | | |||
| NXDOMAIN | 3 | NOT APPLICABLE. DNS Push Notification | | | NXDOMAIN | 3 | NOT APPLICABLE. DNS Push Notification | | |||
| | | servers MUST NOT return NXDOMAIN errors in | | | | | servers MUST NOT return NXDOMAIN errors in | | |||
| | | response to RECONFIRM requests. | | | | | 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 | | | REFUSED | 5 | Server refuses to process request for policy | | |||
| | | or security reasons. | | | | | or security reasons. | | |||
| NOTAUTH | 9 | Server is not authoritative for the | | | NOTAUTH | 9 | Server is not authoritative for the | | |||
| | | requested name. | | | | | requested name. | | |||
| SSOPNOTIMP | 11 | RECONFIRM operation not supported. | | | SSOPNOTIMP | 11 | RECONFIRM operation not supported. | | |||
skipping to change at page 29, line 10 ¶ | skipping to change at page 32, line 10 ¶ | |||
these values. However, future circumstances may create situations | these values. However, future circumstances may create situations | |||
where other RCODE values are appropriate in RECONFIRM Responses, so | where other RCODE values are appropriate in RECONFIRM Responses, so | |||
clients MUST be prepared to accept RECONFIRM Responses with any RCODE | clients MUST be prepared to accept RECONFIRM Responses with any RCODE | |||
value. | value. | |||
Nonzero RCODE values signal some kind of error. | Nonzero RCODE values signal some kind of error. | |||
RCODE value FORMERR indicates a message format error, for example | RCODE value FORMERR indicates a message format error, for example | |||
TYPE or CLASS being ANY (255). | TYPE or CLASS being ANY (255). | |||
RCODE value SERVFAIL indicates that the server is overloaded. | RCODE value SERVFAIL indicates that the server has exhausted its | |||
resources or other serious problem occurred. | ||||
RCODE values NOTIMP indicates that the server does not support | RCODE values NOTIMP indicates that the server does not support | |||
Session Signaling, and Session Signaling is required for RECONFIRM | Session Signaling, and Session Signaling is required for RECONFIRM | |||
requests. | requests. | |||
RCODE value REFUSED indicates that the server supports RECONFIRM | RCODE value REFUSED indicates that the server supports RECONFIRM | |||
requests but is currently not configured to accept them from this | requests but is currently not configured to accept them from this | |||
client. | client. | |||
RCODE value NOTAUTH indicates that the server is not authoritative | RCODE value NOTAUTH indicates that the server is not authoritative | |||
skipping to change at page 31, line 7 ¶ | skipping to change at page 34, line 7 ¶ | |||
with a time of 0 seconds and then closing the socket. | with a time of 0 seconds and then closing the socket. | |||
If a client has performed operations on this connection that it would | If a client has performed operations on this connection that it would | |||
not want lost (like DNS updates) then the client SHOULD do an orderly | not want lost (like DNS updates) then the client SHOULD do an orderly | |||
disconnect, sending a TCP FIN. In the BSD Sockets API, sending a TCP | disconnect, sending a TCP FIN. In the BSD Sockets API, sending a TCP | |||
FIN is achieved by calling "shutdown(s,SHUT_WR)" and keeping the | FIN is achieved by calling "shutdown(s,SHUT_WR)" and keeping the | |||
socket open until all remaining data has been read from it. | socket open until all remaining data has been read from it. | |||
7. Security Considerations | 7. Security Considerations | |||
TLS support is REQUIRED in DNS Push Notifications. There is no | The Strict Privacy Usage Profile for DNS over TLS is strongly | |||
provision for opportunistic encryption using a mechanism like | recommended for DNS Push Notifications as defined in Authentication | |||
"STARTTLS". | and (D)TLS Profile for DNS-over-(D)TLS | |||
[I-D.ietf-dprive-dtls-and-tls-profiles]. The Opportunistic Privacy | ||||
Usage Profile is permissible as a way to support incremental | ||||
deployment of security capabilities. Cleartext connections for DNS | ||||
Push Notifications are not permissible. | ||||
DNSSEC is RECOMMENDED for DNS Push Notifications. TLS alone does not | DNSSEC is RECOMMENDED for the authentication of DNS Push Notification | |||
provide complete security. TLS certificate verification can provide | servers. TLS alone does not provide complete security. TLS | |||
reasonable assurance that the client is really talking to the server | certificate verification can provide reasonable assurance that the | |||
associated with the desired host name, but since the desired host | client is really talking to the server associated with the desired | |||
name is learned via a DNS SRV query, if the SRV query is subverted | host name, but since the desired host name is learned via a DNS SRV | |||
then the client may have a secure connection to a rogue server. | query, if the SRV query is subverted then the client may have a | |||
DNSSEC can provided added confidence that the SRV query has not been | secure connection to a rogue server. DNSSEC can provided added | |||
subverted. | confidence that the SRV query has not been subverted. | |||
7.1. Security Services | 7.1. Security Services | |||
It is the goal of using TLS to provide the following security | It is the goal of using TLS to provide the following security | |||
services: | services: | |||
Confidentiality: All application-layer communication is encrypted | Confidentiality: All application-layer communication is encrypted | |||
with the goal that no party should be able to decrypt it except | with the goal that no party should be able to decrypt it except | |||
the intended receiver. | the intended receiver. | |||
skipping to change at page 32, line 4 ¶ | skipping to change at page 35, line 8 ¶ | |||
As described in Section 6.1, the client discovers the DNS Push | As described in Section 6.1, the client discovers the DNS Push | |||
Notification server using an SRV lookup for the record name | Notification server using an SRV lookup for the record name | |||
"_dns-push-tls._tcp.<zone>". The server connection endpoint SHOULD | "_dns-push-tls._tcp.<zone>". The server connection endpoint SHOULD | |||
then be authenticated using DANE TLSA records for the associated SRV | then be authenticated using DANE TLSA records for the associated SRV | |||
record. This associates the target's name and port number with a | record. This associates the target's name and port number with a | |||
trusted TLS certificate [RFC7673]. This procedure uses the TLS Sever | trusted TLS certificate [RFC7673]. This procedure uses the TLS Sever | |||
Name Indication (SNI) extension [RFC6066] to inform the server of the | Name Indication (SNI) extension [RFC6066] to inform the server of the | |||
name the client has authenticated through the use of TLSA records. | name the client has authenticated through the use of TLSA records. | |||
Therefore, if the SRV record passes DNSSEC validation and a TLSA | Therefore, if the SRV record passes DNSSEC validation and a TLSA | |||
record matching the target name is useable, an SNI extension MUST be | record matching the target name is useable, an SNI extension must be | |||
used for the target name to ensure the client is connecting to the | used for the target name to ensure the client is connecting to the | |||
server it has authenticated. If the target name does not have a | server it has authenticated. If the target name does not have a | |||
usable TLSA record, then the use of the SNI extension is optional. | usable TLSA record, then the use of the SNI extension is optional. | |||
See Authentication and (D)TLS Profile for DNS-over-(D)TLS | ||||
[I-D.ietf-dprive-dtls-and-tls-profiles] for more information on | ||||
authenticating domain names. Also note that a DNS Push server is an | ||||
authoritative server and a DNS Push client is a standard DNS client. | ||||
While the terminology in Authentication and (D)TLS Profile for DNS- | ||||
over-(D)TLS [I-D.ietf-dprive-dtls-and-tls-profiles] explicitly states | ||||
it does not apply to authoritative servers, it does in this case | ||||
apply to DNS Push Notification clients and servers. | ||||
7.3. TLS Compression | 7.3. TLS Compression | |||
In order to reduce the chances of compression-related attacks, TLS- | In order to reduce the chances of compression-related attacks, TLS- | |||
level compression SHOULD be disabled when using TLS versions 1.2 and | level compression SHOULD be disabled when using TLS versions 1.2 and | |||
earlier. In the draft version of TLS 1.3 [I-D.ietf-tls-tls13], TLS- | earlier. In the draft version of TLS 1.3 [I-D.ietf-tls-tls13], TLS- | |||
level compression has been removed completely. | level compression has been removed completely. | |||
7.4. TLS Session Resumption | 7.4. TLS Session Resumption | |||
TLS Session Resumption is permissible on DNS Push Notification | TLS Session Resumption is permissible on DNS Push Notification | |||
skipping to change at page 32, line 36 ¶ | skipping to change at page 35, line 49 ¶ | |||
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]. | [RFC6335][SN]. | |||
This document defines three DNS Session Signaling TLV types: | This document defines four DNS Session Signaling TLV types: SUBSCRIBE | |||
SUBSCRIBE with (tentative) value 0x40 (64), PUSH with (tentative) | with (tentative) value 0x40 (64), PUSH with (tentative) value 0x41 | |||
value 0x41 (65), UNSUBSCRIBE with (tentative) value 0x42 (66), and | (65), UNSUBSCRIBE with (tentative) value 0x42 (66), and RECONFIRM | |||
RECONFIRM with (tentative) value 0x43 (67). | 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, Soraia Zlatkovic, Sara | |||
Dickinson, and Andrew Sullivan. | ||||
10. References | 10. References | |||
10.1. Normative References | 10.1. Normative References | |||
[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-20 (work in progress), | |||
October 2016. | April 2017. | |||
[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, | |||
RFC 793, DOI 10.17487/RFC0793, September 1981, | RFC 793, DOI 10.17487/RFC0793, September 1981, | |||
<http://www.rfc-editor.org/info/rfc793>. | <http://www.rfc-editor.org/info/rfc793>. | |||
[RFC1034] Mockapetris, P., "Domain names - concepts and facilities", | [RFC1034] Mockapetris, P., "Domain names - concepts and facilities", | |||
skipping to change at page 35, line 11 ¶ | skipping to change at page 38, line 21 ¶ | |||
[DisProx] Cheshire, S., "Hybrid Unicast/Multicast DNS-Based Service | [DisProx] Cheshire, S., "Hybrid Unicast/Multicast DNS-Based Service | |||
Discovery", draft-ietf-dnssd-hybrid-06 (work in progress), | Discovery", draft-ietf-dnssd-hybrid-06 (work in progress), | |||
March 2017. | 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-dprive-dtls-and-tls-profiles] | ||||
Dickinson, S., Gillmor, D., and T. Reddy, "Usage and | ||||
(D)TLS Profiles for DNS-over-(D)TLS", draft-ietf-dprive- | ||||
dtls-and-tls-profiles-10 (work in progress), June 2017. | ||||
[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/ | |||
Observer_pattern>. | Observer_pattern>. | |||
[RFC1996] Vixie, P., "A Mechanism for Prompt Notification of Zone | [RFC2308] Andrews, M., "Negative Caching of DNS Queries (DNS | |||
Changes (DNS NOTIFY)", RFC 1996, DOI 10.17487/RFC1996, | NCACHE)", RFC 2308, DOI 10.17487/RFC2308, March 1998, | |||
August 1996, <http://www.rfc-editor.org/info/rfc1996>. | <http://www.rfc-editor.org/info/rfc2308>. | |||
[RFC4287] Nottingham, M., Ed. and R. Sayre, Ed., "The Atom | [RFC4287] Nottingham, M., Ed. and R. Sayre, Ed., "The Atom | |||
Syndication Format", RFC 4287, DOI 10.17487/RFC4287, | Syndication Format", RFC 4287, DOI 10.17487/RFC4287, | |||
December 2005, <http://www.rfc-editor.org/info/rfc4287>. | December 2005, <http://www.rfc-editor.org/info/rfc4287>. | |||
[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, | |||
skipping to change at page 36, line 20 ¶ | skipping to change at page 39, line 38 ¶ | |||
[RFC7413] Cheng, Y., Chu, J., Radhakrishnan, S., and A. Jain, "TCP | [RFC7413] Cheng, Y., Chu, J., Radhakrishnan, S., and A. Jain, "TCP | |||
Fast Open", RFC 7413, DOI 10.17487/RFC7413, December 2014, | Fast Open", RFC 7413, DOI 10.17487/RFC7413, December 2014, | |||
<http://www.rfc-editor.org/info/rfc7413>. | <http://www.rfc-editor.org/info/rfc7413>. | |||
[RFC7525] Sheffer, Y., Holz, R., and P. Saint-Andre, | [RFC7525] Sheffer, Y., Holz, R., and P. Saint-Andre, | |||
"Recommendations for Secure Use of Transport Layer | "Recommendations for Secure Use of Transport Layer | |||
Security (TLS) and Datagram Transport Layer Security | Security (TLS) and Datagram Transport Layer Security | |||
(DTLS)", BCP 195, RFC 7525, DOI 10.17487/RFC7525, May | (DTLS)", BCP 195, RFC 7525, DOI 10.17487/RFC7525, May | |||
2015, <http://www.rfc-editor.org/info/rfc7525>. | 2015, <http://www.rfc-editor.org/info/rfc7525>. | |||
[RFC7719] Hoffman, P., Sullivan, A., and K. Fujiwara, "DNS | ||||
Terminology", RFC 7719, DOI 10.17487/RFC7719, December | ||||
2015, <http://www.rfc-editor.org/info/rfc7719>. | ||||
[RFC7858] Hu, Z., Zhu, L., Heidemann, J., Mankin, A., Wessels, D., | [RFC7858] Hu, Z., Zhu, L., Heidemann, J., Mankin, A., Wessels, D., | |||
and P. Hoffman, "Specification for DNS over Transport | and P. Hoffman, "Specification for DNS over Transport | |||
Layer Security (TLS)", RFC 7858, DOI 10.17487/RFC7858, May | Layer Security (TLS)", RFC 7858, DOI 10.17487/RFC7858, May | |||
2016, <http://www.rfc-editor.org/info/rfc7858>. | 2016, <http://www.rfc-editor.org/info/rfc7858>. | |||
[XEP0060] Millard, P., Saint-Andre, P., and R. Meijer, "Publish- | [XEP0060] Millard, P., Saint-Andre, P., and R. Meijer, "Publish- | |||
Subscribe", XSF XEP 0060, July 2010. | Subscribe", XSF XEP 0060, July 2010. | |||
Authors' Addresses | Authors' Addresses | |||
End of changes. 64 change blocks. | ||||
214 lines changed or deleted | 377 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/ |