Some notes on RFC1034

I have recently gone through RFC1034 again, now that I have implemented a working DNS server and have a pretty good idea of how DNS works. I notice that some things are proposed which are unworkable in the real world:

Section 3.1 (case sensitivity):

When you receive a domain name or label, you should preserver its case. The rationale for this choice is that we may someday need to add full binary domain names for new services; existing services would not be changed.

This is not how to do case-sensitivity in the real world. If DNS is going to be extended to support case sensitivity, it has to be done as follows:

Preserve the case if the label in your cache (or authoritative data) is the same case as what they asked for.

Do not preserve the case if the label in your cache (or authoritative data) is not the same case as what they ask for. This lets the recursive server know that you are changed the case of their question.

Anyway, the root servers do not follow this.

Section 4.3.1 (recursion):

Note that the name server should never perform recursive service unless asked via RD, since this interferes with trouble shooting of name servers and their databases.

The real reason one does not want to do this is because it prevents loops.