Każde urządzenie podłączone do internetu potrzebuje wiedzieć, która jest godzina, i to możliwie dokładnie. Od tego zależą certyfikaty szyfrowania, zapisy w bazach danych, rozliczenia transakcji i prosta rzecz, jaką jest zegar na pasku zadań. Za synchronizację czasu w sieciach odpowiada protokół NTP. Wyjaśniamy, jak działa, skąd bierze czas i jak dokładny jest wynik.
Czym jest NTP?
NTP (Network Time Protocol) to jeden z najstarszych działających protokołów internetowych. Opracował go David Mills z University of Delaware w latach 80. XX wieku, a obecna wersja 4 jest opisana w dokumencie RFC 5905. Protokół korzysta z transportu UDP na porcie 123 i pozwala urządzeniu uzgodnić czas z serwerem, uwzględniając opóźnienia sieciowe. W typowych warunkach w internecie osiąga dokładność rzędu kilku do kilkudziesięciu milisekund, a w dobrze zorganizowanych sieciach lokalnych dużo lepszą, poniżej milisekundy.
Warstwy czasu: stratum
Serwery NTP tworzą hierarchię, zwaną warstwami (ang. stratum). Im niższy numer, tym bliżej źródła wzorcowego:
| Warstwa | Co to jest |
|---|---|
| Stratum 0 | urządzenie wzorcowe: zegar atomowy, odbiornik GPS lub radiowy sygnał czasu; nie jest podłączone bezpośrednio do sieci jako serwer |
| Stratum 1 | serwer połączony bezpośrednio z urządzeniem stratum 0; to główne źródła czasu w sieci |
| Stratum 2 | serwer synchronizujący się ze stratum 1 |
| Stratum 3 i dalej | kolejne poziomy; im dalej, tym nieco większy błąd, ale zwykle nadal bardzo mały |
| Stratum 16 | oznacza urządzenie niezsynchronizowane |
Twój komputer jest zwykle klientem na niskim poziomie hierarchii. Pobiera czas z serwera stratum 2 lub 3, który z kolei pobiera go wyżej. Źródłami wzorcowymi są laboratoria metrologiczne, takie jak krajowe urzędy miar, obserwatoria i instytuty. Skąd się bierze sam wzorzec, wyjaśniamy w artykule skąd się bierze wzorcowy czas w Polsce.
Jak klient wylicza poprawkę?
Sama informacja „teraz jest 12:00:00” nic nie da, bo odpowiedź idzie przez sieć i dotrze z opóźnieniem. NTP rozwiązuje to, wymieniając cztery znaczniki czasu:
- T1 – klient wysyła zapytanie i zapisuje swój czas wysyłki,
- T2 – serwer odbiera zapytanie i notuje swój czas odbioru,
- T3 – serwer wysyła odpowiedź i zapisuje czas nadania,
- T4 – klient odbiera odpowiedź i zapisuje swój czas odbioru.
Z tych czterech wartości wylicza się opóźnienie całkowite podróży (ang. round-trip delay): (T4 − T1) − (T3 − T2). Zakłada się, że czas podróży w jedną i drugą stronę jest mniej więcej taki sam, więc przesunięcie zegara klienta względem serwera wynosi: ((T2 − T1) + (T3 − T4)) / 2. Dzięki temu nie trzeba znać opóźnienia sieci z góry; protokół wyznacza je w locie.
Podobną sztuczkę wykorzystuje licznik na naszej stronie głównej: przeglądarka pyta nasz serwer o czas, mierzy czas podróży zapytania, odejmuje połowę tego opóźnienia i dzięki temu pokazuje czas ze znikomym błędem niezależnie od ustawień Twojego urządzenia. Korektę ponawiamy co 10 minut. To uproszczenie, bo mechanizm NTP jest bardziej wyrafinowany, ale zasada jest ta sama.
Filtrowanie i wygładzanie
Pojedynczy pomiar bywa zaburzony, na przykład gdy pakiet został chwilowo wstrzymany w kolejce routera. Dlatego klient NTP odpytuje kilka serwerów, odrzuca odstające wyniki, wybiera najlepsze źródła i dopiero na ich podstawie koryguje zegar. Wynik jest wygładzany: zamiast gwałtownie przeskakiwać, system zwykle delikatnie przyspiesza lub zwalnia swój zegar (technika zwana slewingiem), aby ustawić czas płynnie. Dopiero przy dużej rozbieżności (zazwyczaj ponad 128 milisekund w implementacjach referencyjnych) czas jest ustawiany skokowo.
Publiczne serwery i pula NTP
Do synchronizacji można używać wielu publicznych serwerów. Przykłady popularnych adresów to pool.ntp.org (ochotnicza pula tysięcy serwerów rozmieszczonych na całym świecie; adresy regionalne mają postać pl.pool.ntp.org), time.windows.com, time.apple.com, time.google.com czy time.cloudflare.com. W Polsce publiczne serwery czasu udostępnia także Główny Urząd Miar; Windows w naszym poradniku na stronie głównej podpowiada je jako przykład. Dokładne adresy i aktualne zasady korzystania z nich sprawdzisz na stronach instytucji. Pamiętaj, że serwis czasatomowy.pl jest nieoficjalny i nie jest powiązany z żadną z tych instytucji.
Dlaczego dokładny czas jest ważny?
- Bezpieczeństwo. Certyfikaty TLS mają okres ważności; zegar, który pokazuje złą datę, spowoduje błędy połączeń. Jednorazowe kody logowania (TOTP) zależą od wspólnej znajomości czasu z dokładnością do 30 sekund.
- Logi i śledztwa. Porównanie zdarzeń z różnych serwerów wymaga wspólnej osi czasu. Jeśli jeden serwer ma zegar spóźniony o minutę, odtworzenie kolejności zdarzeń staje się trudne.
- Finanse. Systemy handlu giełdowego często wymagają synchronizacji z dokładnością milisekund lub lepszą.
- Systemy rozproszone. Bazy danych i kolejki wiadomości korzystają ze znaczników czasu do rozstrzygania konfliktów zapisów.
- Telekomunikacja i energetyka. Sieci komórkowe i sieci elektroenergetyczne wymagają precyzyjnej synchronizacji, często z użyciem GPS.
NTP czy PTP?
Gdy milisekundy to za mało, stosuje się protokół PTP (Precision Time Protocol, IEEE 1588), który z pomocą sprzętowego znakowania pakietów osiąga dokładność poniżej mikrosekundy. Jest używany w centrach danych, telekomunikacji i automatyce przemysłowej. Do codziennych zastosowań w domu i biurze w zupełności wystarcza NTP.
Sekunda przestępna i NTP
NTP przenosi informację o nadchodzącej sekundzie przestępnej, ale systemy radzą sobie z nią różnie: jedne powtarzają sekundę, inne „rozmywają” ją na kilka godzin (tzw. leap smear), co stosują między innymi duże firmy chmurowe. Więcej o tym zagadnieniu napiszemy w tekście sekunda przestępna odchodzi do historii.
Jak sprawdzić, czy mój komputer jest zsynchronizowany?
W Windows użyj w wierszu poleceń komendy w32tm /query /status. W systemach Linux sprawdzisz to poleceniem timedatectl, a w macOS w ustawieniach Data i godzina. Opisane krok po kroku instrukcje dla popularnych systemów zebraliśmy w poradniku jak ustawić czas automatycznie. Jeśli chcesz porównać swój zegar z wzorcem, otwórz stronę główną czasatomowy.pl i patrz na sekundy. Aby zobaczyć, jak mierzy się krótkie odstępy czasu, wypróbuj stoper online.