All mathematical operations expressed or implied herein are
in two's-complement, fixed-point arithmetic. Data are specified as integer or fixed-point quantities, with bits numbered in big-endian
fashion from zero starting at the left, or high-order, position. Since various implementations may scale externally derived quantities
for internal use, neither the precision nor decimal-point placement for fixed-point quantities is specified. Unless specified
otherwise, all quantities are unsigned and may occupy the full field width with an implied zero preceding bit zero. Hardware and
software packages designed to work with signed quantities will thus yield surprising results when the most significant (sign) bit is
set. It is suggested that externally derived, unsigned fixed-point quantities such as timestamps be shifted right one bit for internal
use, since the precision represented by the full field width is seldom justified.
Since NTP timestamps are cherished data and, in fact, represent the main product of the protocol, a special timestamp format has been
established. NTP timestamps are represented as a 64-bit unsigned fixed-point number, in seconds relative to 0h on 1 January 1900. The
integer part is in the first 32 bits and the fraction part in the last 32 bits. This format allows convenient multiple-precision
arithmetic and conversion to Time Protocol representation (seconds), but does complicate the conversion to ICMP Timestamp message
representation (milliseconds). The precision of this representation is about 200 picoseconds, which should be adequate for even the
most exotic requirements.
Timestamps are determined by copying the current value of the local clock to a timestamp when some significant event, such as the
arrival of a message, occurs. In order to maintain the highest accuracy, it is important that this be done as close to the hardware or
software driver associated with the event as possible. In particular, departure timestamps should be redetermined for each link-level
retransmission. In some cases a particular timestamp may not be available, such as when the host is rebooted or the protocol first
starts up. In these cases the 64-bit field is set to zero, indicating the value is invalid or undefined.
Note that since some time in 1968 the most significant bit (bit 0 of the integer part) has been set and that the 64-bit field will
overflow some time in 2036. Should NTP be in use in 2036, some external means will be necessary to qualify time relative to 1900 and
time relative to 2036 (and other multiples of 136 years). Timestamped data requiring such qualification will be so precious that
appropriate means should be readily available. There will exist an 200-picosecond interval, henceforth ignored, every 136 years when
the 64-bit field will be zero and thus considered invalid.
|
|