# Network Time Protocol

**Network Time Protocol** (**NTP**) er en protokoll for å synkronisere klokker mellom datamaskiner i et pakkesvitsjet nettverk. Dette gjøres ved at en klient sender en forespørsel til en server som har som oppgave å synkronisere tiden for andre datamaskiner.

NTP bruker UDP-port 123 som sitt transportlag, og er laget spesielt for å kunne motstå effekten av variabel reaksjonstid (*variable latency*).

NTP er en av de eldste Internett-protokollene som fortsatt er i bruk (tidligere enn 1985). Protokollen ble opprinnelig laget av Dave Mills ved University of Delaware i USA. Det samme universitetet vedlikeholder protokollen den dag i dag sammen med et lag frivillige.

NTP er ikke relatert til de mye enklere DAYTIME- og TIME-protokollene.

## Oversikt

NTP bruker Marzullos algoritme for UTC-tidsskalaen som støtter blant annet skuddsekunder. Gjeldende versjon av protokollen, NTPv4, kan vanligvis angi tiden med en nøyaktighetsgrad på inntil 10 millisekunder (1/100 s) over Internett. Under optimale forhold på LAN kan det oppnås nøyaktigheter på 200 mikrosekunder (1/5000 s).

Datamaskiner med en aktiv NTP-klient har en bakgrunnsprosess (daemon) kjørende på brukernivå. Mesteparten av protokollen er implementert i denne prosessen. For best nøyaktighet er det viktig å ha en lokal NTP-klokkegenerator som er faselåst i reguleringssløyfe med den eksterne NTP-daemonen. Dette kan sammenlignes med stemmingen av en gitar. NTP-klokkegeneratoren er i flere operativsystemer implementert i kjernen; de seneste versjonene av Linux, BSD og Solaris har denne støtten.

NTPs driftsmessige detaljer er belyst i standardene RFC 778, RFC 891, RFC 956, RFC 958 og RFC 1305. Dagens referanseimplementasjon er i versjon 4 (NTPv4). Imidlertid har bare versjonene opp til versjon 3 (utgitt 1992) vært dokumentert i RFC-ene.

En mindre komplisert form for NTP som ikke behøver å lagre tidligere kommunikasjon, er Simple Network Time Protocol (SNTP). Den brukes i noen innebygde systemer (mobiltelefoner, MP3-spillere o.l.) samt i applikasjoner der det ikke kreves stor nøyaktighet (jf. RFC 1361, RFC 1769, RFC 2030, og RFC 4330).

Alle versjoner av Microsoft Windows siden Windows 2000 inkluderer en tjeneste kalt «Windows Time Service». Tjenesten gjør det mulig å synkronisere datamaskinens klokke med en NTP-server. Dog støtter versjonen i Windows 2000 bare SNTP og gjør brudd på flere aspekter ved NTPv3. Fra Windows Server 2003 har Microsofts dokumentasjon hevdet at de implementerer den fulle NTPv3-protokollen som spesifisert i RFC 1305.

## Stratum (klokkenivåer)

Gule piler indikerer en direkte tilkobling. Røde piler indikerer en nettverkskobling.
NTP bruker et hierarkisk system av klokkenivåer eller klokkestratum, eller bare *stratum*. Nivået av stratum bestemmer avstanden fra referanseklokken. Det viktigste formålet er å unngå at synkronisering går i ring.

Hver NTP-server befinner seg i et gitt stratum.

Stratum 0
De mest nøyaktige klokkene i et NTP-hierarki finnes i stratum 0. Dette er gjerne atomur (caesiums-, rubidiums-baserte), GPS-klokker eller andre radioklokker. Stratum 0-enhetene er ikke tilkoblet nettverket. I stedet er de koblet til via datamaskiner (f.eks. via en RS-232 kobling som sender ut en enkelt signal hvert sekund). Dette er tiltak som reduserer muligheten for ytre påvirkning av klokkene.
Stratum 1
I stratum 1 finner vi datamaskiner som mottar signaler fra stratum 0-enheter. Vanligvis er dette dedikerte NTP-servere som brukes av stratum 2-servere via NTP, og de er som regel de mest nøyaktige NTP-serverne som andre kan koble seg til via NTP-protokollen.
Imidlertid er en god del stratum 1-servere som bruker NTPv3 (eller eldre versjoner) ikke så nøyaktige som de burde være. Vi kan si at de ikke har forventet «stratum 1-presisjon». Etter hvert som NTP-protokollen utvikles vil det bli vanskeligere la slike unøyaktige stratum 1-tjenere kjøre. Protokollen vil i stedet «dytte» slike servere nedover til et lavere stratum-nivå automatisk, avhengig av unøyaktigheten.
Stratum 2
Her er datamaskiner som sender NTP-spørringer til stratum 1-servere. Normalt vil en stratum 2-maskin koble seg opp til et gitt antall stratum 1-servere. NTP har en algoritme som henter inn dataprøver (*sampling*) via forgrening (*peering*) til flere servere. Etterpå forkaster den data fra stratum 1-servere som ligger utenfor konfigurerte toleransegrenser, altså at de er åpenbart uriktige. Stratum 2-maskiner vil koble seg til andre stratum 2-maskiner i en gruppe for å samarbeide om en mer stabil og robust tid for alle enhetene i gruppen. Stratum 2-maskiner oppfører seg normalt som servere for NTP-forespørsler fra stratum 3.
Stratum 3
Maskinene i stratum 3 anvender nøyaktig de samme NTP-funksjonene for forgrening (*peering*) og innhenting av dataprøver (*sampling*) som maskinene i stratum 2. De kan også virke som tjenere for lavere strata, potensielt opp til 16 nivåer. NTP støtter opp til 256 strata, avhengig av versjon.
Det er fremsatt ønsker om at NTPv5, som er under utvikling, skal kunne støtte maksimalt 8 strata.[*trenger referanse*]

Merk at denne beskrivelsen av stratum kun gjelder NTP, og at øvrige telekomsystemer kan bruke begrepet *stratum* annerledes.

## Tidsstempler

NTPs tidsstempler (*NTP timestamps*) er 64-biter, hvor en 32-biter del inneholder sekunder og en annen 32-biter del inneholder brøkdeler av sekunder. Dette gir NTP en tidsskala på 232 sekunder (ca. 136 år) og en teoretisk oppløsning på 2−32 sekunder (0,233 nanosekunder).

NTPs tidsskala startet 1. januar 1900. Den første nullstillingen vil skje i 2036, i god tid før det velkjente «år 2038-problemet». Denne «feilen» er spesifikk for NTPs 32-biter tidsstempel i NTPv3, og problemet ble overført til NTPv4. NTPv4 har imidlertid en ren 64-biter modus som ikke har dette problemet.

NTPv5 vil ha en 128-biter modus,[*trenger referanse*] med 64-biter for henholdsvis sekunder og brøkdeler av sekunder. Ifølge Dave Mills er 64-biter oppløsning nok til å beskrive tiden det tar for et foton å passere et elektron med lysets hastighet. Brøkdelen kan representere 2−64 sekunder som er ca. 54 zeptosekunder (10−21). Sekund-delen på 64-biter er nok til å representere tid frem til universet slukker da 264 sekunder utgjør ca. 585 milliarder år.

## Referanser

## Eksterne lenker

* (en) Offisielt nettsted
* Bruk av NTP ved Fagskolen i Gjøvik.
* (engelsk) NTP Public Services Project Dette er hjemmet for "NTP Public Services" prosjektet som tilbyr offentlig støtte for "NTP Project" og IETF NTP Arbeidsgruppen. Det er også en Wiki med liste over NTP tjenere.
* (engelsk) IETF NTP working group
* (engelsk) David Mills' NTP project page
* (engelsk) NTP version 4 Release Notes
* (engelsk) Time og NTP artikkel
* (engelsk) NTP Survey 2005 Arkivert 4. mai 2019 hos Wayback Machine.
* (engelsk) NTP Server Online Test Tool
* (engelsk) Network Time Protocol - Det nasjonale forskningsrådet i Canada.

Autoritetsdata