Serial Number Arithmetic
RFC 1982

Document Type RFC - Proposed Standard (August 1996; No errata)
Last updated 2013-03-02
Stream IETF
Formats plain text pdf html bibtex
Stream WG state (None)
Document shepherd No shepherd assigned
IESG IESG state RFC 1982 (Proposed Standard)
Consensus Boilerplate Unknown
Telechat date
Responsible AD (None)
Send notices to (None)
Network Working Group                                             R. Elz
Request for Comments: 1982                       University of Melbourne
Updates: 1034, 1035                                              R. Bush
Category: Standards Track                                    RGnet, Inc.
                                                             August 1996

                        Serial Number Arithmetic

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

Abstract

   This memo defines serial number arithmetic, as used in the Domain
   Name System.  The DNS has long relied upon serial number arithmetic,
   a concept which has never really been defined, certainly not in an
   IETF document, though which has been widely understood.  This memo
   supplies the missing definition.  It is intended to update RFC1034
   and RFC1035.

1. Introduction

   The serial number field of the SOA resource record is defined in
   RFC1035 as

   SERIAL   The unsigned 32 bit version number of the original copy of
            the zone.  Zone transfers preserve this value.  This value
            wraps and should be compared using sequence space
            arithmetic.

   RFC1034 uses the same terminology when defining secondary server zone
   consistency procedures.

   Unfortunately the term "sequence space arithmetic" is not defined in
   either RFC1034 or RFC1035, nor do any of their references provide
   further information.

   This phrase seems to have been intending to specify arithmetic as
   used in TCP sequence numbers [RFC793], and defined in [IEN-74].

   Unfortunately, the arithmetic defined in [IEN-74] is not adequate for
   the purposes of the DNS, as no general comparison operator is

Elz & Bush                  Standards Track                     [Page 1]
RFC 1982                Serial Number Arithmetic             August 1996

   defined.

   To avoid further problems with this simple field, this document
   defines the field and the operations available upon it.  This
   definition is intended merely to clarify the intent of RFC1034 and
   RFC1035, and is believed to generally agree with current
   implementations.  However, older, superseded, implementations are
   known to have treated the serial number as a simple unsigned integer,
   with no attempt to implement any kind of "sequence space arithmetic",
   however that may have been interpreted, and further, ignoring the
   requirement that the value wraps.  Nothing can be done with these
   implementations, beyond extermination.

2. Serial Number Arithmetic

   Serial numbers are formed from non-negative integers from a finite
   subset of the range of all integer values.  The lowest integer in
   every subset used for this purpose is zero, the maximum is always one
   less than a power of two.

   When considered as serial numbers however no value has any particular
   significance, there is no minimum or maximum serial number, every
   value has a successor and predecessor.

   To define a serial number to be used in this way, the size of the
   serial number space must be given.  This value, called "SERIAL_BITS",
   gives the power of two which results in one larger than the largest
   integer corresponding to a serial number value.  This also specifies
   the number of bits required to hold every possible value of a serial
   number of the defined type.  The operations permitted upon serial
   numbers are defined in the following section.

3. Operations upon the serial number

   Only two operations are defined upon serial numbers, addition of a
   positive integer of limited range, and comparison with another serial
   number.

3.1. Addition

   Serial numbers may be incremented by the addition of a positive
   integer n, where n is taken from the range of integers
   [0 .. (2^(SERIAL_BITS - 1) - 1)].  For a sequence number s, the
   result of such an addition, s', is defined as

                   s' = (s + n) modulo (2 ^ SERIAL_BITS)

Elz & Bush                  Standards Track                     [Page 2]
RFC 1982                Serial Number Arithmetic             August 1996

   where the addition and modulus operations here act upon values that
   are non-negative values of unbounded size in the usual ways of
   integer arithmetic.

   Addition of a value outside the range
   [0 .. (2^(SERIAL_BITS - 1) - 1)] is undefined.
Show full document text