NTP – protokół czasu sieciowego – jest stosowany w Internecie do korekty zegarów lokalnych i synchronizacji klienta lub serwera z serwerem albo z wzorcowym źródłem czasu. Tym celom została podporządkowana architektura NTP, algorytmy, obiekty, protokoły pomocnicze i mechanizmy bezpieczeństwa. Pierwsza wersja tego protokołu została opisana w RFC 958. Później powstały 3 kolejne wersje NTP: RFC 1059 (wersja 1), RFC 1119 (v2) i RFC 1305 (v3). Protokołem transportowym dla NTP jest UDP.
NTP umożliwia synchronizację z dokładnością rzędu nanosekund. Dysponuje on środkami dla określania charakterystyk i oceny błędu czasu lokalnego oraz serwera czasu sieciowego, obsługującego synchronizację zegarów. Może funkcjonować w hierarchicznej strukturze, rozsyłając wzorce czasu, takie jak wskazania zegarów atomowych. Dokładność osiągana za pośrednictwem NTP silnie zależy od dokładności zegarów lokalnych i charakterystyk opóźnień, zwłaszcza niespodziewanych. Algorytm przeliczania opóźnień, korekcji częstotliwości zegarów i parę innych mechanizmów pozwalają uzyskać dokładności wynoszącą w większych sieciach parę milisekund, nawet podczas dłuższej utraty łączność ze źródłem synchronizacji. Dokładność czasu NTP w sieciach lokalnych nie przekracza 1 ms, a w sieciach WAN jest rzędu dziesiątek ms.
UTC (Universal coordinated Time) – uniwersalny czas skoordynowany – to w NTP liczba sekund wyrażona 64-bitową liczbą ze stałym przecinkiem (w formacie ang. – ze stałą kropką), znana jako stempel czasowy. Pierwsze 32 bity oznaczają sekundy, a pozostałe 32 części sekundy. Dokładność wynosi więc 232 ns. Stemple czasowe pokazują czas, jaki upłynął od 1 stycznia 1900. Najstarszy bit prowadzi do 1968 r., przepełnienie nastąpi w 2036 r. Zero oznacza czas nieokreślony.
Obsługiwane klasy usług NTP:
- Multicast. W szybkiej sieci lokalnej – z dużą liczbą stacji klient – serwer NTP rozgłasza wiadomość, na podstawie której stacje mogą korygować swoje zegary. Serwer nie przyjmuje zapytań. W większej sieci może być kilka serwerów NTP.
- Procedure-call. Kiedy jest wymagana duża dokładność czasu, a multicast nie występuje, klient wysyła do serwera zapytanie i czeka na odpowiedź. Serwer niezwłocznie podaje czas, ale nie synchronizuje się z klientem.
- Symetric. Dynamiczna rekonfiguracji serwerów, gdzie każdy z nich synchronizuje lub jest synchronizowany przez sąsiada wybranego na zasadach określonych w protokole. Tryb aktywny symetryczny jest przewidziany dla serwerów niższego poziomu hierarchii (wyższy numer stratum) z prekonfigurowanymi adresami sąsiedztwa. Z kolei z pasywnego trybu symetrycznego korzystają serwery bliskie korzenia hierarchii i współpracujące z serwerami o początkowo nieznanych adresach. Dla każdej pary serwerów wymieniających między sobą komunikaty tworzy się asocjację. Jest ona określona adresami IP i 16-bitowymi numerami portów danego serwera i sąsiada.
Rysunek przedstawia ramkę wiadomości NTP, umieszczaną za nagłówkiem protokołu UDP (User Datagram Protocol).
Zawiera ona następujące pola:
- LI (Leap Indicator) – wskaźnik wyrównania, informujący odbiorcę o korekcji skali czasu NTP: 00 – nie ma, 01 – ostatnia minuta ma 61 sekund, 10 – ostatnia minuta ma 59 sekund, 11 – sygnał awarii;
- VN – numer wersji (teraz 3);
- Stratum – kod poziomu lokalnego zegara; 0 – nieosiągalny lub nieistniejący, 1 – wzorzec pierwotny (czas radiowy), 2–15 – wzorce wtórne (czas przez NTP);
- Poll interval – zmienna całkowita ze znakiem, określająca minimalny (własny lub sąsiada) czas między zapytaniami. Jest ona interpretowana jako wykładnik potęgowy liczby 2. Wynik stanowi liczbę sekund. Na przykład liczba 5 w tym polu będzie oznaczała 32 sekundy;
- Precision – zmienna całkowita ze znakiem, określająca dokładność zegarów w sekundach, ale jest interpretowana jako najbliższa potęga liczby 2. Wynik będzie zaokrąglony w górę. Na przykład częstotliwości sieciowej 50 Hz odpowiada okres 20 ms, wobec czego w tym polu będzie wpisana liczba „-5” (0,03125 s);
- Synchronization distance – liczba stałoprzecinkowa (między 15. a 16. bitem) określająca w sekundach pełną wartość opóźnienia przy wymianie wiadomości z pierwotnym wzorcem czasu;
- Synchronization dispersion – liczba stałoprzecinkowa większa od zera, wyrażająca w sekundach maksymalną wartość błędu czasu w odniesieniu do źródła pierwotnego;
- Reference clock identifier – 32-bitowy kod identyfikujący konkretny zegar wzorcowy. Dla źródeł zerowego i pierwszego poziomu hierarchii są to 4-bajtowe ciągi ASCII, a dla poziomu drugiego i wyższych (liczbowo) – adres IP serwera wybranego do synchronizowania;
- Reference Timestamp – czas lokalny w formacie stempla czasowego, odpowiadający chwili ostatniej korekty wskazań zegara. Jeśli lokalne serwery nie były synchronizowane, w to pole będą wpisane same zera;
- Orginate timestamp – lokalny czas w formacie stempla czasowego, odpowiadający czasowi wysłania do serwera ostatniej wiadomości NTP;
- Receive Timestamp – lokalny czas w formacie stempla czasowego, odpowiadający chwili nadejścia od sąsiada ostatniej wiadomości NTP;
- Transmit Timestamp – lokalny czas w formacie stempla czasowego odpowiadający chwili wysłania bieżącej wiadomości NTP;
- Authenticator – pole opcjonalne, zawierające w razie potrzeby klucz i szyfrowaną sumę kontrolną.
Serwis administratora sieciowego może korzystać z publicznych serwerów NTP albo ustanowić własny serwer NCP – wyposażony w adapter radiowy, satelitarny czy dedykowany modem – i wykorzystać go do synchronizacji urządzeń w swojej sieci.