History of NTP

The first NTP implementation started around 1980 with an accuracy of only several hundred milliseconds. That very first implementation was documented in Internet Engineering Note IEN-173. Later the first specification appeared in RFC 778, but it was still named Internet Clock Service. At that time clock synchronization was needed for the HELLO routing protocol. NTP was introduced in RFC 958 for the first time, mainly describing the packets seen on the network as well as some basic calculations involved. Early versions of NTP did not compensate any frequency error.

The first complete specification of the protocol and accompanying algorithms for NTP version 1 appeared 1988 in RFC 1059. That version already had symmetric operation mode as well as client-server mode.

Version 2 introducing symmetric-key authentication (using DES-CBC) was described in RFC 1119 only about one year later. About the same time another time synchronization protocol named Digital Time Synchronization Service (DTSS) was presented by Digital Equipment Corporation. At that time the software named xntp was written by Dennis Fergusson at the University of Toronto. That software evolved to the software distribution that is publicly available now.

Combining the good ideas of DTSS with those of NTP produced a new specification for NTP version 3, namely RFC 1305, in 1992. That version introduced formal correctness principles and revised algorithms. Furthermore broadcast mode was added to the protocol.

While NTP per se only deals with adjusting the operating system’s clock, there was some parallel research on improving time keeping within the operating system’s kernel. RFC 1589 (A kernel model for precision timekeeping) described a new implementation and interface in 1994. That implementation could keep time with a precision of up to one microsecond.

Work for a Version 4 of NTP began around 1994. The first new specification was RFC 2030, Simple Network Time Protocol (SNTP) version 4 for IPv4, IPv6 and OSI. This issued in 1996.

An operating system interface for accurate 1-per-second pulses pulses for calibrating and stabilizing the system clock was designed and documented in RFC 2783 (Pulse-per-second API for Unix-like operating systems, version 1), finally published in 1999. This is now implemented in all modern Unixes.

A proposed specification for NTPv4 issued in 2010 as RFC 5905. Despite some underspecification and technical difficulties (especially near Autokey, its attempt at public-key encryption for authentication) NTPv4 implementations were in general use by 2014.

The extension mechanism for the protocol was partly specified in RFC 5905, but nor fully defined until RFC 7822 in 2016.