Sync usage with man page.
[netbsd-mini2440.git] / external / bsd / bind / dist / doc / rfc / rfc4471.txt
blobeb338e6b5edfd14e446f07b87b0807069b53f591
7 Network Working Group                                          G. Sisson
8 Request for Comments: 4471                                     B. Laurie
9 Category: Experimental                                           Nominet
10                                                           September 2006
13             Derivation of DNS Name Predecessor and Successor
16 Status of This Memo
18    This memo defines an Experimental Protocol for the Internet
19    community.  It does not specify an Internet standard of any kind.
20    Discussion and suggestions for improvement are requested.
21    Distribution of this memo is unlimited.
23 Copyright Notice
25    Copyright (C) The Internet Society (2006).
27 Abstract
29    This document describes two methods for deriving the canonically-
30    ordered predecessor and successor of a DNS name.  These methods may
31    be used for dynamic NSEC resource record synthesis, enabling
32    security-aware name servers to provide authenticated denial of
33    existence without disclosing other owner names in a DNSSEC secured
34    zone.
36 Table of Contents
38    1. Introduction ....................................................2
39    2. Notational Conventions ..........................................3
40    3. Derivations .....................................................3
41       3.1. Absolute Method ............................................3
42            3.1.1. Derivation of DNS Name Predecessor ..................3
43            3.1.2. Derivation of DNS Name Successor ....................4
44       3.2. Modified Method ............................................4
45            3.2.1. Derivation of DNS Name Predecessor ..................5
46            3.2.2. Derivation of DNS Name Successor ....................6
47    4. Notes ...........................................................6
48       4.1. Test for Existence .........................................6
49       4.2. Case Considerations ........................................7
50       4.3. Choice of Range ............................................7
51       4.4. Wild Card Considerations ...................................8
52       4.5. Possible Modifications .....................................8
53            4.5.1. Restriction of Effective Maximum DNS Name Length ....8
54            4.5.2. Use of Modified Method with Zones Containing
58 Sisson & Laurie               Experimental                      [Page 1]
60 RFC 4471           DNS Name Predecessor and Successor     September 2006
63                   SRV RRs .............................................8
64    5. Examples ........................................................9
65       5.1. Examples of Immediate Predecessors Using Absolute Method ..10
66       5.2. Examples of Immediate Successors Using Absolute Method ....14
67       5.3. Examples of Predecessors Using Modified Method ............19
68       5.4. Examples of Successors Using Modified Method ..............20
69    6. Security Considerations ........................................21
70    7. Acknowledgements ...............................................21
71    8. References .....................................................21
72       8.1. Normative References ......................................21
73       8.2. Informative References ....................................22
75 1.  Introduction
77    One of the proposals for avoiding the exposure of zone information
78    during the deployment DNSSEC is dynamic NSEC resource record (RR)
79    synthesis.  This technique is described in [DNSSEC-TRANS] and
80    [RFC4470], and involves the generation of NSEC RRs that just span the
81    query name for non-existent owner names.  In order to do this, the
82    DNS names that would occur just prior to and just following a given
83    query name must be calculated in real time, as maintaining a list of
84    all possible owner names that might occur in a zone would be
85    impracticable.
87    Section 6.1 of [RFC4034] defines canonical DNS name order.  This
88    document does not amend or modify this definition.  However, the
89    derivation of immediate predecessor and successor, although trivial,
90    is non-obvious.  Accordingly, several methods are described here as
91    an aid to implementors and a reference to other interested parties.
93    This document describes two methods:
95    1.  An "absolute method", which returns the immediate predecessor or
96        successor of a domain name such that no valid DNS name could
97        exist between that DNS name and the predecessor or successor.
99    2.  A "modified method", which returns a predecessor and successor
100        that are more economical in size and computation.  This method is
101        restricted to use with zones consisting exclusively of owner
102        names that contain no more than one label more than the owner
103        name of the apex, where the longest possible owner name (i.e.,
104        one with a maximum length left-most label) would not exceed the
105        maximum DNS name length.  This is, however, the type of zone for
106        which the technique of online signing is most likely to be used.
114 Sisson & Laurie               Experimental                      [Page 2]
116 RFC 4471           DNS Name Predecessor and Successor     September 2006
119 2.  Notational Conventions
121    The following notational conventions are used in this document for
122    economy of expression:
124    N: An unspecified DNS name.
126    P(N): Immediate predecessor to N (absolute method).
128    S(N): Immediate successor to N (absolute method).
130    P'(N): Predecessor to N (modified method).
132    S'(N): Successor to N (modified method).
134 3.  Derivations
136    These derivations assume that all uppercase US-ASCII letters in N
137    have already been replaced by their corresponding lowercase
138    equivalents.  Unless otherwise specified, processing stops after the
139    first step in which a condition is met.
141    The derivations make reference to maximum label length and maximum
142    DNS name length; these are defined in Section 3.1 of [RFC1034] to be
143    63 and 255 octets, respectively.
145 3.1.  Absolute Method
147 3.1.1.  Derivation of DNS Name Predecessor
149    To derive P(N):
151    1.  If N is the same as the owner name of the zone apex, prepend N
152        repeatedly with labels of the maximum length possible consisting
153        of octets of the maximum sort value (e.g., 0xff) until N is the
154        maximum length possible; otherwise proceed to the next step.
156    2.  If the least significant (left-most) label of N consists of a
157        single octet of the minimum sort value (e.g., 0x00), remove that
158        label; otherwise proceed to the next step.
160    3.  If the least significant (right-most) octet in the least
161        significant (left-most) label of N is the minimum sort value,
162        remove the least significant octet and proceed to step 5.
164    4.  Decrement the value of the least significant (right-most) octet
165        of the least significant (left-most) label, skipping any values
166        that correspond to uppercase US-ASCII letters, and then append
170 Sisson & Laurie               Experimental                      [Page 3]
172 RFC 4471           DNS Name Predecessor and Successor     September 2006
175        the least significant (left-most) label with as many octets as
176        possible of the maximum sort value.  Proceed to the next step.
178    5.  Prepend N repeatedly with labels of as long a length as possible
179        consisting of octets of the maximum sort value until N is the
180        maximum length possible.
182 3.1.2.  Derivation of DNS Name Successor
184    To derive S(N):
186    1.  If N is two or more octets shorter than the maximum DNS name
187        length, prepend N with a label containing a single octet of the
188        minimum sort value (e.g., 0x00); otherwise proceed to the next
189        step.
191    2.  If N is one octet shorter than the maximum DNS name length and
192        the least significant (left-most) label is one or more octets
193        shorter than the maximum label length, append an octet of the
194        minimum sort value to the least significant label; otherwise
195        proceed to the next step.
197    3.  Increment the value of the least significant (right-most) octet
198        in the least significant (left-most) label that is less than the
199        maximum sort value (e.g., 0xff), skipping any values that
200        correspond to uppercase US-ASCII letters, and then remove any
201        octets to the right of that one.  If all octets in the label are
202        the maximum sort value, then proceed to the next step.
204    4.  Remove the least significant (left-most) label.  Unless N is now
205        the same as the owner name of the zone apex (this will occur only
206        if N was the maximum possible name in canonical DNS name order,
207        and thus has wrapped to the owner name of zone apex), repeat
208        starting at step 2.
210 3.2.  Modified Method
212    This method is for use with zones consisting only of single-label
213    owner names where an owner name consisting of label of maximum length
214    would not result in a DNS name that exceeded the maximum DNS name
215    length.  This method is computationally simpler and returns values
216    that are more economical in size than the absolute method.  It
217    differs from the absolute method detailed above in the following
218    ways:
220    1.  Step 1 of the derivation P(N) has been omitted as the existence
221        of the owner name of the zone apex never requires denial.
226 Sisson & Laurie               Experimental                      [Page 4]
228 RFC 4471           DNS Name Predecessor and Successor     September 2006
231    2.  A new step 1 has been introduced that removes unnecessary labels.
233    3.  Step 4 of the derivation P(N) has been omitted as it is only
234        necessary for zones containing owner names consisting of more
235        than one label.  This omission generally results in a significant
236        reduction of the length of derived predecessors.
238    4.  Step 1 of the derivation S(N) had been omitted as it is only
239        necessary for zones containing owner names consisting of more
240        than one label.  This omission results in a tiny reduction of the
241        length of derived successors, and maintains consistency with the
242        modification of step 4 of the derivation P(N) described above.
244    5.  Steps 2 and 4 of the derivation S(N) have been modified to
245        eliminate checks for maximum DNS name length, as it is an
246        assumption of this method that no DNS name in the zone can exceed
247        the maximum DNS name length.
249 3.2.1.  Derivation of DNS Name Predecessor
251    To derive P'(N):
253    1.  If N is two or more labels longer than the owner name of the
254        apex, repeatedly remove the least significant (left-most) label
255        until N is only one label longer than the owner name of the apex;
256        otherwise proceed to the next step.
258    2.  If the least significant (left-most) label of N consists of a
259        single octet of the minimum sort value (e.g., 0x00), remove that
260        label; otherwise proceed to the next step.  (If this condition is
261        met, P'(N) is the owner name of the apex.)
263    3.  If the least significant (right-most) octet in the least
264        significant (left-most) label of N is the minimum sort value,
265        remove the least significant octet.
267    4.  Decrement the value of the least significant (right-most) octet,
268        skipping any values that correspond to uppercase US-ASCII
269        letters, and then append the label with as many octets as
270        possible of the maximum sort value.
282 Sisson & Laurie               Experimental                      [Page 5]
284 RFC 4471           DNS Name Predecessor and Successor     September 2006
287 3.2.2.  Derivation of DNS Name Successor
289    To derive S'(N):
291    1.  If N is two or more labels longer than the owner name of the
292        apex, repeatedly remove the least significant (left-most) label
293        until N is only one label longer than the owner name of the apex.
294        Proceed to the next step.
296    2.  If the least significant (left-most) label of N is one or more
297        octets shorter than the maximum label length, append an octet of
298        the minimum sort value to the least significant label; otherwise
299        proceed to the next step.
301    3.  Increment the value of the least significant (right-most) octet
302        in the least significant (left-most) label that is less than the
303        maximum sort value (e.g., 0xff), skipping any values that
304        correspond to uppercase US-ASCII letters, and then remove any
305        octets to the right of that one.  If all octets in the label are
306        the maximum sort value, then proceed to the next step.
308    4.  Remove the least significant (left-most) label.  (This will occur
309        only if the least significant label is the maximum label length
310        and consists entirely of octets of the maximum sort value, and
311        thus has wrapped to the owner name of the zone apex.)
313 4.  Notes
315 4.1.  Test for Existence
317    Before using the result of P(N) or P'(N) as the owner name of an NSEC
318    RR in a DNS response, a name server should test to see whether the
319    name exists.  If it does, either a standard non-synthesised NSEC RR
320    should be used, or the synthesised NSEC RR should reflect the RRset
321    types that exist at the NSEC RR's owner name in the Type Bit Map
322    field as specified by Section 4.1.2 of [RFC4034].  Implementors will
323    likely find it simpler to use a non-synthesised NSEC RR.  For further
324    details, see Section 2 of [RFC4470].
338 Sisson & Laurie               Experimental                      [Page 6]
340 RFC 4471           DNS Name Predecessor and Successor     September 2006
343 4.2.  Case Considerations
345    Section 3.5 of [RFC1034] specifies that "while upper and lower case
346    letters are allowed in names, no significance is attached to the
347    case".  Additionally, Section 6.1 of [RFC4034] states that when
348    determining canonical DNS name order, "uppercase US-ASCII letters are
349    treated as if they were lowercase US-ASCII letters".  Consequently,
350    values corresponding to US-ASCII uppercase letters must be skipped
351    when decrementing and incrementing octets in the derivations
352    described in Section 3.
354    The following pseudo-code is illustrative:
356    Decrement the value of an octet:
358       if (octet == '[')       // '[' is just after uppercase 'Z'
359               octet = '@';    // '@' is just prior to uppercase 'A'
360       else
361               octet--;
363    Increment the value of an octet:
365       if (octet == '@')       // '@' is just prior to uppercase 'A'
366               octet = '[';    // '[' is just after uppercase 'Z'
367       else
368               octet++;
370 4.3.  Choice of Range
372    [RFC2181] makes the clarification that "any binary string whatever
373    can be used as the label of any resource record".  Consequently, the
374    minimum sort value may be set as 0x00 and the maximum sort value as
375    0xff, and the range of possible values will be any DNS name that
376    contains octets of any value other than those corresponding to
377    uppercase US-ASCII letters.
379    However, if all owner names in a zone are in the letter-digit-hyphen,
380    or LDH, format specified in [RFC1034], it may be desirable to
381    restrict the range of possible values to DNS names containing only
382    LDH values.  This has the effect of
384    1.  making the output of tools such as `dig' and `nslookup' less
385        subject to confusion,
387    2.  minimising the impact that NSEC RRs containing DNS names with
388        non-LDH values (or non-printable values) might have on faulty DNS
389        resolver implementations, and
394 Sisson & Laurie               Experimental                      [Page 7]
396 RFC 4471           DNS Name Predecessor and Successor     September 2006
399    3.  preventing the possibility of results that are wildcard DNS names
400        (see Section 4.4).
402    This may be accomplished by using a minimum sort value of 0x1f (US-
403    ASCII character `-') and a maximum sort value of 0x7a (US-ASCII
404    character lowercase `z'), and then skipping non-LDH, non-lowercase
405    values when incrementing or decrementing octets.
407 4.4.  Wild Card Considerations
409    Neither derivation avoids the possibility that the result may be a
410    DNS name containing a wildcard label, i.e., a label containing a
411    single octet with the value 0x2a (US-ASCII character `*').  With
412    additional tests, wildcard DNS names may be explicitly avoided;
413    alternatively, if the range of octet values can be restricted to
414    those corresponding to letter-digit-hyphen, or LDH, characters (see
415    Section 4.3), such DNS names will not occur.
417    Note that it is improbable that a result that is a wildcard DNS name
418    will occur unintentionally; even if one does occur either as the
419    owner name of, or in the RDATA of an NSEC RR, it is treated as a
420    literal DNS name with no special meaning.
422 4.5.  Possible Modifications
424 4.5.1.  Restriction of Effective Maximum DNS Name Length
426    [RFC1034] specifies that "the total number of octets that represent a
427    name (i.e., the sum of all label octets and label lengths) is limited
428    to 255", including the null (zero-length) label that represents the
429    root.  For the purpose of deriving predecessors and successors during
430    NSEC RR synthesis, the maximum DNS name length may be effectively
431    restricted to the length of the longest DNS name in the zone.  This
432    will minimise the size of responses containing synthesised NSEC RRs
433    but, especially in the case of the modified method, may result in
434    some additional computational complexity.
436    Note that this modification will have the effect of revealing
437    information about the longest name in the zone.  Moreover, when the
438    contents of the zone changes, e.g., during dynamic updates and zone
439    transfers, care must be taken to ensure that the effective maximum
440    DNS name length agrees with the new contents.
442 4.5.2.  Use of Modified Method with Zones Containing SRV RRs
444    Normally, the modified method cannot be used in zones that contain
445    Service Record (SRV) RRs [RFC2782], as SRV RRs have owner names that
446    contain multiple labels.  However, the use of SRV RRs can be
450 Sisson & Laurie               Experimental                      [Page 8]
452 RFC 4471           DNS Name Predecessor and Successor     September 2006
455    accommodated by various techniques.  There are at least four possible
456    ways to do this:
458    1.  Use conventional NSEC RRs for the region of the zone that
459        contains first-level labels beginning with the underscore (`_')
460        character.  For the purposes of generating these NSEC RRs, the
461        existence of (possibly fictional) ownernames `9{63}' and `a'
462        could be assumed, providing a lower and upper bound for this
463        region.  Then all queries where the QNAME does not exist but
464        contains a first-level label beginning with an underscore could
465        be handled using the normal DNSSEC protocol.
467        This approach would make it possible to enumerate all DNS names
468        in the zone containing a first-level label beginning with
469        underscore, including all SRV RRs, but this may be of less a
470        concern to the zone administrator than incurring the overhead of
471        the absolute method or of the following variants of the modified
472        method.
474    2.  The absolute method could be used for synthesising NSEC RRs for
475        all queries where the QNAME contains a leading underscore.
476        However, this re-introduces the susceptibility of the absolute
477        method to denial of service activity, as an attacker could send
478        queries for an effectively inexhaustible supply of domain names
479        beginning with a leading underscore.
481    3.  A variant of the modified method could be used for synthesising
482        NSEC RRs for all queries where the QNAME contains a leading
483        underscore.  This variant would assume that all predecessors and
484        successors to queries where the QNAME contains a leading
485        underscore may consist of two labels rather than only one.  This
486        introduces a little additional complexity without incurring the
487        full increase in response size and computational complexity as
488        the absolute method.
490    4.  Finally, a variant of the modified method that assumes that all
491        owner names in the zone consist of one or two labels could be
492        used.  However, this negates much of the reduction in response
493        size of the modified method and may be nearly as computationally
494        complex as the absolute method.
496 5.  Examples
498    In the following examples,
500       the owner name of the zone apex is "example.com.",
506 Sisson & Laurie               Experimental                      [Page 9]
508 RFC 4471           DNS Name Predecessor and Successor     September 2006
511       the range of octet values is 0x00 - 0xff excluding values
512       corresponding to uppercase US-ASCII letters, and
514       non-printable octet values are expressed as three-digit decimal
515       numbers preceded by a backslash (as specified in Section 5.1 of
516       [RFC1035]).
518 5.1.  Examples of Immediate Predecessors Using Absolute Method
520    Example of a typical case:
522       P(foo.example.com.) =
524            \255\255\255\255\255\255\255\255\255\255\255\255
525            \255\255\255\255\255\255\255\255\255\255\255\255
526            \255\255\255\255\255\255\255\255\255\255\255\255
527            \255\255\255\255\255\255\255\255\255\255\255\255
528            \255.\255\255\255\255\255\255\255\255\255\255
529            \255\255\255\255\255\255\255\255\255\255\255\255
530            \255\255\255\255\255\255\255\255\255\255\255\255
531            \255\255\255\255\255\255\255\255\255\255\255\255
532            \255\255\255\255\255\255\255\255\255\255\255\255
533            \255\255\255\255\255.\255\255\255\255\255\255
534            \255\255\255\255\255\255\255\255\255\255\255\255
535            \255\255\255\255\255\255\255\255\255\255\255\255
536            \255\255\255\255\255\255\255\255\255\255\255\255
537            \255\255\255\255\255\255\255\255\255\255\255\255
538            \255\255\255\255\255\255\255\255\255.fon\255\255
539            \255\255\255\255\255\255\255\255\255\255\255\255
540            \255\255\255\255\255\255\255\255\255\255\255\255
541            \255\255\255\255\255\255\255\255\255\255\255\255
542            \255\255\255\255\255\255\255\255\255\255\255\255
543            \255\255\255\255\255\255\255\255\255\255.example.com.
545       or, in alternate notation:
547            \255{49}.\255{63}.\255{63}.fon\255{60}.example.com.
549       where {n} represents the number of repetitions of an octet.
551    Example where least significant (left-most) label of DNS name
552    consists of a single octet of the minimum sort value:
554       P(\000.foo.example.com.) = foo.example.com.
562 Sisson & Laurie               Experimental                     [Page 10]
564 RFC 4471           DNS Name Predecessor and Successor     September 2006
567    Example where least significant (right-most) octet of least
568    significant (left-most) label has the minimum sort value:
570       P(foo\000.example.com.) =
572            \255\255\255\255\255\255\255\255\255\255\255\255
573            \255\255\255\255\255\255\255\255\255\255\255\255
574            \255\255\255\255\255\255\255\255\255\255\255\255
575            \255\255\255\255\255\255\255\255\255.\255\255
576            \255\255\255\255\255\255\255\255\255\255\255\255
577            \255\255\255\255\255\255\255\255\255\255\255\255
578            \255\255\255\255\255\255\255\255\255\255\255\255
579            \255\255\255\255\255\255\255\255\255\255\255\255
580            \255\255\255\255\255\255\255\255\255\255\255\255
581            \255.\255\255\255\255\255\255\255\255\255\255
582            \255\255\255\255\255\255\255\255\255\255\255\255
583            \255\255\255\255\255\255\255\255\255\255\255\255
584            \255\255\255\255\255\255\255\255\255\255\255\255
585            \255\255\255\255\255\255\255\255\255\255\255\255
586            \255\255\255\255\255.\255\255\255\255\255\255
587            \255\255\255\255\255\255\255\255\255\255\255\255
588            \255\255\255\255\255\255\255\255\255\255\255\255
589            \255\255\255\255\255\255\255\255\255\255\255\255
590            \255\255\255\255\255\255\255\255\255\255\255\255
591            \255\255\255\255\255\255\255\255\255.foo.example.com.
593       or, in alternate notation:
595            \255{45}.\255{63}.\255{63}.\255{63}.foo.example.com.
618 Sisson & Laurie               Experimental                     [Page 11]
620 RFC 4471           DNS Name Predecessor and Successor     September 2006
623    Example where DNS name contains an octet that must be decremented by
624    skipping values corresponding to US-ASCII uppercase letters:
626       P(fo\[.example.com.) =
628            \255\255\255\255\255\255\255\255\255\255\255\255
629            \255\255\255\255\255\255\255\255\255\255\255\255
630            \255\255\255\255\255\255\255\255\255\255\255\255
631            \255\255\255\255\255\255\255\255\255\255\255\255
632            \255.\255\255\255\255\255\255\255\255\255\255
633            \255\255\255\255\255\255\255\255\255\255\255\255
634            \255\255\255\255\255\255\255\255\255\255\255\255
635            \255\255\255\255\255\255\255\255\255\255\255\255
636            \255\255\255\255\255\255\255\255\255\255\255\255
637            \255\255\255\255\255.\255\255\255\255\255\255
638            \255\255\255\255\255\255\255\255\255\255\255\255
639            \255\255\255\255\255\255\255\255\255\255\255\255
640            \255\255\255\255\255\255\255\255\255\255\255\255
641            \255\255\255\255\255\255\255\255\255\255\255\255
642            \255\255\255\255\255\255\255\255\255.fo\@\255
643            \255\255\255\255\255\255\255\255\255\255\255\255
644            \255\255\255\255\255\255\255\255\255\255\255\255
645            \255\255\255\255\255\255\255\255\255\255\255\255
646            \255\255\255\255\255\255\255\255\255\255\255\255
647            \255\255\255\255\255\255\255\255\255\255\255.example.com.
649       or, in alternate notation:
651            \255{49}.\255{63}.\255{63}.fo\@\255{60}.example.com.
653       where {n} represents the number of repetitions of an octet.
674 Sisson & Laurie               Experimental                     [Page 12]
676 RFC 4471           DNS Name Predecessor and Successor     September 2006
679    Example where DNS name is the owner name of the zone apex, and
680    consequently wraps to the DNS name with the maximum possible sort
681    order in the zone:
683       P(example.com.) =
685            \255\255\255\255\255\255\255\255\255\255\255\255
686            \255\255\255\255\255\255\255\255\255\255\255\255
687            \255\255\255\255\255\255\255\255\255\255\255\255
688            \255\255\255\255\255\255\255\255\255\255\255\255
689            \255.\255\255\255\255\255\255\255\255\255\255
690            \255\255\255\255\255\255\255\255\255\255\255\255
691            \255\255\255\255\255\255\255\255\255\255\255\255
692            \255\255\255\255\255\255\255\255\255\255\255\255
693            \255\255\255\255\255\255\255\255\255\255\255\255
694            \255\255\255\255\255.\255\255\255\255\255\255
695            \255\255\255\255\255\255\255\255\255\255\255\255
696            \255\255\255\255\255\255\255\255\255\255\255\255
697            \255\255\255\255\255\255\255\255\255\255\255\255
698            \255\255\255\255\255\255\255\255\255\255\255\255
699            \255\255\255\255\255\255\255\255\255.\255\255
700            \255\255\255\255\255\255\255\255\255\255\255\255
701            \255\255\255\255\255\255\255\255\255\255\255\255
702            \255\255\255\255\255\255\255\255\255\255\255\255
703            \255\255\255\255\255\255\255\255\255\255\255\255
704            \255\255\255\255\255\255\255\255\255\255\255\255
705            \255.example.com.
707       or, in alternate notation:
709            \255{49}.\255{63}.\255{63}.\255{63}.example.com.
730 Sisson & Laurie               Experimental                     [Page 13]
732 RFC 4471           DNS Name Predecessor and Successor     September 2006
735 5.2.  Examples of Immediate Successors Using Absolute Method
737    Example of typical case:
739       S(foo.example.com.) = \000.foo.example.com.
741    Example where DNS name is one octet short of the maximum DNS name
742    length:
744       N =  fooooooooooooooooooooooooooooooooooooooooooooooo
745            .ooooooooooooooooooooooooooooooooooooooooooooooo
746            oooooooooooooooo.ooooooooooooooooooooooooooooooo
747            oooooooooooooooooooooooooooooooo.ooooooooooooooo
748            oooooooooooooooooooooooooooooooooooooooooooooooo.example.com.
750       or, in alternate notation:
752            fo{47}.o{63}.o{63}.o{63}.example.com.
754       S(N) =
756            fooooooooooooooooooooooooooooooooooooooooooooooo
757            \000.ooooooooooooooooooooooooooooooooooooooooooo
758            oooooooooooooooooooo.ooooooooooooooooooooooooooo
759            oooooooooooooooooooooooooooooooooooo.ooooooooooo
760            oooooooooooooooooooooooooooooooooooooooooooooooo
761            oooo.example.com.
763       or, in alternate notation:
765            fo{47}\000.o{63}.o{63}.o{63}.example.com.
786 Sisson & Laurie               Experimental                     [Page 14]
788 RFC 4471           DNS Name Predecessor and Successor     September 2006
791    Example where DNS name is the maximum DNS name length:
793       N  = fooooooooooooooooooooooooooooooooooooooooooooooo
794            o.oooooooooooooooooooooooooooooooooooooooooooooo
795            ooooooooooooooooo.oooooooooooooooooooooooooooooo
796            ooooooooooooooooooooooooooooooooo.oooooooooooooo
797            oooooooooooooooooooooooooooooooooooooooooooooooo
798            o.example.com.
800       or, in alternate notation:
802            fo{48}.o{63}.o{63}.o{63}.example.com.
804       S(N) =
806            fooooooooooooooooooooooooooooooooooooooooooooooo
807            p.oooooooooooooooooooooooooooooooooooooooooooooo
808            ooooooooooooooooo.oooooooooooooooooooooooooooooo
809            ooooooooooooooooooooooooooooooooo.oooooooooooooo
810            oooooooooooooooooooooooooooooooooooooooooooooooo
811            o.example.com.
813       or, in alternate notation:
815            fo{47}p.o{63}.o{63}.o{63}.example.com.
842 Sisson & Laurie               Experimental                     [Page 15]
844 RFC 4471           DNS Name Predecessor and Successor     September 2006
847    Example where DNS name is the maximum DNS name length and the least
848    significant (left-most) label has the maximum sort value:
850       N =  \255\255\255\255\255\255\255\255\255\255\255\255
851            \255\255\255\255\255\255\255\255\255\255\255\255
852            \255\255\255\255\255\255\255\255\255\255\255\255
853            \255\255\255\255\255\255\255\255\255\255\255\255
854            \255.ooooooooooooooooooooooooooooooooooooooooooo
855            oooooooooooooooooooo.ooooooooooooooooooooooooooo
856            oooooooooooooooooooooooooooooooooooo.ooooooooooo
857            oooooooooooooooooooooooooooooooooooooooooooooooo
858            oooo.example.com.
860       or, in alternate notation:
862            \255{49}.o{63}.o{63}.o{63}.example.com.
864       S(N) =
866            oooooooooooooooooooooooooooooooooooooooooooooooo
867            oooooooooooooop.oooooooooooooooooooooooooooooooo
868            ooooooooooooooooooooooooooooooo.oooooooooooooooo
869            ooooooooooooooooooooooooooooooooooooooooooooooo.
870            example.com.
872       or, in alternate notation:
874            o{62}p.o{63}.o{63}.example.com.
898 Sisson & Laurie               Experimental                     [Page 16]
900 RFC 4471           DNS Name Predecessor and Successor     September 2006
903    Example where DNS name is the maximum DNS name length and the eight
904    least significant (right-most) octets of the least significant
905    (left-most) label have the maximum sort value:
907       N  = foooooooooooooooooooooooooooooooooooooooo\255
908            \255\255\255\255\255\255\255.ooooooooooooooooooo
909            oooooooooooooooooooooooooooooooooooooooooooo.ooo
910            oooooooooooooooooooooooooooooooooooooooooooooooo
911            oooooooooooo.ooooooooooooooooooooooooooooooooooo
912            oooooooooooooooooooooooooooo.example.com.
914       or, in alternate notation:
916            fo{40}\255{8}.o{63}.o{63}.o{63}.example.com.
918       S(N) =
920            fooooooooooooooooooooooooooooooooooooooop.oooooo
921            oooooooooooooooooooooooooooooooooooooooooooooooo
922            ooooooooo.oooooooooooooooooooooooooooooooooooooo
923            ooooooooooooooooooooooooo.oooooooooooooooooooooo
924            ooooooooooooooooooooooooooooooooooooooooo.example.com.
926       or, in alternate notation:
928            fo{39}p.o{63}.o{63}.o{63}.example.com.
954 Sisson & Laurie               Experimental                     [Page 17]
956 RFC 4471           DNS Name Predecessor and Successor     September 2006
959    Example where DNS name is the maximum DNS name length and contains an
960    octet that must be incremented by skipping values corresponding to
961    US-ASCII uppercase letters:
963       N  = fooooooooooooooooooooooooooooooooooooooooooooooo
964            \@.ooooooooooooooooooooooooooooooooooooooooooooo
965            oooooooooooooooooo.ooooooooooooooooooooooooooooo
966            oooooooooooooooooooooooooooooooooo.ooooooooooooo
967            oooooooooooooooooooooooooooooooooooooooooooooooo
968            oo.example.com.
970       or, in alternate notation:
972            fo{47}\@.o{63}.o{63}.o{63}.example.com.
974       S(N) =
976            fooooooooooooooooooooooooooooooooooooooooooooooo
977            \[.ooooooooooooooooooooooooooooooooooooooooooooo
978            oooooooooooooooooo.ooooooooooooooooooooooooooooo
979            oooooooooooooooooooooooooooooooooo.ooooooooooooo
980            oooooooooooooooooooooooooooooooooooooooooooooooo
981            oo.example.com.
983       or, in alternate notation:
985            fo{47}\[.o{63}.o{63}.o{63}.example.com.
1010 Sisson & Laurie               Experimental                     [Page 18]
1012 RFC 4471           DNS Name Predecessor and Successor     September 2006
1015    Example where DNS name has the maximum possible sort order in the
1016    zone, and consequently wraps to the owner name of the zone apex:
1018       N  = \255\255\255\255\255\255\255\255\255\255\255\255
1019            \255\255\255\255\255\255\255\255\255\255\255\255
1020            \255\255\255\255\255\255\255\255\255\255\255\255
1021            \255\255\255\255\255\255\255\255\255\255\255\255
1022            \255.\255\255\255\255\255\255\255\255\255\255
1023            \255\255\255\255\255\255\255\255\255\255\255\255
1024            \255\255\255\255\255\255\255\255\255\255\255\255
1025            \255\255\255\255\255\255\255\255\255\255\255\255
1026            \255\255\255\255\255\255\255\255\255\255\255\255
1027            \255\255\255\255\255.\255\255\255\255\255\255
1028            \255\255\255\255\255\255\255\255\255\255\255\255
1029            \255\255\255\255\255\255\255\255\255\255\255\255
1030            \255\255\255\255\255\255\255\255\255\255\255\255
1031            \255\255\255\255\255\255\255\255\255\255\255\255
1032            \255\255\255\255\255\255\255\255\255.\255\255
1033            \255\255\255\255\255\255\255\255\255\255\255\255
1034            \255\255\255\255\255\255\255\255\255\255\255\255
1035            \255\255\255\255\255\255\255\255\255\255\255\255
1036            \255\255\255\255\255\255\255\255\255\255\255\255
1037            \255\255\255\255\255\255\255\255\255\255\255\255
1038            \255.example.com.
1040       or, in alternate notation:
1042            \255{49}.\255{63}.\255{63}.\255{63}.example.com.
1044       S(N) = example.com.
1046 5.3.  Examples of Predecessors Using Modified Method
1048    Example of a typical case:
1050       P'(foo.example.com.) =
1052            fon\255\255\255\255\255\255\255\255\255\255\255
1053            \255\255\255\255\255\255\255\255\255\255\255\255
1054            \255\255\255\255\255\255\255\255\255\255\255\255
1055            \255\255\255\255\255\255\255\255\255\255\255\255
1056            \255\255\255\255\255\255\255\255\255\255\255\255
1057            \255.example.com.
1059       or, in alternate notation:
1061            fon\255{60}.example.com.
1066 Sisson & Laurie               Experimental                     [Page 19]
1068 RFC 4471           DNS Name Predecessor and Successor     September 2006
1071    Example where DNS name contains more labels than DNS names in the
1072    zone:
1074       P'(bar.foo.example.com.) = foo.example.com.
1076    Example where least significant (right-most) octet of least
1077    significant (left-most) label has the minimum sort value:
1079       P'(foo\000.example.com.) = foo.example.com.
1081    Example where least significant (left-most) label has the minimum
1082    sort value:
1084       P'(\000.example.com.) = example.com.
1086    Example where DNS name is the owner name of the zone apex, and
1087    consequently wraps to the DNS name with the maximum possible sort
1088    order in the zone:
1090       P'(example.com.) =
1092            \255\255\255\255\255\255\255\255\255\255\255\255
1093            \255\255\255\255\255\255\255\255\255\255\255\255
1094            \255\255\255\255\255\255\255\255\255\255\255\255
1095            \255\255\255\255\255\255\255\255\255\255\255\255
1096            \255\255\255\255\255\255\255\255\255\255\255\255
1097            \255\255\255.example.com.
1099       or, in alternate notation:
1101            \255{63}.example.com.
1103 5.4.  Examples of Successors Using Modified Method
1105    Example of a typical case:
1107       S'(foo.example.com.) = foo\000.example.com.
1109    Example where DNS name contains more labels than DNS names in the
1110    zone:
1112       S'(bar.foo.example.com.) = foo\000.example.com.
1115    Example where least significant (left-most) label has the maximum
1116    sort value, and consequently wraps to the owner name of the zone
1117    apex:
1122 Sisson & Laurie               Experimental                     [Page 20]
1124 RFC 4471           DNS Name Predecessor and Successor     September 2006
1127       N  = \255\255\255\255\255\255\255\255\255\255\255\255
1128            \255\255\255\255\255\255\255\255\255\255\255\255
1129            \255\255\255\255\255\255\255\255\255\255\255\255
1130            \255\255\255\255\255\255\255\255\255\255\255\255
1131            \255\255\255\255\255\255\255\255\255\255\255\255
1132            \255\255\255.example.com.
1134       or, in alternate notation:
1136            \255{63}.example.com.
1138       S'(N) = example.com.
1140 6.  Security Considerations
1142    The derivation of some predecessors/successors requires the testing
1143    of more conditions than others.  Consequently, the effectiveness of a
1144    denial-of-service attack may be enhanced by sending queries that
1145    require more conditions to be tested.  The modified method involves
1146    the testing of fewer conditions than the absolute method and
1147    consequently is somewhat less susceptible to this exposure.
1149 7.  Acknowledgements
1151    The authors would like to thank Sam Weiler, Olaf Kolkman, Olafur
1152    Gudmundsson, and Niall O'Reilly for their review and input.
1154 8.  References
1156 8.1.  Normative References
1158    [RFC1034]      Mockapetris, P., "Domain names - concepts and
1159                   facilities", STD 13, RFC 1034, November 1987.
1161    [RFC1035]      Mockapetris, P., "Domain names - implementation and
1162                   specification", STD 13, RFC 1035, November 1987.
1164    [RFC2181]      Elz, R. and R. Bush, "Clarifications to the DNS
1165                   Specification", RFC 2181, July 1997.
1167    [RFC2782]      Gulbrandsen, A., Vixie, P., and L. Esibov, "A DNS RR
1168                   for specifying the location of services (DNS SRV)",
1169                   RFC 2782, February 2000.
1171    [RFC4034]      Arends, R., Austein, R., Larson, M., Massey, D., and
1172                   S. Rose, "Resource Records for the DNS Security
1173                   Extensions", RFC 4034, March 2005.
1178 Sisson & Laurie               Experimental                     [Page 21]
1180 RFC 4471           DNS Name Predecessor and Successor     September 2006
1183 8.2.  Informative References
1185    [RFC4470]      Weiler, S. and J. Ihren, "Minimally Covering NSEC
1186                   Records and DNSSEC On-line Signing", RFC 4470, April
1187                   2006.
1189    [DNSSEC-TRANS] Arends, R., Koch, P., and J. Schlyter, "Evaluating
1190                   DNSSEC Transition Mechanisms", Work in Progress,
1191                   February 2005.
1193 Authors' Addresses
1195    Geoffrey Sisson
1196    Nominet
1197    Sandford Gate
1198    Sandy Lane West
1199    Oxford
1200    OX4 6LB
1201    GB
1203    Phone: +44 1865 332211
1204    EMail: geoff@nominet.org.uk
1207    Ben Laurie
1208    Nominet
1209    17 Perryn Road
1210    London
1211    W3 7LR
1212    GB
1214    Phone: +44 20 8735 0686
1215    EMail: ben@algroup.co.uk
1234 Sisson & Laurie               Experimental                     [Page 22]
1236 RFC 4471           DNS Name Predecessor and Successor     September 2006
1239 Full Copyright Statement
1241    Copyright (C) The Internet Society (2006).
1243    This document is subject to the rights, licenses and restrictions
1244    contained in BCP 78, and except as set forth therein, the authors
1245    retain all their rights.
1247    This document and the information contained herein are provided on an
1248    "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
1249    OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
1250    ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
1251    INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
1252    INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
1253    WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
1255 Intellectual Property
1257    The IETF takes no position regarding the validity or scope of any
1258    Intellectual Property Rights or other rights that might be claimed to
1259    pertain to the implementation or use of the technology described in
1260    this document or the extent to which any license under such rights
1261    might or might not be available; nor does it represent that it has
1262    made any independent effort to identify any such rights.  Information
1263    on the procedures with respect to rights in RFC documents can be
1264    found in BCP 78 and BCP 79.
1266    Copies of IPR disclosures made to the IETF Secretariat and any
1267    assurances of licenses to be made available, or the result of an
1268    attempt made to obtain a general license or permission for the use of
1269    such proprietary rights by implementers or users of this
1270    specification can be obtained from the IETF on-line IPR repository at
1271    http://www.ietf.org/ipr.
1273    The IETF invites any interested party to bring to its attention any
1274    copyrights, patents or patent applications, or other proprietary
1275    rights that may cover technology that may be required to implement
1276    this standard.  Please address the information to the IETF at
1277    ietf-ipr@ietf.org.
1279 Acknowledgement
1281    Funding for the RFC Editor function is provided by the IETF
1282    Administrative Support Activity (IASA).
1290 Sisson & Laurie               Experimental                     [Page 23]