**NTP** (engl. *Network Time Protocol*) on UDP-pohjainen protokolla täsmällisen aikatiedon välittämiseen tietokoneiden välillä.

Protokolla on suunniteltu ottamaan huomioon verkon muuttuvat viiveet. Sama protokolla toimii sekä usean palvelimen kellojen keskinäiseen tahdistamiseen, että asiakas-palvelin käytössä.

Historia
--------

NTP:n edeltäjiin kuului toukokuussa 1983 standardoidu Time-protokolla, joka lähetti pyydettäessä yksinkertaisia aikaleimoja verkon yli 32-bittisen Unix-ajan muodossa.
Aika voitiin asettaa rdate-ohjelmalla.
Tästä seuraava askel oli 4.3BSD:ssa vuonna 1985 esitelty timed, joka pyöri taustalla ja piti aikaa pysyvästi synkronissa palvelimen kellon kanssa.

NTP:n suunnitteli Delawaren yliopiston professori David Mills, joka sai rahoitusta ARPANETiin liittyvään kehitystyöhön. 1990-luvun puolivälissä Mills luovutti ntpd-ohjelmiston uusien julkaisujen tekemisen Harlan Stennille.

NTP:n monimutkaisuuden vuoksi esiteltiin vuonna 1992 Simple Network Time Protocol (SNTP). SNTP käyttää NTP:n verkkoprotokollaa, mutta ei vaadi paikallisella laitteella massamuistia ja sille riittää yksi aikapalvelin.

### Muita toteutuksia

ntpd-ohjelmistolle on kehitetty vaihtoehtoja.
OpenBSD-projektilla on oma toteutuksensa OpenNTPD, joka toteuttaa NTPv3/SNTPv4 -protokollat. Se esiteltiin OpenBSD 3.6 -versiossa.
OpenNTPD:ta pidetään jossain suhteissa vajavaisena verrattuna referenssitoteutukseen. Sen päämäärä on koodin yksinkertaisuus ja turvallisuus ja ylläpidon helppous.

chrony on vaihtoehtoinen toteutus, jota sponsoroi Red Hat, joka käyttää sitä omassa Linux-jakelussaan.

systemd-timesyncd on SNTP-asiakas, joka kuuluu systemd-pakettiin. Se on oletuksena Debianissa ja siihen perustustuvissa jakeluissa julkaisusta "bookworm" lähtien.

Muita versioita ovat olleet NTPsec, joka on turvallisuudeltaan vahvennettu versio perustuen vuoden 2015 referenssitoteutukseen, ja Poul-Henning Kampin FreeBSD:lle vuonna 2014 kehittämä ntimed.

Microsoft Windows tukee NTP:tä Windows 2000:sta lähtien osana Windows Time service (W32Time) -palvelua

macOS 10.13 High Sierra lisäsi NTP-protokollan tuen timed-daemoniin.

NTP-hierarkia
-------------

NTP-palvelinten hierarkia
Usein NTP-palvelimet toimivat hierarkkisesti siten että yksi tai useampi 1. tason (stratum) palvelin saa aikansa suoraan ulkoisesta aikalähteestä tai esimerkiksi GPS:n välityksellä, atomikellolta tai BIOS:in kellosta. Stratum-taso ei siis kerro palvelimen kellon tarkkuudesta, vaan palvelimen sijainnista verkkohierarkiassa.

Stratum-tasot ovat hierarkkisia. 2-tason palvelimet hakevat aikansa vähintään yhdeltä 1. tason palvelimelta. Stratum 3 -tason kellot hakevat aikansa kakkosilta jne. Tasoja voi olla 16.

Perinteisesti loppukäyttäjät hakevat ajan stratum 2 -tason palvelimilta. Asiakas voi käyttää joko yhtä tai useampaa palvelinta. Kolme NTP-palvelinta on vähimmäismäärä, jotta asiakas voi päätellä mikä kelloista on väärässä.

Ajan välitys voidaan hoitaa lähiverkossa broadcast- tai multicast-lähetyksenä, jolloin useat asiakkaat saavat ajan yhdestä multicast- tai broadcast-paketista.

Ajan käsittely
--------------

Karkaussekuntien käsittelyssä NTP pysäyttää kellon eikä etene karkaussekunnin aikana, joka eroaa POSIXin käytännöistä. Google on ehdottanut *karkaustahran* käyttöä, joka jakaa karkaussekunnin pienemmissä erissä vuorokauden ajalle, jolloin jokainen sekunti on 11,6 mikrosekuntia pidempi.

Standardit
----------

NTP määritellään seuraavissa RFC-dokumenteissa:

* RFC 956 Algorithms for Synchronizing Network Clocks
* RFC 958 Network Time Protocol (NTP)
* RFC 1305 Network Time Protocol (Version 3)
* RFC 5905 Network Time Protocol Version 4 (NTPv4)
* RFC 7822 Network Time Protocol Version 4 (NTPv4) Extension Fields
* RFC 8573 Message Authentication Code for the Network Time Protocol

Palvelimet
----------

Suomen viralliseen aikaan synkronoidut viralliset ja julkiset NTP-palvelut ovat VTT MIKES:in ylläpitämiä. Kuka tahansa voi käyttää MIKESin julkista stratum 2 -tason NTP-palvelua. 

Microsoft Windowsin oletusaikapalvelimena on time.windows.com.

Lisäksi monilla yrityksillä, yliopistoilla, tutkimuslaitoksilla, organisaatioilla ja asevoimilla on omat aikapalvelimet omien laitteittensa käyttöön, kuten time.google.com, time.apple.com, time.cloudflare.com, time.facebook.com, time.nist.gov, ntp.ripe.net, clock.isc.org

Lähteet
-------

1. ↑  RFC 868
2. ↑  rdate(1)
3. ↑
4. 1 2  Nate Hopper: The Thorny Problem of Keeping the Internet’s Time *newyorker.com*.  30.9.2022. Viitattu 6.10.2022. (englanniksi)
5. ↑  David L. Mills: On the Chronometry and Metrology of Computer Network Timescales and their Application to the Network Time Protocol (PDF) *eecis.udel.edu*. Viitattu 19.1.2024. (englanniksi)
6. ↑  RFC 1361
7. ↑  ntpd(8) - OpenBSD manual pages *man.openbsd.org*.  "It implements the Simple Network Time Protocol version 4, as described in RFC 5905, and the Network Time Protocol version 3, as described in RFC 1305."
8. ↑  OpenNTPd Considered Harmful *bradknowles.typepad.com*.  22 September 2004.
9. ↑  The OpenBSD Project: FAQ 6.12.1: 'But OpenNTPD isn't as accurate as the ntp.org daemon!' *openbsd.org*.  21 August 2006.
10. ↑  Combining PTP with NTP to Get the Best of Both Worlds  20 July 2016. Red Hat.  "Starting with Red Hat Enterprise Linux 7.0 (and now in Red Hat Enterprise Linux 6.8) a more versatile NTP implementation is also provided via the chrony package"
11. ↑  Switching from OpenNTPd to Chrony - anarcat *anarc.at*.  "So in effect, systemd-timesyncd became the default NTP daemon in Debian in bookworm, which I find somewhat surprising."
12. ↑  Windows Time Service Technical Reference  17.8.2011. technet.microsoft.com.
13. ↑
14. ↑  The NTP Timescale and Leap Seconds *eecis.udel.edu*. Viitattu 6.10.2022. (englanniksi)
15. ↑  Leap Smear *developers.google.com*. Viitattu 6.10.2022. (englanniksi)
16. ↑  Suomen aika: NTP-palvelu *vttresearch.com*. VTT. Viitattu 22.7.2021.
17. ↑
18. ↑