home *** CD-ROM | disk | FTP | other *** search
/ Hackers Toolkit 2.0 / Hackers_Toolkit_v2.0.iso / HTML / archive / Texts / Rfc / RFC1982.TXT < prev    next >
Encoding:
Text File  |  1999-11-04  |  14.1 KB  |  398 lines

  1. Network Working Group                                             R. Elz
  2. Request for Comments: 1982                       University of Melbourne
  3. Updates: 1034, 1035                                              R. Bush
  4. Category: Standards Track                                    RGnet, Inc.
  5.                                                              August 1996
  6.  
  7.  
  8.                         Serial Number Arithmetic
  9.  
  10. Status of this Memo
  11.  
  12.    This document specifies an Internet standards track protocol for the
  13.    Internet community, and requests discussion and suggestions for
  14.    improvements.  Please refer to the current edition of the "Internet
  15.    Official Protocol Standards" (STD 1) for the standardization state
  16.    and status of this protocol.  Distribution of this memo is unlimited.
  17.  
  18. Abstract
  19.  
  20.    This memo defines serial number arithmetic, as used in the Domain
  21.    Name System.  The DNS has long relied upon serial number arithmetic,
  22.    a concept which has never really been defined, certainly not in an
  23.    IETF document, though which has been widely understood.  This memo
  24.    supplies the missing definition.  It is intended to update RFC1034
  25.    and RFC1035.
  26.  
  27. 1. Introduction
  28.  
  29.    The serial number field of the SOA resource record is defined in
  30.    RFC1035 as
  31.  
  32.    SERIAL   The unsigned 32 bit version number of the original copy of
  33.             the zone.  Zone transfers preserve this value.  This value
  34.             wraps and should be compared using sequence space
  35.             arithmetic.
  36.  
  37.    RFC1034 uses the same terminology when defining secondary server zone
  38.    consistency procedures.
  39.  
  40.    Unfortunately the term "sequence space arithmetic" is not defined in
  41.    either RFC1034 or RFC1035, nor do any of their references provide
  42.    further information.
  43.  
  44.    This phrase seems to have been intending to specify arithmetic as
  45.    used in TCP sequence numbers [RFC793], and defined in [IEN-74].
  46.  
  47.    Unfortunately, the arithmetic defined in [IEN-74] is not adequate for
  48.    the purposes of the DNS, as no general comparison operator is
  49.  
  50.  
  51.  
  52. Elz & Bush                  Standards Track                     [Page 1]
  53.  
  54.  
  55. RFC 1982                Serial Number Arithmetic             August 1996
  56.  
  57.  
  58.    defined.
  59.  
  60.    To avoid further problems with this simple field, this document
  61.    defines the field and the operations available upon it.  This
  62.    definition is intended merely to clarify the intent of RFC1034 and
  63.    RFC1035, and is believed to generally agree with current
  64.    implementations.  However, older, superseded, implementations are
  65.    known to have treated the serial number as a simple unsigned integer,
  66.    with no attempt to implement any kind of "sequence space arithmetic",
  67.    however that may have been interpreted, and further, ignoring the
  68.    requirement that the value wraps.  Nothing can be done with these
  69.    implementations, beyond extermination.
  70.  
  71. 2. Serial Number Arithmetic
  72.  
  73.    Serial numbers are formed from non-negative integers from a finite
  74.    subset of the range of all integer values.  The lowest integer in
  75.    every subset used for this purpose is zero, the maximum is always one
  76.    less than a power of two.
  77.  
  78.    When considered as serial numbers however no value has any particular
  79.    significance, there is no minimum or maximum serial number, every
  80.    value has a successor and predecessor.
  81.  
  82.    To define a serial number to be used in this way, the size of the
  83.    serial number space must be given.  This value, called "SERIAL_BITS",
  84.    gives the power of two which results in one larger than the largest
  85.    integer corresponding to a serial number value.  This also specifies
  86.    the number of bits required to hold every possible value of a serial
  87.    number of the defined type.  The operations permitted upon serial
  88.    numbers are defined in the following section.
  89.  
  90. 3. Operations upon the serial number
  91.  
  92.    Only two operations are defined upon serial numbers, addition of a
  93.    positive integer of limited range, and comparison with another serial
  94.    number.
  95.  
  96. 3.1. Addition
  97.  
  98.    Serial numbers may be incremented by the addition of a positive
  99.    integer n, where n is taken from the range of integers
  100.    [0 .. (2^(SERIAL_BITS - 1) - 1)].  For a sequence number s, the
  101.    result of such an addition, s', is defined as
  102.  
  103.                    s' = (s + n) modulo (2 ^ SERIAL_BITS)
  104.  
  105.  
  106.  
  107.  
  108.  
  109. Elz & Bush                  Standards Track                     [Page 2]
  110.  
  111.  
  112. RFC 1982                Serial Number Arithmetic             August 1996
  113.  
  114.  
  115.    where the addition and modulus operations here act upon values that
  116.    are non-negative values of unbounded size in the usual ways of
  117.    integer arithmetic.
  118.  
  119.    Addition of a value outside the range
  120.    [0 .. (2^(SERIAL_BITS - 1) - 1)] is undefined.
  121.  
  122. 3.2. Comparison
  123.  
  124.    Any two serial numbers, s1 and s2, may be compared.  The definition
  125.    of the result of this comparison is as follows.
  126.  
  127.    For the purposes of this definition, consider two integers, i1 and
  128.    i2, from the unbounded set of non-negative integers, such that i1 and
  129.    s1 have the same numeric value, as do i2 and s2.  Arithmetic and
  130.    comparisons applied to i1 and i2 use ordinary unbounded integer
  131.    arithmetic.
  132.  
  133.    Then, s1 is said to be equal to s2 if and only if i1 is equal to i2,
  134.    in all other cases, s1 is not equal to s2.
  135.  
  136.    s1 is said to be less than s2 if, and only if, s1 is not equal to s2,
  137.    and
  138.  
  139.         (i1 < i2 and i2 - i1 < 2^(SERIAL_BITS - 1)) or
  140.         (i1 > i2 and i1 - i2 > 2^(SERIAL_BITS - 1))
  141.  
  142.    s1 is said to be greater than s2 if, and only if, s1 is not equal to
  143.    s2, and
  144.  
  145.         (i1 < i2 and i2 - i1 > 2^(SERIAL_BITS - 1)) or
  146.         (i1 > i2 and i1 - i2 < 2^(SERIAL_BITS - 1))
  147.  
  148.    Note that there are some pairs of values s1 and s2 for which s1 is
  149.    not equal to s2, but for which s1 is neither greater than, nor less
  150.    than, s2.  An attempt to use these ordering operators on such pairs
  151.    of values produces an undefined result.
  152.  
  153.    The reason for this is that those pairs of values are such that any
  154.    simple definition that were to define s1 to be less than s2 where
  155.    (s1, s2) is such a pair, would also usually cause s2 to be less than
  156.    s1, when the pair is (s2, s1).  This would mean that the particular
  157.    order selected for a test could cause the result to differ, leading
  158.    to unpredictable implementations.
  159.  
  160.    While it would be possible to define the test in such a way that the
  161.    inequality would not have this surprising property, while being
  162.    defined for all pairs of values, such a definition would be
  163.  
  164.  
  165.  
  166. Elz & Bush                  Standards Track                     [Page 3]
  167.  
  168.  
  169. RFC 1982                Serial Number Arithmetic             August 1996
  170.  
  171.  
  172.    unnecessarily burdensome to implement, and difficult to understand,
  173.    and would still allow cases where
  174.  
  175.         s1 < s2 and (s1 + 1) > (s2 + 1)
  176.  
  177.    which is just as non-intuitive.
  178.  
  179.    Thus the problem case is left undefined, implementations are free to
  180.    return either result, or to flag an error, and users must take care
  181.    not to depend on any particular outcome.  Usually this will mean
  182.    avoiding allowing those particular pairs of numbers to co-exist.
  183.  
  184.    The relationships greater than or equal to, and less than or equal
  185.    to, follow in the natural way from the above definitions.
  186.  
  187. 4. Corollaries
  188.  
  189.    These definitions give rise to some results of note.
  190.  
  191. 4.1. Corollary 1
  192.  
  193.    For any sequence number s and any integer n such that addition of n
  194.    to s is well defined, (s + n) >= s.  Further (s + n) == s only when
  195.    n == 0, in all other defined cases, (s + n) > s.
  196.  
  197. 4.2. Corollary 2
  198.  
  199.    If s' is the result of adding the non-zero integer n to the sequence
  200.    number s, and m is another integer from the range defined as able to
  201.    be added to a sequence number, and s" is the result of adding m to
  202.    s', then it is undefined whether s" is greater than, or less than s,
  203.    though it is known that s" is not equal to s.
  204.  
  205. 4.3. Corollary 3
  206.  
  207.    If s" from the previous corollary is further incremented, then there
  208.    is no longer any known relationship between the result and s.
  209.  
  210. 4.4. Corollary 4
  211.  
  212.    If in corollary 2 the value (n + m) is such that addition of the sum
  213.    to sequence number s would produce a defined result, then corollary 1
  214.    applies, and s" is known to be greater than s.
  215.  
  216.  
  217.  
  218.  
  219.  
  220.  
  221.  
  222.  
  223. Elz & Bush                  Standards Track                     [Page 4]
  224.  
  225.  
  226. RFC 1982                Serial Number Arithmetic             August 1996
  227.  
  228.  
  229. 5. Examples
  230.  
  231. 5.1. A trivial example
  232.  
  233.    The simplest meaningful serial number space has SERIAL_BITS == 2.  In
  234.    this space, the integers that make up the serial number space are 0,
  235.    1, 2, and 3.  That is, 3 == 2^SERIAL_BITS - 1.
  236.  
  237.    In this space, the largest integer that it is meaningful to add to a
  238.    sequence number is 2^(SERIAL_BITS - 1) - 1, or 1.
  239.  
  240.    Then, as defined 0+1 == 1, 1+1 == 2, 2+1 == 3, and 3+1 == 0.
  241.    Further, 1 > 0, 2 > 1, 3 > 2, and 0 > 3.  It is undefined whether
  242.    2 > 0 or 0 > 2, and whether 1 > 3 or 3 > 1.
  243.  
  244. 5.2. A slightly larger example
  245.  
  246.    Consider the case where SERIAL_BITS == 8.  In this space the integers
  247.    that make up the serial number space are 0, 1, 2, ... 254, 255.
  248.    255 == 2^SERIAL_BITS - 1.
  249.  
  250.    In this space, the largest integer that it is meaningful to add to a
  251.    sequence number is 2^(SERIAL_BITS - 1) - 1, or 127.
  252.  
  253.    Addition is as expected in this space, for example: 255+1 == 0,
  254.    100+100 == 200, and 200+100 == 44.
  255.  
  256.    Comparison is more interesting, 1 > 0, 44 > 0, 100 > 0, 100 > 44,
  257.    200 > 100, 255 > 200, 0 > 255, 100 > 255, 0 > 200, and 44 > 200.
  258.  
  259.    Note that 100+100 > 100, but that (100+100)+100 < 100.  Incrementing
  260.    a serial number can cause it to become "smaller".  Of course,
  261.    incrementing by a smaller number will allow many more increments to
  262.    be made before this occurs.  However this is always something to be
  263.    aware of, it can cause surprising errors, or be useful as it is the
  264.    only defined way to actually cause a serial number to decrease.
  265.  
  266.    The pairs of values 0 and 128, 1 and 129, 2 and 130, etc, to 127 and
  267.    255 are not equal, but in each pair, neither number is defined as
  268.    being greater than, or less than, the other.
  269.  
  270.    It could be defined (arbitrarily) that 128 > 0, 129 > 1,
  271.    130 > 2, ..., 255 > 127, by changing the comparison operator
  272.    definitions, as mentioned above.  However note that that would cause
  273.    255 > 127, while (255 + 1) < (127 + 1), as 0 < 128.  Such a
  274.    definition, apart from being arbitrary, would also be more costly to
  275.    implement.
  276.  
  277.  
  278.  
  279.  
  280. Elz & Bush                  Standards Track                     [Page 5]
  281.  
  282.  
  283. RFC 1982                Serial Number Arithmetic             August 1996
  284.  
  285.  
  286. 6. Citation
  287.  
  288.    As this defined arithmetic may be useful for purposes other than for
  289.    the DNS serial number, it may be referenced as Serial Number
  290.    Arithmetic from RFC1982.  Any such reference shall be taken as
  291.    implying that the rules of sections 2 to 5 of this document apply to
  292.    the stated values.
  293.  
  294. 7. The DNS SOA serial number
  295.  
  296.    The serial number in the DNS SOA Resource Record is a Serial Number
  297.    as defined above, with SERIAL_BITS being 32.  That is, the serial
  298.    number is a non negative integer with values taken from the range
  299.    [0 .. 4294967295].  That is, a 32 bit unsigned integer.
  300.  
  301.    The maximum defined increment is 2147483647 (2^31 - 1).
  302.  
  303.    Care should be taken that the serial number not be incremented, in
  304.    one or more steps, by more than this maximum within the period given
  305.    by the value of SOA.expire.  Doing so may leave some secondary
  306.    servers with out of date copies of the zone, but with a serial number
  307.    "greater" than that of the primary server.  Of course, special
  308.    circumstances may require this rule be set aside, for example, when
  309.    the serial number needs to be set lower for some reason.  If this
  310.    must be done, then take special care to verify that ALL servers have
  311.    correctly succeeded in following the primary server's serial number
  312.    changes, at each step.
  313.  
  314.    Note that each, and every, increment to the serial number must be
  315.    treated as the start of a new sequence of increments for this
  316.    purpose, as well as being the continuation of all previous sequences
  317.    started within the period specified by SOA.expire.
  318.  
  319.    Caution should also be exercised before causing the serial number to
  320.    be set to the value zero.  While this value is not in any way special
  321.    in serial number arithmetic, or to the DNS SOA serial number, many
  322.    DNS implementations have incorrectly treated zero as a special case,
  323.    with special properties, and unusual behaviour may be expected if
  324.    zero is used as a DNS SOA serial number.
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336.  
  337. Elz & Bush                  Standards Track                     [Page 6]
  338.  
  339.  
  340. RFC 1982                Serial Number Arithmetic             August 1996
  341.  
  342.  
  343. 8. Document Updates
  344.  
  345.    RFC1034 and RFC1035 are to be treated as if the references to
  346.    "sequence space arithmetic" therein are replaced by references to
  347.    serial number arithmetic, as defined in this document.
  348.  
  349. 9. Security Considerations
  350.  
  351.    This document does not consider security.
  352.  
  353.    It is not believed that anything in this document adds to any
  354.    security issues that may exist with the DNS, nor does it do anything
  355.    to lessen them.
  356.  
  357. References
  358.  
  359.    [RFC1034]   Domain Names - Concepts and Facilities,
  360.                P. Mockapetris, STD 13, ISI, November 1987.
  361.  
  362.    [RFC1035]   Domain Names - Implementation and Specification
  363.                P. Mockapetris, STD 13, ISI, November 1987
  364.  
  365.    [RFC793]    Transmission Control protocol
  366.                Information Sciences Institute, STD 7, USC, September 1981
  367.  
  368.    [IEN-74]    Sequence Number Arithmetic
  369.                William W. Plummer, BB&N Inc, September 1978
  370.  
  371. Acknowledgements
  372.  
  373.    Thanks to Rob Austein for suggesting clarification of the undefined
  374.    comparison operators, and to Michael Patton for attempting to locate
  375.    another reference for this procedure.  Thanks also to members of the
  376.    IETF DNSIND working group of 1995-6, in particular, Paul Mockapetris.
  377.  
  378. Authors' Addresses
  379.  
  380.    Robert Elz                     Randy Bush
  381.    Computer Science               RGnet, Inc.
  382.    University of Melbourne        10361 NE Sasquatch Lane
  383.    Parkville, Vic,  3052          Bainbridge Island, Washington,  98110
  384.    Australia.                     United States.
  385.  
  386.    EMail: kre@munnari.OZ.AU       EMail: randy@psg.com
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394. Elz & Bush                  Standards Track                     [Page 7]
  395.  
  396.  
  397.  
  398.