This document constitutes a formal specification of the
Network Time Protocol (NTP) Version 3, which is used to synchronize timekeeping among a set of distributed time servers and clients.
It defines the architectures, algorithms, entities and protocols used by NTP and is intended primarily for implementors. A companion
document [MIL91a] summarizes the requirements, analytical models, algorithmic analysis and performance under typical Internet
conditions. Another document [MIL91b] describes the NTP time scale and its relationship to other standard timescales now in use. NTP
was first described in RFC-958 [MIL85c], but has since evolved in significant ways, culminating in the most recent NTP Version 2
described in RFC-1119 [MIL89]. It is built on the Internet Protocol (IP) [DAR81a] and User Datagram Protocol (UDP) [POS80], which
provide a connectionless transport mechanism; however, it is readily adaptable to other protocol suites. NTP is evolved from the Time
Protocol [POS83b] and the ICMP Timestamp message [DAR81b], but is specifically designed to maintain accuracy and robustness, even when
used over typical Internet paths involving multiple gateways, highly dispersive delays and unreliable nets.
The service environment consists of the implementation model and service model described in Section
2. The implementation model is based on a multiple-process operating system architecture, although other architectures could be
used as well. The service model is based on a returnable-time design which depends only on measured clock offsets, but does not
require reliable message delivery. The synchronization subnet uses a self-organizing, hierarchical-master-slave configuration, with
synchronization paths determined by a minimum-weight spanning tree. While multiple masters (primary servers) may exist, there is no
requirement for an election protocol.
NTP itself is described in Section 3. It provides the protocol mechanisms to synchronize time
in principle to precisions in the order of nanoseconds while preserving a non-ambiguous date well into the next century. The protocol
includes provisions to specify the characteristics and estimate the error of the local clock and the time server to which it may be
synchronized. It also includes provisions for operation with a number of mutually suspicious, hierarchically distributed primary
reference sources such as radio-synchronized clocks.
Section 4 describes algorithms useful for deglitching and smoothing clock-offset samples
collected on a continuous basis. These algorithms evolved from those suggested in [MIL85a], were refined as the results of experiments
described in [MIL85b] and further evolved under typical operating conditions over the last three years. In addition, as the result of
experience in operating multiple-server subnets including radio clocks at several sites in the U.S. and with clients in the U.S. and
Europe, reliable algorithms for selecting good clocks from a population possibly including broken ones have been developed [DEC89],
[MIL91a] and are described in Section 4.
The accuracies achievable by NTP depend strongly on the precision of the local-clock hardware and stringent control of device and
process latencies. Provisions must be included to adjust the software logical-clock time and frequency in response to corrections
produced by NTP. Section 5 describes a local-clock design evolved from the Fuzzball implementation
described in [MIL83b] and [MIL88b]. This design includes offset-slewing, frequency compensation and deglitching mechanisms capable of
accuracies in the order of a millisecond, even after extended periods when synchronization to primary reference sources has been
Details specific to NTP packet formats used with the Internet Protocol (IP) and User Datagram Protocol (UDP) are presented in Appendix A, while details of a suggested auxiliary NTP Control Message, which may be used when comprehensive
network-monitoring facilities are not available, are presented in Appendix B. Appendix C contains specification and implementation details of an optional authentication mechanism which can be
used to control access and prevent unauthorized data modification, while Appendix D contains a listing of
differences between Version 3 of NTP and previous versions. Appendix E expands on issues involved with
precision timescales and calendar dating peculiar to computer networks and NTP. Appendix F describes an
optional algorithm to improve accuracy by combining the time offsets of a number of clocks. Appendix G
presents a detailed mathematical model and analysis of the NTP local-clock algorithms. Appendix H analyzes
the sources and propagation of errors and presents correctness principles relating to the time-transfer service. Appendix I illustrates C-language code segments for the clock-filter, clock-selection and related algorithms
described in Section 4.