---
obj: concept
wiki: https://en.wikipedia.org/wiki/Network_Time_Protocol
rfc: https://datatracker.ietf.org/doc/html/rfc5905
---

# Network Time Protocol
The Network Time Protocol (NTP) is a networking protocol for clock synchronization between computer systems over packet-switched, variable-latency data networks. In operation since before 1985, NTP is one of the oldest Internet protocols in current use. NTP was designed by David L. Mills of the University of Delaware. One good implementation is OpenNTPD by [OpenBSD](../bsd/OpenBSD.md).

NTP is intended to synchronize all participating computers to within a few milliseconds of Coordinated Universal Time (UTC). It uses the intersection algorithm, a modified version of Marzullo's algorithm, to select accurate time servers and is designed to mitigate the effects of variable network latency. NTP can usually maintain time to within tens of milliseconds over the public Internet, and can achieve better than one millisecond accuracy in local area networks under ideal conditions. Asymmetric routes and network congestion can cause errors of 100 ms or more.

## Clock strata
NTP uses a hierarchical, semi-layered system of time sources. Each level of this hierarchy is termed a stratum and is assigned a number starting with zero for the reference clock at the top. A server synchronized to a stratum n server runs at stratum n + 1. The number represents the distance from the reference clock and is used to prevent cyclical dependencies in the hierarchy. Stratum is not always an indication of quality or reliability; it is common to find stratum 3 time sources that are higher quality than other stratum 2 time sources. A brief description of strata 0, 1, 2 and 3 is provided below.

- Stratum 0
	These are high-precision timekeeping devices such as atomic clocks, GNSS (including GPS) or other radio clocks, or a PTP-synchonized clock. They generate a very accurate pulse per second signal that triggers an interrupt and timestamp on a connected computer. Stratum 0 devices are also known as reference clocks. NTP servers cannot advertise themselves as stratum 0. A stratum field set to 0 in NTP packet indicates an unspecified stratum.
- Stratum 1
	These are computers whose system time is synchronized to within a few microseconds of their attached stratum 0 devices. Stratum 1 servers may peer with other stratum 1 servers for sanity check and backup. They are also referred to as primary time servers.
- Stratum 2
	These are computers that are synchronized over a network to stratum 1 servers. Often a stratum 2 computer queries several stratum 1 servers. Stratum 2 computers may also peer with other stratum 2 computers to provide more stable and robust time for all devices in the peer group.
- Stratum 3
	These are computers that are synchronized to stratum 2 servers. They employ the same algorithms for peering and data sampling as stratum 2, and can themselves act as servers for stratum 4 computers, and so on.

The upper limit for stratum is 15; stratum 16 is used to indicate that a device is unsynchronized. The NTP algorithms on each computer interact to construct a Bellman–Ford shortest-path spanning tree, to minimize the accumulated round-trip delay to the stratum 1 servers for all the clients.

In addition to stratum, the protocol is able to identify the synchronization source for each server in terms of a reference identifier (refid).

| Refid | Clock Source                                                             |
| ----- | ------------------------------------------------------------------------ |
| GOES  | Geosynchronous Orbit Environment Satellite                               |
| GPS   | Global Positioning System                                                |
| GAL   | Galileo Positioning System                                               |
| PPS   | Generic pulse-per-second                                                 |
| IRIG  | Inter-Range Instrumentation Group                                        |
| WWVB  | LF Radio WWVB Fort Collins, Colorado 60 kHz                              |
| DCF   | LF Radio DCF77 Mainflingen, DE 77.5 kHz                                  |
| HBG   | LF Radio HBG Prangins, HB 75 kHz (ceased operation)                      |
| MSF   | LF Radio MSF Anthorn, UK 60 kHz                                          |
| JJY   | LF Radio JJY Fukushima, JP 40 kHz, Saga, JP 60 kHz                       |
| LORC  | MF Radio Loran-C station, 100 kHz                                        |
| TDF   | MF Radio Allouis, FR 162 kHz                                             |
| CHU   | HF Radio CHU Ottawa, Ontario                                             |
| WWV   | HF Radio WWV Fort Collins, Colorado                                      |
| WWVH  | HF Radio WWVH Kauai, Hawaii                                              |
| NIST  | NIST telephone modem                                                     |
| ACTS  | NIST telephone modem                                                     |
| USNO  | USNO telephone modem                                                     |
| PTB   | German PTB time standard telephone modem                                 |
| MRS   | (Informal) Multi Reference Sources                                       |
| GOOG  | (Unofficial) Google Refid used by google NTP servers as time4.google.com |

## Timestamps
The 64-bit binary fixed-point timestamps used by NTP consist of a 32-bit part for seconds and a 32-bit part for fractional second, giving a time scale that rolls over every 232 seconds (136 years) and a theoretical resolution of 2−32 seconds (233 picoseconds). NTP uses an epoch of January 1, 1900. Therefore, the first rollover occurs on February 7, 2036.

NTPv4 introduces a 128-bit date format: 64 bits for the second and 64 bits for the fractional-second. The most-significant 32-bits of this format is the Era Number which resolves rollover ambiguity in most cases. According to Mills, "The 64-bit value for the fraction is enough to resolve the amount of time it takes a photon to pass an electron at the speed of light. The 64-bit second value is enough to provide unambiguous time representation until the universe goes dim."

## Clock synchronization algorithm
A typical NTP client regularly polls one or more NTP servers. The client must compute its time offset and round-trip delay. Time offset _θ_ is positive or negative (client time > server time) difference in absolute time between the two clocks. It is defined by:
${\displaystyle \theta ={\frac {(t_{1}-t_{0})+(t_{2}-t_{3})}{2}},}$

and the round-trip delay _δ_ by:
${\displaystyle \delta ={(t_{3}-t_{0})-(t_{2}-t_{1})},}$

where
- $t_{0}$ is the client's timestamp of the request packet transmission,
- $t_{1}$ is the server's timestamp of the request packet reception,
- $t_{2}$ is the server's timestamp of the response packet transmission and
- $t_{3}$ is the client's timestamp of the response packet reception.

To derive the expression for the offset, note that for the request packet,
${\displaystyle t_{0}+\theta +\delta /2=t_{1}}$
and for the response packet,
${\displaystyle t_{3}+\theta -\delta /2=t_{2}}$

Solving for _θ_ yields the definition of the time offset.

The values for θ and δ are passed through filters and subjected to statistical analysis ("mitigation"). Outliers are discarded and an estimate of time offset is derived from the best three remaining candidates. The clock frequency is then adjusted to reduce the offset gradually ("discipline"), creating a feedback loop. 

Accurate synchronization is achieved when both the incoming and outgoing routes between the client and the server have symmetrical nominal delay. If the routes do not have a common nominal delay, a systematic bias exists of half the difference between the forward and backward travel times.

