draft-ietf-dnsext-rfc2671bis-edns0-10.txt   rfc6891.txt 
DNSEXT Working Group J. Damas Internet Engineering Task Force (IETF) J. Damas
Internet-Draft Bond Internet Systems Request for Comments: 6891 Bond Internet Systems
Obsoletes: 2671, 2673 M. Graff STD: 75 M. Graff
(if approved) Obsoletes: 2671, 2673
Intended status: Standards Track P. Vixie Category: Standards Track P. Vixie
Expires: July 4, 2013 Internet Systems Consortium ISSN: 2070-1721 Internet Systems Consortium
December 31, 2012 April 2013
Extension Mechanisms for DNS (EDNS(0)) Extension Mechanisms for DNS (EDNS(0))
draft-ietf-dnsext-rfc2671bis-edns0-10
Abstract Abstract
The Domain Name System's wire protocol includes a number of fixed The Domain Name System's wire protocol includes a number of fixed
fields whose range has been or soon will be exhausted and does not fields whose range has been or soon will be exhausted and does not
allow requestors to advertise their capabilities to responders. This allow requestors to advertise their capabilities to responders. This
document describes backward compatible mechanisms for allowing the document describes backward-compatible mechanisms for allowing the
protocol to grow. protocol to grow.
This document updates the EDNS(0) specification (and obsoletes RFC This document updates the Extension Mechanisms for DNS (EDNS(0))
2671) based on feedback from deployment experience in several specification (and obsoletes RFC 2671) based on feedback from
implementations. It also obsoletes RFC 2673 ("Binary Labels in the deployment experience in several implementations. It also obsoletes
Domain Name System") and adds considerations on the use of extended RFC 2673 ("Binary Labels in the Domain Name System") and adds
labels in the DNS. considerations on the use of extended labels in the DNS.
Status of this Memo
This Internet-Draft is submitted in full conformance with the Status of This Memo
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering This is an Internet Standards Track document.
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months This document is a product of the Internet Engineering Task Force
and may be updated, replaced, or obsoleted by other documents at any (IETF). It represents the consensus of the IETF community. It has
time. It is inappropriate to use Internet-Drafts as reference received public review and has been approved for publication by the
material or to cite them other than as "work in progress." Internet Engineering Steering Group (IESG). Further information on
Internet Standards is available in Section 2 of RFC 5741.
This Internet-Draft will expire on July 4, 2013. Information about the current status of this document, any errata,
and how to provide feedback on it may be obtained at
http://www.rfc-editor.org/info/rfc6891.
Copyright Notice Copyright Notice
Copyright (c) 2012 IETF Trust and the persons identified as the Copyright (c) 2013 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of (http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as the Trust Legal Provisions and are provided without warranty as
skipping to change at page 3, line 10 skipping to change at page 3, line 10
outside the IETF Standards Process, and derivative works of it may outside the IETF Standards Process, and derivative works of it may
not be created outside the IETF Standards Process, except to format not be created outside the IETF Standards Process, except to format
it for publication as an RFC or to translate it into languages other it for publication as an RFC or to translate it into languages other
than English. than English.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4
3. EDNS Support Requirement . . . . . . . . . . . . . . . . . . . 5 3. EDNS Support Requirement . . . . . . . . . . . . . . . . . . . 5
4. DNS Message changes . . . . . . . . . . . . . . . . . . . . . 5 4. DNS Message Changes . . . . . . . . . . . . . . . . . . . . . 5
4.1. Message Header . . . . . . . . . . . . . . . . . . . . . . 5 4.1. Message Header . . . . . . . . . . . . . . . . . . . . . . 5
4.2. Label Types . . . . . . . . . . . . . . . . . . . . . . . 5 4.2. Label Types . . . . . . . . . . . . . . . . . . . . . . . 5
4.3. UDP Message Size . . . . . . . . . . . . . . . . . . . . . 5 4.3. UDP Message Size . . . . . . . . . . . . . . . . . . . . . 6
5. Extended Label Types . . . . . . . . . . . . . . . . . . . . . 6 5. Extended Label Types . . . . . . . . . . . . . . . . . . . . . 6
6. The OPT pseudo-RR . . . . . . . . . . . . . . . . . . . . . . 6 6. The OPT Pseudo-RR . . . . . . . . . . . . . . . . . . . . . . 6
6.1. OPT Record Definition . . . . . . . . . . . . . . . . . . 6 6.1. OPT Record Definition . . . . . . . . . . . . . . . . . . 6
6.1.1. Basic elements . . . . . . . . . . . . . . . . . . . . 6 6.1.1. Basic Elements . . . . . . . . . . . . . . . . . . . . 6
6.1.2. Wire Format . . . . . . . . . . . . . . . . . . . . . 7 6.1.2. Wire Format . . . . . . . . . . . . . . . . . . . . . 7
6.1.3. OPT Record TTL Field Use . . . . . . . . . . . . . . . 8 6.1.3. OPT Record TTL Field Use . . . . . . . . . . . . . . . 9
6.1.4. Flags . . . . . . . . . . . . . . . . . . . . . . . . 9 6.1.4. Flags . . . . . . . . . . . . . . . . . . . . . . . . 9
6.2. Behaviour . . . . . . . . . . . . . . . . . . . . . . . . 9 6.2. Behaviour . . . . . . . . . . . . . . . . . . . . . . . . 10
6.2.1. Cache behaviour . . . . . . . . . . . . . . . . . . . 9 6.2.1. Cache Behaviour . . . . . . . . . . . . . . . . . . . 10
6.2.2. Fallback . . . . . . . . . . . . . . . . . . . . . . . 9 6.2.2. Fallback . . . . . . . . . . . . . . . . . . . . . . . 10
6.2.3. Requestor's Payload Size . . . . . . . . . . . . . . . 10 6.2.3. Requestor's Payload Size . . . . . . . . . . . . . . . 10
6.2.4. Responder's Payload Size . . . . . . . . . . . . . . . 10 6.2.4. Responder's Payload Size . . . . . . . . . . . . . . . 11
6.2.5. Payload Size Selection . . . . . . . . . . . . . . . . 11 6.2.5. Payload Size Selection . . . . . . . . . . . . . . . . 11
6.2.6. Support in MiddleBoxes . . . . . . . . . . . . . . . . 11 6.2.6. Support in Middleboxes . . . . . . . . . . . . . . . . 11
7. Transport Considerations . . . . . . . . . . . . . . . . . . . 12 7. Transport Considerations . . . . . . . . . . . . . . . . . . . 12
8. Security Considerations . . . . . . . . . . . . . . . . . . . 12 8. Security Considerations . . . . . . . . . . . . . . . . . . . 13
9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 13 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 13
9.1. OPT Option Code Allocation Procedure . . . . . . . . . . . 14 9.1. OPT Option Code Allocation Procedure . . . . . . . . . . . 15
10. References . . . . . . . . . . . . . . . . . . . . . . . . . . 14 10. References . . . . . . . . . . . . . . . . . . . . . . . . . . 15
10.1. Normative References . . . . . . . . . . . . . . . . . . . 14 10.1. Normative References . . . . . . . . . . . . . . . . . . . 15
10.2. Informative References . . . . . . . . . . . . . . . . . . 14 10.2. Informative References . . . . . . . . . . . . . . . . . . 15
Appendix A. Document Editing History . . . . . . . . . . . . . . 15 Appendix A. Changes since RFCs 2671 and 2673 . . . . . . . . . . 16
A.1. Changes since RFC2671 . . . . . . . . . . . . . . . . . . 15
A.2. Changes since -02 . . . . . . . . . . . . . . . . . . . . 15
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 15
1. Introduction 1. Introduction
DNS [RFC1035] specifies a Message Format and within such messages DNS [RFC1035] specifies a message format, and within such messages
there are standard formats for encoding options, errors, and name there are standard formats for encoding options, errors, and name
compression. The maximum allowable size of a DNS Message over UDP compression. The maximum allowable size of a DNS message over UDP
not using the extensions described in this document is limited to 512 not using the extensions described in this document is 512 bytes.
bytes. Many of DNS's protocol limits, such as the maximum message Many of DNS's protocol limits, such as the maximum message size over
size over UDP, are too small to efficiently support the additional UDP, are too small to efficiently support the additional information
information that can be conveyed in the DNS (e.g. several IPv6 that can be conveyed in the DNS (e.g., several IPv6 addresses or DNS
addresses or DNSSEC signatures). Finally, RFC 1035 does not define Security (DNSSEC) signatures). Finally, RFC 1035 does not define any
any way for implementations to advertise their capabilities to any of way for implementations to advertise their capabilities to any of the
the other actors they interact with. other actors they interact with.
[RFC2671] added an extension mechanism to DNS. This mechanism is [RFC2671] added extension mechanisms to DNS. These mechanisms are
widely supported and a number of new DNS uses and protocol extensions widely supported, and a number of new DNS uses and protocol
depend on the presence of these extensions. This memo refines that extensions depend on the presence of these extensions. This memo
specification and obsoletes [RFC2671]. refines and obsoletes [RFC2671].
Unextended agents will not know how to interpret the protocol Unextended agents will not know how to interpret the protocol
extensions defined in [RFC2671] and restated here. Extended agents extensions defined in [RFC2671] and restated here. Extended agents
need to be prepared for handling the interactions with unextended need to be prepared for handling the interactions with unextended
clients in the face of new protocol elements, and fall back clients in the face of new protocol elements and fall back gracefully
gracefully to unextended DNS. to unextended DNS.
EDNS is a hop-by-hop extension to DNS. This means the use of EDNS is EDNS is a hop-by-hop extension to DNS. This means the use of EDNS is
negotiated between each pair of hosts in a DNS resolution process. negotiated between each pair of hosts in a DNS resolution process,
For instance the stub resolver communicating with the recursive for instance, the stub resolver communicating with the recursive
resolver or the recursive resolver communicating with an resolver or the recursive resolver communicating with an
authoritative server. authoritative server.
[RFC2671] specified extended label types. The only such label [RFC2671] specified extended label types. The only such label
proposed was in [RFC2673] for a label type called "Bitstring Labels." proposed was in [RFC2673] for a label type called "Bit-String Label"
For various reasons introducing a new label type was found to be or "Binary Labels", with this latest term being the one in common
extremely difficult, and [RFC2673] was moved to Experimental. This use. For various reasons, introducing a new label type was found to
document deprecates Extended Labels, and therefore Binary Labels, be extremely difficult, and [RFC2673] was moved to Experimental.
obsoleting [RFC2673]. This document obsoletes [RFC2673], deprecating Binary Labels.
Extended labels remain defined, but their use is discouraged due to
practical difficulties with deployment; their use in the future
SHOULD only be considered after careful evaluation of the deployment
hindrances.
2. Terminology 2. Terminology
"Requestor" is the side which sends a request. "Responder" is an "Requestor" refers to the side that sends a request. "Responder"
authoritative, recursive resolver, or other DNS component which refers to an authoritative, recursive resolver or other DNS component
responds to questions. Other terminology is used as per its use in that responds to questions. Other terminology is used here as
the references. defined in the RFCs cited by this document.
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in RFC 2119 [RFC2119]. document are to be interpreted as described in RFC 2119 [RFC2119].
3. EDNS Support Requirement 3. EDNS Support Requirement
EDNS provides a mechanism to improve the scalability of DNS as its EDNS provides a mechanism to improve the scalability of DNS as its
uses get more diverse on the Internet. It does this by enabling the uses get more diverse on the Internet. It does this by enabling the
use of UDP transport for DNS messages with sizes beyond the limits use of UDP transport for DNS messages with sizes beyond the limits
specified in RFC 1035 as well as providing extra data space for specified in RFC 1035 as well as providing extra data space for
additional flags and return codes (RCODEs). However, implementation additional flags and return codes (RCODEs). However, implementation
experiencing indicates that adding new RCODEs should be avoided due experience indicates that adding new RCODEs should be avoided due to
to the difficulty in upgrading the installed base. Flags SHOULD be the difficulty in upgrading the installed base. Flags SHOULD be used
used only when necessary for DNS resolution to function. only when necessary for DNS resolution to function.
For many uses, a EDNS Option Code may be preferred. For many uses, an EDNS Option Code may be preferred.
With time, some applications of DNS have made EDNS a requirement for Over time, some applications of DNS have made EDNS a requirement for
their deployment. For instance, DNSSEC uses the additional flag their deployment. For instance, DNSSEC uses the additional flag
space introduced in EDNS to signal the request to include DNSSEC data space introduced in EDNS to signal the request to include DNSSEC data
in a DNS response. in a DNS response.
Given the increase in DNS response sizes when including larger data Given the increase in DNS response sizes when including larger data
items such as AAAA Records, DNSSEC information (e.g. RRSIG or items such as AAAA records, DNSSEC information (e.g., RRSIG or
DNSKEY) or large TXT Records, the additional UDP payload capabilities DNSKEY), or large TXT records, the additional UDP payload
provided by EDNS can help improve the scalability of the DNS by capabilities provided by EDNS can help improve the scalability of the
avoiding widespread use of TCP for DNS transport. DNS by avoiding widespread use of TCP for DNS transport.
4. DNS Message changes 4. DNS Message Changes
4.1. Message Header 4.1. Message Header
The DNS Message Header's second full 16-bit word is divided into a The DNS message header's second full 16-bit word is divided into a
4-bit OPCODE, a 4-bit RCODE, and a number of 1-bit flags (see , 4-bit OPCODE, a 4-bit RCODE, and a number of 1-bit flags (see Section
section 4.1.1 [RFC1035]). Some of these were marked for future use, 4.1.1 of [RFC1035]). Some of these flag values were marked for
and most these have since been allocated. Also, most of the RCODE future use, and most of these have since been allocated. Also, most
values are now in use. The OPT pseudo-RR specified below contains of the RCODE values are now in use. The OPT pseudo-RR specified
extensions to the RCODE bit field as well as additional flag bits. below contains extensions to the RCODE bit field as well as
additional flag bits.
4.2. Label Types 4.2. Label Types
The first two bits of a wire format domain label are used to denote The first 2 bits of a wire format domain label are used to denote the
the type of the label. [RFC1035] allocates two of the four possible type of the label. [RFC1035] allocates 2 of the 4 possible types and
types and reserves the other two. More label types were defined in reserves the other 2. More label types were defined in [RFC2671].
[RFC2671]. This document obsoletes the use of the 2-bit combination The use of the 2-bit combination defined by [RFC2671] to identify
defined by [RFC2671] to identify extended label types. extended label types remains valid. However, it has been found that
deployment of new label types is noticeably difficult and so is only
recommended after careful evaluation of alternatives and the need for
deployment.
4.3. UDP Message Size 4.3. UDP Message Size
Traditional DNS Messages are limited to 512 octets in size when sent Traditional DNS messages are limited to 512 octets in size when sent
over UDP [RFC1035]. Fitting the increasing amounts of data that can over UDP [RFC1035]. Fitting the increasing amounts of data that can
be transported in DNS in this 512-byte limit is becoming more be transported in DNS in this 512-byte limit is becoming more
difficult. For instance, inclusion of DNSSEC records frequently difficult. For instance, inclusion of DNSSEC records frequently
requires a much larger response than a 512 byte message can hold. requires a much larger response than a 512-byte message can hold.
EDNS(0) is intended to provide support for transporting these larger EDNS(0) specifies a way to advertise additional features such as
packet sizes while continuing to use UDP. It specifies a way to larger response size capability, which is intended to help avoid
advertise additional features such as larger response size truncated UDP responses, which in turn cause retry over TCP. It
capability, which is intended to help avoid truncated UDP responses therefore provides support for transporting these larger packet sizes
which then cause retry over TCP. without needing to resort to TCP for transport.
5. Extended Label Types 5. Extended Label Types
The first octet in the on-the-wire representation of a DNS label The first octet in the on-the-wire representation of a DNS label
specifies the label type; the basic DNS specification [RFC1035] specifies the label type; the basic DNS specification [RFC1035]
dedicates the two most significant bits of that octet for this dedicates the 2 most significant bits of that octet for this purpose.
purpose.
[RFC2671] defined DNS label type 0b01 for use as an indication for [RFC2671] defined DNS label type 0b01 for use as an indication for
Extended Label Types. A specific Extended Label Type was selected by extended label types. A specific extended label type was selected by
the 6 least significant bits of the first octet. Thus, Extended the 6 least significant bits of the first octet. Thus, extended
Label Types were indicated by the values 64-127 (0b01xxxxxx) in the label types were indicated by the values 64-127 (0b01xxxxxx) in the
first octet of the label. first octet of the label.
Extended Label Types are extremely difficult to deploy due to lack of Extended label types are extremely difficult to deploy due to lack of
support in clients and intermediate gateways as described in support in clients and intermediate gateways, as described in
[RFC3363] which moved [RFC2673] to experimental status, and [RFC3363], which moved [RFC2673] to Experimental status; and
[RFC3364], which describes the pros and cons. As such proposals that [RFC3364], which describes the pros and cons. As such, proposals
contemplate extended labels SHOULD weigh this deployment cost against that contemplate extended labels SHOULD weigh this deployment cost
the possibility of implementing functionality in other ways. against the possibility of implementing functionality in other ways.
Finally, implementations MUST NOT generate or pass Binary Labels in Finally, implementations MUST NOT generate or pass Binary Labels in
their communications as they are now deprecated. their communications, as they are now deprecated.
6. The OPT pseudo-RR 6. The OPT Pseudo-RR
6.1. OPT Record Definition 6.1. OPT Record Definition
6.1.1. Basic elements 6.1.1. Basic Elements
An OPT pseudo-RR (sometimes called a meta-RR) MAY be added to the An OPT pseudo-RR (sometimes called a meta-RR) MAY be added to the
additional data section of a request. additional data section of a request.
The OPT RR has RR type 41. The OPT RR has RR type 41.
If present in requests, compliant responders MUST include an OPT If an OPT record is present in a received request, compliant
record in their respective responses. responders MUST include an OPT record in their respective responses.
An OPT record does not carry any DNS data. It is used only to An OPT record does not carry any DNS data. It is used only to
contain control information pertaining to the question and answer contain control information pertaining to the question-and-answer
sequence of a specific transaction. OPT RRs MUST NOT be cached, sequence of a specific transaction. OPT RRs MUST NOT be cached,
forwarded, or stored in or loaded from master files. forwarded, or stored in or loaded from master files.
The OPT RR MAY be placed anywhere within the additional data section. The OPT RR MAY be placed anywhere within the additional data section.
When an OPT RR MUST is included within any DNS message only ONE OPT When an OPT RR is included within any DNS message, it MUST be the
RR can be present. If a query message with more than one OPT RR is only OPT RR in that message. If a query message with more than one
received, a FORMERR (RCODE=1) MUST be returned. The placement OPT RR is received, a FORMERR (RCODE=1) MUST be returned. The
flexibility for the OPT RR does not override the need for the TSIG or placement flexibility for the OPT RR does not override the need for
SIG(0) RRs to be the last in the additional section whenever they are the TSIG or SIG(0) RRs to be the last in the additional section
present. whenever they are present.
6.1.2. Wire Format 6.1.2. Wire Format
An OPT RR has a fixed part and a variable set of options expressed as An OPT RR has a fixed part and a variable set of options expressed as
{attribute, value} pairs. The fixed part holds some DNS meta data {attribute, value} pairs. The fixed part holds some DNS metadata,
and also a small collection of basic extension elements which we and also a small collection of basic extension elements that we
expect to be so popular that it would be a waste of wire space to expect to be so popular that it would be a waste of wire space to
encode them as {attribute, value} pairs. encode them as {attribute, value} pairs.
The fixed part of an OPT RR is structured as follows: The fixed part of an OPT RR is structured as follows:
+------------+--------------+------------------------------+ +------------+--------------+------------------------------+
| Field Name | Field Type | Description | | Field Name | Field Type | Description |
+------------+--------------+------------------------------+ +------------+--------------+------------------------------+
| NAME | domain name | MUST be 0 (root domain) | | NAME | domain name | MUST be 0 (root domain) |
| TYPE | u_int16_t | OPT (41) | | TYPE | u_int16_t | OPT (41) |
skipping to change at page 8, line 17 skipping to change at page 8, line 21
0: | OPTION-CODE | 0: | OPTION-CODE |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
2: | OPTION-LENGTH | 2: | OPTION-LENGTH |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
4: | | 4: | |
/ OPTION-DATA / / OPTION-DATA /
/ / / /
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
OPTION-CODE OPTION-CODE
Assigned by the Expert Review process as defined by the dnsext Assigned by the Expert Review process as defined by the DNSEXT
working group and the IESG. working group and the IESG.
OPTION-LENGTH OPTION-LENGTH
Size (in octets) of OPTION-DATA. Size (in octets) of OPTION-DATA.
OPTION-DATA OPTION-DATA
Varies per OPTION-CODE. MUST be treated as a bit field. Varies per OPTION-CODE. MUST be treated as a bit field.
The order of appearance of option tuples is not defined. If one The order of appearance of option tuples is not defined. If one
option modifies the behavior of another or multiple options are option modifies the behaviour of another or multiple options are
related to one another in some way, they have the same effect related to one another in some way, they have the same effect
regardless of ordering in the RDATA wire encoding. regardless of ordering in the RDATA wire encoding.
Any OPTION-CODE values not understood by a responder or requestor Any OPTION-CODE values not understood by a responder or requestor
MUST be ignored. Specifications of such options might wish to MUST be ignored. Specifications of such options might wish to
include some kind of signaled acknowledgement. For example, an include some kind of signaled acknowledgement. For example, an
option specification might say that if a responder sees and supports option specification might say that if a responder sees and supports
option XYZ, it MUST include option XYZ in its response. option XYZ, it MUST include option XYZ in its response.
6.1.3. OPT Record TTL Field Use 6.1.3. OPT Record TTL Field Use
The extended RCODE and flags (which OPT stores in the RR TTL field) The extended RCODE and flags, which OPT stores in the RR Time to Live
are structured as follows: (TTL) field, are structured as follows:
+0 (MSB) +1 (LSB) +0 (MSB) +1 (LSB)
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
0: | EXTENDED-RCODE | VERSION | 0: | EXTENDED-RCODE | VERSION |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
2: | DO| Z | 2: | DO| Z |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
EXTENDED-RCODE EXTENDED-RCODE
Forms upper 8 bits of extended 12-bit RCODE (together with the Forms the upper 8 bits of extended 12-bit RCODE (together with the
4 bits defined in [RFC1035]. Note that EXTENDED-RCODE value 0 4 bits defined in [RFC1035]. Note that EXTENDED-RCODE value 0
indicates that an unextended RCODE is in use (values 0 through indicates that an unextended RCODE is in use (values 0 through
15). 15).
VERSION VERSION
Indicates the implementation level of the setter. Full Indicates the implementation level of the setter. Full
conformance with this specification is indicated by version conformance with this specification is indicated by version '0'.
``0.'' Requestors are encouraged to set this to the lowest Requestors are encouraged to set this to the lowest implemented
implemented level capable of expressing a transaction, to level capable of expressing a transaction, to minimise the
minimize the responder and network load of discovering the responder and network load of discovering the greatest common
greatest common implementation level between requestor and implementation level between requestor and responder. A
responder. A requestor's version numbering strategy MAY requestor's version numbering strategy MAY ideally be a run-time
ideally be a run time configuration option. configuration option.
If a responder does not implement the VERSION level of the If a responder does not implement the VERSION level of the
request, then it MUST respond with RCODE=BADVERS. All request, then it MUST respond with RCODE=BADVERS. All responses
responses MUST be limited in format to the VERSION level of the MUST be limited in format to the VERSION level of the request, but
request, but the VERSION of each response SHOULD be the highest the VERSION of each response SHOULD be the highest implementation
implementation level of the responder. In this way a requestor level of the responder. In this way, a requestor will learn the
will learn the implementation level of a responder as a side implementation level of a responder as a side effect of every
effect of every response, including error responses and response, including error responses and including RCODE=BADVERS.
including RCODE=BADVERS.
6.1.4. Flags 6.1.4. Flags
DO DO
DNSSEC OK bit as defined by [RFC3225]. DNSSEC OK bit as defined by [RFC3225].
Z Z
Set to zero by senders and ignored by receivers, unless Set to zero by senders and ignored by receivers, unless modified
modified in a subsequent specification. in a subsequent specification.
6.2. Behaviour 6.2. Behaviour
6.2.1. Cache behaviour 6.2.1. Cache Behaviour
The OPT record MUST NOT be cached. The OPT record MUST NOT be cached.
6.2.2. Fallback 6.2.2. Fallback
If a requestor detects that the remote end does not support EDNS(0), If a requestor detects that the remote end does not support EDNS(0),
it MAY issue queries without an OPT record. It MAY cache this it MAY issue queries without an OPT record. It MAY cache this
knowledge for a brief time in order to avoid fallback delays in the knowledge for a brief time in order to avoid fallback delays in the
future. However, if DNSSEC or any future option using EDNS is future. However, if DNSSEC or any future option using EDNS is
required, no fallback should be performed as they are only signalled required, no fallback should be performed, as these options are only
through EDNS. If an implementation detects that some servers for the signaled through EDNS. If an implementation detects that some
zone support EDNS(0) while others would force the use of TCP to fetch servers for the zone support EDNS(0) while others would force the use
all data, preference MAY be given to those which support EDNS(0). of TCP to fetch all data, preference MAY be given to servers that
Implementers SHOULD analyse this choice and the impact on both support EDNS(0). Implementers SHOULD analyse this choice and the
endpoints. impact on both endpoints.
6.2.3. Requestor's Payload Size 6.2.3. Requestor's Payload Size
The requestor's UDP payload size (encoded in the RR CLASS field) is The requestor's UDP payload size (encoded in the RR CLASS field) is
the number of octets of the largest UDP payload that can be the number of octets of the largest UDP payload that can be
reassembled and delivered in the requestor's network stack. Note reassembled and delivered in the requestor's network stack. Note
that path MTU, with or without fragmentation, could be smaller than that path MTU, with or without fragmentation, could be smaller than
this. this.
Values lower than 512 MUST be treated as equal to 512. Values lower than 512 MUST be treated as equal to 512.
The requestor SHOULD place a value in this field that it can actually The requestor SHOULD place a value in this field that it can actually
receive. For example, if a requestor sits behind a firewall which receive. For example, if a requestor sits behind a firewall that
will block fragmented IP packets, a requestor SHOULD NOT choose a will block fragmented IP packets, a requestor SHOULD NOT choose a
value which will cause fragmentation. Doing so will prevent large value that will cause fragmentation. Doing so will prevent large
responses from being received, and can cause fallback to occur. This responses from being received and can cause fallback to occur. This
knowledge may be auto-detected by the implementation or provided by a knowledge may be auto-detected by the implementation or provided by a
human administrator. human administrator.
Note that a 512-octet UDP payload requires a 576-octet IP reassembly Note that a 512-octet UDP payload requires a 576-octet IP reassembly
buffer. Choosing between 1280 and 1410 bytes for IP (v4 or v6) over buffer. Choosing between 1280 and 1410 bytes for IP (v4 or v6) over
Ethernet would be reasonable. Ethernet would be reasonable.
Bigger values SHOULD be considered by implementers to be used where Where fragmentation is not a concern, use of bigger values SHOULD be
fragmentation is not a concern. Implementations SHOULD use their considered by implementers. Implementations SHOULD use their largest
largest configured or implemented values as a starting point in an configured or implemented values as a starting point in an EDNS
EDNS transaction in the absence of previous knowledge about the transaction in the absence of previous knowledge about the
destination server. destination server.
Choosing a very large value will guarantee fragmentation at the IP Choosing a very large value will guarantee fragmentation at the IP
layer, and may prevent answers from being received due to a single layer, and may prevent answers from being received due to loss of a
fragment loss or misconfigured firewalls. single fragment or to misconfigured firewalls.
The requestor's maximum payload size can change over time. It MUST The requestor's maximum payload size can change over time. It MUST
NOT be cached for use beyond the transaction in which it is NOT be cached for use beyond the transaction in which it is
advertised. advertised.
6.2.4. Responder's Payload Size 6.2.4. Responder's Payload Size
The responder's maximum payload size can change over time, but can be The responder's maximum payload size can change over time but can
reasonably expected to remain constant between two closely spaced reasonably be expected to remain constant between two closely spaced
sequential transactions; for example, an arbitrary QUERY used as a sequential transactions, for example, an arbitrary QUERY used as a
probe to discover a responder's maximum UDP payload size, followed probe to discover a responder's maximum UDP payload size, followed
immediately by an UPDATE which takes advantage of this size. This is immediately by an UPDATE that takes advantage of this size. This is
considered preferable to the outright use of TCP for oversized considered preferable to the outright use of TCP for oversized
requests, if there is any reason to suspect that the responder requests, if there is any reason to suspect that the responder
implements EDNS, and if a request will not fit in the default 512 implements EDNS, and if a request will not fit in the default
payload size limit. 512-byte payload size limit.
6.2.5. Payload Size Selection 6.2.5. Payload Size Selection
Due to transaction overhead, it is not recommended to advertise an Due to transaction overhead, it is not recommended to advertise an
architectural limit as a maximum UDP payload size. Even on system architectural limit as a maximum UDP payload size. Even on system
stacks capable of reassembling 64KB datagrams, memory usage at low stacks capable of reassembling 64 KB datagrams, memory usage at low
levels in the system will be a concern. A good compromise may be the levels in the system will be a concern. A good compromise may be the
use of a EDNS maximum payload size of 4096 octets as a starting use of an EDNS maximum payload size of 4096 octets as a starting
point. point.
A requestor MAY choose to implement a fallback to smaller advertised A requestor MAY choose to implement a fallback to smaller advertised
sizes to work around firewall or other network limitations. A sizes to work around firewall or other network limitations. A
requestor SHOULD choose to use a fallback mechanism which begins with requestor SHOULD choose to use a fallback mechanism that begins with
a large size, such as 4096. If that fails, a fallback around the a large size, such as 4096. If that fails, a fallback around the
1280-1410 byte range SHOULD be tried, as it has a reasonable chance range of 1280-1410 bytes SHOULD be tried, as it has a reasonable
to fit within a single Ethernet frame. Failing that, a requestor MAY chance to fit within a single Ethernet frame. Failing that, a
choose a 512 byte packet, which with large answers may cause a TCP requestor MAY choose a 512-byte packet, which with large answers may
retry. cause a TCP retry.
Values of less than 512 bytes MUST be treated as equal to 512 bytes. Values of less than 512 bytes MUST be treated as equal to 512 bytes.
6.2.6. Support in MiddleBoxes 6.2.6. Support in Middleboxes
In a network that carries DNS traffic there could be active equipment In a network that carries DNS traffic, there could be active
other than that participating directly in the DNS resolution process equipment other than that participating directly in the DNS
(stub and caching resolvers, authoritative servers) that affect the resolution process (stub and caching resolvers, authoritative
transmission of DNS messages (e.g. firewalls, load balancers, servers) that affects the transmission of DNS messages (e.g.,
proxies, etc) referred to here as MiddleBoxes. firewalls, load balancers, proxies, etc.), referred to here as
"middleboxes".
Conformant MiddleBoxes MUST NOT limit DNS messages over UDP to 512 Conformant middleboxes MUST NOT limit DNS messages over UDP to 512
bytes. bytes.
MiddleBoxes which simply forward requests to a recursive resolver Middleboxes that simply forward requests to a recursive resolver MUST
MUST NOT modify and MUST NOT delete the OPT record contents in either NOT modify and MUST NOT delete the OPT record contents in either
direction. direction.
MiddleBoxes which have additional functionality, such as answering Middleboxes that have additional functionality, such as answering
queries or acting as intelligent forwarders, SHOULD be able to queries or acting as intelligent forwarders, SHOULD be able to
process the OPT record and act based on its contents. These boxes process the OPT record and act based on its contents. These
MUST consider the incoming request and any outgoing requests as middleboxes MUST consider the incoming request and any outgoing
separate transactions if the characteristics of the messages are requests as separate transactions if the characteristics of the
different. messages are different.
A more in depth discussion of this type of equipment and other A more in-depth discussion of this type of equipment and other
considerations regarding their interaction with DNS traffic is found considerations regarding their interaction with DNS traffic is found
in [RFC5625] in [RFC5625].
7. Transport Considerations 7. Transport Considerations
The presence of an OPT pseudo-RR in a request should be taken as an The presence of an OPT pseudo-RR in a request should be taken as an
indication that the requestor fully implements the given version of indication that the requestor fully implements the given version of
EDNS, and can correctly understand any response that conforms to that EDNS and can correctly understand any response that conforms to that
feature's specification. feature's specification.
Lack of presence of an OPT record in a request MUST be taken as an Lack of presence of an OPT record in a request MUST be taken as an
indication that the requestor does not implement any part of this indication that the requestor does not implement any part of this
specification and that the responder MUST NOT include an OPT record specification and that the responder MUST NOT include an OPT record
in its response. in its response.
Extended agents MUST be prepared for handling the interactions with Extended agents MUST be prepared for handling interactions with
unextended clients in the face of new protocol elements, and fall unextended clients in the face of new protocol elements and fall back
back gracefully to unextended DNS when needed. gracefully to unextended DNS when needed.
Responders which choose not to implement the protocol extensions Responders that choose not to implement the protocol extensions
defined in this document MUST respond with a return code (RCODE) of defined in this document MUST respond with a return code (RCODE) of
FORMERR to messages containing an OPT RR in the additional section FORMERR to messages containing an OPT record in the additional
and MUST NOT include an OPT record in the response. section and MUST NOT include an OPT record in the response.
If there is a problem with processing the OPT record itself, such as If there is a problem with processing the OPT record itself, such as
an option value that is badly formatted or includes out of range an option value that is badly formatted or that includes out-of-range
values, a FORMERR MUST be returned. If this occurs the response MUST values, a FORMERR MUST be returned. If this occurs, the response
include an OPT record. This is intended to allow the requestor to MUST include an OPT record. This is intended to allow the requestor
distinguish between servers which do not implement EDNS and format to distinguish between servers that do not implement EDNS and format
errors within EDNS. errors within EDNS.
The minimal response MUST be the DNS header, question section, and an The minimal response MUST be the DNS header, question section, and an
OPT record. This MUST also occur when an truncated response (using OPT record. This MUST also occur when a truncated response (using
the DNS header's TC bit) is returned. the DNS header's TC bit) is returned.
8. Security Considerations 8. Security Considerations
Requestor-side specification of the maximum buffer size may open a Requestor-side specification of the maximum buffer size may open a
DNS denial of service attack if responders can be made to send DNS denial-of-service attack if responders can be made to send
messages which are too large for intermediate gateways to forward, messages that are too large for intermediate gateways to forward,
thus leading to potential ICMP storms between gateways and thus leading to potential ICMP storms between gateways and
responders. responders.
Announcing very large UDP buffer sizes may result in dropping by Announcing very large UDP buffer sizes may result in dropping of DNS
middleboxes (see Section 6.2.6). This could cause retransmissions messages by middleboxes (see Section 6.2.6). This could cause
with no hope of success. Some devices have been found to reject retransmissions with no hope of success. Some devices have been
fragmented UDP packets. found to reject fragmented UDP packets.
Announcing too small UDP buffer sizes may result in fallback to TCP Announcing UDP buffer sizes that are too small may result in fallback
with a corresponding load impact on DNS servers. This is especially to TCP with a corresponding load impact on DNS servers. This is
important with DNSSEC, where answers are much larger. especially important with DNSSEC, where answers are much larger.
9. IANA Considerations 9. IANA Considerations
The IANA has assigned RR type code 41 for OPT. The IANA has assigned RR type code 41 for OPT.
[RFC2671] specified a number of IANA sub-registries within "DOMAIN [RFC2671] specified a number of IANA subregistries within "DOMAIN
NAME SYSTEM PARAMETERS:" NAME SYSTEM PARAMETERS":
o DNS EDNS(0) Options o DNS EDNS(0) Options
o EDNS Version Number o EDNS Version Number
o EDNS Header Flags o EDNS Header Flags
Additionally, two entries were generated in existing registries: Additionally, two entries were generated in existing registries:
EDNS Extended Label Type in the DNS Label Types Registry o EDNS Extended Label Type in the DNS Label Types registry
Bad OPT Version in the DNS RCODES registry o Bad OPT Version in the DNS RCODES registry
IANA is advised to update references to [RFC2671] in these entries IANA has updated references to [RFC2671] in these entries and
and sub-registries to this document. subregistries to this document.
[RFC2671] created the "EDNS Extended Label Type Registry". We [RFC2671] created the DNS Label Types registry. This registry is to
request that this registry be closed. remain open.
This document assigns option code 65535 in the "EDNS Option Codes" The registration procedure for the DNS Label Types registry is
registry to "Reserved for future expansion." Standards Action.
This document assigns option code 65535 in the DNS EDNS0 Options
registry to "Reserved for future expansion".
The current status of the IANA registry for EDNS Option Codes at the
time of publication of this document is
o 0-4 assigned, per references in the registry
o 5-65000 Available for assignment, unassigned
o 65001-65534 Local/Experimental use
o 65535 Reserved for future expansion
[RFC2671] expands the RCODE space from 4 bits to 12 bits. This [RFC2671] expands the RCODE space from 4 bits to 12 bits. This
allows more than the 16 distinct RCODE values allowed in [RFC1035]. allows more than the 16 distinct RCODE values allowed in [RFC1035].
IETF Standards Action is required to add a new RCODE. IETF Review is required to add a new RCODE.
This document assigns EDNS Extended RCODE 16 to "BADVERS" in the DNS This document assigns EDNS Extended RCODE 16 to "BADVERS" in the DNS
RCODES registry. RCODES registry.
[RFC2671] called for the recording of assignment of extended label [RFC2671] called for the recording of assignment of extended label
types 0bxx111111 as "Reserved for future extended label types". This types 0bxx111111 as "Reserved for future extended label types"; the
request implied a request to open a new registry for Extended Label IANA registry currently contains "Reserved for future expansion".
Types but due to the possibility of ambiguity new text registrations This request implied, at that time, a request to open a new registry
were instead made within the general "DNS Label Types" registry which for extended label types, but due to the possibility of ambiguity,
also registers entries originally defined by [RFC1035]. new text registrations were instead made within the general DNS Label
Types registry, which also registers entries originally defined by
[RFC1035]. There is therefore no Extended Label Types registry, with
all label types registered in the DNS Label Types registry.
This document requests IANA to close registration of further Extended This document deprecates Binary Labels. Therefore, the status for
Label Types in the "DNS Label Types" Registry. the DNS Label Types registration "Binary Labels" is now "Historic".
IETF Standards Action is required for assignments of new EDNS(0) IETF Standards Action is required for assignments of new EDNS(0)
flags. Flags SHOULD be used only when necessary for DNS resolution flags. Flags SHOULD be used only when necessary for DNS resolution
to function. For many uses, a EDNS Option Code may be preferred. to function. For many uses, an EDNS Option Code may be preferred.
IETF Standards Action is required to create new entries in the EDNS IETF Standards Action is required to create new entries in the EDNS
Version Number registry. Within the EDNS Option Code space Expert Version Number registry. Within the EDNS Option Code space, Expert
Review is required for allocation of an EDNS Option Code. IANA is Review is required for allocation of an EDNS Option Code. Per this
requested to keep a registry for the EDNS Option Code space. document, IANA maintains a registry for the EDNS Option Code space.
9.1. OPT Option Code Allocation Procedure 9.1. OPT Option Code Allocation Procedure
OPT Option Codes are assigned by expert review. OPT Option Codes are assigned by Expert Review.
Assignment of Option Codes should be liberal, but duplicate Assignment of Option Codes should be liberal, but duplicate
functionality is to be avoided. functionality is to be avoided.
10. References 10. References
10.1. Normative References 10.1. Normative References
[RFC1035] Mockapetris, P., "Domain names - implementation and [RFC1035] Mockapetris, P., "Domain names - implementation and
specification", STD 13, RFC 1035, November 1987. specification", STD 13, RFC 1035, November 1987.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC2671] Vixie, P., "Extension Mechanisms for DNS (EDNS0)", [RFC2671] Vixie, P., "Extension Mechanisms for DNS (EDNS0)",
RFC 2671, August 1999. RFC 2671, August 1999.
[RFC3225] Conrad, D., "Indicating Resolver Support of DNSSEC", [RFC3225] Conrad, D., "Indicating Resolver Support of DNSSEC",
RFC 3225, December 2001. RFC 3225, December 2001.
10.2. Informative References 10.2. Informative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC2673] Crawford, M., "Binary Labels in the Domain Name System", [RFC2673] Crawford, M., "Binary Labels in the Domain Name System",
RFC 2673, August 1999. RFC 2673, August 1999.
[RFC3363] Bush, R., Durand, A., Fink, B., Gudmundsson, O., and T. [RFC3363] Bush, R., Durand, A., Fink, B., Gudmundsson, O., and T.
Hain, "Representing Internet Protocol version 6 (IPv6) Hain, "Representing Internet Protocol version 6 (IPv6)
Addresses in the Domain Name System (DNS)", RFC 3363, Addresses in the Domain Name System (DNS)", RFC 3363,
August 2002. August 2002.
[RFC3364] Austein, R., "Tradeoffs in Domain Name System (DNS) [RFC3364] Austein, R., "Tradeoffs in Domain Name System (DNS)
Support for Internet Protocol version 6 (IPv6)", RFC 3364, Support for Internet Protocol version 6 (IPv6)", RFC 3364,
August 2002. August 2002.
[RFC5625] Bellis, R., "DNS Proxy Implementation Guidelines", [RFC5625] Bellis, R., "DNS Proxy Implementation Guidelines",
BCP 152, RFC 5625, August 2009. BCP 152, RFC 5625, August 2009.
Appendix A. Document Editing History Appendix A. Changes since RFCs 2671 and 2673
Following is a list of high-level changes made to the original
RFC2671.
A.1. Changes since RFC2671 Following is a list of high-level changes to RFCs 2671 and 2673.
o Support for the OPT record is now mandatory. o Support for the OPT record is now mandatory.
o Extended label types obsoleted and the registry is closed. o Extended label types remain available, but their use is
discouraged as a general solution due to observed difficulties in
their deployment on the Internet, as illustrated by the work with
the "Binary Labels" type.
o The bitstring label type, which was already moved from draft to o RFC 2673, which defined the "Binary Labels" type and is currently
experimental, is requested to be moved to historical. Experimental, is requested to be moved to Historic.
o Changes in how EDNS buffer sizes are selected, with o Made changes in how EDNS buffer sizes are selected, and provided
recommendations on how to select them. recommendations on how to select them.
o Front material (IPR notice and such) was updated to current
requirements.
A.2. Changes since -02
o Specified the method for allocation of constants.
o Cleaned up a lot of wording, along with quite a bit of document
structure changes.
Authors' Addresses Authors' Addresses
Joao Damas Joao Damas
Bond Internet Systems Bond Internet Systems
Av Albufera 14 Av Albufera 14
S.S. Reyes, Madrid 28701 S.S. Reyes, Madrid 28701
ES ES
Phone: +1 650.423.1312 Phone: +1 650.423.1312
Email: joao@bondis.org EMail: joao@bondis.org
Michael Graff Michael Graff
Email: explorer@flame.org EMail: explorer@flame.org
Paul Vixie Paul Vixie
Internet Systems Consortium Internet Systems Consortium
950 Charter Street 950 Charter Street
Redwood City, California 94063 Redwood City, California 94063
US US
Phone: +1 650.423.1301 Phone: +1 650.423.1301
Email: vixie@isc.org EMail: vixie@isc.org
 End of changes. 108 change blocks. 
269 lines changed or deleted 277 lines changed or added

This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/