NTP uses the Marzullo algorithm (invented by Keith Marzullo of UC-San Diego in his dissertation) with the UTC time scale, including support for features such as leap seconds. NTPv4 can usually maintain time to within 10 milliseconds over the public Internet, and can achieve accuracies of 200 microseconds or better in local area networks under ideal conditions.
It makes use of variations in latency in transmitting data packets across a network to synchronize computer clocks.
NTP is one of the oldest TCP/IP protocols still in use. NTP was originally designed by Dave Mills of the University of Delaware, who still maintains it. The current version is NTP version 4.
The NTP daemon is a user-level process that runs continuously on a machine that supports NTP, and most of the protocol is implemented in this user process. To get the best performance from NTP, it is important to have the standard NTP clock phase-locked loop implemented in the operating system kernel, rather than using only the intervention of the external NTP daemon: all recent versions of the Linux operating system have this support.
NTP uses a hierarchical system of "clock strata", where stratum 1 systems are synchronised to an accurate external clock such as a GPS clock or other radio clock. NTP stratum 2 systems derive their time from one or more stratum 1 systems, and so on. (Note that this is different from the notion of clock stratum used in telecommunications systems).
The 64-bit timestamps used by NTP consist of a 32-bit seconds part and a 32-bit fractional second part, giving NTP a time scale of 232 seconds, with a theoretical resolution of 2-32 seconds. Although the NTP timescale wraps round every 232 seconds, implementations should disambiguate NTP time using a knowledge of the approximate time from other sources. Since this only requires time accurate to a few decades, this is not a problem in general use.
The operational details of NTP are illustrated in RFCs 778, 891, 956, 958, 1305, and 2030.
See also: