91caa4a91b1e969e7dd04489785140008bac0b1d
[root_zone_test.git] / zone_results / root_overall_response_size_results.txt
1
2 Executive Summary:
3
4    At KSK@2048, ZSK@1024, only the ./ANY and ARPA/ANY responses will
5    truncate (set the TC bit), and only ./RRSIG and ARPA responses will
6    change (but not set TC) with a max UDP size at 1400.
7
8 Recommendations:
9
10    1) Use the "minimal-dnskey-response" behavior for the root
11    servers.  This behavior is supported by RDNS 2.3.2 and NCDNS 1.1.1
12    (as well as BIND 9.6 and NSD 3.2.3).
13
14    2) Cap our UDP responses sizes to 1472 (or optionally less, down to
15    1400).  The results below will show that this is safe.  In fact,
16    unless a user does a ./ANY or ./RRSIG (or similar query for arpa),
17    they won't be able to tell we are capping.  This is supported by
18    RDNS 2.3.2 (via the "max_udp_size" option) and NCDNS 1.1.1 (via the
19    max_edns_response_size" PE config parameter).
20
21 Methodology:
22
23   * Created a testbed with a signed root with one 2048-bit KSK, one
24     1024-bit ZSK, a signed arpa with the same key sizes, and (for now)
25     an unsigned root-servers.net zone.
26
27   * BIND 9.6 was used as the authoritative server (so the
28     minimal-dnskey-response behavior was in effect).
29
30   * A python script was created using the dnspython package.  This
31     script would:
32
33     1. Read the contents of the signed root zone file, and for every
34     name/type pair (except A/AAAA types for root and arpa):
35
36        1.1. Query for the name/type with EDNS0, DO=1, BUFSIZE=4096 via
37             UDP
38
39        1.2. Record the resulting response size.
40
41        1.3. Find the "minimum no TC" size by parsing the response,
42             clearing the additional section, re-encoding into
43             compressed wire format, then recording the size.  Because
44             of the way the dnspython dns.message class works, the OPT
45             record was perserved.
46
47        1.4. Calculate the additional amount of space that would be
48             taken up if a maximum sized qname was given (essentially,
49             255 - len(qname)).  Note that this only matters for
50             referrals and NXDOMAIN responses.  Other responses require
51             an exact qname match.
52
53     2. For every unique name:
54
55         2.1. Query for the qname/ANY with EDNS0, DO=1, BUFSIZE=4096 via
56              UDP and record the resulting response size.
57
58         2.2. Query for "qname_/A". This was to elicit an NXDOMAIN
59              response from every NSEC gap.  Record the resulting
60              response size.
61
62         2.3. Calculate the additional amount of space for a maximum
63              sized qname for the NXDOMAIN response.
64
65     3. For each query, output:
66        <full size><tab><min no tc size><tab><max qname diff><tab><qname/qtype>
67     
68     4. Calculate histograms for referrals, nxdomains, and other
69        responses and output.
70
71
72 Results:
73
74 * "Maximum overall size" is the size of a response *with* the
75   additional records and with a 255-byte qname.
76 * "Full response size" is the size of the response with the additional
77   section (if any), but with the given qname.
78
79 Referral sizes (Maximum overall sizes):
80 range [522 - 1057] min: root-servers.net./NS, max: AERO/NS
81          [512 - 576) : 17
82          [576 - 640) : 63
83          [640 - 704) : 56
84          [704 - 768) : 59
85          [768 - 832) : 27
86          [832 - 896) : 41
87          [896 - 960) : 15
88         [960 - 1024) : 8
89        [1024 - 1088) : 3
90
91 NXDOMAIN sizes (Maximum overall sizes):
92 range [697 - 914] min: @_/A, max: XN--HGBK6AJ7F53BBA_/A
93          [640 - 704) : 22
94          [832 - 896) : 270
95          [896 - 960) : 10
96
97 Other response sizes (Full response sizes):
98 range [105 - 1906] min: A.ROOT-SERVERS.NET./NSEC, max: @/ANY
99           [64 - 128) : 14
100          [256 - 320) : 62
101          [320 - 384) : 125
102          [384 - 448) : 122
103          [448 - 512) : 123
104          [512 - 576) : 60
105          [576 - 640) : 80
106          [640 - 704) : 30
107          [704 - 768) : 16
108          [768 - 832) : 4
109          [896 - 960) : 1
110         [960 - 1024) : 295
111        [1024 - 1088) : 13
112        [1536 - 1600) : 3
113        [1856 - 1920) : 3
114
115 The six responses over 1500 are variations of apex RRSIG and ANY
116 queries:
117
118 full    min     qname   label
119 ---     ---     -----   -----
120 1549    1189    249     ARPA/RRSIG
121 1549    1189    249     ARPA./RRSIG
122 1561    1157    254     @/RRSIG
123 1899    1539    249     ARPA/ANY
124 1899    1539    249     ARPA./ANY
125 1906    1502    254     @/ANY
126
127 Note that the duplicate arpa queries exist because of the arpa entry
128 in both the root zone and the arpa zone.
129
130 The RRSIG responsed will shrink to 1189 or 1157 bytes before setting
131 TC, but the ANY responses will always set TC.
132