draft-ietf-dnssd-push-16.txt | draft-ietf-dnssd-push-17.txt | |||
---|---|---|---|---|
Internet Engineering Task Force T. Pusateri | Internet Engineering Task Force T. Pusateri | |||
Internet-Draft Unaffiliated | Internet-Draft Unaffiliated | |||
Intended status: Standards Track S. Cheshire | Intended status: Standards Track S. Cheshire | |||
Expires: May 9, 2019 Apple Inc. | Expires: September 10, 2019 Apple Inc. | |||
November 5, 2018 | March 9, 2019 | |||
DNS Push Notifications | DNS Push Notifications | |||
draft-ietf-dnssd-push-16 | draft-ietf-dnssd-push-17 | |||
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 are relatively static. When | efficiently for queries for data that are relatively static. When | |||
those records change frequently, DNS is still efficient at returning | those records change frequently, DNS is still efficient at returning | |||
the updated results when polled, as long as the polling rate is not | the updated results when polled, as long as the polling rate is not | |||
too high. But there exists no mechanism for a client to be | too high. But there exists no mechanism for a client to be | |||
asynchronously notified when these changes occur. This document | asynchronously notified when these changes occur. This document | |||
defines a mechanism for a client to be notified of such changes to | defines a mechanism for a client to be notified of such changes to | |||
skipping to change at page 1, line 38 ¶ | skipping to change at page 1, line 38 ¶ | |||
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 https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on May 9, 2019. | This Internet-Draft will expire on September 10, 2019. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2018 IETF Trust and the persons identified as the | Copyright (c) 2019 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 | |||
(https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
skipping to change at page 2, line 19 ¶ | skipping to change at page 2, line 19 ¶ | |||
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 . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
3. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 3. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
4. Transport . . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 4. Transport . . . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
5. State Considerations . . . . . . . . . . . . . . . . . . . . 8 | 5. State Considerations . . . . . . . . . . . . . . . . . . . . 8 | |||
6. Protocol Operation . . . . . . . . . . . . . . . . . . . . . 9 | 6. Protocol Operation . . . . . . . . . . . . . . . . . . . . . 9 | |||
6.1. Discovery . . . . . . . . . . . . . . . . . . . . . . . . 10 | 6.1. Discovery . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
6.2. DNS Push Notification SUBSCRIBE . . . . . . . . . . . . . 13 | 6.2. DNS Push Notification SUBSCRIBE . . . . . . . . . . . . . 14 | |||
6.2.1. SUBSCRIBE Request . . . . . . . . . . . . . . . . . . 13 | 6.2.1. SUBSCRIBE Request . . . . . . . . . . . . . . . . . . 14 | |||
6.2.2. SUBSCRIBE Response . . . . . . . . . . . . . . . . . 16 | 6.2.2. SUBSCRIBE Response . . . . . . . . . . . . . . . . . 17 | |||
6.3. DNS Push Notification Updates . . . . . . . . . . . . . . 19 | 6.3. DNS Push Notification Updates . . . . . . . . . . . . . . 20 | |||
6.3.1. PUSH Message . . . . . . . . . . . . . . . . . . . . 19 | 6.3.1. PUSH Message . . . . . . . . . . . . . . . . . . . . 20 | |||
6.4. DNS Push Notification UNSUBSCRIBE . . . . . . . . . . . . 22 | 6.4. DNS Push Notification UNSUBSCRIBE . . . . . . . . . . . . 23 | |||
6.4.1. UNSUBSCRIBE Request . . . . . . . . . . . . . . . . . 22 | 6.4.1. UNSUBSCRIBE Request . . . . . . . . . . . . . . . . . 23 | |||
6.5. DNS Push Notification RECONFIRM . . . . . . . . . . . . . 24 | 6.5. DNS Push Notification RECONFIRM . . . . . . . . . . . . . 25 | |||
6.5.1. RECONFIRM Request . . . . . . . . . . . . . . . . . . 24 | 6.5.1. RECONFIRM Request . . . . . . . . . . . . . . . . . . 25 | |||
6.5.2. RECONFIRM Response . . . . . . . . . . . . . . . . . 26 | 6.5.2. RECONFIRM Response . . . . . . . . . . . . . . . . . 28 | |||
6.6. DNS Stateful Operations TLV Context Summary . . . . . . . 28 | 6.6. DNS Stateful Operations TLV Context Summary . . . . . . . 30 | |||
6.7. Client-Initiated Termination . . . . . . . . . . . . . . 29 | 6.7. Client-Initiated Termination . . . . . . . . . . . . . . 31 | |||
7. Security Considerations . . . . . . . . . . . . . . . . . . . 30 | 7. Security Considerations . . . . . . . . . . . . . . . . . . . 32 | |||
7.1. Security Services . . . . . . . . . . . . . . . . . . . . 30 | 7.1. Security Services . . . . . . . . . . . . . . . . . . . . 32 | |||
7.2. TLS Name Authentication . . . . . . . . . . . . . . . . . 30 | 7.2. TLS Name Authentication . . . . . . . . . . . . . . . . . 32 | |||
7.3. TLS Compression . . . . . . . . . . . . . . . . . . . . . 31 | 7.3. TLS Session Resumption . . . . . . . . . . . . . . . . . 33 | |||
7.4. TLS Session Resumption . . . . . . . . . . . . . . . . . 31 | 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 33 | |||
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 32 | 9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 34 | |||
9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 32 | 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 34 | |||
10. References . . . . . . . . . . . . . . . . . . . . . . . . . 33 | 10.1. Normative References . . . . . . . . . . . . . . . . . . 34 | |||
10.1. Normative References . . . . . . . . . . . . . . . . . . 33 | 10.2. Informative References . . . . . . . . . . . . . . . . . 36 | |||
10.2. Informative References . . . . . . . . . . . . . . . . . 34 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 38 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 37 | ||||
1. Introduction | 1. Introduction | |||
Domain Name System (DNS) records may be updated using DNS Update | Domain Name System (DNS) records may be updated using DNS Update | |||
[RFC2136]. Other mechanisms such as a Discovery Proxy [DisProx] can | [RFC2136]. Other mechanisms such as a Discovery Proxy [DisProx] can | |||
also generate changes to a DNS zone. This document specifies a | also generate changes to a DNS zone. This document specifies a | |||
protocol for DNS clients to subscribe to receive asynchronous | protocol for DNS clients to subscribe to receive asynchronous | |||
notifications of changes to RRSets of interest. It is immediately | notifications of changes to RRSets of interest. It is immediately | |||
relevant in the case of DNS Service Discovery [RFC6763] but is not | relevant in the case of DNS Service Discovery [RFC6763] but is not | |||
limited to that use case, and provides a general DNS mechanism for | limited to that use case, and provides a general DNS mechanism for | |||
DNS record change notifications. Familiarity with the DNS protocol | DNS record change notifications. Familiarity with the DNS protocol | |||
and DNS packet formats is assumed [RFC1034] [RFC1035] [RFC6895]. | and DNS packet formats is assumed [RFC1034] [RFC1035] [RFC6895]. | |||
1.1. Requirements Language | 1.1. Requirements Language | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
"Key words for use in RFCs to Indicate Requirement Levels", when, and | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
only when, they appear in all capitals, as shown here [RFC2119] | capitals, as shown here. These words may also appear in this | |||
[RFC8174]. | document in lower case as plain English words, absent their normative | |||
meanings. | ||||
2. Motivation | 2. Motivation | |||
As the domain name system continues to adapt to new uses and changes | As the domain name system continues to adapt to new uses and changes | |||
in deployment, polling has the potential to burden DNS servers at | in deployment, polling has the potential to burden DNS servers at | |||
many levels throughout the network. Other network protocols have | many levels throughout the network. Other network protocols have | |||
successfully deployed a publish/subscribe model following the | successfully deployed a publish/subscribe model following the | |||
Observer design pattern [obs]. XMPP Publish-Subscribe [XEP0060] and | Observer design pattern [obs]. XMPP Publish-Subscribe [XEP0060] and | |||
Atom [RFC4287] are examples. While DNS servers are generally highly | Atom [RFC4287] are examples. While DNS servers are generally highly | |||
tuned and capable of a high rate of query/response traffic, adding a | tuned and capable of a high rate of query/response traffic, adding a | |||
skipping to change at page 4, line 30 ¶ | skipping to change at page 4, line 30 ¶ | |||
multicast group address for all group members to receive. Therefore, | multicast group address for all group members to receive. Therefore, | |||
Multicast DNS already has asynchronous change notification | Multicast DNS already has asynchronous change notification | |||
capability. However, when DNS Service Discovery [RFC6763] is used | capability. However, when DNS Service Discovery [RFC6763] is used | |||
across a wide area network using Unicast DNS (possibly facilitated | across a wide area network using Unicast DNS (possibly facilitated | |||
via a Discovery Proxy [DisProx]) it would be beneficial to have an | via a Discovery Proxy [DisProx]) it would be beneficial to have an | |||
equivalent capability for Unicast DNS, to allow clients to learn | equivalent capability for Unicast DNS, to allow clients to learn | |||
about DNS record changes in a timely manner without polling. | about DNS record changes in a timely manner without polling. | |||
The DNS Long-Lived Queries (LLQ) mechanism [LLQ] is an existing | The DNS Long-Lived Queries (LLQ) mechanism [LLQ] is an existing | |||
deployed solution to provide asynchronous change notifications, used | deployed solution to provide asynchronous change notifications, used | |||
by Apple's Back to My Mac Service [RFC6281] introduced in Mac OS X | by Apple's Back to My Mac [RFC6281] service introduced in Mac OS X | |||
10.5 Leopard in 2007. Back to My Mac was designed in an era when the | 10.5 Leopard in 2007. Back to My Mac was designed in an era when the | |||
data center operations staff asserted that it was impossible for a | data center operations staff asserted that it was impossible for a | |||
server to handle large numbers of mostly-idle TCP connections, so LLQ | server to handle large numbers of mostly-idle TCP connections, so LLQ | |||
was defined as a UDP-based protocol, effectively replicating much of | was defined as a UDP-based protocol, effectively replicating much of | |||
TCP's connection state management logic in user space, and creating | TCP's connection state management logic in user space, and creating | |||
its own poor imitations of existing TCP features like the three-way | its own poor imitations of existing TCP features like the three-way | |||
handshake, flow control, and reliability. | handshake, 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 | |||
DNS Stateful Operations (DSO) [DSO] running over TLS over TCP, and | DNS Stateful Operations (DSO) [DSO] running over TLS over TCP, and | |||
therefore doesn't need to reinvent existing TCP functionality. Using | therefore doesn't need to reinvent existing TCP functionality. Using | |||
TCP also gives long-lived low-traffic connections better longevity | TCP also gives long-lived low-traffic connections better longevity | |||
through NAT gateways without resorting to excessive keepalive | through NAT gateways without depending on the gateway to support NAT | |||
traffic. Instead of inventing a new vocabulary of messages to | Port Mapping Protocol (NAT-PMP) [RFC6886] or Port Control Protocol | |||
communicate DNS zone changes as LLQ did, this specification borrows | (PCP) [RFC6887], or resorting to excessive keepalive traffic. | |||
the established syntax and semantics of DNS Update messages | Instead of inventing a new vocabulary of messages to communicate DNS | |||
[RFC2136]. | zone changes as LLQ did, this specification borrows the established | |||
syntax and semantics of DNS Update messages [RFC2136]. | ||||
3. Overview | 3. Overview | |||
The existing DNS Update protocol [RFC2136] provides a mechanism for | The existing DNS Update protocol [RFC2136] provides a mechanism for | |||
clients to add or delete individual resource records (RRs) or entire | clients to add or delete individual resource records (RRs) or entire | |||
resource record sets (RRSets) on the zone's server. | resource record sets (RRSets) on the zone's server. | |||
This specification adopts a simplified subset of these existing | This specification adopts a simplified subset of these existing | |||
syntax and semantics, and uses them for DNS Push Notification | syntax and semantics, and uses them for DNS Push Notification | |||
messages going in the opposite direction, from server to client, to | messages going in the opposite direction, from server to client, to | |||
communicate changes to a zone. The client subscribes for Push | communicate changes to a name's records. The client subscribes for | |||
Notifications by connecting to the server and sending DNS message(s) | Push Notifications by connecting to the server and sending DNS | |||
indicating the RRSet(s) of interest. When the client loses interest | message(s) indicating the RRSet(s) of interest. When the client | |||
in receiving further updates to these records, it unsubscribes. | loses interest in receiving further updates to these records, it | |||
unsubscribes. | ||||
The DNS Push Notification server for a zone is any server capable of | The DNS Push Notification server for a zone is any server capable of | |||
generating the correct change notifications for a name. It may be a | generating the correct change notifications for a name. It may be a | |||
primary, secondary, or stealth name server [RFC7719]. Consequently, | primary, secondary, or stealth name server [RFC7719]. Consequently, | |||
the "_dns-push-tls._tcp.<zone>" SRV record for a zone MAY reference | the "_dns-push-tls._tcp.<zone>" SRV record for a zone MAY reference | |||
the same target host and port as that zone's | 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 Subscriptions. | Updates and DNS Push Notification Subscriptions. | |||
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 is NOT REQUIRED also 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 (i.e., | |||
connection. For any zone for which the server is authoritative, it | DSO) session. For any zone for which the server is authoritative, it | |||
MUST respond authoritatively for queries on names falling within that | MUST respond authoritatively for queries on names falling within that | |||
zone (e.g., the <zone> in the "_dns-push-tls._tcp.<zone>" SRV record) | zone (e.g., the <zone> in the "_dns-push-tls._tcp.<zone>" SRV record) | |||
both for DNS Push Notification queries and for normal DNS queries. | both for normal DNS queries and for DNS Push Notification | |||
For names for which the server is acting as a caching resolver, e.g. | subscriptions. For names for which the server is acting as a | |||
when the server is the local resolver, for any query for which it | recursive resolver, e.g. when the server is the local recursive | |||
supports DNS Push Notifications, it MUST also support standard | resolver, for any query for which it supports DNS Push Notification | |||
queries. | subscriptions, it MUST also support standard queries. | |||
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 unilaterally informing a client of | comes to an authoritative server unilaterally informing a client of | |||
changes to DNS records. | changes to DNS records. | |||
This DNS Push Notification specification includes support for DNS | This DNS Push Notification specification includes support for DNS | |||
classes, for completeness. However, in practice, it is anticipated | classes, for completeness. However, in practice, it is anticipated | |||
that for the foreseeable future the only DNS class in use will be DNS | that for the foreseeable future the only DNS class in use will be DNS | |||
class "IN", as is the reality today with existing DNS servers and | class "IN", as is the reality today with existing DNS servers and | |||
clients. A DNS Push Notification server MAY choose to implement only | clients. A DNS Push Notification server MAY choose to implement only | |||
DNS class "IN". If messages are received for a class other than | DNS class "IN". If messages are received for a class other than | |||
"IN", and that class is not supported, an error with RCODE NOTIMPL | "IN", and that class is not supported, an error with RCODE NOTIMPL | |||
(Not Implemented) should be returned. | (Not Implemented) should be returned. | |||
DNS Push Notifications impose less load on the responding server than | DNS Push Notifications impose less load on the responding server than | |||
rapid polling would, but Push Notifications do still have a cost, so | rapid polling would, but Push Notifications do still have a cost, so | |||
DNS Push Notification clients must not recklessly create an excessive | DNS Push Notification clients MUST NOT recklessly create an excessive | |||
number of Push Notification subscriptions. Specifically: | number of Push Notification subscriptions. Specifically: | |||
(a) A subscription should only be active when there is a valid reason | (a) A subscription should only be active when there is a valid reason | |||
to need live data (for example, an on-screen display is currently | to need live data (for example, an on-screen display is currently | |||
showing the results to the user) and the subscription SHOULD be | showing the results to the user) and the subscription SHOULD be | |||
cancelled as soon as the need for that data ends (for example, when | cancelled as soon as the need for that data ends (for example, when | |||
the user dismisses that display). Implementations may want to | the user dismisses that display). In the case of a device like a | |||
implement idle timeouts, so that if the user ceases interacting with | smartphone which, after some period of inactivity, goes to sleep or | |||
the device, the subscription is cancelled. | otherwise darkens its screen, it should cancel its subscriptions when | |||
darkening the screen (since the user cannot see any changes in the | ||||
display anyway) and reinstate its subscriptions when re-awakening | ||||
from display sleep. | ||||
(b) A DNS Push Notification client SHOULD NOT routinely keep a DNS | (b) A DNS Push Notification client SHOULD NOT routinely keep a DNS | |||
Push Notification subscription active 24 hours a day, 7 days a week, | Push Notification subscription active 24 hours a day, 7 days a week, | |||
just to keep a list in memory up to date so that if the user does | just to keep a list in memory up to date so that if the user does | |||
choose to bring up an on-screen display of that data, it can be | choose to bring up an on-screen display of that data, it can be | |||
displayed really fast. DNS Push Notifications are designed to be | displayed really fast. DNS Push Notifications are designed to be | |||
fast enough that there is no need to pre-load a "warm" list in memory | fast enough that there is no need to pre-load a "warm" list in memory | |||
just in case it might be needed later. | just in case it might be needed later. | |||
Generally, as described in the DNS Stateful Operations specification | Generally, as described in the DNS Stateful Operations specification | |||
[DSO], a client must not keep a session to a server open indefinitely | [DSO], a client must not keep a session to a server open indefinitely | |||
if it has no subscriptions (or other operations) active on that | if it has no subscriptions (or other operations) active on that | |||
session. A client MAY close a session as soon as it becomes idle, | session. A client MAY close a session as soon as it becomes idle, | |||
and then if needed in the future, open a new session when required. | and then if needed in the future, open a new session when required. | |||
Alternatively, a client MAY speculatively keep an idle session open | Alternatively, a client MAY speculatively keep an idle session open | |||
for some time, subject to the constraint that it MUST NOT keep a | for some time, subject to the constraint that it MUST NOT keep a | |||
session open that has been idle for more than the session's idle | session open that has been idle for more than the session's idle | |||
timeout (15 seconds by default). | timeout (15 seconds by default) [DSO]. | |||
4. Transport | 4. Transport | |||
Other DNS operations like DNS Update [RFC2136] MAY use either User | Other DNS operations like DNS Update [RFC2136] MAY use either User | |||
Datagram Protocol (UDP) [RFC0768] or Transmission Control Protocol | Datagram Protocol (UDP) [RFC0768] or Transmission Control Protocol | |||
(TCP) [RFC0793] as the transport protocol, in keeping with the | (TCP) [RFC0793] as the transport protocol, in keeping with the | |||
historical precedent that DNS queries must first be sent over UDP | historical precedent that DNS queries must first be sent over UDP | |||
[RFC1123]. This requirement to use UDP has subsequently been relaxed | [RFC1123]. This requirement to use UDP has subsequently been relaxed | |||
[RFC7766]. | [RFC7766]. | |||
skipping to change at page 7, line 31 ¶ | skipping to change at page 7, line 31 ¶ | |||
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 [SYN] [RFC4953]. | flooding and similar attacks [SYN] [RFC4953]. | |||
Use of TCP also allows DNS Push Notifications to take advantage of | Use of TCP also allows DNS Push Notifications to take advantage of | |||
current and future developments in TCP, such as Multipath TCP (MPTCP) | current and future developments in TCP, such as Multipath TCP (MPTCP) | |||
[RFC6824], TCP Fast Open (TFO) [RFC7413], Tail Loss Probe (TLP) | [RFC6824], TCP Fast Open (TFO) [RFC7413], Tail Loss Probe (TLP) | |||
[I-D.dukkipati-tcpm-tcp-loss-probe], and so on. | [I-D.dukkipati-tcpm-tcp-loss-probe], and so on. | |||
Transport Layer Security (TLS) [RFC5246] is well understood and | Transport Layer Security (TLS) [RFC8446] is well understood and | |||
deployed across many protocols running over TCP. It is designed to | deployed across many protocols running over TCP. It is designed to | |||
prevent eavesdropping, tampering, and message forgery. TLS is | prevent eavesdropping, tampering, and message forgery. TLS is | |||
REQUIRED for every connection between a client subscriber and server | REQUIRED for every connection between a client subscriber and server | |||
in this protocol specification. Additional security measures such as | in this protocol specification. Additional security measures such as | |||
client authentication during TLS negotiation MAY also be employed to | client authentication during TLS negotiation MAY also be employed to | |||
increase the trust relationship between client and server. | increase the trust relationship between client and server. | |||
5. State Considerations | 5. State Considerations | |||
Each DNS Push Notification server is capable of handling some finite | Each DNS Push Notification server is capable of handling some finite | |||
skipping to change at page 9, line 22 ¶ | skipping to change at page 9, line 22 ¶ | |||
DNS Push Notification clients and servers MUST support DSO. A single | DNS Push Notification clients and servers MUST support DSO. A single | |||
server can support DNS Queries, DNS Updates, and DNS Push | server can support DNS Queries, DNS Updates, and DNS Push | |||
Notifications (using DSO) on the same TCP port. | Notifications (using DSO) on the same TCP port. | |||
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 DSO | A typical DNS Push Notification client will immediately issue a DSO | |||
Keepalive operation to request a session timeout or keepalive | Keepalive operation to request a session timeout and/or keepalive | |||
interval longer than the the 15-second default, but this is not | interval longer than the the 15-second default values, but this is | |||
required. A DNS Push Notification client MAY issue other requests on | not required. A DNS Push Notification client MAY issue other | |||
the session first, and only issue a DSO Keepalive operation later if | requests on the session first, and only issue a DSO Keepalive | |||
it determines that to be necessary. However, Push Notification | operation later if it determines that to be necessary. Sending | |||
subscriptions can also be used to establish the DSO session. | either a DSO Keepalive operation or a Push Notification subscription | |||
over the TLS/TCP connection to the server signals the client's | ||||
support of DSO and serves to establish a DSO session. | ||||
In accordance with the current set of active subscriptions, the | In accordance with the current set of active subscriptions, the | |||
server sends relevant asynchronous Push Notifications to the client. | server sends relevant asynchronous Push Notifications to the client. | |||
Note that a client MUST be prepared to receive (and silently ignore) | Note that a client MUST be prepared to receive (and silently ignore) | |||
Push Notifications for subscriptions it has previously removed, since | Push Notifications for subscriptions it has previously removed, since | |||
there is no way to prevent the situation where a Push Notification is | there is no way to prevent the situation where a Push Notification is | |||
in flight from server to client while the client's UNSUBSCRIBE | in flight from server to client while the client's UNSUBSCRIBE | |||
message cancelling that subscription is simultaneously in flight from | message cancelling that subscription is simultaneously in flight from | |||
client to server. | client to server. | |||
6.1. Discovery | 6.1. Discovery | |||
The first step in DNS Push Notification subscription is to discover | The first step in DNS Push Notification subscription is to discover | |||
an appropriate DNS server that supports DNS Push Notifications for | an appropriate DNS server that supports DNS Push Notifications for | |||
the desired zone. | the desired zone. | |||
The client begins by opening a DSO Session to its normal configured | The client begins by opening a DSO Session to its normal configured | |||
DNS recursive resolver and requesting a Push Notification | DNS recursive resolver and requesting a Push Notification | |||
subscription. This connection is made to the default DNS-over-TLS | subscription. This connection is made to TCP port 853, the default | |||
port as defined in DNS over TLS [RFC7858]. If this connection is | port for DNS-over-TLS DNS over TLS [RFC7858]. If the request for a | |||
successful, then the recursive resolver will make appropriate Push | Push Notification subscription is successful, then the recursive | |||
Notification subscriptions on the client's behalf, and the client | resolver will make a corresponding Push Notification subscription on | |||
will receive appropriate results. | the client's behalf (if the recursive resolver doesn't already have | |||
an active subscription for that name, type, and class), and pass on | ||||
any results it receives back to the client. This is closely | ||||
analogous to how a client sends normal DNS queries to its configured | ||||
DNS recursive resolver, which issues queries on the client's behalf | ||||
(if the recursive resolver doesn't already have appropriate answer(s) | ||||
in its cache), and passes on any results it receives back to the | ||||
client. | ||||
In many contexts, the local recursive resolver will be able to handle | In many contexts, the recursive resolver will be able to handle Push | |||
push notifications for all zones that the client may need to follow. | Notifications for all names that the client may need to follow. Use | |||
In other cases, the client may require Push Notifications from more | of VPN tunnels and split-view DNS can create some additional | |||
than one zone, and those zones may be served by different servers. | complexity in the client software here; the techniques to handle VPN | |||
Therefore, it is assumed that the client may need to maintain | tunnels and split-view DNS for DNS Push Notifications are the same as | |||
connections to more than one DNS Push server. | those already used to handle this for normal DNS queries. | |||
In some cases, the recursive resolver may not be able to get answers | If the recursive resolver does not support DNS over TLS, or does | |||
for a particular zone. In this case, rather than returning SERVFAIL, | support DNS over TLS but is not listening on TCP port 853, or does | |||
the resolver returns NOTAUTH. This signals the client that queries | support DNS over TLS on TCP port 853 but does not support DSO on that | |||
for this zone can't be handled by the local caching resolver. For | port, then the DSO Session session establishment will fail [DSO]. | |||
that zone, the client SHOULD contact the zone's DNS Push server | ||||
itself, even if all other DNS Push queries can be handled by the | ||||
local resolver. This may be necessary in cases where the client is | ||||
connected to a VPN, for example, or where the client has a pre- | ||||
established trust relationship with the owner of the zone that allows | ||||
the client, but not the local resolver, to successfully get answers | ||||
for queries in that zone. | ||||
If the recursive resolver does not support Push Notification | If the recursive resolver does support DSO but not Push Notification | |||
subscriptions, then it will return an error code, DSONOTIMPL. This | subscriptions, then it will return the DSO error code, DSOTYPENI | |||
occurs when the local resolver follows the procedure below and does | (11). | |||
not find an SRV record indicating support for DNS Push Notifications. | ||||
In case of either failure, the client should proceed to discover the | In some cases, the recursive resolver may support DSO and Push | |||
Notification subscriptions, but may not be able to subscribe for Push | ||||
Notifications for a particular name. In this case, the recursive | ||||
resolver should return an informative error code to the client so | ||||
that the client can make an informed decision how to handle the | ||||
error. If the recursive resolver is unable to establish a connection | ||||
to the zone's DNS Push Notification server (perhaps because the | ||||
required SRV record does not exist) the recursive resolver should | ||||
return SERVFAIL. If the recursive resolver is able to establish a | ||||
connection to the zone's DNS Push Notification server and some other | ||||
error code is then received, the recursive resolver should pass on | ||||
this received error code back to the client. In some cases, where | ||||
the client has a pre-established trust relationship with the owner of | ||||
the zone (that is not handled via the usual mechanisms for VPN | ||||
software) the client may handle these failures by contacting the | ||||
zone's DNS Push server directly. | ||||
In any of the cases described above where the client fails to | ||||
establish a DNS Push Notification subscription via its configured | ||||
recursive resolver, the client should proceed to discover the | ||||
appropriate server for direct communication. The client MUST also | appropriate server for direct communication. The client MUST also | |||
determine which TCP port on the server is listening for connections, | determine which TCP port on the server is listening for connections, | |||
which need not be (and often is not) the typical TCP port 53 used for | which need not be (and often is not) the typical TCP port 53 used for | |||
conventional DNS, or TCP port 853 used for DNS over TLS. | conventional DNS, or TCP port 853 used for DNS over TLS. | |||
The discovery algorithm described here is an iterative algorithm, | The discovery algorithm described here is an iterative algorithm, | |||
which starts with the full name of the record to which the client | which starts with the full name of the record to which the client | |||
wishes to subscribe. Successive SOA queries are then issued, | wishes to subscribe. Successive SOA queries are then issued, | |||
trimming one label each time, until the closest enclosing | trimming one label each time, until the closest enclosing | |||
authoritative server is discovered. There is also an optimization to | authoritative server is discovered. There is also an optimization to | |||
skipping to change at page 11, line 17 ¶ | skipping to change at page 11, line 35 ¶ | |||
1. The client begins the discovery by sending a DNS query to its | 1. The client begins the discovery by sending a DNS query to its | |||
local resolver, with record type SOA [RFC1035] for the record | local resolver, with record type SOA [RFC1035] for the record | |||
name to which it wishes to subscribe. As an example, suppose the | name to which it wishes to subscribe. As an example, suppose the | |||
client wishes to subscribe to PTR records with the name | client wishes to subscribe to PTR records with the name | |||
_ipp._tcp.foo.example.com (to discover Internet Printing Protocol | _ipp._tcp.foo.example.com (to discover Internet Printing Protocol | |||
(IPP) printers [RFC8010] [RFC8011] being advertised at | (IPP) printers [RFC8010] [RFC8011] being advertised at | |||
"foo.example.com"). The client begins by sending an SOA query | "foo.example.com"). The client begins by sending an SOA query | |||
for _ipp._tcp.foo.example.com to the local recursive resolver. | for _ipp._tcp.foo.example.com to the local recursive resolver. | |||
The goal is to determine the server authoritative for the name | The goal is to determine the server authoritative for the name | |||
_ipp._tcp.foo.example.com. The DNS zone containing the name | _ipp._tcp.foo.example.com. The closest enclosing DNS zone | |||
_ipp._tcp.foo.example.com could be example.com, or | containing the name _ipp._tcp.foo.example.com could be | |||
foo.example.com, or _tcp.foo.example.com, or even | example.com, or foo.example.com, or _tcp.foo.example.com, or even | |||
_ipp._tcp.foo.example.com. The client does not know in advance | _ipp._tcp.foo.example.com. The client does not know in advance | |||
where the closest enclosing zone cut occurs, which is why it uses | where the closest enclosing zone cut occurs, which is why it uses | |||
the procedure described here to discover this information. | the iterative procedure described here to discover this | |||
information. | ||||
2. If the requested SOA record exists, it will be returned in the | 2. If the requested SOA record exists, it will be returned in the | |||
Answer section with a NOERROR response code, and the client has | Answer section with a NOERROR response code, and the client has | |||
succeeded in discovering the information it needs. (This text is | succeeded in discovering the information it needs. | |||
not placing any new requirements on DNS recursive resolvers. It | (This language is not placing any new requirements on DNS | |||
is merely describing the existing operation of the DNS protocol | recursive resolvers. This text merely describes the existing | |||
[RFC1034] [RFC1035].) | operation of the DNS protocol [RFC1034] [RFC1035].) | |||
3. If the requested SOA record does not exist, the client will get | 3. If the requested SOA record does not exist, the client will get | |||
back a NOERROR/NODATA response or an NXDOMAIN/Name Error | back a NOERROR/NODATA response or an NXDOMAIN/Name Error | |||
response. In either case, the local resolver would normally | response. In either case, the local resolver would normally | |||
include the SOA record for the zone of the requested name in the | include the SOA record for the closest enclosing zone of the | |||
Authority Section. If the SOA record is received in the | requested name in the Authority Section. If the SOA record is | |||
Authority Section, then the client has succeeded in discovering | received in the Authority Section, then the client has succeeded | |||
the information it needs. (This text is not placing any new | in discovering the information it needs. | |||
requirements on DNS recursive resolvers. It is merely describing | (This language is not placing any new requirements on DNS | |||
the existing operation of the DNS protocol regarding negative | recursive resolvers. This text merely describes the existing | |||
responses [RFC2308].) | operation of the DNS protocol regarding negative responses | |||
[RFC2308].) | ||||
4. If the client receives a response containing no SOA record, then | 4. If the client receives a response containing no SOA record, then | |||
it proceeds with the iterative approach. The client strips the | it proceeds with the iterative approach. The client strips the | |||
leading label from the current query name and if the resulting | leading label from the current query name and if the resulting | |||
name has at least one label in it, the client sends a new SOA | name has at least one label in it, the client sends an SOA query | |||
query, and processing continues at step 2 above, repeating the | for that new name, and processing continues at step 2 above, | |||
iterative search until either an SOA is received, or the query | repeating the iterative search until either an SOA is received, | |||
name is empty. In the case of an empty name, this is a network | or the query name consists of a single label, i.e., a Top Level | |||
configuration error which should not happen and the client gives | Domain (TLD). In the case of a single-label TLD, this is a | |||
up. The client may retry the operation at a later time, of the | network configuration error which should not happen and the | |||
client's choosing, such after a change in network attachment. | client gives up. The client may retry the operation at a later | |||
time, of the client's choosing, such after a change in network | ||||
attachment. | ||||
5. Once the SOA is known (either by virtue of being seen in the | 5. Once the SOA is known (either by virtue of being seen in the | |||
Answer Section, or in the Authority Section), the client sends a | Answer Section, or in the Authority Section), the client sends a | |||
DNS query with type SRV [RFC2782] for the record name | DNS query with type SRV [RFC2782] for the record name | |||
"_dns-push-tls._tcp.<zone>", where <zone> is the owner name of | "_dns-push-tls._tcp.<zone>", where <zone> is the owner name of | |||
the discovered SOA record. | the discovered SOA record. | |||
6. If the zone in question is set up to offer DNS Push Notifications | 6. If the zone in question is set up to offer DNS Push Notifications | |||
then this SRV record MUST exist. (If this SRV record does not | then this SRV record MUST exist. (If this SRV record does not | |||
exist then the zone is not correctly configured for DNS Push | exist then the zone is not correctly configured for DNS Push | |||
skipping to change at page 13, line 10 ¶ | skipping to change at page 14, line 10 ¶ | |||
means that, as long as the DNS TTL values on the authoritative | means that, as long as the DNS TTL values on the authoritative | |||
records were set to reasonable values, repeated application of this | records were set to reasonable values, repeated application of this | |||
discovery process can be completed nearly instantaneously by the | discovery process can be completed nearly instantaneously by the | |||
client, using only locally-stored cached data. | client, using only locally-stored cached data. | |||
6.2. DNS Push Notification SUBSCRIBE | 6.2. DNS Push Notification SUBSCRIBE | |||
After connecting, and requesting a longer idle timeout and/or | After connecting, and requesting a longer idle timeout and/or | |||
keepalive interval if necessary, a DNS Push Notification client then | keepalive interval if necessary, a DNS Push Notification client then | |||
indicates its desire to receive DNS Push Notifications for a given | indicates its desire to receive DNS Push Notifications for a given | |||
domain name by sending a SUBSCRIBE request over the established DSO | domain name by sending a SUBSCRIBE request to the server. A | |||
session to the server. A SUBSCRIBE request is encoded in a DSO [DSO] | SUBSCRIBE request is encoded in a DSO message [DSO]. This | |||
message. This specification defines a primary DSO TLV for DNS Push | specification defines a primary DSO TLV for DNS Push Notification | |||
Notification SUBSCRIBE Requests (tentatively DSO Type Code 0x40). | SUBSCRIBE Requests (tentatively DSO Type Code 0x40). | |||
The entity that initiates a SUBSCRIBE request is by definition the | The entity that initiates a SUBSCRIBE request is by definition the | |||
client. A server MUST NOT send a SUBSCRIBE request over an existing | client. A server MUST NOT send a SUBSCRIBE request over an existing | |||
session from a client. If a server does send a SUBSCRIBE request | session from a client. If a server does send a SUBSCRIBE request | |||
over a DSO session initiated by a client, this is a fatal error and | over a DSO session initiated by a client, this is a fatal error and | |||
the client should immediately abort the connection with a TCP RST (or | the client should immediately abort the connection with a TCP RST (or | |||
equivalent for other protocols). | equivalent for other protocols). | |||
6.2.1. SUBSCRIBE Request | 6.2.1. SUBSCRIBE Request | |||
A SUBSCRIBE request begins with the standard DSO 12-byte header | A SUBSCRIBE request begins with the standard DSO 12-byte header | |||
[DSO], followed by the SUBSCRIBE TLV. A SUBSCRIBE request message is | [DSO], followed by the SUBSCRIBE primary TLV. A SUBSCRIBE request | |||
illustrated in Figure 1. | message is illustrated in 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 session. For the | is not using for any other active operation on this DSO session. For | |||
purposes here, a MESSAGE ID is in use on this session if the client | the purposes here, a MESSAGE ID is in use on this session if the | |||
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 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. | |||
The other header fields MUST be set as described in the DSO | The other header fields MUST be set as described in the DSO | |||
specification [DSO]. The DNS Opcode is the DSO Opcode. The four | specification [DSO]. The DNS OPCODE field contains the OPCODE value | |||
count fields MUST be zero, and the corresponding four sections MUST | for DNS Stateful Operations (6). The four count fields MUST be zero, | |||
be empty (i.e., absent). | and the corresponding four sections MUST be empty (i.e., absent). | |||
The DSO-TYPE is SUBSCRIBE. The DSO-LENGTH is the length of the DSO- | The DSO-TYPE is SUBSCRIBE (tentatively 0x40). | |||
DATA that follows, which specifies the name, type, and class of the | ||||
record(s) being sought. | The DSO-LENGTH is the length of the DSO-DATA that follows, which | |||
specifies the name, type, and class of the record(s) being sought. | ||||
1 1 1 1 1 1 | 1 1 1 1 1 1 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | |||
| MESSAGE ID | \ | | MESSAGE ID | \ | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
|QR| Opcode | Z | RCODE | | | |QR| OPCODE(6) | Z | RCODE | | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| QDCOUNT (MUST BE ZERO) | | | | QDCOUNT (MUST BE ZERO) | | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > HEADER | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > HEADER | |||
| ANCOUNT (MUST BE ZERO) | | | | ANCOUNT (MUST BE ZERO) | | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| NSCOUNT (MUST BE ZERO) | | | | NSCOUNT (MUST BE ZERO) | | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| ARCOUNT (MUST BE ZERO) | / | | ARCOUNT (MUST BE ZERO) | / | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | |||
| DSO-TYPE = SUBSCRIBE | | | DSO-TYPE = SUBSCRIBE (tentatively 0x40) | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | |||
| DSO-LENGTH (number of octets in DSO-DATA) | | | DSO-LENGTH (number of octets in DSO-DATA) | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | |||
| | \ | | | \ | |||
\ NAME \ | | \ NAME \ | | |||
\ \ | | \ \ | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > DSO-DATA | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > DSO-DATA | |||
| TYPE | | | | TYPE | | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| CLASS | / | | CLASS | / | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | |||
Figure 1: SUBSCRIBE Request | Figure 1: SUBSCRIBE Request | |||
The DSO-DATA for a SUBSCRIBE request MUST contain exactly one NAME, | The DSO-DATA for a SUBSCRIBE request MUST contain exactly one NAME, | |||
Type, and CLASS. Since SUBSCRIBE requests are sent over TCP, | TYPE, and CLASS. Since SUBSCRIBE requests are sent over TCP, | |||
multiple SUBSCRIBE request messages can be concatenated in a single | multiple SUBSCRIBE DSO request messages can be concatenated in a | |||
TCP stream and packed efficiently into TCP segments. | 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 DSO session | cancels the subscription using UNSUBSCRIBE or until the DSO session | |||
between the client and the server is closed. | between the client and the server is closed. | |||
SUBSCRIBE requests on a given session MUST be unique. A client MUST | SUBSCRIBE requests on a given session MUST be unique. A client MUST | |||
NOT send a SUBSCRIBE message that duplicates the NAME, TYPE and CLASS | NOT send a SUBSCRIBE message that duplicates the NAME, TYPE and CLASS | |||
of an existing active subscription on that DSO session. For the | of an existing active subscription on that DSO session. For the | |||
purpose of this matching, the established DNS case-insensitivity for | purpose of this matching, the established DNS case-insensitivity for | |||
US-ASCII letters applies (e.g., "example.com" and "Example.com" are | US-ASCII letters applies (e.g., "example.com" and "Example.com" are | |||
skipping to change at page 15, line 15 ¶ | skipping to change at page 16, line 15 ¶ | |||
DNS wildcarding is not supported. That is, a wildcard ("*") in a | DNS wildcarding is not supported. That is, a wildcard ("*") in a | |||
SUBSCRIBE message matches only a literal wildcard character ("*") in | SUBSCRIBE message matches only a literal wildcard character ("*") in | |||
the zone, and nothing else. | the zone, and nothing else. | |||
Aliasing is not supported. That is, a CNAME in a SUBSCRIBE message | Aliasing is not supported. That is, a CNAME in a SUBSCRIBE message | |||
matches only a literal CNAME record in the zone, and nothing else. | matches only a literal CNAME record in the zone, and nothing else. | |||
A client may SUBSCRIBE to records that are unknown to the server at | A client may SUBSCRIBE to records that are unknown to the server at | |||
the time of the request (providing that the name falls within one of | the time of the request (providing that the name falls within one of | |||
the zone(s) the server is responsible for) and this is not an error. | the zone(s) the server is responsible for) and this is not an error. | |||
The server MUST accept these requests and send Push Notifications if | The server MUST NOT return NXDOMAIN in this case. The server MUST | |||
and when matching records are found in the future. | accept these requests and send Push Notifications if and when | |||
matching records are found in the future. | ||||
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 | |||
skipping to change at page 16, line 10 ¶ | skipping to change at page 17, line 10 ¶ | |||
interpreted to mean "ALL", not "ANY". After accepting a subscription | interpreted to mean "ALL", not "ANY". After accepting a subscription | |||
where one or both of TYPE or CLASS are 255, the server MUST send Push | where one or both of TYPE or CLASS are 255, the server MUST send Push | |||
Notification Updates for ALL record changes that match the | Notification Updates for ALL record changes that match the | |||
subscription, not just some of them. | subscription, not just some of them. | |||
6.2.2. SUBSCRIBE Response | 6.2.2. SUBSCRIBE Response | |||
Each SUBSCRIBE request generates exactly one SUBSCRIBE response from | Each SUBSCRIBE request generates exactly one SUBSCRIBE response from | |||
the server. | the server. | |||
A SUBSCRIBE response message begins with the standard DSO 12-byte | A SUBSCRIBE response begins with the standard DSO 12-byte header | |||
header [DSO], possibly followed by one or more optional TLVs, such as | [DSO], possibly followed by one or more optional TLVs, such as a | |||
a Retry Delay TLV. | Retry Delay TLV. | |||
The MESSAGE ID field MUST echo the value given in the ID field of the | The MESSAGE ID field MUST echo the value given in the ID field of the | |||
SUBSCRIBE request. This is how the client knows which request is | SUBSCRIBE request. This is how the client knows which request is | |||
being responded to. | being responded to. | |||
A SUBSCRIBE response message MUST NOT include a SUBSCRIBE TLV. If a | A SUBSCRIBE response message MUST NOT include a SUBSCRIBE TLV. If a | |||
client receives a SUBSCRIBE response message containing a SUBSCRIBE | client receives a SUBSCRIBE response message containing a SUBSCRIBE | |||
TLV then the response message is processed but the SUBSCRIBE TLV MUST | TLV then the response message is processed but the SUBSCRIBE TLV MUST | |||
be silently ignored. | be silently ignored. | |||
skipping to change at page 17, line 6 ¶ | skipping to change at page 18, line 6 ¶ | |||
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. Note that NXDOMAIN is not a valid RCODE in response to | these values. Note that NXDOMAIN is not a valid RCODE in response to | |||
a SUBSCRIBE Request. However, future circumstances may create | a SUBSCRIBE Request. However, future circumstances may create | |||
situations where other RCODE values are appropriate in SUBSCRIBE | situations where other RCODE values are appropriate in SUBSCRIBE | |||
Responses, so clients MUST be prepared to accept SUBSCRIBE Responses | Responses, so clients MUST be prepared to accept SUBSCRIBE Responses | |||
with any other RCODE value. | with any other RCODE value. | |||
If the server sends a nonzero RCODE in the SUBSCRIBE response, that | If the server sends a nonzero RCODE in the SUBSCRIBE response, that | |||
means | means: | |||
a. the client is (at least partially) misconfigured, | a. the client is (at least partially) misconfigured, | |||
b. the server resources are exhausted, or | b. the server resources are exhausted, or | |||
c. there is some other unknown failure on the server. | c. there is some other unknown failure on the server. | |||
In any case, the client shouldn't retry the subscription to this | In any case, the client shouldn't retry the subscription to this | |||
server right away. If multiple SRV records were returned as | server right away. If multiple SRV records were returned as | |||
described in discovery Section 6.1, Paragraph 7, a subsequent server | described in Section 6.1, Paragraph 7, a subsequent server can be | |||
can be tried immediately. | tried immediately. | |||
If the client has other successful subscriptions to this server, | If the client has other successful subscriptions to this server, | |||
these subscriptions can remain even though additional subscriptions | these subscriptions remain even though additional subscriptions may | |||
may be refused. Neither the client, nor the server are required to | be refused. Neither the client nor the server are required to close | |||
close the connection, although, either end may choose to do so. | the connection, although, either end may choose to do so. | |||
If the server sends a nonzero RCODE then it SHOULD append a Retry | If the server sends a nonzero RCODE then it SHOULD append a Retry | |||
Delay TLV [DSO] to the response specifying a delay before the client | Delay TLV [DSO] to the response specifying a delay before the client | |||
attempts this operation again. Recommended values for the delay for | attempts this operation again. Recommended values for the delay for | |||
different RCODE values are given below. These recommended values | different RCODE values are given below. These recommended values | |||
apply both to the default values a server should place in the Retry | apply both to the default values a server should place in the Retry | |||
Delay TLV, and the default values a client should assume if the | Delay TLV, and the default values a client should assume if the | |||
server provides no Retry Delay TLV. | server provides no Retry Delay TLV. | |||
For RCODE = 1 (FORMERR) the delay may be any value selected by the | For RCODE = 1 (FORMERR) the delay may be any value selected by the | |||
implementer. A value of five minutes is RECOMMENDED, to reduce | implementer. A value of five minutes is RECOMMENDED, to reduce | |||
the risk of high load from defective clients. | the risk of high load from defective clients. | |||
For RCODE = 2 (SERVFAIL) the delay should be chosen according to | For RCODE = 2 (SERVFAIL) the delay should be chosen according to | |||
the level of server overload and the anticipated duration of that | the level of server overload and the anticipated duration of that | |||
overload. By default, a value of one minute is RECOMMENDED. If a | overload. By default, a value of one minute is RECOMMENDED. If a | |||
more serious server failure occurs, the delay may be longer in | more serious server failure occurs, the delay may be longer in | |||
accordance with the specific problem encountered. | accordance with the specific problem encountered. | |||
For RCODE = 4 (NOTIMP), which occurs on a server that doesn't | For RCODE = 4 (NOTIMP), which occurs on a server that doesn't | |||
implement DSO [DSO], it is unlikely that the server will begin | implement DNS Stateful Operations [DSO], it is unlikely that the | |||
supporting DSO in the next few minutes, so the retry delay SHOULD | server will begin supporting DSO in the next few minutes, so the | |||
be one hour. Note that in such a case, a server that doesn't | retry delay SHOULD be one hour. Note that in such a case, a | |||
implement DSO is unlikely to place a Retry Delay TLV in its | server that doesn't implement DSO is unlikely to place a Retry | |||
response, so this recommended value in particular applies to what | Delay TLV in its response, so this recommended value in particular | |||
a client should assume by default. | applies to what a client should assume by default. | |||
For RCODE = 5 (REFUSED), which occurs on a server that implements | For RCODE = 5 (REFUSED), which occurs on a server that implements | |||
DNS Push Notifications, but is currently configured to disallow | DNS Push Notifications, but is currently configured to disallow | |||
DNS Push Notifications, the retry delay may be any value selected | DNS Push Notifications, the retry delay may be any value selected | |||
by the implementer and/or configured by the operator. | by the implementer and/or configured by the operator. | |||
If the server being queried is not the local resolver, this is a | If the server being queried is listed in a | |||
misconfiguration, since this server is listed in a | "_dns-push-tls._tcp.<zone>" SRV record for the zone, then this is | |||
"_dns-push-tls._tcp.<zone>" SRV record, but the server itself is | a misconfiguration, since this server is being advertised as | |||
not currently configured to support DNS Push Notifications for | supporting DNS Push Notifications for this zone, but the server | |||
that zone. Since it is possible that the misconfiguration may be | itself is not currently configured to perform that task. Since it | |||
repaired at any time, the retry delay should not be set too high. | is possible that the misconfiguration may be repaired at any time, | |||
By default, a value of 5 minutes is RECOMMENDED. | the retry delay should not be set too high. By default, a value | |||
of 5 minutes is RECOMMENDED. | ||||
For RCODE = 9 (NOTAUTH), which occurs on a server that implements | For RCODE = 9 (NOTAUTH), which occurs on a server that implements | |||
DNS Push Notifications, but is not configured to be authoritative | DNS Push Notifications, but is not configured to be authoritative | |||
for the requested name, the retry delay may be any value selected | for the requested name, the retry delay may be any value selected | |||
by the implementer and/or configured by the operator. | by the implementer and/or configured by the operator. | |||
This is a misconfiguration, since this server is listed in a | If the server being queried is listed in a | |||
"_dns-push-tls._tcp.<zone>" SRV record, but the server itself is | "_dns-push-tls._tcp.<zone>" SRV record for the zone, then this is | |||
not currently configured to support DNS Push Notifications for | a misconfiguration, since this server is being advertised as | |||
that zone. Since it is possible that the misconfiguration may be | supporting DNS Push Notifications for this zone, but the server | |||
repaired at any time, the retry delay should not be set too high. | itself is not currently configured to perform that task. Since it | |||
By default, a value of 5 minutes is RECOMMENDED. | is possible that the misconfiguration may be repaired at any time, | |||
the retry delay should not be set too high. By default, a value | ||||
of 5 minutes is RECOMMENDED. | ||||
For RCODE = 11 (DSOTYPENI), which occurs on a server that doesn't | For RCODE = 11 (DSOTYPENI), which occurs on a server that | |||
implement DNS Push Notifications, it is unlikely that the server | implements DSO but doesn't implement DNS Push Notifications, it is | |||
will begin supporting DNS Push Notifications in the next few | unlikely that the server will begin supporting DNS Push | |||
minutes, so the retry delay SHOULD be one hour. | Notifications in the next few minutes, so the retry delay SHOULD | |||
be one hour. | ||||
For other RCODE values, the retry delay should be set by the | For other RCODE values, the retry delay should be set by the | |||
server as appropriate for that error condition. By default, a | server as appropriate for that error condition. By default, a | |||
value of 5 minutes is RECOMMENDED. | value of 5 minutes is RECOMMENDED. | |||
For RCODE = 9 (NOTAUTH), the time delay applies to requests for other | For RCODE = 9 (NOTAUTH), the time delay applies to requests for other | |||
names falling within the same zone. Requests for names falling | names falling within the same zone. Requests for names falling | |||
within other zones are not subject to the delay. For all other | within other zones are not subject to the delay. For all other | |||
RCODEs the time delay applies to all subsequent requests to this | RCODEs the time delay applies to all subsequent requests to this | |||
server. | server. | |||
skipping to change at page 19, line 9 ¶ | skipping to change at page 20, line 9 ¶ | |||
After sending an error response the server MAY allow the session to | After sending an error response the server MAY allow the session to | |||
remain open, or MAY send a DNS Push Notification Retry Delay | remain open, or MAY send a DNS Push Notification Retry Delay | |||
Operation TLV instructing the client to close the session, as | Operation TLV instructing the client to close the session, as | |||
described in the DSO specification [DSO]. Clients MUST correctly | described in the DSO specification [DSO]. Clients MUST correctly | |||
handle both cases. | handle both cases. | |||
6.3. DNS Push Notification Updates | 6.3. DNS Push Notification Updates | |||
Once a subscription has been successfully established, the server | Once a subscription has been successfully established, the server | |||
generates PUSH messages to send to the client as appropriate. In the | generates PUSH messages to send to the client as appropriate. In the | |||
case that the answer set was non-empty at the moment the subscription | case that the answer set was already non-empty at the moment the | |||
was established, an initial PUSH message will be sent immediately | subscription was established, an initial PUSH message will be sent | |||
following the SUBSCRIBE Response. Subsequent changes to the answer | immediately following the SUBSCRIBE Response. Subsequent changes to | |||
set are then communicated to the client in subsequent PUSH messages. | the answer 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 DSO 12-byte header [DSO], | A PUSH unidirectional message begins with the standard DSO 12-byte | |||
followed by the PUSH TLV. A PUSH message is illustrated in Figure 2. | header [DSO], followed by the PUSH primary TLV. A PUSH message is | |||
illustrated in Figure 2. | ||||
In accordance with the definition of DSO unidirectional messages, the | In accordance with the definition of DSO unidirectional messages, the | |||
MESSAGE ID field MUST be zero. There is no client response to a PUSH | MESSAGE ID field MUST be zero. There is no client response to a PUSH | |||
message. | message. | |||
The other header fields MUST also be set as described in the DSO | The other header fields MUST be set as described in the DSO | |||
specification [DSO]. The DNS Opcode is the DSO Opcode. The four | specification [DSO]. The DNS OPCODE field contains the OPCODE value | |||
count fields MUST be zero, and the corresponding four sections MUST | for DNS Stateful Operations (6). The four count fields MUST be zero, | |||
be empty (i.e., absent). | and the corresponding four sections MUST be empty (i.e., absent). | |||
The DSO-TYPE is PUSH (tentatively 0x41). The DSO-LENGTH is the | The DSO-TYPE is PUSH (tentatively 0x41). | |||
length of the DSO-DATA that follows, which specifies the changes | ||||
being communicated. | The DSO-LENGTH is the length of the DSO-DATA that follows, which | |||
specifies the changes being communicated. | ||||
The DSO-DATA contains one or more Update records. A PUSH Message | The DSO-DATA contains one or more Update records. A PUSH Message | |||
MUST contain at least one Update record. If a PUSH Message is | MUST contain at least one Update record. If a PUSH Message is | |||
received that contains zero Update records, this is a fatal error, | received that contains zero Update records, this is a fatal error, | |||
and the receiver MUST immediately terminate the connection with a TCP | and the receiver MUST immediately terminate the connection with a TCP | |||
RST (or equivalent for other protocols). The Update records are | RST (or equivalent for other protocols). The Update records are | |||
formatted in the customary way for Resource Records in DNS messages. | formatted in the customary way for Resource Records in DNS messages. | |||
Update records in a PUSH Message are interpreted according to the | Update records in a PUSH Message are interpreted according to the | |||
same rules as for DNS Update [RFC2136] messages, namely: | same rules as for DNS Update [RFC2136] messages, namely: | |||
skipping to change at page 20, line 4 ¶ | skipping to change at page 21, line 7 ¶ | |||
Delete an RRset from a name: | Delete an RRset from a name: | |||
TTL=0, CLASS=ANY, RDLENGTH=0; | TTL=0, CLASS=ANY, RDLENGTH=0; | |||
TYPE specifies the RRset being deleted. | TYPE specifies the RRset being deleted. | |||
Delete an individual RR from a name: | Delete an individual RR from a name: | |||
TTL=0, CLASS=NONE; | TTL=0, CLASS=NONE; | |||
TYPE, RDLENGTH and RDATA specifies the RR being deleted. | TYPE, RDLENGTH and RDATA specifies the RR being deleted. | |||
Add to an RRset: | Add to an RRset: | |||
TTL, CLASS, TYPE, RDLENGTH and RDATA specifies the RR being added. | TTL, CLASS, TYPE, RDLENGTH and RDATA specifies the RR being added. | |||
1 1 1 1 1 1 | 1 1 1 1 1 1 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | |||
| MESSAGE ID (MUST BE ZERO) | \ | | MESSAGE ID (MUST BE ZERO) | \ | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
|QR| Opcode | Z | RCODE | | | |QR| OPCODE(6) | Z | RCODE | | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| QDCOUNT (MUST BE ZERO) | | | | QDCOUNT (MUST BE ZERO) | | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > HEADER | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > HEADER | |||
| ANCOUNT (MUST BE ZERO) | | | | ANCOUNT (MUST BE ZERO) | | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| NSCOUNT (MUST BE ZERO) | | | | NSCOUNT (MUST BE ZERO) | | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| ARCOUNT (MUST BE ZERO) | / | | ARCOUNT (MUST BE ZERO) | / | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | |||
| DSO-TYPE = PUSH | | | DSO-TYPE = PUSH (tentatively 0x41) | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | |||
| DSO-LENGTH (number of octets in DSO-DATA) | | | DSO-LENGTH (number of octets in DSO-DATA) | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | |||
\ NAME \ \ | \ NAME \ \ | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| TYPE | | | | TYPE | | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| CLASS | | | | CLASS | | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| TTL | | | | TTL | | | |||
skipping to change at page 20, line 49 ¶ | skipping to change at page 21, line 51 ¶ | |||
: NAME, TYPE, CLASS, TTL, RDLEN, RDATA : | | : NAME, TYPE, CLASS, TTL, RDLEN, RDATA : | | |||
: Repeated As Necessary : / | : Repeated As Necessary : / | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | |||
Figure 2: PUSH Message | Figure 2: PUSH Message | |||
When processing the records received in a PUSH Message, the receiving | When processing the records received in a PUSH Message, the receiving | |||
client MUST validate that the records being added or deleted | client MUST validate that the records being added or deleted | |||
correspond with at least one currently active subscription on that | correspond with at least one currently active subscription on that | |||
session. Specifically, the record name MUST match the name given in | session. Specifically, the record name MUST match the name given in | |||
the SUBSCRIBE request, subject to the usual established DNS case- | a SUBSCRIBE request, subject to the usual established DNS case- | |||
insensitivity for US-ASCII letters. If the TYPE in the SUBSCRIBE | insensitivity for US-ASCII letters. If the TYPE in the SUBSCRIBE | |||
request was not ANY (255) then the TYPE of the record must match the | request was not ANY (255) then the TYPE of the record must match the | |||
TYPE given in the SUBSCRIBE request. If the CLASS in the SUBSCRIBE | TYPE given in the SUBSCRIBE request. If the CLASS in the SUBSCRIBE | |||
request was not ANY (255) then the CLASS of the record must match the | request was not ANY (255) then the CLASS of the record must match the | |||
CLASS given in the SUBSCRIBE request. If a matching active | CLASS given in the SUBSCRIBE request. If a matching active | |||
subscription on that session is not found, then that individual | subscription on that session is not found, then that individual | |||
record addition/deletion is silently ignored. Processing of other | record addition/deletion is silently ignored. Processing of other | |||
additions and deletions in this message is not affected. The DSO | additions and deletions in this message is not affected. The DSO | |||
session is not closed. This is to allow for the unavoidable race | session is not closed. This is to allow for the unavoidable race | |||
condition where a client sends an outbound UNSUBSCRIBE while inbound | condition where a client sends an outbound UNSUBSCRIBE while inbound | |||
skipping to change at page 22, line 10 ¶ | skipping to change at page 23, line 10 ¶ | |||
record is still there. Once a subscription is cancelled | record is still there. Once a subscription is cancelled | |||
(individually, or as a result of the DSO session being closed) record | (individually, or as a result of the DSO session being closed) record | |||
aging for records covered by the subscription resumes and records are | aging for records covered by the subscription resumes and records are | |||
removed from the local cache when their TTL reaches zero. | removed from the local cache when their TTL reaches zero. | |||
6.4. DNS Push Notification UNSUBSCRIBE | 6.4. DNS Push Notification UNSUBSCRIBE | |||
To cancel an individual subscription without closing the entire DSO | To cancel an individual subscription without closing the entire DSO | |||
session, the client sends an UNSUBSCRIBE message over the established | session, the client sends an UNSUBSCRIBE message over the established | |||
DSO session to the server. The UNSUBSCRIBE message is encoded as a | DSO session to the server. The UNSUBSCRIBE message is encoded as a | |||
DSO [DSO] unidirectional message. This specification defines a | DSO unidirectional message [DSO]. This specification defines a | |||
primary unidirectional DSO TLV for DNS Push Notification UNSUBSCRIBE | primary unidirectional DSO TLV for DNS Push Notification UNSUBSCRIBE | |||
Requests (tentatively DSO Type Code 0x42). | Requests (tentatively DSO Type Code 0x42). | |||
A server MUST NOT initiate an UNSUBSCRIBE request. If a server does | A server MUST NOT initiate an UNSUBSCRIBE request. If a server does | |||
send an UNSUBSCRIBE request over a DSO session initiated by a client, | send an UNSUBSCRIBE request over a DSO session initiated by a client, | |||
this is a fatal error and the client should immediately abort the | this is a fatal error and the client should immediately abort the | |||
connection with a TCP RST (or equivalent for other protocols). | connection with a TCP RST (or equivalent for other protocols). | |||
6.4.1. UNSUBSCRIBE Request | 6.4.1. UNSUBSCRIBE Request | |||
An UNSUBSCRIBE request begins with the standard DSO 12-byte header | An UNSUBSCRIBE request begins with the standard DSO 12-byte header | |||
[DSO], followed by the UNSUBSCRIBE TLV. An UNSUBSCRIBE request | [DSO], followed by the UNSUBSCRIBE primary TLV. An UNSUBSCRIBE | |||
message is illustrated in Figure 3. | request message is illustrated in Figure 3. | |||
The MESSAGE ID field MUST be zero. There is no server response to a | In accordance with the definition of DSO unidirectional messages, the | |||
MESSAGE ID field MUST be zero. There is no server response to a | ||||
UNSUBSCRIBE message. | UNSUBSCRIBE message. | |||
The other header fields MUST be set as described in the DSO | The other header fields MUST be set as described in the DSO | |||
specification [DSO]. The DNS Opcode is the DSO Opcode. The four | specification [DSO]. The DNS OPCODE field contains the OPCODE value | |||
count fields MUST be zero, and the corresponding four sections MUST | for DNS Stateful Operations (6). The four count fields MUST be zero, | |||
be empty (i.e., absent). | and the corresponding four sections MUST be empty (i.e., absent). | |||
In the UNSUBSCRIBE TLV the DSO-TYPE is UNSUBSCRIBE. The DSO-LENGTH | The DSO-TYPE is UNSUBSCRIBE (tentatively 0x42). | |||
is 2 octets. | ||||
The DSO-DATA contains the MESSAGE ID field of the value given in the | The DSO-LENGTH field contains the value 2, the length of the 2-octet | |||
ID field of an active SUBSCRIBE request. This is how the server | MESSAGE ID contained in the DSO-DATA. | |||
knows which SUBSCRIBE request is being cancelled. After receipt of | ||||
the UNSUBSCRIBE request, the SUBSCRIBE request is no longer active. | The DSO-DATA contains the value given in the MESSAGE ID field of an | |||
active SUBSCRIBE request. This is how the server knows which | ||||
SUBSCRIBE request is being cancelled. After receipt of the | ||||
UNSUBSCRIBE request, the SUBSCRIBE request is no longer active. | ||||
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. | response before issuing the UNSUBSCRIBE request. | |||
Consequently, it is possible for a server to receive an UNSUBSCRIBE | ||||
request that does not match any currently active subscription. This | ||||
can occur when a client sends a SUBSCRIBE request, which subsequently | ||||
fails and returns an error code, but the client sent an UNSUBSCRIBE | ||||
request before it became aware that the SUBSCRIBE request had failed. | ||||
Because of this, servers MUST silently ignore UNSUBSCRIBE requests | ||||
that do not match any currently active subscription. | ||||
1 1 1 1 1 1 | 1 1 1 1 1 1 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | |||
| MESSAGE ID (MUST BE ZERO) | \ | | MESSAGE ID (MUST BE ZERO) | \ | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
|QR| Opcode | Z | RCODE | | | |QR| OPCODE(6) | Z | RCODE | | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| QDCOUNT (MUST BE ZERO) | | | | QDCOUNT (MUST BE ZERO) | | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > HEADER | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > HEADER | |||
| ANCOUNT (MUST BE ZERO) | | | | ANCOUNT (MUST BE ZERO) | | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| NSCOUNT (MUST BE ZERO) | | | | NSCOUNT (MUST BE ZERO) | | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| ARCOUNT (MUST BE ZERO) | / | | ARCOUNT (MUST BE ZERO) | / | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | |||
| DSO-TYPE = UNSUBSCRIBE | | | DSO-TYPE = UNSUBSCRIBE (tentatively 0x42) | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | |||
| DSO-LENGTH (2 octets) | | | DSO-LENGTH (2) | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | |||
| SUBSCRIBE MESSAGE ID | > DSO-DATA | | SUBSCRIBE MESSAGE ID | > DSO-DATA | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | |||
Figure 3: UNSUBSCRIBE Request | Figure 3: UNSUBSCRIBE Request | |||
6.5. DNS Push Notification RECONFIRM | 6.5. DNS Push Notification RECONFIRM | |||
Sometimes, particularly when used with a Discovery Proxy [DisProx], a | Sometimes, particularly when used with a Discovery Proxy [DisProx], a | |||
DNS Zone may contain stale data. When a client encounters data that | DNS Zone may contain stale data. When a client encounters data that | |||
it believe may be stale (e.g., an SRV record referencing a target | it believes may be stale (e.g., an SRV record referencing a target | |||
host+port that is not responding to connection requests) the client | host+port that is not responding to connection requests) the client | |||
can send a RECONFIRM request to ask the server to re-verify that the | can send a RECONFIRM request to ask the server to re-verify that the | |||
data is still valid. For a Discovery Proxy, this causes it to issue | data is still valid. For a Discovery Proxy, this causes it to issue | |||
new Multicast DNS requests to ascertain whether the target device is | new Multicast DNS requests to ascertain whether the target device is | |||
still present. For other types of DNS server, the RECONFIRM | still present. How the Discovery Proxy causes these new Multicast | |||
operation is currently undefined, and SHOULD result in a NOERROR | DNS requests to be issued depends on the details of the underlying | |||
response, but otherwise need not cause any action to occur. Frequent | Multicast DNS being used. For example, a Discovery Proxy built on | |||
RECONFIRM operations may be a sign of network unreliability, or some | Apple's dns_sd.h API responds to a DNS Push Notification RECONFIRM | |||
kind of misconfiguration, so RECONFIRM operations MAY be logged or | message by calling the underlying API's DNSServiceReconfirmRecord() | |||
otherwise communicated to a human administrator to assist in | routine. | |||
detecting, and remedying, such network problems. | ||||
For other types of DNS server, the RECONFIRM operation is currently | ||||
undefined, and SHOULD result in a NOERROR response, but otherwise | ||||
need not cause any action to occur. | ||||
Frequent use of RECONFIRM operations may be a sign of network | ||||
unreliability, or some kind of misconfiguration, so RECONFIRM | ||||
operations MAY be logged or otherwise communicated to a human | ||||
administrator to assist in detecting, and remedying, such network | ||||
problems. | ||||
If, after receiving a valid RECONFIRM request, the server determines | If, after receiving a valid RECONFIRM request, the server determines | |||
that the disputed records are in fact no longer valid, then | that the disputed records are in fact no longer valid, then | |||
subsequent DNS PUSH Messages will be generated to inform interested | subsequent DNS PUSH Messages will be generated to inform interested | |||
clients. Thus, one client discovering that a previously-advertised | clients. Thus, one client discovering that a previously-advertised | |||
device (like a network printer) is no longer present has the side | device (like a network printer) is no longer present has the side | |||
effect of informing all other interested clients that the device in | effect of informing all other interested clients that the device in | |||
question is now gone. | question is now gone. | |||
6.5.1. RECONFIRM Request | 6.5.1. RECONFIRM Request | |||
A RECONFIRM request begins with the standard DSO 12-byte header | A RECONFIRM request begins with the standard DSO 12-byte header | |||
[DSO], followed by the primary DSO RECONFIRM TLV. A RECONFIRM | [DSO], followed by the RECONFIRM primary TLV. A RECONFIRM request | |||
request message is illustrated in Figure 4. | message is illustrated in 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 DSO session. For | is not using for any other active operation on this DSO session. For | |||
the purposes here, a MESSAGE ID is in use on this session if the | the purposes here, a MESSAGE ID is in use on this session if the | |||
client has used it in a request for which it has not yet received a | client has used it in a request for which it has not yet received a | |||
response, or if the client has used it for a subscription which it | 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. | |||
The other header fields MUST be set as described in the DSO | The other header fields MUST be set as described in the DSO | |||
specification [DSO]. The DNS Opcode is the DSO Opcode. The four | specification [DSO]. The DNS OPCODE field contains the OPCODE value | |||
count fields MUST be zero, and the corresponding four sections MUST | for DNS Stateful Operations (6). The four count fields MUST be zero, | |||
be empty (i.e., absent). | and the corresponding four sections MUST be empty (i.e., absent). | |||
The DSO-TYPE is RECONFIRM (tentatively 0x43). The DSO-LENGTH is the | The DSO-TYPE is RECONFIRM (tentatively 0x43). | |||
length of the data that follows, which specifies the name, type, | ||||
class, and content of the record being disputed. | The DSO-LENGTH is the length of the data that follows, which | |||
specifies the name, type, class, and content of the record being | ||||
disputed. | ||||
1 1 1 1 1 1 | 1 1 1 1 1 1 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | |||
| MESSAGE ID | \ | | MESSAGE ID | \ | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
|QR| Opcode | Z | RCODE | | | |QR| OPCODE(6) | Z | RCODE | | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| QDCOUNT (MUST BE ZERO) | | | | QDCOUNT (MUST BE ZERO) | | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > HEADER | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > HEADER | |||
| ANCOUNT (MUST BE ZERO) | | | | ANCOUNT (MUST BE ZERO) | | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| NSCOUNT (MUST BE ZERO) | | | | NSCOUNT (MUST BE ZERO) | | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| ARCOUNT (MUST BE ZERO) | / | | ARCOUNT (MUST BE ZERO) | / | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | |||
| DSO-TYPE = RECONFIRM | | | DSO-TYPE = RECONFIRM (tentatively 0x43) | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | |||
| DSO-LENGTH (number of octets in DSO-DATA) | | | DSO-LENGTH (number of octets in DSO-DATA) | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | |||
\ NAME \ \ | \ NAME \ \ | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| TYPE | | | | TYPE | | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > DSO-DATA | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > DSO-DATA | |||
| CLASS | | | | CLASS | | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
\ RDATA \ / | \ RDATA \ / | |||
skipping to change at page 26, line 10 ¶ | skipping to change at page 28, line 10 ¶ | |||
the zone, and nothing else. | the zone, and nothing else. | |||
Aliasing is not supported. That is, a CNAME in a RECONFIRM message | Aliasing is not supported. That is, a CNAME in a RECONFIRM message | |||
matches only a literal CNAME record in the zone, and nothing else. | matches only a literal CNAME record in the zone, and nothing else. | |||
6.5.2. RECONFIRM Response | 6.5.2. RECONFIRM Response | |||
Each RECONFIRM request generates exactly one RECONFIRM response from | Each RECONFIRM request generates exactly one RECONFIRM response from | |||
the server. | the server. | |||
A RECONFIRM response message begins with the standard DSO 12-byte | A RECONFIRM response begins with the standard DSO 12-byte header | |||
header [DSO], possibly followed by one or more optional TLVs, such as | [DSO], possibly followed by one or more optional TLVs, such as a | |||
a Retry Delay TLV. For suggested values for the Retry Delay TLV, see | Retry Delay TLV. For suggested values for the Retry Delay TLV, see | |||
Section 6.2.2. | Section 6.2.2. | |||
The MESSAGE ID field MUST echo the value given in the ID field of the | The MESSAGE ID field MUST echo the value given in the ID field of the | |||
RECONFIRM request. This is how the client knows which request is | RECONFIRM request. This is how the client knows which request is | |||
being responded to. | being responded to. | |||
A RECONFIRM response message MUST NOT include a DSO RECONFIRM TLV. | A RECONFIRM response message MUST NOT include a DSO RECONFIRM TLV. | |||
If a client receives a RECONFIRM response message containing a | If a client receives a RECONFIRM response message containing a | |||
RECONFIRM TLV then the response message is processed but the | RECONFIRM TLV then the response message is processed but the | |||
RECONFIRM TLV MUST be silently ignored. | RECONFIRM TLV MUST be silently ignored. | |||
skipping to change at page 28, line 7 ¶ | skipping to change at page 30, line 7 ¶ | |||
the client's point of view. The client may log them to aid in | the client's point of view. The client may log them to aid in | |||
debugging, but otherwise they require no special action. | debugging, but otherwise they require no special action. | |||
Nonzero RCODE values other than these three indicate a serious | Nonzero RCODE values other than these three indicate a serious | |||
problem with the client. After sending an error response other than | problem with the client. After sending an error response other than | |||
one of these three, the server SHOULD send a DSO Retry Delay TLV to | one of these three, the server SHOULD send a DSO Retry Delay TLV to | |||
end the DSO session, as described in the DSO specification [DSO]. | end the DSO session, as described in the DSO specification [DSO]. | |||
6.6. DNS Stateful Operations TLV Context Summary | 6.6. DNS Stateful Operations TLV Context Summary | |||
This document defines four new DSO TLVs. As suggested in [DSO], | This document defines four new DSO TLVs. As suggested in Section 8.2 | |||
Section 8.2, the valid contexts of these new TLV types are summarized | of the DNS Stateful Operations specification [DSO], the valid | |||
below. | contexts of these new TLV types are summarized below. | |||
The client TLV contexts are: | The client TLV contexts are: | |||
C-P: Client primary TLV | C-P: Client request message, primary TLV | |||
C-U: Client primary unidirectional TLV | C-U: Client unidirectional message, primary TLV | |||
C-A: Client additional TLV | C-A: Client request or unidirectional message, additional TLV | |||
CRP: Client response primary TLV | CRP: Response back to client, primary TLV | |||
CRA: Client response additional TLV | CRA: Response back to client, additional TLV | |||
+-------------+-----+-----+-----+-----+-----+ | +-------------+-----+-----+-----+-----+-----+ | |||
| TLV Type | C-P | C-U | C-A | CRP | CRA | | | TLV Type | C-P | C-U | C-A | CRP | CRA | | |||
+-------------+-----+-----+-----+-----+-----+ | +-------------+-----+-----+-----+-----+-----+ | |||
| SUBSCRIBE | X | | | | | | | SUBSCRIBE | X | | | | | | |||
| PUSH | | | | | | | | PUSH | | | | | | | |||
| UNSUBSCRIBE | | X | | | | | | UNSUBSCRIBE | | X | | | | | |||
| RECONFIRM | X | | | | | | | RECONFIRM | X | | | | | | |||
+-------------+-----+-----+-----+-----+-----+ | +-------------+-----+-----+-----+-----+-----+ | |||
Table 3: DSO TLV Client Context Summary | Table 3: DSO TLV Client Context Summary | |||
The server TLV contexts are: | The server TLV contexts are: | |||
S-P: Server primary TLV | S-P: Server request message, primary TLV | |||
S-U: Server primary unidirectional TLV | S-U: Server unidirectional message, primary TLV | |||
S-A: Server additional TLV | S-A: Server request or unidirectional message, additional TLV | |||
SRP: Server response primary TLV | SRP: Response back to server, primary TLV | |||
SRA: Server response additional TLV | SRA: Response back to server, additional TLV | |||
+-------------+-----+-----+-----+-----+-----+ | +-------------+-----+-----+-----+-----+-----+ | |||
| TLV Type | S-P | S-U | S-A | SRP | SRA | | | TLV Type | S-P | S-U | S-A | SRP | SRA | | |||
+-------------+-----+-----+-----+-----+-----+ | +-------------+-----+-----+-----+-----+-----+ | |||
| SUBSCRIBE | | | | | | | | SUBSCRIBE | | | | | | | |||
| PUSH | | X | | | | | | PUSH | | X | | | | | |||
| UNSUBSCRIBE | | | | | | | | UNSUBSCRIBE | | | | | | | |||
| RECONFIRM | | | | | | | | RECONFIRM | | | | | | | |||
+-------------+-----+-----+-----+-----+-----+ | +-------------+-----+-----+-----+-----+-----+ | |||
skipping to change at page 30, line 8 ¶ | skipping to change at page 32, line 8 ¶ | |||
If a client has performed operations on this session that it would | If a client has performed operations on this session that it would | |||
not want lost (like DNS updates) then the client SHOULD do an orderly | not want lost (like DNS updates) then the client SHOULD do an orderly | |||
disconnect, sending a TLS close_notify followed by a TCP FIN. (In | disconnect, sending a TLS close_notify followed by a TCP FIN. (In | |||
the BSD Sockets API, sending a TCP FIN is achieved by calling | the BSD Sockets API, sending a TCP FIN is achieved by calling | |||
"shutdown(s,SHUT_WR)" and keeping the socket open until all remaining | "shutdown(s,SHUT_WR)" and keeping the socket open until all remaining | |||
data has been read from it.) | data has been read from it.) | |||
7. Security Considerations | 7. Security Considerations | |||
The Strict Privacy Usage Profile for DNS over TLS is REQUIRED for DNS | The Strict Privacy Usage Profile for DNS over TLS is REQUIRED for DNS | |||
Push Notifications as defined in "Usage Profiles for DNS over TLS and | Push Notifications [RFC8310]. Cleartext connections for DNS Push | |||
DNS over DTLS" [RFC8310]. Cleartext connections for DNS Push | ||||
Notifications are not permissible. Since this is a new protocol, | Notifications are not permissible. Since this is a new protocol, | |||
transition mechanisms from the Opportunistic Privacy profile are | transition mechanisms from the Opportunistic Privacy profile are | |||
deemed unnecessary. | unnecessary. | |||
Also, see Section 9 of the DNS over (D)TLS Usage Profiles document | ||||
[RFC8310] for additional recommendations for various versions of TLS | ||||
usage. | ||||
DNSSEC is RECOMMENDED for the authentication of DNS Push Notification | DNSSEC is RECOMMENDED for the authentication of DNS Push Notification | |||
servers. TLS alone does not provide complete security. TLS | servers. TLS alone does not provide complete security. TLS | |||
certificate verification can provide reasonable assurance that the | certificate verification can provide reasonable assurance that the | |||
client is really talking to the server associated with the desired | client is really talking to the server associated with the desired | |||
host name, but since the desired host name is learned via a DNS SRV | host name, but since the desired host name is learned via a DNS SRV | |||
query, if the SRV query is subverted then the client may have a | query, if the SRV query is subverted then the client may have a | |||
secure connection to a rogue server. DNSSEC can provided added | secure connection to a rogue server. DNSSEC can provided added | |||
confidence that the SRV query has not been subverted. | confidence that the SRV query has not been subverted. | |||
skipping to change at page 31, line 11 ¶ | skipping to change at page 33, line 14 ¶ | |||
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 Usage Profiles for DNS over TLS and DNS over DTLS [RFC8310] for | See Usage Profiles for DNS over TLS and DNS over DTLS [RFC8310] for | |||
more information on authenticating domain names. Also note that a | more information on authenticating domain names. | |||
DNS Push server is an authoritative server and a DNS Push client is a | ||||
standard DNS client. While the terminology in Usage Profiles for DNS | ||||
over TLS and DNS over DTLS [RFC8310] 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 | ||||
In order to reduce the chances of compression-related attacks, TLS- | ||||
level compression SHOULD be disabled when using TLS versions 1.2 and | ||||
earlier. In TLS 1.3 [RFC8446], TLS-level compression has been | ||||
removed completely. | ||||
7.4. TLS Session Resumption | 7.3. TLS Session Resumption | |||
TLS Session Resumption is permissible on DNS Push Notification | TLS Session Resumption is permissible on DNS Push Notification | |||
servers. The server may keep TLS state with Session IDs [RFC5246] or | servers. The server may keep TLS state with Session IDs [RFC8446] or | |||
operate in stateless mode by sending a Session Ticket [RFC5077] to | operate in stateless mode by sending a Session Ticket [RFC5077] to | |||
the client for it to store. However, closing the TLS connection | the client for it to store. However, closing the TLS connection | |||
terminates the DSO session. When the TLS session is resumed, the DNS | terminates the DSO session. When the TLS session is resumed, the DNS | |||
Push Notification server will not have any subscription state and | Push Notification server will not have any subscription state and | |||
will proceed as with any other new DSO session. Use of TLS Session | will proceed as with any other new DSO session. Use of TLS Session | |||
Resumption may allow a TLS connection to be set up more quickly, but | Resumption may allow a TLS connection to be set up more quickly, but | |||
the client will still have to recreate any desired subscriptions. | the client will still have to recreate any desired subscriptions. | |||
8. IANA Considerations | 8. IANA Considerations | |||
skipping to change at page 32, line 23 ¶ | skipping to change at page 34, line 5 ¶ | |||
+-----------------------+------+----------------------+-------------+ | +-----------------------+------+----------------------+-------------+ | |||
| DNS Push Notification | None | "_dns-push-tls._tcp" | Section 6.1 | | | DNS Push Notification | None | "_dns-push-tls._tcp" | Section 6.1 | | |||
| Service Type | | | | | | Service Type | | | | | |||
+-----------------------+------+----------------------+-------------+ | +-----------------------+------+----------------------+-------------+ | |||
Table 5: IANA Service Type Assignments | Table 5: IANA Service Type Assignments | |||
This document also defines four new DNS Stateful Operation TLV types | This document also defines four new DNS Stateful Operation TLV types | |||
to be recorded in the IANA DSO Type Code Registry. | to be recorded in the IANA DSO Type Code Registry. | |||
+-------------+------------------------+---------------+ | +-------------+------------------------+-------------+ | |||
| Name | Value | Definition | | | Name | Value | Definition | | |||
+-------------+------------------------+---------------+ | +-------------+------------------------+-------------+ | |||
| SUBSCRIBE | TBA (tentatively 0x40) | Section 6.2 | | | SUBSCRIBE | TBA (tentatively 0x40) | Section 6.2 | | |||
| PUSH | TBA (tentatively 0x41) | Section 6.3.1 | | | PUSH | TBA (tentatively 0x41) | Section 6.3 | | |||
| UNSUBSCRIBE | TBA (tentatively 0x42) | Section 6.4 | | | UNSUBSCRIBE | TBA (tentatively 0x42) | Section 6.4 | | |||
| RECONFIRM | TBA (tentatively 0x43) | Section 6.5.1 | | | RECONFIRM | TBA (tentatively 0x43) | Section 6.5 | | |||
+-------------+------------------------+---------------+ | +-------------+------------------------+-------------+ | |||
Table 6: IANA DSO TLV Type Code Assignments | Table 6: IANA DSO TLV Type Code Assignments | |||
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 | |||
skipping to change at page 34, line 5 ¶ | skipping to change at page 35, line 25 ¶ | |||
[RFC2136] Vixie, P., Ed., Thomson, S., Rekhter, Y., and J. Bound, | [RFC2136] Vixie, P., Ed., Thomson, S., Rekhter, Y., and J. Bound, | |||
"Dynamic Updates in the Domain Name System (DNS UPDATE)", | "Dynamic Updates in the Domain Name System (DNS UPDATE)", | |||
RFC 2136, DOI 10.17487/RFC2136, April 1997, | RFC 2136, DOI 10.17487/RFC2136, April 1997, | |||
<https://www.rfc-editor.org/info/rfc2136>. | <https://www.rfc-editor.org/info/rfc2136>. | |||
[RFC2782] Gulbrandsen, A., Vixie, P., and L. Esibov, "A DNS RR for | [RFC2782] Gulbrandsen, A., Vixie, P., and L. Esibov, "A DNS RR for | |||
specifying the location of services (DNS SRV)", RFC 2782, | specifying the location of services (DNS SRV)", RFC 2782, | |||
DOI 10.17487/RFC2782, February 2000, | DOI 10.17487/RFC2782, February 2000, | |||
<https://www.rfc-editor.org/info/rfc2782>. | <https://www.rfc-editor.org/info/rfc2782>. | |||
[RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security | ||||
(TLS) Protocol Version 1.2", RFC 5246, | ||||
DOI 10.17487/RFC5246, August 2008, | ||||
<https://www.rfc-editor.org/info/rfc5246>. | ||||
[RFC6066] Eastlake 3rd, D., "Transport Layer Security (TLS) | [RFC6066] Eastlake 3rd, D., "Transport Layer Security (TLS) | |||
Extensions: Extension Definitions", RFC 6066, | Extensions: Extension Definitions", RFC 6066, | |||
DOI 10.17487/RFC6066, January 2011, | DOI 10.17487/RFC6066, January 2011, | |||
<https://www.rfc-editor.org/info/rfc6066>. | <https://www.rfc-editor.org/info/rfc6066>. | |||
[RFC6335] Cotton, M., Eggert, L., Touch, J., Westerlund, M., and S. | [RFC6335] Cotton, M., Eggert, L., Touch, J., Westerlund, M., and S. | |||
Cheshire, "Internet Assigned Numbers Authority (IANA) | Cheshire, "Internet Assigned Numbers Authority (IANA) | |||
Procedures for the Management of the Service Name and | Procedures for the Management of the Service Name and | |||
Transport Protocol Port Number Registry", BCP 165, | Transport Protocol Port Number Registry", BCP 165, | |||
RFC 6335, DOI 10.17487/RFC6335, August 2011, | RFC 6335, DOI 10.17487/RFC6335, August 2011, | |||
skipping to change at page 36, line 5 ¶ | skipping to change at page 37, line 23 ¶ | |||
[RFC6763] Cheshire, S. and M. Krochmal, "DNS-Based Service | [RFC6763] Cheshire, S. and M. Krochmal, "DNS-Based Service | |||
Discovery", RFC 6763, DOI 10.17487/RFC6763, February 2013, | Discovery", RFC 6763, DOI 10.17487/RFC6763, February 2013, | |||
<https://www.rfc-editor.org/info/rfc6763>. | <https://www.rfc-editor.org/info/rfc6763>. | |||
[RFC6824] Ford, A., Raiciu, C., Handley, M., and O. Bonaventure, | [RFC6824] Ford, A., Raiciu, C., Handley, M., and O. Bonaventure, | |||
"TCP Extensions for Multipath Operation with Multiple | "TCP Extensions for Multipath Operation with Multiple | |||
Addresses", RFC 6824, DOI 10.17487/RFC6824, January 2013, | Addresses", RFC 6824, DOI 10.17487/RFC6824, January 2013, | |||
<https://www.rfc-editor.org/info/rfc6824>. | <https://www.rfc-editor.org/info/rfc6824>. | |||
[RFC6886] Cheshire, S. and M. Krochmal, "NAT Port Mapping Protocol | ||||
(NAT-PMP)", RFC 6886, DOI 10.17487/RFC6886, April 2013, | ||||
<https://www.rfc-editor.org/info/rfc6886>. | ||||
[RFC6887] Wing, D., Ed., Cheshire, S., Boucadair, M., Penno, R., and | ||||
P. Selkirk, "Port Control Protocol (PCP)", RFC 6887, | ||||
DOI 10.17487/RFC6887, April 2013, | ||||
<https://www.rfc-editor.org/info/rfc6887>. | ||||
[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, | |||
<https://www.rfc-editor.org/info/rfc7413>. | <https://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, <https://www.rfc-editor.org/info/rfc7525>. | 2015, <https://www.rfc-editor.org/info/rfc7525>. | |||
skipping to change at page 37, line 17 ¶ | skipping to change at page 38, line 39 ¶ | |||
Tom Pusateri | Tom Pusateri | |||
Unaffiliated | Unaffiliated | |||
Raleigh, NC 27608 | Raleigh, NC 27608 | |||
USA | USA | |||
Phone: +1 919 867 1330 | Phone: +1 919 867 1330 | |||
Email: pusateri@bangj.com | Email: pusateri@bangj.com | |||
Stuart Cheshire | Stuart Cheshire | |||
Apple Inc. | Apple Inc. | |||
1 Infinite Loop | One Apple Park Way | |||
Cupertino, CA 95014 | Cupertino, CA 95014 | |||
USA | USA | |||
Phone: +1 408 974 3207 | Phone: +1 (408) 996-1010 | |||
Email: cheshire@apple.com | Email: cheshire@apple.com | |||
End of changes. 84 change blocks. | ||||
265 lines changed or deleted | 318 lines changed or added | |||
This html diff was produced by rfcdiff 1.47. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |