/ / Hur lyckas NTP-servrar hålla sig så exakt?

Hur lyckas NTP-servrar hålla sig så exakta?

how-do-NTP-servrar-hantera-to-stay-så-noggrann-00

Många av oss har haft enstaka problem medvåra datorer och andra enheter 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 tappa noggrannhet, hur lyckas NTP-servrar hålla sig så exakta?

Dagens fråga & svar-session kommer till oss med tillstånd av SuperUser - en underavdelning av Stack Exchange, en samhällsstyrd gruppering av frågor och svar på 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 det på mina servrar och andramaskiner, klockorna driver alltid så att de måste synkronisera för att förbli korrekta. Hur hindrar NTP-serverklockor från att driva och förblir alltid så exakta?

Hur lyckas NTP-servrarna vara så exakta?

Svaret

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

NTP-servrar förlitar sig på mycket exakta klockor förexakt tidtagning. En vanlig tidskälla för centrala NTP-servrar är atomklockor eller GPS-mottagare (kom ihåg att GPS-satelliter har atomklockor ombord). Dessa klockor definieras som korrekta eftersom de ger en mycket exakt tidsreferens.

Det finns inget magiskt med GPS eller atomklockor som får dem att berätta exakt vad klockan är. På grund av hur atomklockor fungerar är de helt enkelt väldigt bra på, efter att ha fått höra vad klockan är, förvaring exakt tid (eftersom den andra definieras itermer av atomeffekter). Det är faktiskt värt att notera att GPS-tiden skiljer sig från UTC som vi är mer vana vid att se. Dessa atomklockor synkroniseras i sin tur mot International Atomic Time eller TAI för att inte bara exakt berätta tidens gång, utan också de tid.

När du har en exakt tid på ett systemansluten till ett nätverk som Internet, handlar det om protokollkonstruktion som möjliggör överföring av exakta tider mellan värdar över ett opålitligt nätverk. I detta avseende skiljer sig inte ett stratum 2 (eller längre från den faktiska tidskällan) NTP-servern från ditt skrivbordssystem som synkroniseras mot en uppsättning NTP-servrar.

När du har några få exakta tider (somerhålls från NTP-servrar eller någon annanstans) och vet hur din lokala klockas framsteg (som är lätt att bestämma) kan du beräkna din lokala klockas drivfrekvens i förhållande till den "tros korrekta" tiden. När det har låst in kan detta värde sedan användas för att kontinuerligt justera den lokala klockan så att den rapporterar värden mycket nära den exakta tiden, även om den lokala realtidsklockan i sig är mycket felaktig. Så länge din lokala klocka inte är mycket oregelbunden, detta bör göra det möjligt att hålla exakt tid under en tid även om din uppströms tidskälla blir otillgänglig av någon anledning.

Vissa implementeringar av NTP-klienter (förmodligen de flestantpd daemon eller implementering av systemtjänster) gör detta, och andra (som ntpds följeslagare ntpdate som helt enkelt ställer klockan en gång) gör det inte. Detta kallas ofta en driftfil eftersom det ständigt lagrar ett mått på klockdrift, men strikt sett behöver det inte lagras som en specifik fil på disken.

I NTP är stratum 0 per definition en korrekttidskä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 exakt än Stratum 0-tidskällan). Stratum 2 är igen något mindre exakt än stratum 1 eftersom det 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 fall.


Har något att lägga till förklaringen? Ljud av i kommentarerna. Vill du läsa fler svar från andra tekniska kunniga Stack Exchange-användare? Kolla in hela diskussionstråden här.