home | O'Reilly's CD bookshelfs | FreeBSD | Linux | Cisco | Cisco Exam  


DNS & BINDSearch this book
Previous: A.2 DNS Message Appendix A
DNS Message Format and Resource Records
Next: A.4 Resource Record Data

A.3 Header Section Format

(From RFC 1035, pages 26-28)

                                    1  1  1  1  1  1
      0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5
    |                      ID                       |
    |QR|   Opcode  |AA|TC|RD|RA|   Z    |   RCODE   |
    |                    QDCOUNT                    |
    |                    ANCOUNT                    |
    |                    NSCOUNT                    |
    |                    ARCOUNT                    |
ID             A 16 bit identifier assigned by the program that
               generates any kind of query.  This identifier is copied
               the corresponding reply and can be used by the requester
               to match up replies to outstanding queries.
QR             A one bit field that specifies whether this message is a
               query (0), or a response (1).
OPCODE         A four bit field that specifies kind of query in this
               message.  This value is set by the originator of a query
               and copied into the response.  The values are:
               0               a standard query (QUERY)
               1               an inverse query (IQUERY)
               2               a server status request (STATUS)
               3-15            reserved for future use
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.
               Note that the contents of the answer section may have
               multiple owner names because of aliases.  The AA bit
               corresponds to the name which matches the query name, or
               the first owner name in the answer section.
TC             TrunCation - specifies that this message was truncated
               due to length greater than that permitted on the
               transmission channel.
RD             Recursion Desired - this bit may be set in a query and
               is copied into the response.  If RD is set, it directs
               the name server to pursue the query recursively.
               Recursive query support is optional.
RA             Recursion Available - this bit is set or cleared in a
               response, and denotes whether recursive query support is
               available in the name server.
Z              Reserved for future use.  Must be zero in all queries
               and responses.

RCODE          Response code - this 4 bit field is set as part of
               responses.  The values have the following
               0               No error condition
               1               Format error - The name server was
                               unable to interpret the query.
               2               Server failure - The name server was
                               unable to process this query due to a
                               problem with the name server.
               3               Name Error - Meaningful only for
                               responses from an authoritative name
                               server, this code signifies that the
                               domain name referenced in the query does
                               not exist.
               4               Not Implemented - The name server does
                               not support the requested kind of query.
               5               Refused - The name server refuses to
                               perform the specified operation for
                               policy reasons.  For example, a name
                               server may not wish to provide the
                               information to the particular requester,
                               or a name server may not wish to perform
                               a particular operation (e.g., zone
                               transfer) for particular data.
               6-15            Reserved for future use.
QDCOUNT        an unsigned 16 bit integer specifying the number of
               entries in the question section.
ANCOUNT        an unsigned 16 bit integer specifying the number of
               resource records in the answer section.
NSCOUNT        an unsigned 16 bit integer specifying the number of name
               server resource records in the authority records
ARCOUNT        an unsigned 16 bit integer specifying the number of
               resource records in the additional records section.

A.3.1 Question Section Format

(From RFC 1035, pages 28-29)

The question section is used to carry the "question" in most queries, i.e., the parameters that define what is being asked. The section contains QDCOUNT (usually 1) entries, each of the following format:

                                    1  1  1  1  1  1
      0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5
    |                                               |
    /                     QNAME                     /
    /                                               /
    |                     QTYPE                     |
    |                     QCLASS                    |
QNAME          a domain name represented as a sequence of labels, where
               each label consists of a length octet followed by that
               number of octets.  The domain name terminates with the
               zero length octet for the null label of the root.  Note
               that this field may be an odd number of octets; no
               padding is used.
QTYPE          a two octet code which specifies the type of the query.
               The values for this field include all codes valid for a
               TYPE field, together with some more general codes which
               can match more than one type of RR.
QCLASS         a two octet code that specifies the class of the query.
               For example, the QCLASS field is IN for the Internet.

A.3.1.1 QCLASS values

(From RFC 1035, page 13)

QCLASS fields appear in the question section of a query. QCLASS values are a superset of CLASS values; every CLASS is a valid QCLASS. In addition to CLASS values, the following QCLASSes are defined:


255 any class.

A.3.1.2 QTYPE values

(From RFC 1035, pages 12-13)

QTYPE fields appear in the question part of a query. QTYPES are a superset of TYPEs, hence all TYPEs are valid QTYPEs. In addition, the following QTYPEs are defined:


252 A request for a transfer of an entire zone


253 A request for mailbox-related records (MB, MG or MR)


254 A request for mail agent RRs (Obsolete - see MX)


255 A request for all records

A.3.2 Answer, Authority, and Additional Section Format

(From RFC 1035, pages 29-30)

The answer, authority, and additional sections all share the same format: a variable number of resource records, where the number of records is specified in the corresponding count field in the header. Each resource record has the following format:

                                    1  1  1  1  1  1
      0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5
    |                                               |
    /                                               /
    /                      NAME                     /
    |                                               |
    |                      TYPE                     |
    |                     CLASS                     |
    |                      TTL                      |
    |                                               |
    |                   RDLENGTH                    |
    /                     RDATA                     /
    /                                               /
NAME           a domain name to which this resource record pertains.
TYPE           two octets containing one of the RR type codes.  This
               field specifies the meaning of the data in the RDATA
CLASS          two octets which specify the class of the data in the
               RDATA field.
TTL            a 32 bit unsigned integer that specifies the time
               interval (in seconds) that the resource record may be
               cached before it should be discarded.  Zero values are
               interpreted to mean that the RR can only be used for the
               transaction in progress, and should not be cached.
RDLENGTH       an unsigned 16 bit integer that specifies the length in
               octets of the RDATA field.
RDATA          a variable length string of octets that describes the
               resource.  The format of this information varies
               according to the TYPE and CLASS of the resource record.
               For example, if the TYPE is A and the CLASS is IN,
               the RDATA field is a 4 octet ARPA Internet address.

A.3.3 Data Transmission Order

(From RFC 1035, pages 8-9)

The order of transmission of the header and data described in this document is resolved to the octet level. Whenever a diagram shows a group of octets, the order of transmission of those octets is the normal order in which they are read in English. For example, in the following diagram, the octets are transmitted in the order they are numbered.

     0                   1
     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
    |       1       |       2       |
    |       3       |       4       |
    |       5       |       6       |

Whenever an octet represents a numeric quantity, the left most bit in the diagram is the high order or most significant bit. That is, the bit labeled 0 is the most significant bit. For example, the following diagram represents the value 170 (decimal).

     0 1 2 3 4 5 6 7
    |1 0 1 0 1 0 1 0|

Similarly, whenever a multi-octet field represents a numeric quantity the left most bit of the whole field is the most significant bit. When a multi-octet quantity is transmitted, the most significant octet is transmitted first.