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 0
h
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.
3.2. State Variables and Parameters
Following is a summary of the various state variables and parameters used by the protocol. They
are separated into classes of system variables, which relate to the operating system environment and
local-clock mechanism; peer variables, which represent the state of the protocol machine specific
to each peer; packet variables, which represent the contents of the NTP message; and parameters,
which represent fixed configuration constants for all implementations of the current version. For
each class the description of the variable is followed by its name and the procedure or value which
controls it. Note that variables are in lower case, while parameters are in upper case. Additional
details on formats and use are presented in later sections and Appendices.
3.2.1. Common Variables
The following variables are common to two or more of the system, peer and packet classes.
Additional variables are specific to the optional authentication mechanism as described in Appendix
RFC-1305 Network Time Protocol (Version 3) March 1992
Mills Page 9