Network Time Protocol

NTP er en forkortelse for Network Time Protocol.

Med NTP-protokollen kan en computer synkronisere sit indbyggede ur med serverens ur, således at tidspunkterne er ens.

Overordnet virkemåde 
Verdens NTP-servere indgår i et globalt netværk, der er organiseret som et hierarki. I toppen af hierarkiet er der stratum-0-ure. Disse er atomure, der går meget præcist. På næste niveau er der stratum-1-servere. En stratum-1-server får tidsinformation fra en stratum-0-kilde. På dette niveau varetages to funktioner: Serverne kommunikerer løbende indbyrdes for at komme frem til den korrekte UTC-tid. En stratum-1-server har desuden stratum-2-servere som klienter. Selv atomure går ikke helt ens, så afvigelser mellem stratum-1-servere skal korrigeres. Stratum-2-servere stiller tidskilder til rådighed for computere, der har brug for en præcis tidsindstilling.

NTP er en internetprotokol baseret på UDP. En forespørgsel til en NTP-server består af en UDP-pakke og svaret leveres i en UDP-pakke med samme format som forespørgslen. Ud fra udvekslingen af meddelelser med en eller flere servere beregner hver tidsserver, hvor stor usikkerhed der er på serverens egen tid, og om uret går for hurtigt eller langsomt. Ud fra disse beregninger justeres tiden i små skridt, så tiden hele tiden går fremad, og der ikke sker store spring. For at undgå, at det tager mange timer før en tidsserver begynder at give korrekt tid efter et driftstop, vil man normalt tillade store spring i tiden i denne startfase.

Hvis man ikke har brug for tid, der er nøjagtig på milisekunder, kan man i stedet bruge SNTP, der er en forenklet udgave af NTP.

Skudsekunder og NTP 
Skudsekunder håndteres specielt i NTP-protokollen. Et skudsekund skal registreres i referencetidskilderne samme dag som det indtræffer og senest et minut før det indtræffer. Mens skudssekundet varer, står tiden som udgangspunkt stille i følge NTP. Dog sikres det, at alle klienter, der spørger efter tid i skudsekundet får unikke tidspunkter, så rækkefølgen af forespørgslerne er entydig. Hvis der er spurgt efter tid i skudsekundet, vil serveren derfor være en anelse foran, når skudsekundet er overstået, men det korrigeres på samme måde, som andre uregelmæssigheder. Det kan ske, at der annonceres et "negativt" skudsekund, hvor et minut afkortes til 59 sekunder. Dette kræver ingen korrektion.

Historie 
Network Time Protocol blev udviklet af Professor David L. Mills fra The University of Delaware. Han er stadig med i arbejdet med at udvikle og dokumentere protokollen. Forløberen for NTP som blev kaldt Internet Clock Service var ikke særlig præcis sammenlignet med nutidens NTP, da der ikke blev kompenseret for frekvensfejl i computernes ure. De første RFC-dokumenter blev offentliggjort i 1988. Den første RFC omtalte kun selve netværksprotokollen og de tilhørende formater for de sendte meddelelser. Klient/server protokol og server til server-protokol var defineret. Et år senere blev der defineret en tilhørende autorisationsprotokol (). I 1992 kom standarden, som nu var i version 3, også til at omfatte de algoritmer, der skal bruges for at få den mest præcise tidsbestemmelse. I denne meget omfattende specifikation lånte man ideer fra systemet Digital Time Synchronization Service som var blevet udviklet af Digital Equipment Corporation, (DEC). I 1994 kom SNTP på banen. Den seneste version af protokollen er version 4. Denne version [er endnu ikke beskrevet i en RFC.] er beskrevet i  (juni 2010).

Sideløbende med alt dette er der udviklet standarder og teknikker til at holde styr på tiden i selve styresystemet, så nøjagtigheden kan opretholdes med færre kontakter til eksterne servere, Kommunikationen fra en ekstern tidskilde og computersystemet blev standardiseret i 1999.

Referenceimplementationen 
I det følgende beskrives den officielle referenceimplementation af NTP. Referenceimplementationen omfatter serverprogrammet ntpd og forskellige programmer til overvågning og vedligehold af serveren. Følgende programmer følger med:

 ntp-keygen – til oprettelse af krypteringsnøgler.
 ntp-wait – venter på, at serveren er klar.
 ntpd – serverprogrammet.
 ntpdate – sætter computerens tid ud fra en ntpserver.
 ntpdc – til administration af den kørende server.
 ntpq – administrationsprogram, der er enklere end ntpdc.
 ntptime – viser tiden og detaljeret status for serveren.
 ntptrace – viser hvilke servere denne server aktuelt får tid fra.

Programmet ntpd starter på to forskellige måder alt efter om der findes en fil med oplysninger om den lokale tidskilde eller ej. Hvis der ikke er opsamlet data, vil ntp-wait blokere og ntpd begynder at estimere fejlen på det lokale ur. Der beregnes to parametre. Først beregnes frekvensfejlen. Frekvensfejlen fortæller, hvor meget serverens ur tikker for hurtigt eller langsomt. Derefter beregnes, hvor meget serverens tid afviger fra den korrekte UTC-tid. Når disse to ting er på plads, kan ntpd begynde at besvare forespørgsler fra klientprogrammer og ntp-wait blokerer ikke længere. Når der er registreret data om frekvensfejlen, vil ntpd hurtigt korrigere tiden på den lokale maskine og begynde at besvare forespørgsler.

Med mellemrum bliver frekvensfejlen beregnet på ny og den nye status gemmes. For at virke optimalt skal ntpd kunne hente tid fra mindst tre andre serve eller en ekstern tidskilde som for eksempel et atomur. Som regel vil man konfigurere mindst fire eksterne servere, så systemet virker selv hvis en server holder op med at virke. Tiden fra andre servere korrigeres for den tid, det tager at sende forespørgsel og svar over nettet. Som udgangspunkt vil ntpd spørge om den korrekte tid hvert 64. sekund. Når det lokale ur er kommet tæt på den rigtige tid forlænges intervallet. Intervallet fordobles for hver gang. Hvis den lokale tid kommer til at afvige med mere end 128 mikrosekunder i forhold til den formodede rigtige tid, halveres intervallet igen. Hvis der ikke er konfigureret andet, varierer intervallerne fra 64 til 1024 sekunder.

Selve korrigeringen af den lokale tidskilde klares af styresystemet. Derfor virker ntpd kun med styresystemer, der stiller systemkald til finstilling af tiden til rådighed. De fleste Unix-lignende systemer har denne mulighed.

Servere med samme stratum kan sættes til at udveksle tid med hinanden. Dette er vigtigst for stratum-1 servere, men det kan bruges på alle niveauer. Servere, der udveksler tid med hinanden er mindre følsomme over for fejl i servere med lavere strata. For at undgå, at tiden manipuleres af uautoriserede
brugere, krypteres denne kommunikation med symmetriske nøgler.

Adgang til NTP-servere 
Mange internetudbydere stiller en tidssserver til rådighed. Hvis man gerne vil bruge flere end de tidsservere, som internetudbyderen stiller til rådighed, kan man bruge tidsservere hos pool.ntp.org, der er et netværk af frivillige, som stiller tidsservere til rådighed. Som bruger vælger man hvilken region, man vil have tidsservere fra, og så bruges nogle tilfældige fra puljen. Serverne vælges via DNS, så hvis man skulle være uheldig med de servere, man har fået tildelt. kan man bare prøve på ny.

Henvisninger 
 Referenceimplementation af NTP
 Referenceimplementation af NTP – Windows
  – specifikation
 Engelsksproget liste  med stratum 2-servere.
 pool.ntp.org – pulje af NTP-servere.

Internetteknologi
Tidsbestemmelse