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, społecznościowego forum z pytaniami i odpowiedziami.
Zdjęcie dzięki uprzejmości LEOL30 (Flickr).
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 serwery NTP są tak dokładne?
Współpracownik SuperUser Michael Kjorling ma dla nas odpowiedź:
Serwery NTP polegają 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 dobrzy, o czym kiedyś mówiono, konserwacja dokładny czas (od drugiego jest definiowany w kategoriach efektów atomowych). W rzeczywistości 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 dokładnie powiedzieć upływ czasu, ale także czas.
Po dokładnym czasie w jednym systemie podłączonym do sieci, takiej jak Internet, jest to kwestia inżynierii protokołów umożliwiającej 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 tempo rozwoju lokalnego zegara (co jest łatwe do ustalenia), możesz obliczyć współczynnik dryfowania lokalnego zegara 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 wysoki niekonsekwentnyPowinno to pozwolić na zachowanie dokładnego czasu przez jakiś 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 określony 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.