21Aug

Hur hanterar NTP-servrar att hålla sig så exakt?

Många av oss har haft det enstaka problemet med våra datorer och andra enheter som behåller exakta tidsinställningar, men en snabb synkronisering med en NTP-server gör allt bra igen. Men om våra egna enheter kan förlora noggrannhet, hur lyckas NTP-servrarna hålla sig så exakta?

Dagens fråga &Svarssession kommer till oss med tillstånd av SuperUser-en indelning av Stack Exchange, en community-driven gruppering av Q & A-webbplatser.

Foto med tillstånd av LEOL30( Flickr).

Frågan

SuperUser-läsaren Frank Thornton vill veta hur NTP-servrar kan förbli så exakta:

Jag har märkt att på mina servrar och andra maskiner kör klockorna alltid så att de måste synkronisera för att förbli korrekta. Hur håller klockorna från NTP-klockan från att driva och är alltid så exakt?

Hur lyckas NTP-servrarna förbli så exakta?

Svaret

SuperUser-bidragsgivare Michael Kjorling har svaret för oss:

NTP-servrar är beroende av mycket exakta klockor för precisionstidning. En vanlig källa för centrala NTP-servrar är atomklockor, eller GPS-mottagare( kom ihåg att GPS-satelliter har atomur ombord).Dessa klockor definieras som exakta eftersom de ger en mycket exakt tidsreferens.

Det finns inget magiskt om GPS eller atomur som gör att de kan berätta exakt vilken tid det är. På grund av hur atomklockor fungerar, är de helt enkelt mycket bra på att ha en gång fått veta vilken tid det är, håller korrekt tid( eftersom den andra definieras när det gäller atom effekter).Det är faktiskt värt att notera att GPS-tiden skiljer sig från UTC som vi brukar se. Dessa atomklockor är i sin tur synkroniserade mot International Atomic Time eller TAI för att inte bara korrekt berätta tidens gång, utan också -tiden.

När du har en exakt tid på ett system som är anslutet till ett nätverk som Internet, handlar det om protokollteknik som möjliggör överföring av exakta tider mellan värdar över ett opålitligt nätverk. I detta avseende är en Stratum 2( eller längre från den aktuella tidskällan) NTP-servern annorlunda än din skrivbordssynkronisering mot en uppsättning NTP-servrar.

När du har några korrekta tider( som erhållits från NTP-servrar eller någon annanstans) och vet hur snabbt din lokala klocka går framåt( vilket är lätt att bestämma), kan du beräkna din lokala klockas drifthastighet i förhållande till "troddeexakt "tidsförlopp. När det är låst in kan det här värdet användas för att kontinuerligt justera den lokala klockan så att den rapporterar värden väldigt nära den korrekta tiden, även om den lokala realtidsklockan själv är mycket felaktig. Så länge din lokala klocka inte är högst oregelbunden , bör detta tillåta att du håller rätt tid för en viss tid även om din uppströms tidskälla blir otillgänglig av någon anledning.

Några NTP-klientimplementeringar( förmodligen de flesta ntpd-demoner eller systemtjänstimplementeringar) gör det här och andra( som ntpds följeslagare ntpdate som helt enkelt sätter klockan en gång) gör det inte. Detta kallas vanligtvis -drivfil eftersom det ständigt lagrar ett mått på klockdrift, men strikt sett behöver den inte lagras som en specifik fil på disken.

I NTP är Stratum 0 per definition en exakt tidskälla. Stratum 1 är ett system som använder en Stratum 0-tidskälla som sin tidskälla( och är således något mindre noggrann än Stratum 0-tidskällan).Stratum 2 är en gång mindre noggrann än Stratum 1 eftersom den synkroniserar sin tid mot Stratum 1-källan och så vidare. I praktiken är denna förlust av noggrannhet så liten att den är helt försumbar i alla utom de mest extrema fallen.

Har något att lägga till förklaringen? Ljud av i kommentarerna. Vill du läsa mer svar från andra tech-savvy Stack Exchange-användare? Kolla in hela diskussionsgängan här.