A taxonomy of DNS server responses

You've come to this page because you've asked a question similar to the following:
What are the differences between a "complete answer", that one receives from a DNS server, and a "partial answer" ? What is the taxonomy of DNS server responses ?

This is the Frequently Given Answer to that question.

Responses to queries from DNS servers fall into four categories:

Complete answers

Both content DNS servers and proxy DNS servers may respond with complete answers.

A complete answer comprises a chain of zero or more (client side) aliases, culminating in either

The chain of aliases comprises zero or more "CNAME" resource records. A content DNS server following the algorithm in § 4.3.2 of RFC 1034 will insert this chain in first-to-last order in the response. The response parsing code in most resolving proxy DNS servers and DNS client libraries expects this order. However, the actual text of RFC 1034 itself does not guarantee it.

As RFC 2308 § 2.1 explains, the empty resource record set or the "no such name" error indication correspond to the domain name following the last link in the alias chain (which is, of course, the domain name in the original question if the chain is zero links long).

Partial answers

Only content DNS servers may respond with partial answers.

A partial answer is an answer that would otherwise be a complete answer except that it is interrupted at some point, with the remainder truncated and replaced with a referral to another content server. Essentially the content server is saying "I don't know anything further past this point. Ask over there.".

As RFC 2308 § 2.1 explains, where the answer is interrupted partway through the chain of aliases, before the final resource record set, the referral corresponds to the domain name that would otherwise have come next.


© Copyright 2003–2004 Jonathan de Boyne Pollard. "Moral" rights asserted.
Permission is hereby granted to copy and to distribute this web page in its original, unmodified form as long as its last modification datestamp is preserved.