draft-ietf-dnssd-push-24.txt | draft-ietf-dnssd-push-25.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: February 8, 2020 Apple Inc. | Expires: April 15, 2020 Apple Inc. | |||
August 7, 2019 | October 13, 2019 | |||
DNS Push Notifications | DNS Push Notifications | |||
draft-ietf-dnssd-push-24 | draft-ietf-dnssd-push-25 | |||
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 February 8, 2020. | This Internet-Draft will expire on April 15, 2020. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2019 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 | |||
skipping to change at page 2, line 25 ¶ | skipping to change at page 2, line 25 ¶ | |||
3. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 3. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
4. State Considerations . . . . . . . . . . . . . . . . . . . . 6 | 4. State Considerations . . . . . . . . . . . . . . . . . . . . 6 | |||
5. Transport . . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 5. Transport . . . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
6. Protocol Operation . . . . . . . . . . . . . . . . . . . . . 8 | 6. Protocol Operation . . . . . . . . . . . . . . . . . . . . . 8 | |||
6.1. Discovery . . . . . . . . . . . . . . . . . . . . . . . . 9 | 6.1. Discovery . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
6.2. DNS Push Notification SUBSCRIBE . . . . . . . . . . . . . 13 | 6.2. DNS Push Notification SUBSCRIBE . . . . . . . . . . . . . 13 | |||
6.2.1. SUBSCRIBE Request . . . . . . . . . . . . . . . . . . 13 | 6.2.1. SUBSCRIBE Request . . . . . . . . . . . . . . . . . . 13 | |||
6.2.2. SUBSCRIBE Response . . . . . . . . . . . . . . . . . 16 | 6.2.2. SUBSCRIBE Response . . . . . . . . . . . . . . . . . 16 | |||
6.3. DNS Push Notification Updates . . . . . . . . . . . . . . 20 | 6.3. DNS Push Notification Updates . . . . . . . . . . . . . . 20 | |||
6.3.1. PUSH Message . . . . . . . . . . . . . . . . . . . . 20 | 6.3.1. PUSH Message . . . . . . . . . . . . . . . . . . . . 20 | |||
6.4. DNS Push Notification UNSUBSCRIBE . . . . . . . . . . . . 25 | 6.4. DNS Push Notification UNSUBSCRIBE . . . . . . . . . . . . 26 | |||
6.4.1. UNSUBSCRIBE Message . . . . . . . . . . . . . . . . . 25 | 6.4.1. UNSUBSCRIBE Message . . . . . . . . . . . . . . . . . 26 | |||
6.5. DNS Push Notification RECONFIRM . . . . . . . . . . . . . 27 | 6.5. DNS Push Notification RECONFIRM . . . . . . . . . . . . . 28 | |||
6.5.1. RECONFIRM Message . . . . . . . . . . . . . . . . . . 28 | 6.5.1. RECONFIRM Message . . . . . . . . . . . . . . . . . . 29 | |||
6.6. DNS Stateful Operations TLV Context Summary . . . . . . . 30 | 6.6. DNS Stateful Operations TLV Context Summary . . . . . . . 31 | |||
6.7. Client-Initiated Termination . . . . . . . . . . . . . . 31 | 6.7. Client-Initiated Termination . . . . . . . . . . . . . . 32 | |||
6.8. Client Fallback to Polling . . . . . . . . . . . . . . . 32 | 6.8. Client Fallback to Polling . . . . . . . . . . . . . . . 33 | |||
7. Security Considerations . . . . . . . . . . . . . . . . . . . 33 | 7. Security Considerations . . . . . . . . . . . . . . . . . . . 34 | |||
7.1. Security Services . . . . . . . . . . . . . . . . . . . . 33 | 7.1. Security Services . . . . . . . . . . . . . . . . . . . . 35 | |||
7.2. TLS Name Authentication . . . . . . . . . . . . . . . . . 34 | 7.2. TLS Name Authentication . . . . . . . . . . . . . . . . . 35 | |||
7.3. TLS Early Data . . . . . . . . . . . . . . . . . . . . . 34 | 7.3. TLS Early Data . . . . . . . . . . . . . . . . . . . . . 36 | |||
7.4. TLS Session Resumption . . . . . . . . . . . . . . . . . 35 | 7.4. TLS Session Resumption . . . . . . . . . . . . . . . . . 36 | |||
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 36 | 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 37 | |||
9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 36 | 9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 37 | |||
10. References . . . . . . . . . . . . . . . . . . . . . . . . . 37 | 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 38 | |||
10.1. Normative References . . . . . . . . . . . . . . . . . . 37 | 10.1. Normative References . . . . . . . . . . . . . . . . . . 38 | |||
10.2. Informative References . . . . . . . . . . . . . . . . . 38 | 10.2. Informative References . . . . . . . . . . . . . . . . . 40 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 41 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 42 | |||
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 | |||
skipping to change at page 4, line 19 ¶ | skipping to change at page 4, line 19 ¶ | |||
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 | |||
publish/subscribe model for tracking changes to DNS records can | publish/subscribe model for tracking changes to DNS records can | |||
deliver more timely notification of changes with reduced CPU usage | deliver more timely notification of changes with reduced CPU usage | |||
and lower network traffic. | and lower network traffic. | |||
Multicast DNS [RFC6762] implementations always listen on a well known | Multicast DNS [RFC6762] implementations always listen on a well known | |||
link-local IP multicast group address, and record changes are sent to | link-local IP multicast group address, and changes are sent to that | |||
that multicast group address for all group members to receive. | multicast group address for all group members to receive. Therefore, | |||
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. When DNS Service Discovery [RFC6763] is used across a | |||
across a wide area network using Unicast DNS (possibly facilitated | wide area network using Unicast DNS (possibly facilitated via a | |||
via a Discovery Proxy [DisProx]) it would be beneficial to have an | 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 [RFC6281] service 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 imitation 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) [RFC8490] running over TLS over TCP, | DNS Stateful Operations (DSO) [RFC8490] running over TLS over TCP, | |||
and therefore doesn't need to reinvent existing TCP functionality. | and therefore doesn't need to reinvent existing TCP functionality. | |||
Using TCP also gives long-lived low-traffic connections better | Using TCP also gives long-lived low-traffic connections better | |||
longevity through NAT gateways without depending on the gateway to | longevity through NAT gateways without depending on the gateway to | |||
support NAT Port Mapping Protocol (NAT-PMP) [RFC6886] or Port Control | support NAT Port Mapping Protocol (NAT-PMP) [RFC6886] or Port Control | |||
Protocol (PCP) [RFC6887], or resorting to excessive keepalive | Protocol (PCP) [RFC6887], or resorting to excessive keepalive | |||
skipping to change at page 5, line 35 ¶ | skipping to change at page 5, line 35 ¶ | |||
server" for the purposes of this specification, and communications | server" for the purposes of this specification, and communications | |||
with these two ports are handled independently. Supporting DNS | with these two ports are handled independently. Supporting DNS | |||
Updates and DNS Push Notifications on the same server is OPTIONAL. A | Updates and DNS Push Notifications on the same server is OPTIONAL. A | |||
DNS Push Notification server is not required to support DNS Update. | DNS Push Notification server is not required to support DNS Update. | |||
Standard DNS Queries MAY be sent over a DNS Push Notification (i.e., | Standard DNS Queries MAY be sent over a DNS Push Notification (i.e., | |||
DSO) session. 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 for names falling within | MUST respond authoritatively for queries for names falling within | |||
that zone (e.g., the "_dns-push-tls._tcp.<zone>" SRV record) both for | that zone (e.g., the "_dns-push-tls._tcp.<zone>" SRV record) both for | |||
normal DNS queries and for DNS Push Notification subscriptions. For | normal DNS queries and for DNS Push Notification subscriptions. For | |||
names for which the server is acting as a recursive resolver, e.g., | names for which the server is acting as a recursive resolver (e.g., | |||
when the server is the local recursive resolver, for any query for | when the server is the local recursive resolver) for any query for | |||
which it supports DNS Push Notification subscriptions, it MUST also | which it supports DNS Push Notification subscriptions, it MUST also | |||
support standard queries. | support standard queries. | |||
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 | |||
skipping to change at page 6, line 18 ¶ | skipping to change at page 6, line 18 ¶ | |||
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 | |||
[RFC8490], a client must not keep a DSO session to a server open | [RFC8490], a client must not keep a DSO session to a server open | |||
indefinitely if it has no subscriptions (or other operations) active | indefinitely if it has no subscriptions (or other operations) active | |||
on that session. A client MAY close a DSO session immediately it | on that session. A client may close a DSO session immediately it | |||
becomes idle, and then if needed in the future, open a new session | becomes idle, and then if needed in the future, open a new session | |||
when required. Alternatively, a client MAY speculatively keep an | when required. Alternatively, a client may speculatively keep an | |||
idle DSO session open for some time, subject to the constraint that | idle DSO session open for some time, subject to the constraint that | |||
it must not keep a session open that has been idle for more than the | it must not keep a session open that has been idle for more than the | |||
session's idle timeout (15 seconds by default) [RFC8490]. | session's idle timeout (15 seconds by default) [RFC8490]. | |||
Note that a DSO session which has an active DNS Push Notification | Note that a DSO session that has an active DNS Push Notification | |||
subscription is not considered idle, even if there is no traffic | subscription is not considered idle, even if there is no traffic | |||
flowing for an extended period of time. In this case the DSO | flowing for an extended period of time. In this case the DSO | |||
inactivity timeout does not apply, because the session is not | inactivity timeout does not apply, because the session is not | |||
inactive, but the keepalive interval does still apply, to ensure | inactive, but the keepalive interval does still apply, to ensure | |||
generation of sufficient messages to maintain state in middleboxes | generation of sufficient messages to maintain state in middleboxes | |||
(such at NAT gateways or firewalls) and for the client and server to | (such at NAT gateways or firewalls) and for the client and server to | |||
periodically verify that they still have connectivity to each other. | periodically verify that they still have connectivity to each other. | |||
This is described in Section 6.2 of the DSO specification [RFC8490]. | This is described in Section 6.2 of the DSO specification [RFC8490]. | |||
4. State Considerations | 4. State Considerations | |||
skipping to change at page 7, line 19 ¶ | skipping to change at page 7, line 19 ¶ | |||
(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]. | |||
In keeping with the more recent precedent, DNS Push Notification is | In keeping with the more recent precedent, DNS Push Notification is | |||
defined only for TCP. DNS Push Notification clients MUST use DNS | defined only for TCP. DNS Push Notification clients MUST use DNS | |||
Stateful Operations [RFC8490] running over TLS over TCP [RFC7858]. | Stateful Operations [RFC8490] running over TLS over TCP [RFC7858]. | |||
Connection setup over TCP ensures return reachability and alleviates | Connection setup over TCP ensures return reachability and alleviates | |||
concerns of state overload at the server which is a potential problem | concerns of state overload at the server, which is a potential | |||
with connectionless protocols using spoofed source addresses. All | problem with connectionless protocols, which can be more vulnerable | |||
to being exploited by attackers using spoofed source addresses. All | ||||
subscribers are guaranteed to be reachable by the server by virtue of | subscribers are guaranteed to be reachable by the server by virtue of | |||
the TCP three-way handshake. Flooding attacks are possible with any | the TCP three-way handshake. Flooding attacks are possible with any | |||
protocol, and a benefit of TCP is that there are already established | protocol, and a benefit of TCP is that there are already established | |||
industry best practices to guard against SYN flooding and similar | industry best practices to guard against SYN flooding and similar | |||
attacks [SYN] [RFC4953]. | 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], RACK: a time-based fast | [RFC6824], TCP Fast Open (TFO) [RFC7413], the TCP RACK fast loss | |||
loss detection algorithm for TCP [I-D.ietf-tcpm-rack], and so on. | detection algorithm [I-D.ietf-tcpm-rack], and so on. | |||
Transport Layer Security (TLS) [RFC8446] is well understood, and used | Transport Layer Security (TLS) [RFC8446] is well understood, and used | |||
by many application-layer protocols running over TCP. TLS is | by many application-layer protocols running over TCP. TLS is | |||
designed to prevent eavesdropping, tampering, and message forgery. | designed to prevent eavesdropping, tampering, and message forgery. | |||
TLS is REQUIRED for every connection between a client subscriber and | TLS is REQUIRED for every connection between a client subscriber and | |||
server in this protocol specification. Additional security measures | server in this protocol specification. Additional security measures | |||
such as client authentication during TLS negotiation MAY also be | such as client authentication during TLS negotiation may also be | |||
employed to increase the trust relationship between client and | employed to increase the trust relationship between client and | |||
server. | server. | |||
6. Protocol Operation | 6. Protocol Operation | |||
The DNS Push Notification protocol is a session-oriented protocol, | The DNS Push Notification protocol is a session-oriented protocol, | |||
and makes use of DNS Stateful Operations (DSO) [RFC8490]. | and makes use of DNS Stateful Operations (DSO) [RFC8490]. | |||
For details of the DSO message format refer to the DNS Stateful Oper- | For details of the DSO message format refer to the DNS Stateful Oper- | |||
ations specification [RFC8490]. Those details are not repeated here. | ations specification [RFC8490]. Those details are not repeated here. | |||
skipping to change at page 8, line 23 ¶ | skipping to change at page 8, line 23 ¶ | |||
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 and/or keepalive | Keepalive operation to request a session timeout and/or keepalive | |||
interval longer than the the 15-second default values, but this is | interval longer than the 15-second default values, but this is not | |||
not required. A DNS Push Notification client MAY issue other | required. A DNS Push Notification client MAY issue other requests on | |||
requests on the session first, and only issue a DSO Keepalive | the session first, and only issue a DSO Keepalive operation later if | |||
operation later if it determines that to be necessary. Sending | it determines that to be necessary. Sending either a DSO Keepalive | |||
either a DSO Keepalive operation or a Push Notification subscription | operation or a Push Notification subscription request over the TLS/ | |||
request over the TLS/TCP connection to the server signals the | TCP connection to the server signals the client's support of DSO and | |||
client's support of DSO and serves to establish a DSO session. | 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. | |||
skipping to change at page 9, line 26 ¶ | skipping to change at page 9, line 26 ¶ | |||
doesn't already have an active subscription for that name, type, and | doesn't already have an active subscription for that name, type, and | |||
class, then the recursive resolver will make a corresponding Push | class, then the recursive resolver will make a corresponding Push | |||
Notification subscription on the client's behalf. Results received | Notification subscription on the client's behalf. Results received | |||
are relayed to the client. This is closely analogous to how a client | are relayed to the client. This is closely analogous to how a client | |||
sends a normal DNS query to its configured DNS recursive resolver | sends a normal DNS query to its configured DNS recursive resolver | |||
which, if it doesn't already have appropriate answer(s) in its cache, | which, if it doesn't already have appropriate answer(s) in its cache, | |||
issues an upstream query to satisfy the request. | issues an upstream query to satisfy the request. | |||
In many contexts, the recursive resolver will be able to handle Push | In many contexts, the recursive resolver will be able to handle Push | |||
Notifications for all names that the client may need to follow. Use | Notifications for all names that the client may need to follow. Use | |||
of VPN tunnels and split-view DNS can create some additional | of VPN tunnels and Private DNS [RFC8499] can create some additional | |||
complexity in the client software here; the techniques to handle VPN | complexity in the client software here; the techniques to handle VPN | |||
tunnels and split-view DNS for DNS Push Notifications are the same as | tunnels and Private DNS for DNS Push Notifications are the same as | |||
those already used to handle this for normal DNS queries. | those already used to handle this for normal DNS queries. | |||
If the recursive resolver does not support DNS over TLS, or supports | If the recursive resolver does not support DNS over TLS, or supports | |||
DNS over TLS but is not listening on TCP port 853, or supports DNS | DNS over TLS but is not listening on TCP port 853, or supports DNS | |||
over TLS on TCP port 853 but does not support DSO on that port, then | over TLS on TCP port 853 but does not support DSO on that port, then | |||
the DSO Session session establishment will fail [RFC8490]. | the DSO Session session establishment will fail [RFC8490]. | |||
If the recursive resolver does support DSO but not Push Notification | If the recursive resolver does support DSO but not Push Notification | |||
subscriptions, then it will return the DSO error code, DSOTYPENI | subscriptions, then it will return the DSO error code DSOTYPENI (11). | |||
(11). | ||||
In some cases, the recursive resolver may support DSO and Push | In some cases, the recursive resolver may support DSO and Push | |||
Notification subscriptions, but may not be able to subscribe for Push | Notification subscriptions, but may not be able to subscribe for Push | |||
Notifications for a particular name. In this case, the recursive | Notifications for a particular name. In this case, the recursive | |||
resolver should return SERVFAIL to the client. This includes being | resolver should return SERVFAIL to the client. This includes being | |||
unable to establish a connection to the zone's DNS Push Notification | unable to establish a connection to the zone's DNS Push Notification | |||
server or establishing a connection but receiving a non success | server or establishing a connection but receiving a non success | |||
response code. In some cases, where the client has a pre-established | response code. In some cases, where the client has a pre-established | |||
trust relationship with the owner of the zone (that is not handled | trust relationship with the owner of the zone (that is not handled | |||
via the usual mechanisms for VPN software) the client may handle | via the usual mechanisms for VPN software) the client may handle | |||
skipping to change at page 11, line 14 ¶ | skipping to change at page 11, line 14 ¶ | |||
operation of the DNS protocol regarding negative responses | operation of the DNS protocol regarding negative responses | |||
[RFC2308].) | [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 two labels in it, the client sends an SOA query | name has at least two labels in it, the client sends an SOA query | |||
for that new name, and processing continues at step 2 above, | for that new name, and processing continues at step 2 above, | |||
repeating the iterative search until either an SOA is received, | repeating the iterative search until either an SOA is received, | |||
or the query name consists of a single label, i.e., a Top Level | or the query name consists of a single label, i.e., a Top Level | |||
Domain (TLD). In the case of a single-label (TLD), this is a | Domain (TLD). In the case of a single-label name (TLD), this is | |||
network configuration error, which should not happen, and the | a network configuration error, which should not happen, and the | |||
client gives up. The client may retry the operation at a later | client gives up. The client may retry the operation at a later | |||
time, of the client's choosing, such after a change in network | time, of the client's choosing, such after a change in network | |||
attachment. | 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. | |||
skipping to change at page 12, line 5 ¶ | skipping to change at page 12, line 5 ¶ | |||
subscription requests. As described in the SRV specification | subscription requests. As described in the SRV specification | |||
[RFC2782], the server with the lowest "priority" is first | [RFC2782], the server with the lowest "priority" is first | |||
contacted. If more than one server has the same "priority", the | contacted. If more than one server has the same "priority", the | |||
"weight" indicates the weighted probability that the client | "weight" indicates the weighted probability that the client | |||
should contact that server. Higher weights have higher | should contact that server. Higher weights have higher | |||
probabilities of being selected. If a server is not willing to | probabilities of being selected. If a server is not willing to | |||
accept a subscription request, or is not reachable within a | accept a subscription request, or is not reachable within a | |||
reasonable time, as determined by the client, then a subsequent | reasonable time, as determined by the client, then a subsequent | |||
server is to be contacted. | server is to be contacted. | |||
Each time a client makes a new DNS Push Notification subscription | Each time a client makes a new DNS Push Notification subscription, it | |||
session, it SHOULD repeat the discovery process in order to determine | SHOULD repeat the discovery process in order to determine the | |||
the preferred DNS server for subscriptions at that time. However, | preferred DNS server for that subscription at that time. If a client | |||
the client device MUST respect the DNS TTL values on records it | already has a DSO session with that DNS server the client SHOULD | |||
receives, and store them in its local cache with this lifetime. This | reuse that existing DSO session for the new subscription, otherwise, | |||
a new DSO session is established. The client MUST respect the DNS | ||||
TTL values on records it receives while performing the discovery | ||||
process and store them in its local cache with this lifetime (as it | ||||
will generally be do anyway for all DNS queries it performs). This | ||||
means that, as long as the DNS TTL values on the authoritative | means that, as long as the DNS TTL values on the authoritative | |||
records are set to reasonable values, repeated application of this | records are set to reasonable values, repeated application of the | |||
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 | keepalive interval if necessary, a DNS Push Notification client | |||
then indicates its desire to receive DNS Push Notifications for | then indicates its desire to receive DNS Push Notifications for | |||
a given domain name by sending a SUBSCRIBE request to the server. | a given domain name by sending a SUBSCRIBE request to the server. | |||
A SUBSCRIBE request is encoded in a DSO message [RFC8490]. | A SUBSCRIBE request is encoded in a DSO message [RFC8490]. | |||
skipping to change at page 13, line 25 ¶ | skipping to change at page 13, line 25 ¶ | |||
DSO messages with the SUBSCRIBE TLV as the Primary TLV are permitted | DSO messages with the SUBSCRIBE TLV as the Primary TLV are permitted | |||
in TLS early data, provided that the precautions described in | in TLS early data, provided that the precautions described in | |||
Section 7.3 are followed. | Section 7.3 are followed. | |||
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 MUST forcibly abort the connection immediately. | the client MUST forcibly abort the connection immediately. | |||
Each SUBSCRIBE request generates exactly one SUBSCRIBE response from | ||||
the server. The entity that initiates a SUBSCRIBE response is by | ||||
definition the server. A client MUST NOT send a SUBSCRIBE response. | ||||
If a client does send a SUBSCRIBE response, this is a fatal error and | ||||
the server MUST forcibly abort the connection immediately. | ||||
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 | |||
[RFC8490], followed by the SUBSCRIBE primary TLV. A SUBSCRIBE | [RFC8490], followed by the SUBSCRIBE primary TLV. A SUBSCRIBE | |||
request message is illustrated in Figure 1. | request 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 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 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 spec- | The other header fields MUST be set as described in the DSO spec- | |||
ification [RFC8490]. The DNS OPCODE field contains the OPCODE value | ification [RFC8490]. The DNS OPCODE field contains the OPCODE value | |||
for DNS Stateful Operations (6). The four count fields MUST be zero, | for DNS Stateful Operations (6). The four count fields must be zero, | |||
and the corresponding four sections MUST be empty (i.e., absent). | and the corresponding four sections must be empty (i.e., absent). | |||
The DSO-TYPE is SUBSCRIBE (tentatively 0x40). | The DSO-TYPE is SUBSCRIBE (tentatively 0x40). | |||
The DSO-LENGTH is the length of the DSO-DATA that follows, which | 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. | 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(6) | Z | RCODE | | | |QR| OPCODE(6) | Z | RCODE | | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| QDCOUNT (MUST BE ZERO) | | | | QDCOUNT (MUST BE ZERO) | | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > HEADER | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > HEADER | |||
| ANCOUNT (MUST BE ZERO) | | | | ANCOUNT (MUST BE ZERO) | | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| NSCOUNT (MUST BE ZERO) | | | | NSCOUNT (MUST BE ZERO) | | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| ARCOUNT (MUST BE ZERO) | / | | ARCOUNT (MUST BE ZERO) | / | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | |||
| DSO-TYPE = SUBSCRIBE (tentatively 0x40) | | | DSO-TYPE = SUBSCRIBE (tentatively 0x40) | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | |||
| DSO-LENGTH (number of octets in DSO-DATA) | | | DSO-LENGTH (number of octets in DSO-DATA) | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | |||
| | \ | \ NAME \ \ | |||
\ NAME \ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
\ \ | | | TYPE | > DSO-DATA | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > DSO-DATA | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| 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 DSO request messages can be concatenated in a | multiple SUBSCRIBE DSO request messages can be concatenated in a | |||
single 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 [RFC0020] applies (e.g., "example.com" and | |||
the same). If a server receives such a duplicate SUBSCRIBE message, | "Example.com" are the same). If a server receives such a duplicate | |||
this is a fatal error and the server MUST forcibly abort the | SUBSCRIBE message, this is a fatal error and the server MUST forcibly | |||
connection immediately. | abort the connection immediately. | |||
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 no other records | matches only a literal CNAME record in the zone, and no other records | |||
with the same owner name. | with the same owner name. | |||
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 | |||
skipping to change at page 16, line 7 ¶ | skipping to change at page 16, line 7 ¶ | |||
people sometimes imagine. | people sometimes imagine. | |||
When used in conjunction with SUBSCRIBE, TYPE and CLASS 255 should be | When used in conjunction with SUBSCRIBE, TYPE and CLASS 255 should be | |||
interpreted to mean "ALL", not "ANY". After accepting a subscription | interpreted to mean "ALL", not "ANY". After accepting a subscription | |||
where one or both of TYPE or CLASS are 255, the server MUST send Push | where one or both of TYPE or CLASS are 255, the server MUST send Push | |||
Notification Updates for ALL record changes that match the | Notification Updates for ALL record changes that match the | |||
subscription, not just some of them. | subscription, not just some of them. | |||
6.2.2. SUBSCRIBE Response | 6.2.2. SUBSCRIBE Response | |||
Each SUBSCRIBE request generates exactly one SUBSCRIBE response from | ||||
the server. | ||||
A SUBSCRIBE response begins with the standard DSO 12-byte header | A SUBSCRIBE response begins with the standard DSO 12-byte header | |||
[RFC8490]. The QR bit in the header is set indicating it is a | [RFC8490]. The QR bit in the header is set indicating it is a | |||
response. The header MAY be followed by one or more optional TLVs, | response. The header MAY be followed by one or more optional TLVs, | |||
such as a Retry Delay TLV. | such as a Retry Delay TLV. A SUBSCRIBE response is illustrated in | |||
Figure 2. | ||||
The MESSAGE ID field MUST echo the value given in the MESSAGE ID | The MESSAGE ID field MUST echo the value given in the MESSAGE ID | |||
field of the SUBSCRIBE request. This is how the client knows which | field of the SUBSCRIBE request. This is how the client knows which | |||
request is being responded to. | request is being responded to. | |||
The other header fields MUST be set as described in the DSO spec- | ||||
ification [RFC8490]. The DNS OPCODE field contains the OPCODE value | ||||
for DNS Stateful Operations (6). The four count fields must be zero, | ||||
and the corresponding four sections must be empty (i.e., absent). | ||||
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. | |||
A client MUST NOT send a SUBSCRIBE response. If a client does send a | ||||
SUBSCRIBE message, with the QR bit set indicating that it is a | ||||
response, this is a fatal error and the server MUST forcibly abort | ||||
the connection immediately. | ||||
1 1 1 1 1 1 | 1 1 1 1 1 1 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | |||
| MESSAGE ID | \ | | MESSAGE ID | \ | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
|QR| OPCODE(6) | Z | RCODE | | | |QR| OPCODE(6) | Z | RCODE | | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| QDCOUNT (MUST BE ZERO) | | | | QDCOUNT (MUST BE ZERO) | | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > HEADER | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > HEADER | |||
| ANCOUNT (MUST BE ZERO) | | | | ANCOUNT (MUST BE ZERO) | | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| NSCOUNT (MUST BE ZERO) | | | | NSCOUNT (MUST BE ZERO) | | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| ARCOUNT (MUST BE ZERO) | / | | ARCOUNT (MUST BE ZERO) | / | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | |||
Figure 2: SUBSCRIBE Response Message | Figure 2: SUBSCRIBE Response | |||
In the SUBSCRIBE response the RCODE indicates whether or not the | In the SUBSCRIBE response the RCODE indicates whether or not the | |||
subscription was accepted. Supported RCODEs are as follows: | subscription was accepted. Supported RCODEs are as follows: | |||
+-----------+-------+-----------------------------------------------+ | +-----------+-------+-----------------------------------------------+ | |||
| Mnemonic | Value | Description | | | Mnemonic | Value | Description | | |||
+-----------+-------+-----------------------------------------------+ | +-----------+-------+-----------------------------------------------+ | |||
| NOERROR | 0 | SUBSCRIBE successful. | | | NOERROR | 0 | SUBSCRIBE successful. | | |||
| FORMERR | 1 | Server failed to process request due to a | | | FORMERR | 1 | Server failed to process request due to a | | |||
| | | malformed request. | | | | | malformed request. | | |||
skipping to change at page 17, line 37 ¶ | skipping to change at page 17, line 37 ¶ | |||
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, or | |||
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 Section 6.1, Paragraph 7, a subsequent server can be | described in Section 6.1, Paragraph 7, a subsequent server MAY 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 remain even though additional subscriptions may | these subscriptions remain even though additional subscriptions may | |||
be refused. Neither the client nor the server are required to close | be refused. Neither the client nor the server are required to 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 [RFC8490] to the response specifying a delay before the | Delay TLV [RFC8490] to the response specifying a delay before the | |||
client attempts this operation again. Recommended values for the | client attempts this operation again. Recommended values for the | |||
skipping to change at page 20, line 15 ¶ | skipping to change at page 20, line 15 ¶ | |||
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 already non-empty at the moment the | case that the answer set was already non-empty at the moment the | |||
subscription was established, an initial PUSH message will be sent | subscription was established, an initial PUSH message will be sent | |||
immediately following the SUBSCRIBE Response. Subsequent changes to | immediately following the SUBSCRIBE Response. Subsequent changes to | |||
the answer set are then communicated to the client in subsequent PUSH | the answer set are then communicated to the client in subsequent PUSH | |||
messages. | messages. | |||
A client MUST NOT send a PUSH message. If a client does send a PUSH | ||||
message, or a PUSH message is sent with the QR bit set indicating | ||||
that it is a response, this is a fatal error and the receiver MUST | ||||
forcibly abort the connection immediately. | ||||
6.3.1. PUSH Message | 6.3.1. PUSH Message | |||
A PUSH unidirectional message begins with the standard DSO 12-byte | A PUSH unidirectional message begins with the standard DSO 12-byte | |||
header [RFC8490], followed by the PUSH primary TLV. A PUSH message | header [RFC8490], followed by the PUSH primary TLV. A PUSH message | |||
is illustrated in Figure 3. | is illustrated in Figure 3. | |||
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 be set as described in the DSO spec- | The other header fields MUST be set as described in the DSO spec- | |||
ification [RFC8490]. The DNS OPCODE field contains the OPCODE value | ification [RFC8490]. The DNS OPCODE field contains the OPCODE value | |||
for DNS Stateful Operations (6). The four count fields MUST be zero, | for DNS Stateful Operations (6). The four count fields must be zero, | |||
and the corresponding four sections MUST be empty (i.e., absent). | and the corresponding four sections must be empty (i.e., absent). | |||
A client MUST NOT send a PUSH message. If a client does send a PUSH | ||||
message, or a PUSH message is sent with the QR bit set indicating | ||||
that it is a response, this is a fatal error and the receiver MUST | ||||
forcibly abort the connection immediately. | ||||
The DSO-TYPE is PUSH (tentatively 0x41). | The DSO-TYPE is PUSH (tentatively 0x41). | |||
The DSO-LENGTH is the length of the DSO-DATA that follows, which | The DSO-LENGTH is the length of the DSO-DATA that follows, which | |||
specifies the changes being communicated. | specifies the changes being communicated. | |||
The DSO-DATA contains one or more change notifications. A PUSH | The DSO-DATA contains one or more change notifications. A PUSH | |||
Message MUST contain at least one change notification. If a PUSH | Message MUST contain at least one change notification. If a PUSH | |||
Message is received that contains no change notifications, this is a | Message is received that contains no change notifications, this is a | |||
fatal error, and the client MUST forcibly abort the connection | fatal error, and the client MUST forcibly abort the connection | |||
immediately. | immediately. | |||
The change notification records are formatted similarly to how DNS | The change notification records are formatted similarly to how DNS | |||
Resource Records are conventionally expressed in DNS messages, as | Resource Records are conventionally expressed in DNS messages, as | |||
illustrated in Figure 3, and are interpreted as described below. | illustrated in Figure 3, and are interpreted as described below. | |||
The TTL field holds an unsigned 32-bit integer [RFC2181]. If the TTL | The TTL field holds an unsigned 32-bit integer [RFC2181]. If the TTL | |||
is in the range 0 to 2,147,483,647 seconds (2^31 - 1, or 0x7FFFFFFF), | is in the range 0 to 2,147,483,647 seconds (0 to 2^31 - 1, or | |||
then a new DNS Resource Record with the given name, type, class and | 0x7FFFFFFF), then a new DNS Resource Record with the given name, | |||
RDATA is added. A TTL of 0 means that this record should be retained | type, class and RDATA is added. Type and class MUST NOT be 255 | |||
for as long as the subscription is active, and should be discarded | (ANY). If either type or class are 255 (ANY) this is a fatal error, | |||
immediately the moment the subscription is cancelled. | and the client MUST forcibly abort the connection immediately. A TTL | |||
of 0 means that this record should be retained for as long as the | ||||
subscription is active, and should be discarded immediately the | ||||
moment the subscription is cancelled. | ||||
If the TTL has the value 0xFFFFFFFF, then the DNS Resource Record | If the TTL has the value 0xFFFFFFFF, then the DNS Resource Record | |||
with the given name, type, class and RDATA is removed. | with the given name, type, class and RDATA is removed. Type and | |||
class MUST NOT be 255 (ANY). If either type or class are 255 (ANY) | ||||
this is a fatal error, and the client MUST forcibly abort the | ||||
connection immediately. | ||||
If the TTL has the value 0xFFFFFFFE, then this is a 'collective' | If the TTL has the value 0xFFFFFFFE, then this is a 'collective' | |||
remove notification. For collective remove notifications RDLEN MUST | remove notification. For collective remove notifications RDLEN MUST | |||
be zero and consequently the RDATA MUST be empty. If a change | be zero and consequently the RDATA MUST be empty. If a change | |||
notification is received where TTL = 0xFFFFFFFE and RDLEN is not | notification is received where TTL = 0xFFFFFFFE and RDLEN is not | |||
zero, this is a fatal error, and the client MUST forcibly abort the | zero, this is a fatal error, and the client MUST forcibly abort the | |||
connection immediately. | connection immediately. | |||
There are three types of collective remove notification: | There are three types of collective remove notification: | |||
For collective remove notifications, if CLASS is not 255 (ANY) and | For collective remove notifications, if CLASS is not 255 (ANY) and | |||
TYPE is not 255 (ANY) then for the given name this deletes all | TYPE is not 255 (ANY) then for the given name this removes all | |||
records of the specified type in the specified class. | records of the specified type in the specified class. | |||
For collective remove notifications, if CLASS is not 255 (ANY) and | For collective remove notifications, if CLASS is not 255 (ANY) and | |||
TYPE is 255 (ANY) then for the given name this deletes all records of | TYPE is 255 (ANY) then for the given name this removes all records of | |||
all types in the specified class. | all types in the specified class. | |||
For collective remove notifications, if CLASS is 255 (ANY), then for | For collective remove notifications, if CLASS is 255 (ANY), then for | |||
the given name this deletes all records of all types in all classes. | the given name this removes all records of all types in all classes. | |||
In this case TYPE MUST be set to zero on transmission, and MUST be | In this case TYPE MUST be set to zero on transmission, and MUST be | |||
silently ignored on reception. | silently ignored on reception. | |||
Summary of change notification types: | Summary of change notification types: | |||
Delete all RRsets from a name, in all classes | Remove all RRsets from a name, in all classes | |||
TTL = 0xFFFFFFFE, RDLEN = 0, CLASS = 255 (ANY) | TTL = 0xFFFFFFFE, RDLEN = 0, CLASS = 255 (ANY) | |||
Delete all RRsets from a name, in given class: | Remove all RRsets from a name, in given class: | |||
TTL = 0xFFFFFFFE, RDLEN = 0, CLASS gives class, TYPE = 255 (ANY) | TTL = 0xFFFFFFFE, RDLEN = 0, CLASS gives class, TYPE = 255 (ANY) | |||
Delete specified RRset from a name, in given class: | Remove specified RRset from a name, in given class: | |||
TTL = 0xFFFFFFFE, RDLEN = 0 | TTL = 0xFFFFFFFE, RDLEN = 0 | |||
CLASS and TYPE specify the RRset being deleted | CLASS and TYPE specify the RRset being removed | |||
Delete an individual RR from a name: | Remove an individual RR from a name: | |||
TTL = 0xFFFFFFFF | TTL = 0xFFFFFFFF | |||
CLASS, TYPE, RDLEN and RDATA specify the RR being deleted. | CLASS, TYPE, RDLEN and RDATA specify the RR being removed | |||
Add individual RR to a name | Add individual RR to a name | |||
TTL >= 0 and TTL <= 0x7FFFFFFF | TTL >= 0 and TTL <= 0x7FFFFFFF | |||
CLASS, TYPE, RDLEN, RDATA and TTL specify the RR being added. | CLASS, TYPE, RDLEN, RDATA and TTL specify the RR being added | |||
Note that it is valid for the RDATA of an added or removed DNS | Note that it is valid for the RDATA of an added or removed DNS | |||
Resource Record to be empty (zero length). For example, an Address | Resource Record to be empty (zero length). For example, an Address | |||
Prefix List Resource Record [RFC3123] may have empty RDATA. | Prefix List Resource Record [RFC3123] may have empty RDATA. | |||
Therefore, a change notification with RDLEN = 0 does not | Therefore, a change notification with RDLEN = 0 does not | |||
automatically indicate a remove notification. If RDLEN = 0 and TTL | automatically indicate a remove notification. If RDLEN = 0 and TTL | |||
is the in the range 0 - 0x7FFFFFFF, this change notification signals | is the in the range 0 - 0x7FFFFFFF, this change notification signals | |||
the addition of a record with the given name, type, class, and empty | the addition of a record with the given name, type, class, and empty | |||
RDATA. If RDLEN = 0 and TTL = 0xFFFFFFFF, this change notification | RDATA. If RDLEN = 0 and TTL = 0xFFFFFFFF, this change notification | |||
signals the removal specifically of that single record with the given | signals the removal specifically of that single record with the given | |||
skipping to change at page 23, line 9 ¶ | skipping to change at page 24, line 5 ¶ | |||
DNS message length of 16,382 bytes, the change notifications MUST be | DNS message length of 16,382 bytes, the change notifications MUST be | |||
communicated in separate PUSH messages of up to 16,382 bytes each. | communicated in separate PUSH messages of up to 16,382 bytes each. | |||
DNS name compression becomes less effective for messages larger than | DNS name compression becomes less effective for messages larger than | |||
16,384 bytes, so little efficiency benefit is gained by sending | 16,384 bytes, so little efficiency benefit is gained by sending | |||
messages larger than this. | messages larger than this. | |||
If a client receives a PUSH message with a DNS message length larger | If a client receives a PUSH message with a DNS message length larger | |||
than 16,382 bytes, this is a fatal error, and the client MUST | than 16,382 bytes, this is a fatal error, and the client MUST | |||
forcibly abort the connection immediately. | forcibly abort the connection immediately. | |||
1 1 1 1 1 1 | 1 1 1 1 1 1 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ | |||
| MESSAGE ID (MUST BE ZERO) | \ | | MESSAGE ID (MUST BE ZERO) | \ | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
|QR| OPCODE(6) | Z | RCODE | | | |QR| OPCODE(6) | Z | RCODE | | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| QDCOUNT (MUST BE ZERO) | | | | QDCOUNT (MUST BE ZERO) | | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > HEADER | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > HEADER | |||
| ANCOUNT (MUST BE ZERO) | | | | ANCOUNT (MUST BE ZERO) | | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| NSCOUNT (MUST BE ZERO) | | | | NSCOUNT (MUST BE ZERO) | | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| ARCOUNT (MUST BE ZERO) | / | | ARCOUNT (MUST BE ZERO) | / | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | |||
| DSO-TYPE = PUSH (tentatively 0x41) | | | DSO-TYPE = PUSH (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 | | | |||
| (32-bit unsigned big-endian integer) | > DSO-DATA | | (32-bit unsigned big-endian integer) | > DSO-DATA | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| RDLEN (16-bit unsigned big-endian integer) | | | | RDLEN (16-bit unsigned big-endian integer) | | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
\ RDATA (sized as necessary) \ | | \ RDATA (sized as necessary) \ | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
: NAME, TYPE, CLASS, TTL, RDLEN, RDATA : | | : NAME, TYPE, CLASS, TTL, RDLEN, RDATA : | | |||
: Repeated As Necessary : / | : Repeated As Necessary : / | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | |||
Figure 3: PUSH Message | Figure 3: 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 removed | |||
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 | |||
a SUBSCRIBE request, subject to the usual established DNS case- | the SUBSCRIBE request, subject to the usual established DNS case- | |||
insensitivity for US-ASCII letters. If the TYPE in the SUBSCRIBE | insensitivity for US-ASCII letters. For individual additions and | |||
request was not ANY (255) then the TYPE of the record must match the | removals, if the TYPE in the SUBSCRIBE request was not ANY (255) then | |||
TYPE given in the SUBSCRIBE request. If the CLASS in the SUBSCRIBE | the TYPE of the record must match the TYPE given in the SUBSCRIBE | |||
request was not ANY (255) then the CLASS of the record must match the | request, and if the CLASS in the SUBSCRIBE request was not ANY (255) | |||
CLASS given in the SUBSCRIBE request. If a matching active | then the CLASS of the record must match the CLASS given in the | |||
subscription on that session is not found, then that individual | SUBSCRIBE request. For collective removals, at least one of the | |||
record addition/deletion is silently ignored. Processing of other | records being removed must match an active subscription. If a | |||
additions and deletions in this message is not affected. The DSO | matching active subscription on that session is not found, then that | |||
session is not closed. This is to allow for the unavoidable race | particular addition/removal record is silently ignored. Processing | |||
condition where a client sends an outbound UNSUBSCRIBE while inbound | of other additions and removal records in this message is not | |||
PUSH messages for that subscription from the server are still in | affected. The DSO session is not closed. This is to allow for the | |||
flight. | unavoidable race condition where a client sends an outbound | |||
UNSUBSCRIBE while inbound PUSH messages for that subscription from | ||||
the server are still in flight. | ||||
In the case where a single change affects more than one active | In the case where a single change affects more than one active | |||
subscription, only one PUSH message is sent. For example, a PUSH | subscription, only one PUSH message is sent. For example, a PUSH | |||
message adding a given record may match both a SUBSCRIBE request with | message adding a given record may match both a SUBSCRIBE request with | |||
the same TYPE and a different SUBSCRIBE request with TYPE = 255 | the same TYPE and a different SUBSCRIBE request with TYPE = 255 | |||
(ANY). It is not the case that two PUSH messages are sent because | (ANY). It is not the case that two PUSH messages are sent because | |||
the new record matches two active subscriptions. | the new record matches two active subscriptions. | |||
The server SHOULD encode change notifications in the most efficient | The server SHOULD encode change notifications in the most efficient | |||
manner possible. For example, when three AAAA records are deleted | manner possible. For example, when three AAAA records are removed | |||
from a given name, and no other AAAA records exist for that name, the | from a given name, and no other AAAA records exist for that name, the | |||
server SHOULD send a "delete an RRset from a name" PUSH message, not | server SHOULD send a "remove an RRset from a name" PUSH message, not | |||
three separate "delete an individual RR from a name" PUSH messages. | three separate "remove an individual RR from a name" PUSH messages. | |||
Similarly, when both an SRV and a TXT record are deleted from a given | Similarly, when both an SRV and a TXT record are removed from a given | |||
name, and no other records of any kind exist for that name, the | name, and no other records of any kind exist for that name, the | |||
server SHOULD send a "delete all RRsets from a name" PUSH message, | server SHOULD send a "remove all RRsets from a name" PUSH message, | |||
not two separate "delete an RRset from a name" PUSH messages. | not two separate "remove an RRset from a name" PUSH messages. | |||
A server SHOULD combine multiple change notifications in a single | A server SHOULD combine multiple change notifications in a single | |||
PUSH message when possible, even if those change notifications apply | PUSH message when possible, even if those change notifications apply | |||
to different subscriptions. Conceptually, a PUSH message is a | to different subscriptions. Conceptually, a PUSH message is a | |||
session-level mechanism, not a subscription-level mechanism. | session-level mechanism, not a subscription-level mechanism. | |||
The TTL of an added record is stored by the client. While the | The TTL of an added record is stored by the client. While the | |||
subscription is active, the TTL is not decremented, because a change | subscription is active, the TTL is not decremented, because a change | |||
to the TTL would produce a new update. For as long as a relevant | to the TTL would produce a new update. For as long as a relevant | |||
subscription remains active, the client SHOULD assume that when a | subscription remains active, the client SHOULD assume that when a | |||
skipping to change at page 25, line 9 ¶ | skipping to change at page 26, line 9 ¶ | |||
Consequently, a client does not have to poll to verify that the | Consequently, a client does not have to poll to verify that the | |||
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. | |||
DSO unidirectional message [RFC8490]. This specification defines a | ||||
primary unidirectional DSO TLV for DNS Push Notification UNSUBSCRIBE | ||||
Messages (tentatively DSO Type Code 0x42). | ||||
A server MUST NOT send an UNSUBSCRIBE message. If a server does send | The entity that initiates an UNSUBSCRIBE message is by definition the | |||
an UNSUBSCRIBE message over a DSO session initiated by a client, or | client. A server MUST NOT send an UNSUBSCRIBE message over an | |||
an UNSUBSCRIBE message is sent with the QR bit set indicating that it | existing session from a client. If a server does send an UNSUBSCRIBE | |||
is a response, this is a fatal error and the receiver MUST forcibly | message over a DSO session initiated by a client, or an UNSUBSCRIBE | |||
abort the connection immediately. | message is sent with the QR bit set indicating that it is a response, | |||
this is a fatal error and the receiver MUST forcibly abort the | ||||
connection immediately. | ||||
6.4.1. UNSUBSCRIBE Message | 6.4.1. UNSUBSCRIBE Message | |||
An UNSUBSCRIBE unidirectional message begins with the standard DSO | An UNSUBSCRIBE unidirectional message begins with the standard DSO | |||
12-byte header [RFC8490], followed by the UNSUBSCRIBE primary TLV. | 12-byte header [RFC8490], followed by the UNSUBSCRIBE primary TLV. | |||
An UNSUBSCRIBE message is illustrated in Figure 4. | An UNSUBSCRIBE message is illustrated in Figure 4. | |||
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 server response to an | MESSAGE ID field MUST be zero. There is no server response to an | |||
UNSUBSCRIBE message. | UNSUBSCRIBE message. | |||
The other header fields MUST be set as described in the DSO spec- | The other header fields MUST be set as described in the DSO spec- | |||
ification [RFC8490]. The DNS OPCODE field contains the OPCODE value | ification [RFC8490]. The DNS OPCODE field contains the OPCODE value | |||
for DNS Stateful Operations (6). The four count fields MUST be zero, | for DNS Stateful Operations (6). The four count fields must be zero, | |||
and the corresponding four sections MUST be empty (i.e., absent). | and the corresponding four sections must be empty (i.e., absent). | |||
The DSO-TYPE is UNSUBSCRIBE (tentatively 0x42). | The DSO-TYPE is UNSUBSCRIBE (tentatively 0x42). | |||
The DSO-LENGTH field contains the value 2, the length of the 2-octet | The DSO-LENGTH field contains the value 2, the length of the 2-octet | |||
MESSAGE ID contained in the DSO-DATA. | MESSAGE ID contained in the DSO-DATA. | |||
The DSO-DATA contains the value given in the MESSAGE ID field of an | The DSO-DATA contains the value previously given in the MESSAGE ID | |||
active SUBSCRIBE request. This is how the server knows which | field of an active SUBSCRIBE request. This is how the server knows | |||
SUBSCRIBE request is being cancelled. After receipt of the | which SUBSCRIBE request is being cancelled. After receipt of the | |||
UNSUBSCRIBE message, the SUBSCRIBE request is no longer active. | UNSUBSCRIBE message, the SUBSCRIBE request is no longer active. | |||
It is allowable for the client to issue an UNSUBSCRIBE message for a | It is allowable for the client to issue an UNSUBSCRIBE message 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 message. | response before issuing the UNSUBSCRIBE message. | |||
Consequently, it is possible for a server to receive an UNSUBSCRIBE | Consequently, it is possible for a server to receive an UNSUBSCRIBE | |||
skipping to change at page 27, line 17 ¶ | skipping to change at page 28, line 17 ¶ | |||
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 believes 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 message to ask the server to re-verify that the | can send a RECONFIRM message 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 queries to ascertain whether the target device is | new Multicast DNS queries to ascertain whether the target device is | |||
still present. How the Discovery Proxy causes these new Multicast | still present. How the Discovery Proxy causes these new Multicast | |||
DNS queries to be issued depends on the details of the underlying | DNS queries to be issued depends on the details of the underlying | |||
Multicast DNS implementation being used. For example, a Discovery | Multicast DNS implementation being used. For example, a Discovery | |||
Proxy built on Apple's dns_sd.h API responds to a DNS Push | Proxy built on Apple's dns_sd.h API [SD-API] responds to a DNS Push | |||
Notification RECONFIRM message by calling the underlying API's | Notification RECONFIRM message by calling the underlying API's | |||
DNSServiceReconfirmRecord() routine. | DNSServiceReconfirmRecord() routine. | |||
For other types of DNS server, the RECONFIRM operation is currently | For other types of DNS server, the RECONFIRM operation is currently | |||
undefined, and SHOULD result in a NOERROR response, but otherwise | undefined, and SHOULD result in a NOERROR response, but otherwise | |||
need not cause any action to occur. | need not cause any action to occur. | |||
Frequent use of RECONFIRM operations may be a sign of network | Frequent use of RECONFIRM operations may be a sign of network | |||
unreliability, or some kind of misconfiguration, so RECONFIRM | unreliability, or some kind of misconfiguration, so RECONFIRM | |||
operations MAY be logged or otherwise communicated to a human | operations MAY be logged or otherwise communicated to a human | |||
skipping to change at page 27, line 39 ¶ | skipping to change at page 28, line 39 ¶ | |||
problems. | problems. | |||
If, after receiving a valid RECONFIRM message, the server determines | If, after receiving a valid RECONFIRM message, 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. | |||
A server MUST NOT send a RECONFIRM message. If a server does send a | The entity that initiates a RECONFIRM message is by definition the | |||
RECONFIRM message over a DSO session initiated by a client, or a | client. A server MUST NOT send a RECONFIRM message over an existing | |||
RECONFIRM message is sent with the QR bit set indicating that it is a | session from a client. If a server does send a RECONFIRM message | |||
response, this is a fatal error and the receiver MUST forcibly abort | over a DSO session initiated by a client, or a RECONFIRM message is | |||
the connection immediately. | sent with the QR bit set indicating that it is a response, this is a | |||
fatal error and the receiver MUST forcibly abort the connection | ||||
immediately. | ||||
6.5.1. RECONFIRM Message | 6.5.1. RECONFIRM Message | |||
A RECONFIRM unidirectional message begins with the standard DSO | A RECONFIRM unidirectional message begins with the standard DSO | |||
12-byte header [RFC8490], followed by the RECONFIRM primary TLV. | 12-byte header [RFC8490], followed by the RECONFIRM primary TLV. | |||
A RECONFIRM message is illustrated in Figure 5. | A RECONFIRM message is illustrated in Figure 5. | |||
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 server response to a | MESSAGE ID field MUST be zero. There is no server response to a | |||
RECONFIRM message. | RECONFIRM message. | |||
The other header fields MUST be set as described in the DSO spec- | The other header fields MUST be set as described in the DSO spec- | |||
ification [RFC8490]. The DNS OPCODE field contains the OPCODE value | ification [RFC8490]. The DNS OPCODE field contains the OPCODE value | |||
for DNS Stateful Operations (6). The four count fields MUST be zero, | for DNS Stateful Operations (6). The four count fields must be zero, | |||
and the corresponding four sections MUST 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-TYPE is RECONFIRM (tentatively 0x43). | |||
The DSO-LENGTH is the length of the data that follows, which | The DSO-LENGTH is the length of the data that follows, which | |||
specifies the name, type, class, and content of the record being | specifies the name, type, class, and content of the record being | |||
disputed. | disputed. | |||
The DSO-DATA for a RECONFIRM message MUST contain exactly one record. | The DSO-DATA for a RECONFIRM message MUST contain exactly one record. | |||
The DSO-DATA for a RECONFIRM message has no count field to specify | The DSO-DATA for a RECONFIRM message has no count field to specify | |||
more than one record. Since RECONFIRM messages are sent over TCP, | more than one record. Since RECONFIRM messages are sent over TCP, | |||
skipping to change at page 29, line 5 ¶ | skipping to change at page 30, line 5 ¶ | |||
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 no other records | matches only a literal CNAME record in the zone, and no other records | |||
with the same owner name. | with the same owner name. | |||
Note that there is no RDLEN field, since the length of the RDATA can | Note that there is no RDLEN field, since the length of the RDATA can | |||
be inferred from DSO-LENGTH, so an additional RDLEN field would be | be inferred from DSO-LENGTH, so an additional RDLEN field would be | |||
redundant. | redundant. | |||
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 (MUST BE ZERO) | \ | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
|QR| OPCODE(6) | Z | RCODE | | | |QR| OPCODE(6) | Z | RCODE | | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| QDCOUNT (MUST BE ZERO) | | | | QDCOUNT (MUST BE ZERO) | | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > HEADER | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > HEADER | |||
| ANCOUNT (MUST BE ZERO) | | | | ANCOUNT (MUST BE ZERO) | | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| NSCOUNT (MUST BE ZERO) | | | | NSCOUNT (MUST BE ZERO) | | | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | |||
| ARCOUNT (MUST BE ZERO) | / | | ARCOUNT (MUST BE ZERO) | / | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | |||
| DSO-TYPE = RECONFIRM (tentatively 0x43) | | | DSO-TYPE = RECONFIRM (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 \ / | |||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ / | |||
Figure 5: RECONFIRM Message | Figure 5: RECONFIRM Message | |||
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 Section 8.2 | This document defines four new DSO TLVs. As recommended in | |||
of the DNS Stateful Operations specification [RFC8490], the valid | Section 8.2 of the DNS Stateful Operations specification [RFC8490], | |||
contexts of these new TLV types are summarized below. | the valid contexts of these new TLV types are summarized below. | |||
The client TLV contexts are: | The client TLV contexts are: | |||
C-P: Client request message, primary TLV | C-P: Client request message, primary TLV | |||
C-U: Client unidirectional message, primary TLV | C-U: Client unidirectional message, primary TLV | |||
C-A: Client request or unidirectional message, additional TLV | C-A: Client request or unidirectional message, additional TLV | |||
CRP: Response back to client, primary TLV | CRP: Response back to client, primary TLV | |||
CRA: Response back to client, additional TLV | CRA: Response back to client, additional TLV | |||
+-------------+-----+-----+-----+-----+-----+ | +-------------+-----+-----+-----+-----+-----+ | |||
skipping to change at page 31, line 12 ¶ | skipping to change at page 32, line 12 ¶ | |||
Table 3: DSO TLV Server Context Summary | Table 3: DSO TLV Server Context Summary | |||
6.7. Client-Initiated Termination | 6.7. Client-Initiated Termination | |||
An individual subscription is terminated by sending an UNSUBSCRIBE | An individual subscription is terminated by sending an UNSUBSCRIBE | |||
TLV for that specific subscription, or all subscriptions can be | TLV for that specific subscription, or all subscriptions can be | |||
cancelled at once by the client closing the DSO session. When a | cancelled at once by the client closing the DSO session. When a | |||
client terminates an individual subscription (via UNSUBSCRIBE) or all | client terminates an individual subscription (via UNSUBSCRIBE) or all | |||
subscriptions on that DSO session (by ending the session) it is | subscriptions on that DSO session (by ending the session) it is | |||
signaling to the server that it is longer interested in receiving | signaling to the server that it is no longer interested in receiving | |||
those particular updates. It is informing the server that the server | those particular updates. It is informing the server that the server | |||
may release any state information it has been keeping with regards to | may release any state information it has been keeping with regards to | |||
these particular subscriptions. | these particular subscriptions. | |||
After terminating its last subscription on a session via UNSUBSCRIBE, | After terminating its last subscription on a session via UNSUBSCRIBE, | |||
a client MAY close the session immediately, or it may keep it open if | a client MAY close the session immediately, or it may keep it open if | |||
it anticipates performing further operations on that session in the | it anticipates performing further operations on that session in the | |||
future. If a client wishes to keep an idle session open, it MUST | future. If a client wishes to keep an idle session open, it MUST | |||
respect the maximum idle time required by the server [RFC8490]. | respect the maximum idle time required by the server [RFC8490]. | |||
skipping to change at page 33, line 38 ¶ | skipping to change at page 34, line 38 ¶ | |||
client-server security or end-to-end security. However, | client-server security or end-to-end security. However, | |||
recommendations for security in particular deployment scenarios are | recommendations for security in particular deployment scenarios are | |||
outside the scope of this document. | outside the scope of this document. | |||
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 provide added | |||
confidence that the SRV query has not been subverted. | confidence that the SRV query has not been subverted. | |||
7.1. Security Services | 7.1. Security Services | |||
It is the goal of using TLS to provide the following security | It is the goal of using TLS to provide the following security | |||
services: | services: | |||
Confidentiality: All application-layer communication is encrypted | Confidentiality: All application-layer communication is encrypted | |||
with the goal that no party should be able to decrypt it except | with the goal that no party should be able to decrypt it except | |||
the intended receiver. | the intended receiver. | |||
Data integrity protection: Any changes made to the communication in | Data integrity protection: Any changes made to the communication in | |||
transit are detectable by the receiver. | transit are detectable by the receiver. | |||
Authentication: An end-point of the TLS communication is | Authentication: An end-point of the TLS communication is | |||
authenticated as the intended entity to communicate with. | authenticated as the intended entity to communicate with. | |||
Anti-replay protection: TLS provides for the detection of and | Anti-replay protection: TLS provides for the detection of and | |||
prevention against messages sent previously over a TLS connection | prevention against messages sent previously over a TLS connection | |||
(such as DNS Push Notifications). Prior messages cannot be re- | (such as DNS Push Notifications). If prior messages are re-sent | |||
sent at a later time as a form of a man-in-the-middle attack. | at a later time as a form of a man-in-the-middle attack then the | |||
receiver will detect this and reject the replayed messages. | ||||
Deployment recommendations on the appropriate key lengths and cypher | Deployment recommendations on the appropriate key lengths and cypher | |||
suites are beyond the scope of this document. Please refer to TLS | suites are beyond the scope of this document. Please refer to TLS | |||
Recommendations [RFC7525] for the best current practices. Keep in | Recommendations [BCP195] for the best current practices. Keep in | |||
mind that best practices only exist for a snapshot in time and | mind that best practices only exist for a snapshot in time and | |||
recommendations will continue to change. Updated versions or errata | recommendations will continue to change. Updated versions or errata | |||
may exist for these recommendations. | may exist for these recommendations. | |||
7.2. TLS Name Authentication | 7.2. TLS Name Authentication | |||
As described in Section 6.1, the client discovers the DNS Push | As described in Section 6.1, the client discovers the DNS Push | |||
Notification server using an SRV lookup for the record name | Notification server using an SRV lookup for the record name | |||
"_dns-push-tls._tcp.<zone>". The server connection endpoint SHOULD | "_dns-push-tls._tcp.<zone>". The server connection endpoint SHOULD | |||
then be authenticated using DANE TLSA records for the associated SRV | then be authenticated using DANE TLSA records for the associated SRV | |||
skipping to change at page 35, line 12 ¶ | skipping to change at page 36, line 28 ¶ | |||
With TLS early data there are no guarantees of non-replay between | With TLS early data there are no guarantees of non-replay between | |||
connections. If packets are duplicated and delayed in the network, | connections. If packets are duplicated and delayed in the network, | |||
the later arrivals could be mistaken for new subscription requests. | the later arrivals could be mistaken for new subscription requests. | |||
Generally this is not a major concern, since the amount of state | Generally this is not a major concern, since the amount of state | |||
generated on the server for these spurious subscriptions is small and | generated on the server for these spurious subscriptions is small and | |||
short-lived, since the TCP connection will not complete the three-way | short-lived, since the TCP connection will not complete the three-way | |||
handshake. Servers MAY choose to implement rate-limiting measures | handshake. Servers MAY choose to implement rate-limiting measures | |||
that are activated when the server detects an excessive number of | that are activated when the server detects an excessive number of | |||
spurious subscription requests. | spurious subscription requests. | |||
For further guidance please see Section 2.3, Section 8, and | For further guidance please see discussion of zero round-trip data | |||
Appendix E.5 of the TLS 1.3 specification [RFC8446]. | (Section 2.3, Section 8, and Appendix E.5) in the TLS 1.3 | |||
specification, [RFC8446]. | ||||
7.4. TLS Session Resumption | 7.4. TLS Session Resumption | |||
TLS Session Resumption is permissible on DNS Push Notification | TLS Session Resumption [RFC8446] is permissible on DNS Push | |||
servers. The server may keep TLS state with Session IDs [RFC8446] or | Notification servers. However, closing the TLS connection terminates | |||
operate in stateless mode by sending a Session Ticket [RFC5077] to | the DSO session. When the TLS session is resumed, the DNS Push | |||
the client for it to store. However, closing the TLS connection | Notification server will not have any subscription state and will | |||
terminates the DSO session. When the TLS session is resumed, the DNS | proceed as with any other new DSO session. Use of TLS Session | |||
Push Notification server will not have any subscription state and | ||||
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 | |||
This document defines a new service name to be published in the IANA | This document defines a new service name, only applicable for the TCP | |||
Registry Service Types [RFC6335][ST] that is only applicable for the | protocol, to be recorded in the IANA Service Type Registry | |||
TCP protocol. | [RFC6335][SRVTYPE]. | |||
+-----------------------+------+----------------------+-------------+ | +-----------------------+------+----------------------+-------------+ | |||
| Name | Port | Value | Definition | | | Name | Port | Value | Definition | | |||
+-----------------------+------+----------------------+-------------+ | +-----------------------+------+----------------------+-------------+ | |||
| 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 4: IANA Service Type Assignments | Table 4: IANA Service Type Assignments | |||
This document also defines four new DNS Stateful Operation TLV types | This document defines four new DNS Stateful Operation TLV types to be | |||
to be recorded in the IANA DSO Type Code Registry. | recorded in the IANA DSO Type Code Registry [RFC8490][DSOTYPE]. | |||
+-------------+------------+---------+-----------------+------------+ | +-------------+------------+--------+-----------------+-------------+ | |||
| Name | Value | Early | Status | Definition | | | Name | Value | Early | Status | Definition | | |||
| | | Data | | | | | | | Data | | | | |||
+-------------+------------+---------+-----------------+------------+ | +-------------+------------+--------+-----------------+-------------+ | |||
| SUBSCRIBE | TBA (0x40) | OK | Standards Track | Section | | | SUBSCRIBE | TBA (0x40) | OK | Standards Track | Section 6.2 | | |||
| | | | | 6.2 | | | PUSH | TBA (0x41) | NO | Standards Track | Section 6.3 | | |||
| PUSH | TBA (0x41) | NO | Standards Track | Section | | | UNSUBSCRIBE | TBA (0x42) | NO | Standards Track | Section 6.4 | | |||
| | | | | 6.3 | | | RECONFIRM | TBA (0x43) | NO | Standards Track | Section 6.5 | | |||
| UNSUBSCRIBE | TBA (0x42) | NO | Standards Track | Section | | +-------------+------------+--------+-----------------+-------------+ | |||
| | | | | 6.4 | | ||||
| RECONFIRM | TBA (0x43) | NO | Standards Track | Section | | ||||
| | | | | 6.5 | | ||||
+-------------+------------+---------+-----------------+------------+ | ||||
Table 5: IANA DSO TLV Type Code Assignments | Table 5: IANA DSO TLV Type Code Assignments | |||
This document defines no new DNS OPCODEs or RCODEs. | This document defines no new DNS OPCODEs or RCODEs. | |||
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. | |||
skipping to change at page 37, line 9 ¶ | skipping to change at page 38, line 9 ¶ | |||
Rescorla, Michael Richardson, David Schinazi, Manju Shankar Rao, | Rescorla, Michael Richardson, David Schinazi, Manju Shankar Rao, | |||
Robert Sparks, Markus Stenberg, Andrew Sullivan, Michael Sweet, Dave | Robert Sparks, Markus Stenberg, Andrew Sullivan, Michael Sweet, Dave | |||
Thaler, Brian Trammell, Bernie Volz, Eric Vyncke, Christopher Wood, | Thaler, Brian Trammell, Bernie Volz, Eric Vyncke, Christopher Wood, | |||
Liang Xia, and Soraia Zlatkovic. Ted Lemon provided clarifying text | Liang Xia, and Soraia Zlatkovic. Ted Lemon provided clarifying text | |||
that was greatly appreciated. | that was greatly appreciated. | |||
10. References | 10. References | |||
10.1. Normative References | 10.1. Normative References | |||
[DSOTYPE] "DSO Type Code Registry", | ||||
<https://www.iana.org/assignments/dns-parameters/>. | ||||
[RFC0020] Cerf, V., "ASCII format for network interchange", STD 80, | ||||
RFC 20, DOI 10.17487/RFC0020, October 1969, | ||||
<https://www.rfc-editor.org/info/rfc20>. | ||||
[RFC0768] Postel, J., "User Datagram Protocol", STD 6, RFC 768, | [RFC0768] Postel, J., "User Datagram Protocol", STD 6, RFC 768, | |||
DOI 10.17487/RFC0768, August 1980, | DOI 10.17487/RFC0768, August 1980, | |||
<https://www.rfc-editor.org/info/rfc768>. | <https://www.rfc-editor.org/info/rfc768>. | |||
[RFC0793] Postel, J., "Transmission Control Protocol", STD 7, | [RFC0793] Postel, J., "Transmission Control Protocol", STD 7, | |||
RFC 793, DOI 10.17487/RFC0793, September 1981, | RFC 793, DOI 10.17487/RFC0793, September 1981, | |||
<https://www.rfc-editor.org/info/rfc793>. | <https://www.rfc-editor.org/info/rfc793>. | |||
[RFC1034] Mockapetris, P., "Domain names - concepts and facilities", | [RFC1034] Mockapetris, P., "Domain names - concepts and facilities", | |||
STD 13, RFC 1034, DOI 10.17487/RFC1034, November 1987, | STD 13, RFC 1034, DOI 10.17487/RFC1034, November 1987, | |||
skipping to change at page 38, line 26 ¶ | skipping to change at page 39, line 36 ¶ | |||
[RFC7673] Finch, T., Miller, M., and P. Saint-Andre, "Using DNS- | [RFC7673] Finch, T., Miller, M., and P. Saint-Andre, "Using DNS- | |||
Based Authentication of Named Entities (DANE) TLSA Records | Based Authentication of Named Entities (DANE) TLSA Records | |||
with SRV Records", RFC 7673, DOI 10.17487/RFC7673, October | with SRV Records", RFC 7673, DOI 10.17487/RFC7673, October | |||
2015, <https://www.rfc-editor.org/info/rfc7673>. | 2015, <https://www.rfc-editor.org/info/rfc7673>. | |||
[RFC7766] Dickinson, J., Dickinson, S., Bellis, R., Mankin, A., and | [RFC7766] Dickinson, J., Dickinson, S., Bellis, R., Mankin, A., and | |||
D. Wessels, "DNS Transport over TCP - Implementation | D. Wessels, "DNS Transport over TCP - Implementation | |||
Requirements", RFC 7766, DOI 10.17487/RFC7766, March 2016, | Requirements", RFC 7766, DOI 10.17487/RFC7766, March 2016, | |||
<https://www.rfc-editor.org/info/rfc7766>. | <https://www.rfc-editor.org/info/rfc7766>. | |||
[RFC7858] Hu, Z., Zhu, L., Heidemann, J., Mankin, A., Wessels, D., | ||||
and P. Hoffman, "Specification for DNS over Transport | ||||
Layer Security (TLS)", RFC 7858, DOI 10.17487/RFC7858, May | ||||
2016, <https://www.rfc-editor.org/info/rfc7858>. | ||||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
[RFC8310] Dickinson, S., Gillmor, D., and T. Reddy, "Usage Profiles | ||||
for DNS over TLS and DNS over DTLS", RFC 8310, | ||||
DOI 10.17487/RFC8310, March 2018, | ||||
<https://www.rfc-editor.org/info/rfc8310>. | ||||
[RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | |||
Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | |||
<https://www.rfc-editor.org/info/rfc8446>. | <https://www.rfc-editor.org/info/rfc8446>. | |||
[RFC8490] Bellis, R., Cheshire, S., Dickinson, J., Dickinson, S., | [RFC8490] Bellis, R., Cheshire, S., Dickinson, J., Dickinson, S., | |||
Lemon, T., and T. Pusateri, "DNS Stateful Operations", | Lemon, T., and T. Pusateri, "DNS Stateful Operations", | |||
RFC 8490, DOI 10.17487/RFC8490, March 2019, | RFC 8490, DOI 10.17487/RFC8490, March 2019, | |||
<https://www.rfc-editor.org/info/rfc8490>. | <https://www.rfc-editor.org/info/rfc8490>. | |||
[ST] "Service Name and Transport Protocol Port Number | [SRVTYPE] "Service Name and Transport Protocol Port Number | |||
Registry", <http://www.iana.org/assignments/ | Registry", <http://www.iana.org/assignments/service-names- | |||
service-names-port-numbers/>. | port-numbers/>. | |||
10.2. Informative References | 10.2. Informative References | |||
[BCP195] Sheffer, Y., Holz, R., and P. Saint-Andre, | ||||
"Recommendations for Secure Use of Transport Layer | ||||
Security (TLS) and Datagram Transport Layer Security | ||||
(DTLS)", BCP 195, RFC 7525, May 2015, | ||||
<http://www.rfc-editor.org/info/bcp195>. | ||||
[DisProx] Cheshire, S., "Discovery Proxy for Multicast DNS-Based | [DisProx] Cheshire, S., "Discovery Proxy for Multicast DNS-Based | |||
Service Discovery", draft-ietf-dnssd-hybrid-10 (work in | Service Discovery", draft-ietf-dnssd-hybrid-10 (work in | |||
progress), March 2019. | progress), March 2019. | |||
[I-D.ietf-tcpm-rack] | [I-D.ietf-tcpm-rack] | |||
Cheng, Y., Cardwell, N., Dukkipati, N., and P. Jha, "RACK: | Cheng, Y., Cardwell, N., Dukkipati, N., and P. Jha, "RACK: | |||
a time-based fast loss detection algorithm for TCP", | a time-based fast loss detection algorithm for TCP", | |||
draft-ietf-tcpm-rack-05 (work in progress), April 2019. | draft-ietf-tcpm-rack-05 (work in progress), April 2019. | |||
[LLQ] Cheshire, S. and M. Krochmal, "DNS Long-Lived Queries", | [LLQ] Cheshire, S. and M. Krochmal, "DNS Long-Lived Queries", | |||
skipping to change at page 39, line 27 ¶ | skipping to change at page 41, line 5 ¶ | |||
<https://www.rfc-editor.org/info/rfc3123>. | <https://www.rfc-editor.org/info/rfc3123>. | |||
[RFC4287] Nottingham, M., Ed. and R. Sayre, Ed., "The Atom | [RFC4287] Nottingham, M., Ed. and R. Sayre, Ed., "The Atom | |||
Syndication Format", RFC 4287, DOI 10.17487/RFC4287, | Syndication Format", RFC 4287, DOI 10.17487/RFC4287, | |||
December 2005, <https://www.rfc-editor.org/info/rfc4287>. | December 2005, <https://www.rfc-editor.org/info/rfc4287>. | |||
[RFC4953] Touch, J., "Defending TCP Against Spoofing Attacks", | [RFC4953] Touch, J., "Defending TCP Against Spoofing Attacks", | |||
RFC 4953, DOI 10.17487/RFC4953, July 2007, | RFC 4953, DOI 10.17487/RFC4953, July 2007, | |||
<https://www.rfc-editor.org/info/rfc4953>. | <https://www.rfc-editor.org/info/rfc4953>. | |||
[RFC5077] Salowey, J., Zhou, H., Eronen, P., and H. Tschofenig, | ||||
"Transport Layer Security (TLS) Session Resumption without | ||||
Server-Side State", RFC 5077, DOI 10.17487/RFC5077, | ||||
January 2008, <https://www.rfc-editor.org/info/rfc5077>. | ||||
[RFC6281] Cheshire, S., Zhu, Z., Wakikawa, R., and L. Zhang, | [RFC6281] Cheshire, S., Zhu, Z., Wakikawa, R., and L. Zhang, | |||
"Understanding Apple's Back to My Mac (BTMM) Service", | "Understanding Apple's Back to My Mac (BTMM) Service", | |||
RFC 6281, DOI 10.17487/RFC6281, June 2011, | RFC 6281, DOI 10.17487/RFC6281, June 2011, | |||
<https://www.rfc-editor.org/info/rfc6281>. | <https://www.rfc-editor.org/info/rfc6281>. | |||
[RFC6762] Cheshire, S. and M. Krochmal, "Multicast DNS", RFC 6762, | [RFC6762] Cheshire, S. and M. Krochmal, "Multicast DNS", RFC 6762, | |||
DOI 10.17487/RFC6762, February 2013, | DOI 10.17487/RFC6762, February 2013, | |||
<https://www.rfc-editor.org/info/rfc6762>. | <https://www.rfc-editor.org/info/rfc6762>. | |||
[RFC6763] Cheshire, S. and M. Krochmal, "DNS-Based Service | [RFC6763] Cheshire, S. and M. Krochmal, "DNS-Based Service | |||
skipping to change at page 40, line 14 ¶ | skipping to change at page 41, line 36 ¶ | |||
[RFC6887] Wing, D., Ed., Cheshire, S., Boucadair, M., Penno, R., and | [RFC6887] Wing, D., Ed., Cheshire, S., Boucadair, M., Penno, R., and | |||
P. Selkirk, "Port Control Protocol (PCP)", RFC 6887, | P. Selkirk, "Port Control Protocol (PCP)", RFC 6887, | |||
DOI 10.17487/RFC6887, April 2013, | DOI 10.17487/RFC6887, April 2013, | |||
<https://www.rfc-editor.org/info/rfc6887>. | <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, | ||||
"Recommendations for Secure Use of Transport Layer | ||||
Security (TLS) and Datagram Transport Layer Security | ||||
(DTLS)", BCP 195, RFC 7525, DOI 10.17487/RFC7525, May | ||||
2015, <https://www.rfc-editor.org/info/rfc7525>. | ||||
[RFC7719] Hoffman, P., Sullivan, A., and K. Fujiwara, "DNS | [RFC7719] Hoffman, P., Sullivan, A., and K. Fujiwara, "DNS | |||
Terminology", RFC 7719, DOI 10.17487/RFC7719, December | Terminology", RFC 7719, DOI 10.17487/RFC7719, December | |||
2015, <https://www.rfc-editor.org/info/rfc7719>. | 2015, <https://www.rfc-editor.org/info/rfc7719>. | |||
[RFC7858] Hu, Z., Zhu, L., Heidemann, J., Mankin, A., Wessels, D., | ||||
and P. Hoffman, "Specification for DNS over Transport | ||||
Layer Security (TLS)", RFC 7858, DOI 10.17487/RFC7858, May | ||||
2016, <https://www.rfc-editor.org/info/rfc7858>. | ||||
[RFC8010] Sweet, M. and I. McDonald, "Internet Printing | [RFC8010] Sweet, M. and I. McDonald, "Internet Printing | |||
Protocol/1.1: Encoding and Transport", STD 92, RFC 8010, | Protocol/1.1: Encoding and Transport", STD 92, RFC 8010, | |||
DOI 10.17487/RFC8010, January 2017, | DOI 10.17487/RFC8010, January 2017, | |||
<https://www.rfc-editor.org/info/rfc8010>. | <https://www.rfc-editor.org/info/rfc8010>. | |||
[RFC8011] Sweet, M. and I. McDonald, "Internet Printing | [RFC8011] Sweet, M. and I. McDonald, "Internet Printing | |||
Protocol/1.1: Model and Semantics", STD 92, RFC 8011, | Protocol/1.1: Model and Semantics", STD 92, RFC 8011, | |||
DOI 10.17487/RFC8011, January 2017, | DOI 10.17487/RFC8011, January 2017, | |||
<https://www.rfc-editor.org/info/rfc8011>. | <https://www.rfc-editor.org/info/rfc8011>. | |||
[RFC8310] Dickinson, S., Gillmor, D., and T. Reddy, "Usage Profiles | [RFC8499] Hoffman, P., Sullivan, A., and K. Fujiwara, "DNS | |||
for DNS over TLS and DNS over DTLS", RFC 8310, | Terminology", BCP 219, RFC 8499, DOI 10.17487/RFC8499, | |||
DOI 10.17487/RFC8310, March 2018, | January 2019, <https://www.rfc-editor.org/info/rfc8499>. | |||
<https://www.rfc-editor.org/info/rfc8310>. | ||||
[SD-API] "dns_sd.h API", | ||||
<https://opensource.apple.com/source/mDNSResponder/ | ||||
mDNSResponder-878.70.2/mDNSShared/dns_sd.h.auto.html>. | ||||
[SYN] Eddy, W., "Defenses Against TCP SYN Flooding Attacks", The | [SYN] Eddy, W., "Defenses Against TCP SYN Flooding Attacks", The | |||
Internet Protocol Journal, Cisco Systems, Volume 9, | Internet Protocol Journal, Cisco Systems, Volume 9, | |||
Number 4, December 2006. | Number 4, December 2006. | |||
[XEP0060] Millard, P., Saint-Andre, P., and R. Meijer, "Publish- | [XEP0060] Millard, P., Saint-Andre, P., and R. Meijer, "Publish- | |||
Subscribe", XSF XEP 0060, July 2010. | Subscribe", XSF XEP 0060, July 2010. | |||
Authors' Addresses | Authors' Addresses | |||
End of changes. 79 change blocks. | ||||
289 lines changed or deleted | 310 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/ |