summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc9619.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rfc/rfc9619.txt')
-rw-r--r--doc/rfc/rfc9619.txt312
1 files changed, 312 insertions, 0 deletions
diff --git a/doc/rfc/rfc9619.txt b/doc/rfc/rfc9619.txt
new file mode 100644
index 0000000..0583b25
--- /dev/null
+++ b/doc/rfc/rfc9619.txt
@@ -0,0 +1,312 @@
+
+
+
+
+Internet Engineering Task Force (IETF) R. Bellis
+Request for Comments: 9619 ISC
+Updates: 1035 J. Abley
+Category: Standards Track Cloudflare
+ISSN: 2070-1721 July 2024
+
+
+ In the DNS, QDCOUNT Is (Usually) One
+
+Abstract
+
+ This document updates RFC 1035 by constraining the allowed value of
+ the QDCOUNT parameter in DNS messages with OPCODE = 0 (QUERY) to a
+ maximum of one, and it specifies the required behavior when values
+ that are not allowed are encountered.
+
+Status of This Memo
+
+ This is an Internet Standards Track document.
+
+ This document is a product of the Internet Engineering Task Force
+ (IETF). It represents the consensus of the IETF community. It has
+ received public review and has been approved for publication by the
+ Internet Engineering Steering Group (IESG). Further information on
+ Internet Standards is available in Section 2 of RFC 7841.
+
+ Information about the current status of this document, any errata,
+ and how to provide feedback on it may be obtained at
+ https://www.rfc-editor.org/info/rfc9619.
+
+Copyright Notice
+
+ Copyright (c) 2024 IETF Trust and the persons identified as the
+ document authors. All rights reserved.
+
+ This document is subject to BCP 78 and the IETF Trust's Legal
+ Provisions Relating to IETF Documents
+ (https://trustee.ietf.org/license-info) in effect on the date of
+ publication of this document. Please review these documents
+ carefully, as they describe your rights and restrictions with respect
+ to this document. Code Components extracted from this document must
+ include Revised BSD License text as described in Section 4.e of the
+ Trust Legal Provisions and are provided without warranty as described
+ in the Revised BSD License.
+
+Table of Contents
+
+ 1. Introduction
+ 2. Terminology Used in This Document
+ 3. QDCOUNT Is (Usually) One
+ 4. Updates to RFC 1035
+ 5. Security Considerations
+ 6. IANA Considerations
+ 7. References
+ 7.1. Normative References
+ 7.2. Informative References
+ Appendix A. Guidance for the Use of QDCOUNT in the DNS
+ Specification
+ A.1. OPCODE = 0 (QUERY) and 1 (IQUERY)
+ A.2. OPCODE = 4 (NOTIFY)
+ A.3. OPCODE = 5 (UPDATE)
+ A.4. OPCODE = 6 (DNS Stateful Operations, DSO)
+ A.5. Conclusion
+ Acknowledgements
+ Authors' Addresses
+
+1. Introduction
+
+ The DNS protocol [RFC1034] [RFC1035] includes a parameter QDCOUNT in
+ the DNS message header whose value is specified to mean the number of
+ questions in the Question section of a DNS message.
+
+ In a general sense, it seems perfectly plausible for the QDCOUNT
+ parameter, an unsigned 16-bit value, to take a considerable range of
+ values. However, in the specific case of messages that encode DNS
+ queries and responses (messages with OPCODE = 0), there are other
+ limitations inherent in the protocol that constrain values of QDCOUNT
+ to be either 0 or 1. In particular, several parameters specified for
+ DNS response messages such as AA and RCODE have no defined meaning
+ when the message contains multiple queries as there is no way to
+ signal which question those parameters relate to.
+
+ In this document, we briefly survey the existing written DNS
+ specification; provide a description of the semantic and practical
+ requirements for DNS queries that naturally constrain the allowable
+ values of QDCOUNT; and update the DNS base specification to clarify
+ the allowable values of the QDCODE parameter in the specific case of
+ DNS messages with OPCODE = 0.
+
+2. Terminology Used in This Document
+
+ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
+ "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
+ "OPTIONAL" in this document are to be interpreted as described in
+ BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
+ capitals, as shown here.
+
+3. QDCOUNT Is (Usually) One
+
+ A brief summary of the guidance provided in the existing DNS
+ specification ([RFC1035] and many other documents) for the use of
+ QDCOUNT can be found in Appendix A. While the specification is clear
+ in many cases, there is some ambiguity in the specific case of OPCODE
+ = 0, which this document aims to eliminate.
+
+4. Updates to RFC 1035
+
+ A DNS message with OPCODE = 0 MUST NOT include a QDCOUNT parameter
+ whose value is greater than 1. It follows that the Question section
+ of a DNS message with OPCODE = 0 MUST NOT contain more than one
+ question.
+
+ A DNS message with OPCODE = 0 and QDCOUNT > 1 MUST be treated as an
+ incorrectly formatted message. The value of the RCODE parameter in
+ the response message MUST be set to 1 (FORMERR).
+
+ Middleboxes (e.g., firewalls) that process DNS messages in order to
+ eliminate unwanted traffic SHOULD treat messages with OPCODE = 0 and
+ QDCOUNT > 1 as malformed traffic and return a FORMERR response as
+ described above. Such firewalls MUST NOT treat messages with OPCODE
+ = 0 and QDCOUNT = 0 as malformed. See Section 4 of [RFC8906] for
+ further guidance.
+
+5. Security Considerations
+
+ This document clarifies the DNS specification [RFC1035] and aims to
+ improve interoperability between different DNS implementations. In
+ general, the elimination of ambiguity seems well-aligned with
+ security hygiene.
+
+6. IANA Considerations
+
+ This document has no IANA actions.
+
+7. References
+
+7.1. Normative References
+
+ [RFC1034] Mockapetris, P., "Domain names - concepts and facilities",
+ STD 13, RFC 1034, DOI 10.17487/RFC1034, November 1987,
+ <https://www.rfc-editor.org/info/rfc1034>.
+
+ [RFC1035] Mockapetris, P., "Domain names - implementation and
+ specification", STD 13, RFC 1035, DOI 10.17487/RFC1035,
+ November 1987, <https://www.rfc-editor.org/info/rfc1035>.
+
+ [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
+ Requirement Levels", BCP 14, RFC 2119,
+ DOI 10.17487/RFC2119, March 1997,
+ <https://www.rfc-editor.org/info/rfc2119>.
+
+ [RFC3425] Lawrence, D., "Obsoleting IQUERY", RFC 3425,
+ DOI 10.17487/RFC3425, November 2002,
+ <https://www.rfc-editor.org/info/rfc3425>.
+
+ [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
+ 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
+ May 2017, <https://www.rfc-editor.org/info/rfc8174>.
+
+7.2. Informative References
+
+ [RFC1996] Vixie, P., "A Mechanism for Prompt Notification of Zone
+ Changes (DNS NOTIFY)", RFC 1996, DOI 10.17487/RFC1996,
+ August 1996, <https://www.rfc-editor.org/info/rfc1996>.
+
+ [RFC2136] Vixie, P., Ed., Thomson, S., Rekhter, Y., and J. Bound,
+ "Dynamic Updates in the Domain Name System (DNS UPDATE)",
+ RFC 2136, DOI 10.17487/RFC2136, April 1997,
+ <https://www.rfc-editor.org/info/rfc2136>.
+
+ [RFC5936] Lewis, E. and A. Hoenes, Ed., "DNS Zone Transfer Protocol
+ (AXFR)", RFC 5936, DOI 10.17487/RFC5936, June 2010,
+ <https://www.rfc-editor.org/info/rfc5936>.
+
+ [RFC7873] Eastlake 3rd, D. and M. Andrews, "Domain Name System (DNS)
+ Cookies", RFC 7873, DOI 10.17487/RFC7873, May 2016,
+ <https://www.rfc-editor.org/info/rfc7873>.
+
+ [RFC8490] Bellis, R., Cheshire, S., Dickinson, J., Dickinson, S.,
+ Lemon, T., and T. Pusateri, "DNS Stateful Operations",
+ RFC 8490, DOI 10.17487/RFC8490, March 2019,
+ <https://www.rfc-editor.org/info/rfc8490>.
+
+ [RFC8906] Andrews, M. and R. Bellis, "A Common Operational Problem
+ in DNS Servers: Failure to Communicate", BCP 231,
+ RFC 8906, DOI 10.17487/RFC8906, September 2020,
+ <https://www.rfc-editor.org/info/rfc8906>.
+
+Appendix A. Guidance for the Use of QDCOUNT in the DNS Specification
+
+ The DNS specification [RFC1035] provides some guidance about the
+ values of QDCOUNT that are appropriate in various situations. A
+ brief summary of this guidance is collated below.
+
+A.1. OPCODE = 0 (QUERY) and 1 (IQUERY)
+
+ [RFC1035] significantly predates the use of the normative requirement
+ key words specified in BCP 14 [RFC2119] [RFC8174], and parts of it
+ are consequently somewhat open to interpretation.
+
+ Section 4.1.2 ("Question section format") of [RFC1035] states the
+ following about QDCOUNT:
+
+ "The section contains QDCOUNT (usually 1) entries"
+
+ The only documented exceptions within [RFC1035] relate to the IQuery
+ OpCode, where the request has "an empty question section" (QDCOUNT =
+ 0), and the response has "zero, one, or multiple domain names for the
+ specified resource as QNAMEs in the question section". The IQuery
+ OpCode was obsoleted by [RFC3425].
+
+ In the absence of clearly expressed normative requirements, we rely
+ on other text in [RFC1035] that makes use of the definite article or
+ that implies a singular question and, by implication, QDCOUNT = 1.
+
+ For example, Section 4.1 of [RFC1035] states the following:
+
+ "the question for the name server"
+
+ and
+
+ "The question section contains fields that describe a question to
+ a name server."
+
+ And per Section 4.1.1 ("Header section format") of [RFC1035]:
+
+ "AA: Authoritative Answer - this bit is valid in responses, and
+ specifies that the responding name server is an authority for the
+ domain name in question section."
+
+ DNS Cookies (Section 5.4 of [RFC7873]) allow a client to receive a
+ valid Server Cookie without sending a specific question by sending a
+ request (QR = 0) with OPCODE = 0 and QDCOUNT = 0, with the resulting
+ response also containing no question.
+
+ The DNS Zone Transfer Protocol (Section 2.2 of [RFC5936]) allows an
+ authoritative server to optionally send a response message (QR = 1)
+ to a standard Authoritative Transfer (AXFR) query (OPCODE = 0,
+ QTYPE=252) with QDCOUNT = 0 in the second or subsequent message of a
+ multi-message response.
+
+A.2. OPCODE = 4 (NOTIFY)
+
+ DNS Notify [RFC1996] also lacks a clearly defined range of values for
+ QDCOUNT. Section 3.7 states that:
+
+ "A NOTIFY request has QDCOUNT>0"
+
+ However, all other text in the RFC discusses the <QNAME, QCLASS,
+ QTYPE> tuple in the singular form.
+
+A.3. OPCODE = 5 (UPDATE)
+
+ DNS Update [RFC2136] renames the QDCOUNT field to ZOCOUNT, but the
+ value is constrained to be one by Section 2.3 ("Zone Section"):
+
+ "All records to be updated must be in the same zone, and therefore
+ the Zone Section is allowed to contain exactly one record."
+
+A.4. OPCODE = 6 (DNS Stateful Operations, DSO)
+
+ DNS Stateful Operations (DSO) (OpCode 6) [RFC8490] preserves
+ compatibility with the standard DNS 12-octet header by requiring all
+ four of the section count values to be set to zero.
+
+A.5. Conclusion
+
+ There is no text in [RFC1035] that describes how other parameters in
+ the DNS message, such as AA and RCODE, should be interpreted in the
+ case where a message includes more than one question. An originator
+ of a query with QDCOUNT > 1 can have no expectations of how it will
+ be processed, and the receiver of a response with QDCOUNT > 1 has no
+ guidance for how it should be interpreted.
+
+ The allowable values of QDCOUNT seem to be clearly specified for
+ OPCODE = 4 (NOTIFY), OPCODE = 5 (UPDATE), and OPCODE = 6 (DNS
+ Stateful Operations, DSO). OPCODE = 1 (IQUERY) is obsolete and
+ OPCODE = 2 (STATUS) is not specified. OPCODE = 3 is reserved.
+
+ However, the allowable values of QDCOUNT for OPCODE = 0 (QUERY) are
+ specified in [RFC1035] without the clarity of normative language, and
+ this looseness of language results in some ambiguity.
+
+Acknowledgements
+
+ The clarifications in this document were prompted by questions posed
+ by Ted Lemon, which reminded the authors of earlier, similar
+ questions and motivated them to pick up their pens. Ondrej Sury,
+ Warren Kumari, Peter Thomassen, Mark Andrews, Lars-Johan Liman, Jim
+ Reid, and Niall O'Reilly provided useful feedback.
+
+Authors' Addresses
+
+ Ray Bellis
+ Internet Systems Consortium, Inc.
+ PO Box 360
+ Newmarket, NH 03857
+ United States of America
+ Phone: +1 650 423 1300
+ Email: ray@isc.org
+
+
+ Joe Abley
+ Cloudflare
+ Amsterdam
+ Netherlands
+ Phone: +31 6 45 56 36 34
+ Email: jabley@cloudflare.com