Home | History | Annotate | Line # | Download | only in doc
      1  1.1  christos % DIFFERENCES NSD 3 and other name servers.
      2  1.1  christos \documentclass[twoside,titlepage,english]{nlnetlabs}
      3  1.1  christos \newcites{rfc}{RFC references}
      4  1.1  christos 
      5  1.1  christos \def\nlnetlabsno{2006-004}
      6  1.1  christos 
      7  1.3  christos \rcsdetails{Id}   
      8  1.1  christos % Prints RCS details at the bottom of the page.
      9  1.1  christos 
     10  1.1  christos \title{Response Differences between\\ NSD and other DNS Servers}
     11  1.1  christos \author{
     12  1.1  christos 	%This escape is needed. Because of wrapping by hyperref
     13  1.1  christos 	\texorpdfstring{
     14  1.1  christos 		Jelte Jansen\thanks{\href{mailto:jelte (a] nlnetlabs.nl}{jelte (a] nlnetlabs.nl}},
     15  1.1  christos 		\textsl{NLnet Labs}\\
     16  1.1  christos 		Wouter Wijngaards\thanks{\href{mailto:wouter (a] nlnetlabs.nl}{wouter (a] nlnetlabs.nl}},
     17  1.1  christos 		\textsl{NLnet Labs}
     18  1.1  christos 	}
     19  1.1  christos 	{Jelte Jansen, Wouter C.A. Wijngaards}
     20  1.1  christos }
     21  1.1  christos \date{
     22  1.1  christos 	\today
     23  1.1  christos }
     24  1.1  christos 
     25  1.1  christos \begin{document}
     26  1.1  christos \flushbottom
     27  1.1  christos \maketitle{}
     28  1.1  christos 
     29  1.1  christos \begin{abstract}
     30  1.1  christos This note describes observed differences in responses between NSD and
     31  1.1  christos other DNS server implementations. NSD 3.0.0 is compared to NSD 2.3.6,
     32  1.1  christos BIND 8.4.7 and BIND 9.3.2. Differences in answers to captured queries from 
     33  1.1  christos resolvers are tallied and analyzed. No interoperability problems are found.
     34  1.1  christos \end{abstract}
     35  1.1  christos 
     36  1.1  christos 
     37  1.1  christos \tableofcontents
     38  1.1  christos \newpage
     39  1.1  christos 
     40  1.1  christos \section{Introduction}
     41  1.1  christos 
     42  1.1  christos The NSD name server is compared to other DNS server implementations
     43  1.1  christos in order to assess server interoperability.
     44  1.1  christos The goal is to observe differences in the answers that the name servers
     45  1.1  christos provide. These differences are categorized and counted. 
     46  1.1  christos 
     47  1.1  christos We used BIND 8 and BIND 9 versions to compare against. Also regression
     48  1.1  christos tests have been run on our testlab, comparing NSD 2 versus NSD 3.
     49  1.1  christos 
     50  1.1  christos Our method uses a set of queries captured from production name servers. 
     51  1.1  christos These queries are sent over UDP to a name server set up to serve a 
     52  1.1  christos particular zone. Then the responses from the name server are recorded. 
     53  1.1  christos For every query, the different answers provided by the server 
     54  1.1  christos implementations are compared.
     55  1.1  christos 
     56  1.1  christos Unparseable answers and no answers from the servers are handled 
     57  1.1  christos identically by the comparison software. This is not a problem because 
     58  1.1  christos both BIND and NSD are mature and stable DNS implementations, all answers 
     59  1.1  christos they send are parseable. Only in a very few cases, where the query is 
     60  1.1  christos very badly formed, no answers are sent back.
     61  1.1  christos 
     62  1.1  christos The differences are found by replaying captured DNS query traces from 
     63  1.1  christos the NL TLD and from the root zone against different name servers. The 
     64  1.1  christos differences in the answers are then analyzed, by first performing a
     65  1.1  christos byte-comparison on the packets. If the packets are binary different, 
     66  1.1  christos the contents are parsed, thus removing differences in domain name 
     67  1.1  christos compression, and normalized (sorted, lowercase) in presentation. If the
     68  1.1  christos results do not match after normalization, then a list of difference 
     69  1.1  christos categories is consulted. The difference is classified as the first
     70  1.1  christos category that matches. If a difference in answers does not match any 
     71  1.1  christos category, then the process stops and the user is notified. All the
     72  1.1  christos differences are categorized for the traces we present.
     73  1.1  christos 
     74  1.1  christos In addition, we gratefully made use of the PROTOS DNS tool developed 
     75  1.1  christos at the University of Oulu which they made publicly available at 
     76  1.1  christos \href{http://www.ee.oulu.fi/research/ouspg/protos/testing/c09/dns}
     77  1.1  christos {the protos webpage}\footnote{http://www.ee.oulu.fi/research/ouspg/protos/testing/c09/dns}
     78  1.1  christos and played the queries against the authoritative name servers.
     79  1.1  christos We fixed a packet parsing error in NSD3-prerelease and both NSD3 and
     80  1.1  christos BIND 9.3.2 remained running and responsive.
     81  1.1  christos 
     82  1.1  christos Additionally we used the faulty DNS query traces in the wiki-ethereal
     83  1.1  christos repository. These can be found in \href{http://wiki.ethereal.com/SampleCaptures}
     84  1.1  christos {the ethereal wiki}\footnote{http://wiki.ethereal.com/SampleCaptures}.
     85  1.1  christos These traces posed no problem for BIND and NSD, mostly FORMERR answers.
     86  1.1  christos 
     87  1.1  christos A previous document DIFFERENCES between BIND 8.4.4 and NSD 2.0.0 can be found
     88  1.1  christos in the NSD 2.x package.
     89  1.1  christos 
     90  1.1  christos In the places where differences have been found between BIND and NSD,
     91  1.1  christos in the authors' opinion, no interoperability problems result for resolvers.
     92  1.1  christos 
     93  1.1  christos 
     94  1.1  christos \section{Response differences between BIND 9.3.2 and NSD 3.0.0}
     95  1.1  christos 
     96  1.1  christos In this section the response differences between BIND 9.3.2 and NSD 3.0.0
     97  1.1  christos are presented and analyzed. We start in Section~\ref{root_b932nsd3} and 
     98  1.1  christos Section~\ref{nl_b932nsd3} with presenting
     99  1.1  christos the difference statistics for two test traces. Then in 
    100  1.1  christos Section~\ref{sec:features} and Section~\ref{sec:funcdiff}
    101  1.1  christos the difference categories are explained in more detail.
    102  1.1  christos 
    103  1.1  christos 
    104  1.1  christos \subsection{Comparison of responses to root queries}
    105  1.1  christos \label{root_b932nsd3}
    106  1.1  christos 
    107  1.1  christos Comparison between NSD 3.0.0 and BIND 9.3.2 for a root trace.
    108  1.1  christos 
    109  1.1  christos \begin{tabular}{lrr}
    110  1.1  christos {\em difference}			& {\em packets} & {\em \%diff}	\\
    111  1.1  christos d-additional (\ref{d-additional}) 	&        455607 & 59.19\%	\\
    112  1.1  christos n-clrdobit (\ref{n-clrdobit})		&        208389 & 27.07\%	\\
    113  1.1  christos b-soattl (\ref{b-soattl})		&        101707 & 13.21\%	\\
    114  1.1  christos n-update (\ref{n-update})		&          1858 & 0.24\%	\\
    115  1.1  christos d-hostname (\ref{d-hostname})		&          1032 & 0.13\%	\\
    116  1.1  christos d-formerrquery (\ref{d-formerrquery})	&           773 & 0.10\%	\\
    117  1.1  christos b-class0 (\ref{b-class0})		&           264 & 0.03\%	\\
    118  1.1  christos d-refusedquery (\ref{d-refusedquery})	&            79 & 0.01\%	\\
    119  1.1  christos d-notify (\ref{d-notify})		&            18 & 0.00\%	\\
    120  1.1  christos b-mailb (\ref{b-mailb})			&             7 & 0.00\%	\\
    121  1.1  christos n-tcinquery (\ref{n-tcinquery})		&             6 & 0.00\%	\\
    122  1.1  christos b-classany-nxdomain (\ref{b-classany-nxdomain})	&     5 & 0.00\%	\\
    123  1.1  christos d-badqueryflags (\ref{d-badqueryflags})	&             4 & 0.00\%	\\
    124  1.1  christos n-ixfr-notimpl (\ref{n-ixfr-notimpl})	&             3 & 0.00\%	\\
    125  1.1  christos d-version (\ref{d-version})		&             1 & 0.00\%	\\
    126  1.1  christos Total number of differences:            &        769753 & 100\%	\\
    127  1.1  christos Number of packets the same after normalization:&1474863	\\
    128  1.1  christos Number of packets exactly the same on the wire:&  59161	\\
    129  1.1  christos Total number of packets inspected:             &2244616	\\
    130  1.1  christos \end{tabular}
    131  1.1  christos 
    132  1.1  christos For each type of difference the number of packets in the trace that
    133  1.1  christos match that difference are shown. The section where that difference
    134  1.1  christos is analyzed is shown in parenthesis after the difference name.
    135  1.1  christos The percentage of differences
    136  1.1  christos explained by the difference category is listed.  Adding up the packets
    137  1.1  christos that are different gives the total number of differences, or 100\%
    138  1.1  christos of the differences.
    139  1.1  christos 
    140  1.1  christos The number of packets after normalization includes the number of
    141  1.1  christos packets that are the same on the wire.  
    142  1.1  christos The total number of query packets is displayed at the bottom of the table.
    143  1.1  christos 
    144  1.1  christos 
    145  1.1  christos \subsection{Comparison of responses to NL TLD queries}
    146  1.1  christos \label{nl_b932nsd3}
    147  1.1  christos 
    148  1.1  christos Comparison between NSD 3.0.0 and BIND 9.3.2, for a trace for .nl.
    149  1.1  christos 
    150  1.1  christos \begin{tabular}{lrr}
    151  1.1  christos {\em difference}                        & {\em packets} & {\em \%diff} \\
    152  1.1  christos d-unknown-opcode (\ref{d-unknown-opcode})               &     2541 & 26.44\% \\
    153  1.1  christos b-badquery-badanswer (\ref{b-badquery-badanswer})               &     1817 & 18.91\% \\
    154  1.1  christos n-clrdobit (\ref{n-clrdobit})           &     1495 & 15.56\% \\
    155  1.1  christos b-soattl (\ref{b-soattl})               &     1120 & 11.65\% \\
    156  1.1  christos n-update (\ref{n-update})               &      990 & 10.30\% \\
    157  1.1  christos d-badqueryflags (\ref{d-badqueryflags})         &      847 & 8.81\% \\
    158  1.1  christos d-hostname (\ref{d-hostname})           &      531 & 5.52\% \\
    159  1.1  christos d-notify (\ref{d-notify})               &       98 & 1.02\% \\
    160  1.1  christos b-upwards-ref (\ref{b-upwards-ref})             &       78 & 0.81\% \\
    161  1.1  christos n-clrcdbit (\ref{n-clrcdbit})           &       63 & 0.66\% \\
    162  1.1  christos d-version (\ref{d-version})             &       22 & 0.23\% \\
    163  1.1  christos b-noglue-nsquery (\ref{b-noglue-nsquery})               &        8 & 0.08\% \\
    164  1.1  christos b8-badedns0 (\ref{b8-badedns0})         &        1 & 0.01\% \\
    165  1.1  christos Total number of differences: & 9611 & 100\% \\
    166  1.1  christos Number of packets the same after normalization: & 90389 \\
    167  1.1  christos Number of packets exactly the same on the wire: & 52336 \\
    168  1.1  christos Total number of packets inspected: & 100000 \\
    169  1.1  christos \end{tabular}
    170  1.1  christos 
    171  1.1  christos \subsection{Features}
    172  1.1  christos \label{sec:features}
    173  1.1  christos 
    174  1.1  christos In this section we enumerate a number of differences between 
    175  1.1  christos BIND 9.3.2 and NSD 3.0.0 that cannot be immediately explained
    176  1.1  christos as design choices. These features could be seen as bugs in software
    177  1.1  christos or protocol specs, except that they do not lead to interoperability 
    178  1.1  christos problems.
    179  1.1  christos 
    180  1.1  christos 
    181  1.1  christos \subsubsection{n-clrdobit - NSD clears DO bit in response}
    182  1.1  christos \label{n-clrdobit}
    183  1.1  christos 
    184  1.1  christos NSD clears the DO bit in answers to queries with the DO bit. BIND copies the
    185  1.1  christos DO bit to the answer.
    186  1.1  christos 
    187  1.1  christos \vspace{-8pt}\subparagraph{Analysis:}
    188  1.1  christos 
    189  1.1  christos In RFC4035\cite{rfc4035} the DO bit is not specified for answers. In the examples section
    190  1.1  christos of that RFC the DO bit is shown for signed dig responses, although this could 
    191  1.1  christos refer to the query or the answer. NSD clears the DO bit for all answers, a 
    192  1.1  christos decision based on speed: the EDNS record sent back by NSD is precompiled and
    193  1.1  christos not modified during answer processing.
    194  1.1  christos 
    195  1.1  christos 
    196  1.1  christos \subsubsection{n-clrcdbit - NSD clears CD bit in response}
    197  1.1  christos \label{n-clrcdbit}
    198  1.1  christos 
    199  1.1  christos NSD clears the CD bit in answers to queries with the CD bit. BIND copies the
    200  1.1  christos CD bit to the answer.
    201  1.1  christos 
    202  1.1  christos \vspace{-8pt}\subparagraph{Analysis:}
    203  1.1  christos 
    204  1.1  christos RFC 4035\cite{rfc4035} asserts that the CD bit must be cleared for 
    205  1.1  christos authoritative answers. The CD bit should be copied into the answer
    206  1.1  christos by recursive servers. BIND copies the CD bit for some formerr queries.
    207  1.1  christos 
    208  1.1  christos 
    209  1.1  christos \subsubsection{b-class0 - CLASS0 formerr in BIND}
    210  1.1  christos \label{b-class0}
    211  1.1  christos 
    212  1.1  christos For CLASS0, you can get either FORMERR, from BIND or REFUSED, from NSD.
    213  1.1  christos 
    214  1.1  christos \vspace{-8pt}\subparagraph{Analysis:}
    215  1.1  christos 
    216  1.1  christos Difference in interpretation of the RFCs, a CLASS value of 0 is interpreted
    217  1.1  christos as a syntax error by BIND but as another valid class (that is not served)
    218  1.1  christos by NSD. Resolvers are unaffected for CLASS IN.
    219  1.1  christos 
    220  1.1  christos 
    221  1.1  christos \subsubsection{n-tcinquery - TC bit in query is formerr for NSD}
    222  1.1  christos \label{n-tcinquery}
    223  1.1  christos 
    224  1.1  christos NSD returns FORMERR if tc bit is set in query.
    225  1.1  christos 
    226  1.1  christos \vspace{-8pt}\subparagraph{Analysis:}
    227  1.1  christos 
    228  1.1  christos Queries cannot be longer than 512 octets, since the DNS header is short
    229  1.1  christos and the query DNS name has a maximum length of 255 octets. Thus 
    230  1.1  christos TC (TrunCation) cannot happen. Only one question per query packet is 
    231  1.1  christos answered by NSD, this is a design decision.
    232  1.1  christos 
    233  1.1  christos Some update, ixfr request, notify, gss-tsig TKEY sequence queries could 
    234  1.1  christos theoretically carry longer data in the query from the client. In practice
    235  1.1  christos this does not happen, as 255 octet uncompressed names are not used.
    236  1.1  christos If this were to happen, the client could attempt a TCP connection
    237  1.1  christos immediately instead of setting a TC bit, or use EDNS0 to send longer packets.
    238  1.1  christos 
    239  1.1  christos In this NSD is more strict in validation than BIND.
    240  1.1  christos 
    241  1.1  christos 
    242  1.1  christos \subsubsection{b-soattl - BIND sets SOA TTL in authority section to 0 for SOA queries}
    243  1.1  christos \label{b-soattl}
    244  1.1  christos 
    245  1.1  christos This happens when asking for the SOA for a domain that is not served.
    246  1.1  christos 
    247  1.1  christos \footnotesize
    248  1.1  christos \begin{verbatim}
    249  1.1  christos Query:
    250  1.1  christos ;; ->>HEADER<<- opcode: QUERY, rcode: NOERROR, id: 0
    251  1.1  christos ;; flags: rd ; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
    252  1.1  christos ;; QUESTION SECTION:
    253  1.1  christos ;; foo.bar.     IN      SOA
    254  1.1  christos \end{verbatim}
    255  1.1  christos \normalsize
    256  1.1  christos 
    257  1.1  christos 
    258  1.1  christos Answer from BIND 9.3.2:
    259  1.1  christos 
    260  1.1  christos \footnotesize
    261  1.1  christos \begin{verbatim}
    262  1.1  christos ;; ->>HEADER<<- opcode: QUERY, rcode: NXDOMAIN, id: 6097
    263  1.1  christos ;; flags: qr aa rd ; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
    264  1.1  christos ;; QUESTION SECTION:
    265  1.1  christos ;; foo.bar.     IN      SOA
    266  1.1  christos 
    267  1.1  christos ;; ANSWER SECTION:
    268  1.1  christos 
    269  1.1  christos ;; AUTHORITY SECTION:
    270  1.1  christos .       0       IN      SOA     A.ROOT-SERVERS.NET. NSTLD.VERISIGN-GRS.COM. (
    271  1.1  christos 	2006072801 1800 900 604800 86400)
    272  1.1  christos 
    273  1.1  christos ;; ADDITIONAL SECTION:
    274  1.1  christos 
    275  1.1  christos ;; Query time: 10 msec
    276  1.1  christos ;; SERVER: 127.0.0.1
    277  1.1  christos ;; WHEN: Wed Aug 23 13:52:36 2006
    278  1.1  christos ;; MSG SIZE  rcvd: 100
    279  1.1  christos \end{verbatim}
    280  1.1  christos \normalsize
    281  1.1  christos 
    282  1.1  christos Answer from NSD 3:
    283  1.1  christos 
    284  1.1  christos \footnotesize
    285  1.1  christos \begin{verbatim}
    286  1.1  christos ;; ->>HEADER<<- opcode: QUERY, rcode: NXDOMAIN, id: 26095
    287  1.1  christos ;; flags: qr aa rd ; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
    288  1.1  christos ;; QUESTION SECTION:
    289  1.1  christos ;; foo.bar.     IN      SOA
    290  1.1  christos 
    291  1.1  christos ;; ANSWER SECTION:
    292  1.1  christos 
    293  1.1  christos ;; AUTHORITY SECTION:
    294  1.1  christos .       86400   IN      SOA     a.root-servers.net. nstld.verisign-grs.com. (
    295  1.1  christos 	2006072801 1800 900 604800 86400)
    296  1.1  christos 
    297  1.1  christos ;; ADDITIONAL SECTION:
    298  1.1  christos 
    299  1.1  christos ;; Query time: 60 msec
    300  1.1  christos ;; SERVER: 127.0.0.1
    301  1.1  christos ;; WHEN: Wed Aug 23 13:53:30 2006
    302  1.1  christos ;; MSG SIZE  rcvd: 100
    303  1.1  christos \end{verbatim}
    304  1.1  christos \normalsize
    305  1.1  christos 
    306  1.1  christos \vspace{-8pt}\subparagraph{Analysis:}
    307  1.1  christos 
    308  1.1  christos BIND conforms to internet-draft draft-andrews-dnsext-soa-discovery which 
    309  1.1  christos has at the moment of code development not (yet) been published as RFC. 
    310  1.1  christos NSD conforms to the RFCs.
    311  1.1  christos 
    312  1.1  christos 
    313  1.1  christos \subsubsection{b-classany-nxdomain - BIND gives an auth answer for class ANY nxdomain}
    314  1.1  christos \label{b-classany-nxdomain}
    315  1.1  christos 
    316  1.1  christos A difference in behaviour for CLASS=ANY queries. For existing domains both
    317  1.1  christos BIND and NSD reply with AA bit cleared. For not existing domains (nxdomain)
    318  1.1  christos NSD replies with AA bit cleared. BIND replies with AA bit on and includes a
    319  1.1  christos SOA (CLASS=IN) for the zone, as for an authoritative nxdomain.
    320  1.1  christos 
    321  1.1  christos Query:
    322  1.1  christos 
    323  1.1  christos \footnotesize
    324  1.1  christos \begin{verbatim}
    325  1.1  christos ;; ->>HEADER<<- opcode: QUERY, rcode: NOERROR, id: 13328
    326  1.1  christos ;; flags: ; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
    327  1.1  christos ;; QUESTION SECTION:
    328  1.1  christos ;; nslabs.ruO.  ANY     MX
    329  1.1  christos \end{verbatim}
    330  1.1  christos \normalsize
    331  1.1  christos 
    332  1.1  christos Answer from BIND 9.3.2:
    333  1.1  christos 
    334  1.1  christos \footnotesize
    335  1.1  christos \begin{verbatim}
    336  1.1  christos ;; ->>HEADER<<- opcode: QUERY, rcode: NXDOMAIN, id: 13328
    337  1.1  christos ;; flags: qr aa ; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
    338  1.1  christos ;; QUESTION SECTION:
    339  1.1  christos ;; nslabs.ruo.  ANY     MX
    340  1.1  christos 
    341  1.1  christos ;; ANSWER SECTION:
    342  1.1  christos 
    343  1.1  christos ;; AUTHORITY SECTION:
    344  1.1  christos .       86400   IN      SOA     a.root-servers.net. nstld.verisign-grs.com. (
    345  1.1  christos 	2006072801 1800 900 604800 86400)
    346  1.1  christos 
    347  1.1  christos ;; ADDITIONAL SECTION:
    348  1.1  christos 
    349  1.1  christos ;; Query time: 0 msec
    350  1.1  christos ;; WHEN: Wed Aug 23 13:58:51 2006
    351  1.1  christos ;; MSG SIZE  rcvd: 103
    352  1.1  christos \end{verbatim}
    353  1.1  christos \normalsize
    354  1.1  christos 
    355  1.1  christos Answer from NSD 3:
    356  1.1  christos 
    357  1.1  christos \footnotesize
    358  1.1  christos \begin{verbatim}
    359  1.1  christos ;; ->>HEADER<<- opcode: QUERY, rcode: NXDOMAIN, id: 13328
    360  1.1  christos ;; flags: qr ; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
    361  1.1  christos ;; QUESTION SECTION:
    362  1.1  christos ;; nslabs.ruo.  ANY     MX
    363  1.1  christos 
    364  1.1  christos ;; ANSWER SECTION:
    365  1.1  christos 
    366  1.1  christos ;; AUTHORITY SECTION:
    367  1.1  christos 
    368  1.1  christos ;; ADDITIONAL SECTION:
    369  1.1  christos 
    370  1.1  christos ;; Query time: 0 msec
    371  1.1  christos ;; WHEN: Wed Aug 23 13:58:51 2006
    372  1.1  christos ;; MSG SIZE  rcvd: 28
    373  1.1  christos \end{verbatim}
    374  1.1  christos \normalsize
    375  1.1  christos 
    376  1.1  christos \vspace{-8pt}\subparagraph{Analysis:}
    377  1.1  christos 
    378  1.1  christos Feature of BIND where it answers authoritatively for CLASS ANY 
    379  1.1  christos nxdomain queries.
    380  1.1  christos 
    381  1.1  christos 
    382  1.1  christos \subsubsection{b-badquery-badanswer - BIND replies with bad answer for
    383  1.1  christos                             some bad queries}
    384  1.1  christos \label{b-badquery-badanswer}
    385  1.1  christos 
    386  1.1  christos BIND replies with an answer packet that cannot be parsed, or does
    387  1.1  christos not answer at all. NSD always generates
    388  1.1  christos an answer, with the appropriate RCODE (mostly NOTIMPL and FORMERR, but
    389  1.1  christos also NXDOMAIN to NOTIFY queries). All these queries are malformed in 
    390  1.1  christos some way. 
    391  1.1  christos 
    392  1.1  christos A (very simple) example of a query without an answer
    393  1.1  christos is a query packet of 18 zero bytes. For some queries no answer
    394  1.1  christos only happens when BIND is presented with a trace of queries, not for 
    395  1.1  christos a single query.
    396  1.1  christos 
    397  1.1  christos \vspace{-8pt}\subparagraph{Analysis:}
    398  1.1  christos 
    399  1.1  christos BIND includes (part of) the unparseable question into the answer, or
    400  1.1  christos some internal state of BIND is affected by earlier queries. 
    401  1.1  christos 
    402  1.1  christos NSD manages to answer the malformed query. Note that NSD does not answer 
    403  1.1  christos queries that are too short, or that have the QR bit set. NSD tries to be
    404  1.1  christos as liberal in what it accepts as possible.
    405  1.1  christos 
    406  1.1  christos 
    407  1.1  christos \subsection{Functionality Differences}
    408  1.1  christos \label{sec:funcdiff}
    409  1.1  christos 
    410  1.1  christos The next group of differences are due to the fact that NSD does not
    411  1.1  christos implement some functionality that is requested by resolvers.  This 
    412  1.1  christos is a design choice and should not cause resolver problems at all,
    413  1.1  christos since responses to those requests are within protocol specs.
    414  1.1  christos 
    415  1.1  christos 
    416  1.1  christos \subsubsection{d-notify - different NOTIFY errors}
    417  1.1  christos \label{d-notify}
    418  1.1  christos 
    419  1.1  christos BIND and NSD give different errors for notify queries. The servers are started 
    420  1.1  christos without any configuration for access control on notify. For notify messages 
    421  1.1  christos aimed at a zone that is served, BIND 9.3.2 returns a NOERROR answer, and 
    422  1.1  christos NSD 3 returns NOTAUTH. For notify messages on a zone that is not served 
    423  1.1  christos (in-addr.arpa.) BIND 9.3.2 returns NOTAUTH and NSD 3 returns NXDOMAIN.
    424  1.1  christos 
    425  1.1  christos \vspace{-8pt}\subparagraph{Analysis:}
    426  1.1  christos 
    427  1.1  christos Default configuration differs between the two packages. NSD is more strict.
    428  1.1  christos Error codes are different, the tools that send notifies are not affected.
    429  1.1  christos 
    430  1.1  christos 
    431  1.1  christos \subsubsection{n-update - NSD does not implement dynamic update}
    432  1.1  christos \label{n-update}
    433  1.1  christos 
    434  1.1  christos For UPDATE, you can get either REFUSED/NXRRSET/other RCODE from BIND 9.3.2 or 
    435  1.1  christos NOTIMPL from nsd3.
    436  1.1  christos 
    437  1.1  christos \vspace{-8pt}\subparagraph{Analysis:}
    438  1.1  christos 
    439  1.1  christos NSD does not implement dynamic update. 
    440  1.1  christos 
    441  1.1  christos 
    442  1.1  christos \subsubsection{b-mailb - BIND does not implement MAILB}
    443  1.1  christos \label{b-mailb}
    444  1.1  christos 
    445  1.1  christos For MAILB, you can get either NOTIMPL(BIND 9) or NOERROR/NXDOMAIN(NSD 3).
    446  1.1  christos 
    447  1.1  christos \vspace{-8pt}\subparagraph{Analysis:}
    448  1.1  christos 
    449  1.1  christos BIND does not implement queries for the MAILB type. NSD treats it as 
    450  1.1  christos one of the RRTYPEs. MAILB is obsoleted by RFCs, the MX type is 
    451  1.1  christos used to transfer mail information now.
    452  1.1  christos 
    453  1.1  christos 
    454  1.1  christos \subsubsection{d-version - BIND returns servfail on version.server queries}
    455  1.1  christos \label{d-version}
    456  1.1  christos 
    457  1.1  christos NSD returns version.server query, BIND returns servfail.
    458  1.1  christos 
    459  1.1  christos \vspace{-8pt}\subparagraph{Analysis:}
    460  1.1  christos 
    461  1.1  christos Both NSD and BIND return version.bind queries of the chaos class.
    462  1.1  christos These queries differ in the version number they return, of course.
    463  1.1  christos BIND does not return version.server queries. This is a design decision
    464  1.1  christos on the part of NSD to return version.server queries with the same answer.
    465  1.1  christos 
    466  1.1  christos 
    467  1.1  christos \subsubsection{d-additional - Different additional section on truncated answers}
    468  1.1  christos \label{d-additional}
    469  1.1  christos 
    470  1.1  christos NSD and BIND return different additional sections on truncated answers
    471  1.1  christos to queries from the root. These answers are 480+ bytes long.
    472  1.1  christos 
    473  1.1  christos \vspace{-8pt}\subparagraph{Analysis:}
    474  1.1  christos 
    475  1.1  christos Not all the A and AAAA data fits into the additional section of the answer.
    476  1.1  christos BIND includes different names than NSD does, and BIND is observed to sometimes
    477  1.1  christos include one more AAAA record, less A records in the additional section.
    478  1.1  christos Resolvers should be unaffected.
    479  1.1  christos 
    480  1.1  christos 
    481  1.1  christos \subsubsection{d-refusedquery - BIND includes query section in REFUSED answers}
    482  1.1  christos \label{d-refusedquery}
    483  1.1  christos 
    484  1.1  christos BIND includes the query sent for REFUSED answers. NSD replies with only
    485  1.1  christos the DNS header section.
    486  1.1  christos 
    487  1.1  christos \vspace{-8pt}\subparagraph{Analysis:}
    488  1.1  christos 
    489  1.1  christos The resolver must inspect the query ID. The error code provides sufficient
    490  1.1  christos information. Sending the header makes NSD replies smaller and thus more 
    491  1.1  christos resilient to DoS attacks.
    492  1.1  christos 
    493  1.1  christos 
    494  1.1  christos \subsubsection{d-hostname - BIND adds a NS record for hostname.bind}
    495  1.1  christos \label{d-hostname}
    496  1.1  christos 
    497  1.1  christos BIND includes an additional RR in the authority section of the reply:
    498  1.1  christos \footnotesize
    499  1.1  christos \begin{verbatim}
    500  1.1  christos hostname.bind. 0 CH NS hostname.bind.
    501  1.1  christos \end{verbatim}
    502  1.1  christos \normalsize
    503  1.1  christos 
    504  1.1  christos \vspace{-8pt}\subparagraph{Analysis:}
    505  1.1  christos 
    506  1.1  christos The RR seems useless. NSD does not include it.
    507  1.1  christos 
    508  1.1  christos 
    509  1.1  christos \subsubsection{n-ixfr-notimpl - NSD does not implement IXFR}
    510  1.1  christos \label{n-ixfr-notimpl}
    511  1.1  christos 
    512  1.1  christos To queries for IXFR BIND responds with a valid answer (the latest SOA)
    513  1.1  christos and NSD responds with NOTIMPL error.
    514  1.1  christos 
    515  1.1  christos \vspace{-8pt}\subparagraph{Analysis:}
    516  1.1  christos 
    517  1.1  christos NSD 3.0.0 does not implement IXFR. It returns NOTIMPL by design.
    518  1.1  christos 
    519  1.1  christos 
    520  1.1  christos \subsubsection{d-formerrquery - BIND includes query section in FORMERR answers}
    521  1.1  christos \label{d-formerrquery}
    522  1.1  christos 
    523  1.1  christos BIND includes the query sent for FORMERR answers. NSD replies with only
    524  1.1  christos the DNS header section. For some queries, NSD includes an EDNS record in 
    525  1.1  christos the reply if there was a recognizable EDNS record in the query.
    526  1.1  christos 
    527  1.1  christos \vspace{-8pt}\subparagraph{Analysis:}
    528  1.1  christos 
    529  1.1  christos The resolver must inspect the query ID. The error code provides sufficient
    530  1.1  christos information. Sending the header makes NSD replies smaller and thus more 
    531  1.1  christos resilient to DoS attacks.
    532  1.1  christos 
    533  1.1  christos 
    534  1.1  christos \subsubsection{d-badqueryflags - BIND includes query section in FORMERR answers}
    535  1.1  christos \label{d-badqueryflags}
    536  1.1  christos 
    537  1.1  christos BIND includes the query section in reply to unparseable queries. NSD does not.
    538  1.1  christos 
    539  1.1  christos \vspace{-8pt}\subparagraph{Analysis:}
    540  1.1  christos 
    541  1.1  christos Same as d-formerrquery (\ref{d-formerrquery}), but the implementation of the comparison 
    542  1.1  christos software could not parse the query either, thus a separate label.
    543  1.1  christos 
    544  1.1  christos 
    545  1.1  christos \subsubsection{d-unknown-class - BIND includes query section in answers to unknown class}
    546  1.1  christos \label{d-unknown-class}
    547  1.1  christos 
    548  1.1  christos For queries with an unknown class in the query, BIND includes the query section
    549  1.1  christos in the answer. NSD does not.
    550  1.1  christos 
    551  1.1  christos \vspace{-8pt}\subparagraph{Analysis:}
    552  1.1  christos 
    553  1.1  christos Same as d-formerrquery (\ref{d-formerrquery}), but for a different error.
    554  1.1  christos 
    555  1.1  christos 
    556  1.1  christos \subsubsection{d-unknown-opcode - NSD returns NOTIMPL for unknown opcode}
    557  1.1  christos \label{d-unknown-opcode}
    558  1.1  christos 
    559  1.1  christos For queries that are bad packets, with malformed RRs, with an unknown opcode,
    560  1.1  christos BIND returns a FORMERR, but NSD gives up after checking the opcode and
    561  1.1  christos returns NOTIMPL.  NSD copies the flags from the query, and turns on the 
    562  1.1  christos QR (query response) bit, BIND zeroes some of the flags.
    563  1.1  christos 
    564  1.1  christos \vspace{-8pt}\subparagraph{Analysis:}
    565  1.1  christos 
    566  1.1  christos NOTIMPL is appropriate since NSD does not implement whatever functionality
    567  1.1  christos is being looked for. 
    568  1.1  christos 
    569  1.1  christos 
    570  1.1  christos \subsubsection{b-upwards-ref - BIND returns root delegation}
    571  1.1  christos \label{b-upwards-ref}
    572  1.1  christos 
    573  1.1  christos For queries to a domain that is not served, which can only have arrived at
    574  1.1  christos this server due to a lame delegation, BIND returns a root delegation. NSD
    575  1.1  christos returns SERVFAIL.
    576  1.1  christos 
    577  1.1  christos \vspace{-8pt}\subparagraph{Analysis:}
    578  1.1  christos 
    579  1.1  christos By design, NSD does not know the root-servers.  NSD is unable to reply as
    580  1.1  christos the zone is not configured, hence the SERVFAIL. This is also discussed in
    581  1.1  christos the REQUIREMENTS document for NSD.
    582  1.1  christos 
    583  1.1  christos 
    584  1.1  christos \subsubsection{b-noglue-nsquery - BIND returns no glue for NS queries}
    585  1.1  christos \label{b-noglue-nsquery}
    586  1.1  christos 
    587  1.1  christos For queries for the NS records of the zone, BIND does not include glue
    588  1.1  christos for the NS records. NSD includes glue for the NS servers that lie within
    589  1.1  christos the zone.
    590  1.1  christos 
    591  1.1  christos \vspace{-8pt}\subparagraph{Analysis:}
    592  1.1  christos 
    593  1.1  christos The glue saves a followup query.
    594  1.1  christos 
    595  1.1  christos 
    596  1.1  christos \subsubsection{d-noquestion - different error on no question}
    597  1.1  christos \label{d-noquestion}
    598  1.1  christos 
    599  1.1  christos For queries without a question section the error code differs.
    600  1.1  christos NSD considers it a FORMERR. BIND returns REFUSED.
    601  1.1  christos 
    602  1.1  christos \vspace{-8pt}\subparagraph{Analysis:}
    603  1.1  christos 
    604  1.1  christos Error code not specified for this corner case. No problems for resolvers.
    605  1.1  christos 
    606  1.1  christos 
    607  1.1  christos \subsubsection{b-uchar - BIND returns FORMERR on strange characters}
    608  1.1  christos \label{b-uchar}
    609  1.1  christos 
    610  1.1  christos BIND returns FORMERR on strange characters in the query, such as
    611  1.1  christos 0x00, 0xff, 0xe4, 0x20, 0x40 and so on.
    612  1.1  christos 
    613  1.1  christos \vspace{-8pt}\subparagraph{Analysis:}
    614  1.1  christos 
    615  1.1  christos NSD does not give a formerr on these queries, it processes them.
    616  1.1  christos NSD normalizes names to lower case. Otherwise leaves them untouched.
    617  1.1  christos BIND preserves case in answers. Choice made in REQUIREMENTS for NSD,
    618  1.1  christos also see RFC1035\cite{rfc1035} 2.3.3.
    619  1.1  christos 
    620  1.1  christos 
    621  1.1  christos \section{Response differences between NSD 2.3.6 and NSD 3.0.0}
    622  1.1  christos 
    623  1.1  christos The differences between NSD 2.3.6 and NSD 3.0.0 are listed below. All are due
    624  1.1  christos to version number changes and new features in NSD 3.
    625  1.1  christos 
    626  1.1  christos 
    627  1.1  christos \subsection{Comparison of responses in root trace}
    628  1.1  christos 
    629  1.1  christos Differences between NSD 2.3.6 and NSD 3.0.0 for a root trace.
    630  1.1  christos Note that apart from the 26 packets that are different, all responses are
    631  1.1  christos binary the same on the wire between the two versions of NSD.
    632  1.1  christos 
    633  1.1  christos \begin{tabular}{lrr}
    634  1.1  christos {\em difference}			& {\em packets} & {\em \%diff}	\\
    635  1.1  christos n-notify (\ref{n-notify})               & 19 &  73.08\% \\
    636  1.1  christos n-ixfr (\ref{n-ixfr})                   & 3 &  11.54\% \\
    637  1.1  christos version.bind (\ref{nsd-version})       & 3 & 11.54\% \\
    638  1.1  christos version.server (\ref{nsd-version})   & 1  &  3.85\% \\
    639  1.1  christos Total number of differences:            & 26 &  100\% \\
    640  1.1  christos Number of packets the same after normalization:&2244590 \\
    641  1.1  christos Number of packets exactly the same on the wire:&2244590 \\
    642  1.1  christos Total number of packets inspected:             &2244616 \\
    643  1.1  christos \end{tabular}
    644  1.1  christos 
    645  1.1  christos 
    646  1.1  christos \subsection{Comparison of responses in NL TLD trace}
    647  1.1  christos 
    648  1.1  christos Differences between NSD 2.3.6 and NSD 3.0.0 for a nl. trace.
    649  1.1  christos Note that apart from the 311 packets that are different, all responses are
    650  1.1  christos binary the same on the wire between the two versions of NSD.
    651  1.1  christos 
    652  1.1  christos \begin{tabular}{lrr}
    653  1.1  christos {\em difference}			& {\em packets} & {\em \%diff}	\\
    654  1.1  christos n-notify (\ref{n-notify}) 		& 289 & 92.93\% \\
    655  1.1  christos version.bind (\ref{nsd-version}) 	& 22  & 7.07\% \\
    656  1.1  christos Total number of differences: 			   & 311 	& 100\% \\
    657  1.1  christos Number of packets the same after normalization:& 99689 \\
    658  1.1  christos Number of packets exactly the same on the wire:& 99689 \\
    659  1.1  christos Total number of packets inspected: 	&100000 \\
    660  1.1  christos \end{tabular}
    661  1.1  christos 
    662  1.1  christos 
    663  1.1  christos \subsection{Version number - version.bind and version.server}
    664  1.1  christos \label{nsd-version}
    665  1.1  christos 
    666  1.1  christos To queries for version.bind and version.server the different implementations
    667  1.1  christos return a different version number, as they should.
    668  1.1  christos 
    669  1.1  christos \vspace{-8pt}\subparagraph{Analysis:}
    670  1.1  christos 
    671  1.1  christos Expected. Correct version numbers are returned.
    672  1.1  christos 
    673  1.1  christos 
    674  1.1  christos \subsection{n-notify - notify not implemented in NSD 2}
    675  1.1  christos \label{n-notify}
    676  1.1  christos 
    677  1.1  christos Notifications are handled differently. NSD 2 returns NOTIMPL error code,
    678  1.1  christos while NSD 3 returns NOTAUTH or NXDOMAIN error codes.
    679  1.1  christos 
    680  1.1  christos \vspace{-8pt}\subparagraph{Analysis:}
    681  1.1  christos 
    682  1.1  christos Default config denies all notify queries for NSD 3. These answers are correct
    683  1.1  christos for non-existing and not authorized domains.
    684  1.1  christos 
    685  1.1  christos 
    686  1.1  christos \subsection{n-ixfr - IXFR error FORMERR in NSD 2}
    687  1.1  christos \label{n-ixfr}
    688  1.1  christos 
    689  1.1  christos To IXFR query questions different error codes are given. The NSD 2
    690  1.1  christos gives FORMERR (due to the RR in the authority section). NSD 3 returns
    691  1.1  christos NOTIMPL. 
    692  1.1  christos 
    693  1.1  christos \vspace{-8pt}\subparagraph{Analysis:}
    694  1.1  christos 
    695  1.1  christos Neither version of NSD implements IXFR. It is more appropriate to
    696  1.1  christos return the NOTIMPL error code in that case. Bugfix in NSD.
    697  1.1  christos 
    698  1.1  christos 
    699  1.1  christos \section{Response differences between BIND 8 and NSD 3.0.0}
    700  1.1  christos 
    701  1.1  christos In this section the response differences between BIND 8.4.7 and NSD 3.0.0
    702  1.1  christos are categorized and analyzed. 
    703  1.1  christos 
    704  1.1  christos 
    705  1.1  christos \subsection{Comparison of responses in root trace}
    706  1.1  christos 
    707  1.1  christos The differences between BIND 8.4.7 and NSD 3.0.0 when presented
    708  1.1  christos with queries for the root zone are below.
    709  1.1  christos 
    710  1.1  christos \begin{tabular}{lrr}
    711  1.1  christos {\em difference}			& {\em packets} & {\em \%diff}	\\
    712  1.1  christos n-clrcdbit (\ref{n-clrcdbit})	&         516372 &84.39\% \\
    713  1.1  christos d-hostname (\ref{d-hostname})	&         53431  &8.73\% \\
    714  1.1  christos d-additional (\ref{d-additional})	& 32526  &5.32\% \\
    715  1.1  christos b8-nodata-ttlminup (\ref{b8-nodata-ttlminup})	& 4611  &0.75\% \\
    716  1.1  christos n-update (\ref{n-update})	&         1856  &0.30\% \\
    717  1.1  christos d-version (\ref{d-version})	&         1033  &0.17\% \\
    718  1.1  christos b8-auth-any (\ref{b8-auth-any})	&         519  &0.08\% \\
    719  1.1  christos b8-badedns0 (\ref{b8-badedns0})	&         492  &0.08\% \\
    720  1.1  christos d-unknown-class (\ref{d-unknown-class})	& 482  &0.08\% \\
    721  1.1  christos b-badquery-badanswer (\ref{b-badquery-badanswer})	& 451  &0.07\% \\
    722  1.1  christos b-class0 (\ref{b-class0})	&         97  &0.02\% \\
    723  1.1  christos d-notify (\ref{d-notify})	&         18  &0.00\% \\
    724  1.1  christos b8-ignore-tc-query (\ref{b8-ignore-tc-query})	& 6  &0.00\% \\
    725  1.1  christos b8-badquery-ignored (\ref{b8-badquery-ignored})	& 4  &0.00\% \\
    726  1.1  christos n-ixfr-notimpl (\ref{n-ixfr-notimpl})	& 3  &0.00\% \\
    727  1.1  christos b-soattl (\ref{b-soattl})	&         1  &0.00\% \\
    728  1.1  christos Total number of differences: 		&	 611902	&100\% \\
    729  1.1  christos Number of packets the same after normalization:&1632714 \\
    730  1.1  christos Number of packets exactly the same on the wire:&   2299 \\
    731  1.1  christos Total number of packets inspected: 	       &2244616 \\
    732  1.1  christos \end{tabular}
    733  1.1  christos 
    734  1.1  christos 
    735  1.1  christos \subsection{Comparison of responses in NL TLD trace}
    736  1.1  christos 
    737  1.1  christos The differences between BIND 8.4.7 and NSD 3.0.0 when presented
    738  1.1  christos with queries for the .nl zone are below.
    739  1.1  christos 
    740  1.1  christos \begin{tabular}{lrr}
    741  1.1  christos {\em difference}			& {\em packets} & {\em \%diff}	\\
    742  1.1  christos n-clrcdbit        (\ref{n-clrcdbit})         &           2857        &33.53\% \\
    743  1.1  christos d-unknown-opcode  (\ref{d-unknown-opcode})   &           2692        &31.59\% \\
    744  1.1  christos n-update          (\ref{n-update})           &           1283        &15.06\% \\
    745  1.1  christos d-badqueryflags   (\ref{d-badqueryflags})    &            841        &9.87\% \\
    746  1.1  christos d-hostname        (\ref{d-hostname})         &            531        &6.23\% \\
    747  1.1  christos d-notify          (\ref{d-notify})           &            293        &3.44\% \\
    748  1.1  christos d-version         (\ref{d-version})          &             22        &0.26\% \\
    749  1.1  christos b-badquery-badanswer (\ref{b-badquery-badanswer}) &         1        &0.01\% \\
    750  1.1  christos b8-badedns0          (\ref{b8-badedns0})     &              1        &0.01\% \\
    751  1.1  christos Total number of differences: &8521 &100\% \\
    752  1.1  christos Number of packets the same after normalization:&91479 \\
    753  1.1  christos Number of packets exactly the same on the wire:&90837 \\
    754  1.1  christos Total number of packets inspected:&100000 \\
    755  1.1  christos \end{tabular}
    756  1.1  christos 
    757  1.1  christos 
    758  1.1  christos \subsection{b8-nodata-ttlminup - BIND 8 uses minimum TTL from SOA also if bigger}
    759  1.1  christos \label{b8-nodata-ttlminup}
    760  1.1  christos 
    761  1.1  christos For NXDOMAIN queries in root-servers.net BIND 8 uses the minimum TTL from
    762  1.1  christos the SOA as the TTL of the included SOA RR. However, this minimum TTL is 
    763  1.1  christos larger than the original TTL of the SOA, both NSD 2.3.6, NSD 3 and BIND 9
    764  1.1  christos use the smaller of those two values as the TTL of the included SOA.
    765  1.1  christos 
    766  1.1  christos \vspace{-8pt}\subparagraph{Analysis:}
    767  1.1  christos 
    768  1.1  christos Bug in BIND 8 solved in BIND 9.
    769  1.1  christos 
    770  1.1  christos 
    771  1.1  christos \subsection{b8-badquery-ignored - BIND 8 replies normally for some bad queries}
    772  1.1  christos \label{b8-badquery-ignored}
    773  1.1  christos 
    774  1.1  christos BIND8 manages to reply for malformed queries. NSD replies with FORMERR.
    775  1.1  christos 
    776  1.1  christos \vspace{-8pt}\subparagraph{Analysis:}
    777  1.1  christos 
    778  1.1  christos The query is bad, formerr is needed. Fixed in BIND9.
    779  1.1  christos 
    780  1.1  christos 
    781  1.1  christos \subsection{b8-badedns0 - BIND 8 ignores bad EDNS0 queries}
    782  1.1  christos \label{b8-badedns0}
    783  1.1  christos 
    784  1.1  christos BIND 8 ignores queries with bad EDNS0 section. It answers the query.
    785  1.1  christos NSD replies with FORMERR.
    786  1.1  christos 
    787  1.1  christos \vspace{-8pt}\subparagraph{Analysis:}
    788  1.1  christos 
    789  1.1  christos BIND8 is more liberal in accepting broken EDNS0 records. NSD is not.
    790  1.1  christos Changed in BIND 9.
    791  1.1  christos 
    792  1.1  christos 
    793  1.1  christos \subsection{b8-auth-any - BIND 8 includes an authority section on queries for ANY .}
    794  1.1  christos \label{b8-auth-any}
    795  1.1  christos 
    796  1.1  christos BIND8 includes an authority section on queries for class ANY .
    797  1.1  christos BIND9 and NSD return an empty authority section.
    798  1.1  christos 
    799  1.1  christos \vspace{-8pt}\subparagraph{Analysis:}
    800  1.1  christos 
    801  1.1  christos Fixed in BIND9.
    802  1.1  christos 
    803  1.1  christos 
    804  1.1  christos \subsection{b8-ignore-tc-query - BIND 8 ignores the TC bit in queries}
    805  1.1  christos \label{b8-ignore-tc-query}
    806  1.1  christos 
    807  1.1  christos BIND responds to queries that have the TC bit set. NSD gives FORMERR.
    808  1.1  christos 
    809  1.1  christos \vspace{-8pt}\subparagraph{Analysis:}
    810  1.1  christos 
    811  1.1  christos This is like the n-tcinquery (\ref{n-tcinquery}), except where BIND9 returns NXDOMAIN,
    812  1.1  christos BIND8 returns the query with qr bit set. This is fixed in BIND9.
    813  1.1  christos NSD is less liberal in accepting queries, it returns form error on queries with
    814  1.1  christos the TC bit set.
    815  1.1  christos 
    816  1.1  christos \bibliographystyle{nlnetlabs}
    817  1.1  christos \bibliography{allbib}
    818  1.1  christos 
    819  1.1  christos \end{document}
    820