Network Time Protocol
NTP (Network Time Protocol) je protokol pro synchronizaci vnitřních hodin počítačů po paketové síti s proměnným zpožděním. Tento protokol zajišťuje, aby všechny počítače v síti měly stejný a přesný čas. Byl obzvláště navržen tak, aby odolával následku proměnlivého zpoždění v doručování paketů.
NTP používá User Datagram Protocol (UDP) na portu 123.
NTP klient používá Marzullův algoritmus pro stanovení času z (nepatrně) se lišících odpovědí časových serverů. Používá se čas UTC se speciálními příznaky pro přestupné sekundy. NTP verze 4 obvykle dovede po internetu udržovat čas s chybou pod 10 milisekund (1/100 s), v lokální síti může při ideálních podmínkách dosáhnout přesnosti až 200 mikrosekund (1/5000 s).
Počítač, který chce synchronizovat své hodiny, pošle pár dotazů několika NTP serverům a ty mu v odpovědi pošlou svůj, přesný čas. Klient z odpovědí nejprve vyloučí servery se zřejmě nesmyslným časem (s odchylkou 1000 sekund a více). Poté ponechá skupinu serverů s největším společným průnikem.
Běžně se jím dosahuje přesnosti hodin v řádu milisekund.
NTP je jeden z nejstarších dosud používaných IP protokolů. NTP původně navrhl Dave Mills z univerzity v Delaware a stále jej, spolu se skupinou dobrovolníků, udržuje. Současná verze je NTP verze 4, kterou popisuje RFC 5905.
NTP démon je uživatelský proces, který na stroji běží trvale. Většina protokolu a inteligence je implementována v tomto procesu. Pro dosažení nejlepšího výkonu je důležité, aby jádro operačního systému umělo řídit čas fázovým závěsem, místo aby přesný čas do systémových hodin dosazoval NTP démon přímo. Všechny dnešní verze Linuxu fázový závěs implementují.
NTP používá hierarchický systém „strata hodin“, kde systémy se stratem 1 jsou synchronizovány s přesnými externími hodinami jako třeba GPS nebo jiné hodiny řízené rádiovým signálem (v Čechách obvykle DCF77). NTP systémy strata 2 odvozují svůj čas od jednoho nebo více systémů se stratem 1 atd. To zabraňuje vzniku cyklu v grafu synchronizujících se strojů. Stratum systému leží v rozsahu 1 až 14; stratum 0 mají samotné referenční hodiny připojené k nejpřesnějšímu serveru; stratum 15 má počítač, který se v důsledku výpadku sítě nemůže synchronizovat s zdrojem času, nebo se synchronizuje po výpadku spojení. (Je dobré si všimnout, že stratum hodin v telekomunikačních systémech je odlišný pojem.)
NTP udržuje a značkuje čas v UTC ve formě čísla s pevnou desetinnou čárkou: 32 bitů na část sekund + 32 bitů desetinná část sekund. To NTP dává škálu 232 sekund s teoretickým rozlišením 2-32 sekundy. Ačkoliv NTP škála přetéká každých 232 sekund, implementace by měla odstranit nejednoznačnost z jiných zdrojů. Protože k tomu stačí čas přesný na několik desetiletí, pro běžné použití to není problém.
Jednodušší forma NTP je známá jako Simple Network Time Protocol nebo SNTP. SNTP klient neuvažuje zpoždění paketů v síti a nepamatuje si stav předchozí komunikace. Používá se ve vestavěných zařízeních a v aplikacích, které nepotřebují tak extrémně vysokou přesnost. Viz RFC 1361, 1769 a 2030.
Detaily provozu NTP popisují RFC 778, 891, 956, 958 a 1305. (Nezaměňujte NTP s protokoly daytime (RFC 867) nebo time (RFC 868).) Nicméně k roku 2005 bylo v RFC dokumentováno NTP jen do verze 4. Aby se standardizovala dílo NTP komunity od doby RFC 1305 a jiných, zformovala se IETF NTP Working Group.
Kromě referenční, softwarové implementace NTP, která je k nalezení na domovské stránce NTP a která byla portována na většinu oblíbených operačních systémů, mnoho výrobců, jako Symmetricom, Elproma, Meinberg, FEI-Zyfer a jiní, nabízí samostatné (tj. vyhrazené) časové servery.