W jaki sposób serwery NTP radzą sobie tak dokładnie?
Wielu z nas miało sporadyczne problemy z naszymi komputerami i innymi urządzeniami z zachowaniem dokładnych ustawień czasu, ale szybka synchronizacja z serwerem NTP sprawia, że wszystko wraca do zdrowia. Ale jeśli nasze własne urządzenia mogą stracić dokładność, w jaki sposób serwery NTP są tak dokładne?
Dzisiejsza sesja pytań i odpowiedzi przychodzi do nas dzięki uprzejmości SuperUser - poddziału Stack Exchange, opartego na społecznościach grupowania witryn z pytaniami i odpowiedziami.
Zdjęcie dzięki uprzejmości LEOL30 (Flickr).
Pytanie
Czytnik SuperUser Frank Thornton chce wiedzieć, w jaki sposób serwery NTP są tak dokładne:
Zauważyłem, że na moich serwerach i innych maszynach zegary zawsze dryfują, więc muszą się zsynchronizować, aby zachować dokładność. W jaki sposób zegary serwera NTP nie dryfują i zawsze pozostają tak dokładne?
W jaki sposób serwerom NTP udaje się zachować taką dokładność?
Odpowiedź
Współpracownik SuperUser Michael Kjorling ma dla nas odpowiedź:
Serwery NTP opierają się na bardzo dokładnych zegarach do dokładnego pomiaru czasu. Częstym źródłem czasu dla centralnych serwerów NTP są zegary atomowe lub odbiorniki GPS (pamiętaj, że satelity GPS mają wbudowane zegary atomowe). Te zegary są zdefiniowane jako dokładne, ponieważ zapewniają bardzo dokładne odniesienie do czasu.
W zegarach GPS i atomowych nie ma nic magicznego, co sprawi, że powiedzą dokładnie, która jest godzina. Ze względu na to, jak działają zegary atomowe, są po prostu bardzo dobre, ponieważ raz powiedziano im, która jest godzina, konserwacja dokładny czas (od drugiego definiowany jest w kategoriach efektów atomowych). Warto zauważyć, że czas GPS różni się od czasu UTC, do którego jesteśmy przyzwyczajeni. Te zegary atomowe są z kolei zsynchronizowane z Międzynarodowym czasem Atomowym lub TAI, aby nie tylko precyzyjnie powiedzieć upływ czasu, ale także czas.
Po dokładnym ustaleniu czasu w jednym systemie podłączonym do sieci, takiej jak Internet, jest to kwestia inżynierii protokołów umożliwiająca przesyłanie dokładnych czasów między hostami przez nierzetelną sieć. Pod tym względem serwer NTP Stratum 2 (lub dalej od rzeczywistego źródła czasu) nie różni się od synchronizowania systemu pulpitu z zestawem serwerów NTP.
Do czasu, gdy masz kilka dokładnych czasów (uzyskanych z serwerów NTP lub gdzie indziej) i znasz stopień zaawansowania lokalnego zegara (który jest łatwy do ustalenia), możesz obliczyć współczynnik dryfowania lokalnego zegarka w stosunku do "wiarygodnie dokładnej" " upływ czasu. Po zablokowaniu wartość ta może być następnie użyta do ciągłego dostosowywania zegara lokalnego, tak aby raportował wartości bardzo zbliżone do dokładnego upływu czasu, nawet jeśli lokalny zegar czasu rzeczywistego jest wysoce niedokładny. Tak długo jak twój lokalny zegar nie jest zbyt wysoki niekonsekwentny, powinno to pozwolić na zachowanie dokładnego czasu przez pewien czas, nawet jeśli twoje źródło czasu jest niedostępne z jakiegokolwiek powodu.
Niektóre implementacje klienta NTP (prawdopodobnie większość demonów ntpd lub implementacje usług systemowych) robią to, a inne (takie jak ntpd's comption ntpdate, które po prostu ustawiają zegar raz) nie. Jest to powszechnie określane jako plik drift ponieważ uporczywie przechowuje miarę dryfu zegara, ale ściśle mówiąc nie musi być przechowywany jako konkretny plik na dysku.
W NTP, Stratum 0 jest z definicji dokładnym źródłem czasu. Stratum 1 to system wykorzystujący źródło czasu Stratum 0 jako źródło czasu (i dlatego jest nieco mniej dokładny niż źródło czasu Stratum 0). Stratum 2 ponownie jest nieco mniej dokładny niż Stratum 1, ponieważ synchronizuje swój czas ze źródłem Stratum 1 i tak dalej. W praktyce ta utrata dokładności jest tak mała, że jest całkowicie znikoma we wszystkich, ale w najbardziej ekstremalnych przypadkach.
Czy masz coś do dodania do wyjaśnienia? Dźwięk w komentarzach. Chcesz przeczytać więcej odpowiedzi od innych użytkowników Stack Exchange, którzy znają się na technologii? Sprawdź cały wątek dyskusji tutaj.