# NTP (tietotekniikka)

| TCP/IP-pino |
| --- |
| sovelluskerros sovelluskerros | BGP · DHCP · DNS · ESMTP · FTP · HTTP · IMAP · IRC · LDAP · MGCP · NNTP · NTP · POP3 · RPC · RTP · RTSP · SIP · SMTP · SNMP · SOCKS · SSH · Telnet · TLS/SSL · XMPP  ·  (*..lisää..*) |
| kuljetuskerros kuljetuskerros | TCP · UDP · QUIC · DCCP · SCTP · RSVP · RIP · ECN |
| verkkokerros verkkokerros | IP (IPv4 ja IPv6) · ICMP (ICMPv6) · IGMP · IPsec |
| siirtoyhteyskerros | ARP · IS-IS · NDP · OSPF · L2TP · PPP |
| fyysinen kerros |

**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.

Network Time Security (NTS) on menetelmä aikapalvelun suojaamiseen (RFC 8915), joka käyttää TLS-tukea. Monet palvelut vaativat luotettavia aikatietoja tietoturvan vuoksi.

### 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 tietokoneen emolevyn reaaliaikakellosta. 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