Hlavní navigace

NTP: Filozofie synchronizace času po Internetu

16. 5. 2003
Doba čtení: 7 minut

Sdílet

Jeden z nejstarších internetových protokolů slouží k synchronizaci času, přesto to není žádný dinosaurus. Po celou svoji více než dvacetiletou historii prochází nestálým vývojem, v jehož průběhu konkurentů ubývá a uživatelů pochopitelně naopak přibývá. Na jakých základních kamenech stojí a jak funguje Network Time Protocol?

Přesný čas je bezpochyby velmi významnou a důležitou hodnotou, a to v řadě aplikací. I v reálném životě se často vyplatí mít alespoň přibližnou představu o čase. Avšak vzhledem k tomu, že hodláme získat čas s velmi vysokou přesností, je dobré uvést nějaké pádnější argumenty. Z informatické praxe jsou to např. různé distribuované systémy a sítě. Přesný čas má své využití u řady šifrovacích algoritmů i v obchodním styku, příkladů je však pochopitelně mnohem více. Hned na úvod je také vhodné poznamenat, že základní motivace je mít synchronizovaný čas. Vlastně by nesešlo na tom jaký, přesto to z praktického hlediska tak úplně jedno není – je dobré být kompatibilní se zbytkem světa.

Způsobů, jak seřídit čas po Internetu, je celá řada, jeden však hraje prim – je to protokol NTP (Network Time Protocol). Důvodů úspěchu je celá řada, my se však především podívejme na jeho základní filozofii. Nepůjde nám o nějaké podrobnější zkoumání celého protokolu, na to by nám jeden článek těžko stačil. Základní myšlenka, která je důležitá k pochopení celého fungování NTP, je velmi jednoduchá. Máme různá zařízení schopná poskytnout nám přesný čas. Mohou to být radio přístroje či v extrémním případě přímo cesiové hodiny. Nazvěme taková zařízení vrstvou nula (stratum 0). Ta předávají informace o přesném čase nějakému počítači, který pro nás představuje vrstvu jedna (stratum 1). Jednoduchá myšlenka je vybrat si některý z takových serverů a získávat z něj přesný čas. NTP na to však jde trochu jinak – vytvoříme další, v pořadí již druhou vrstvu. Počítače v této druhé vrstvě si však nevyberou jeden z první vrstvy, typicky získávají informace hned z několika. Navíc mohou spolupracovat i mezi sebou. Dochází tedy k jistému dolaďování přesného času. Takto to může pochopitelně vypadat i na dalších vrstvách, většinou však již ve třetí vrstvě bývají klienti, kteří se obyčejně synchronizují pouze s jedním nadřazeným serverem. Mimochodem – ve třetí vrstvě se také nachází vůbec nejvíce počítačů. Vrstvy jsou definovány až do patnáctky, už pátá vrstva se však vyskytuje zcela výjimečně. Zjednodušeně, ale velmi názorně je celý model vidět na následujícím obrázku:

860

Z výše uvedeného vyplývá, že existuje několik principiálně různých vztahů mezi jednotlivými „účastníky“ synchronizačního procesu. Rozlišujeme několik základních typů:

  • Server a klient – Server poskytuje klientům na požádání přesný čas s doplňujícími informacemi (svoji vrstvu, přesnost času atd.) Naopak klient získává přesný čas od jednoho či více serverů, a to k synchronizaci svých vlastních hodin.
  • Peer – Jde minimálně o dvojici strojů, které si navzájem vyměňují informace o přesném čase, a vždy ten z nich, který má nejpřesnější čas, je server a ostatní klienti – nemusí být tedy stanoven jeden fixní server.
  • Broadcast / multicast server a klient – Server vysílá v pravidelných intervalech informaci o čase na broadcastovou či multicastovou adresu. Při vysokém počtu klientů tak může dojít ke značnému ušetření síťových i výpočetních prostředků. Naopak klient přijímá informace o přesném čase a navíc může využít pravidelné vysílací periody k lepší synchronizaci.

Byla zmíněna přesnost času, NTP je v současné době velmi důmyslný systém využívající řady zajímavých algoritmů a statistických metod. Celý proces, jak již bylo zmíněno výše, je založen na postupném přibližování se přesnému času. Při synchronizaci lze rozlišit dvě fáze. V případě velkých rozdílů (nad 128 ms) dochází k tzv. skokové (stepping) synchronizaci. Ta zaručí okamžité srovnání času, v případě menších rozdílů pak probíhá tzv. slewing, což je ono zmiňované „přibližování“. Existuje vlastně ještě jeden stav – to když je rozdíl větší než cca 17 minut, výsledkem je konec aplikace na straně klienta a chyba informující o tom, že není něco v pořádku. Dosažení velmi slušné přesnosti tak není otázkou okamžiku, ale spíše několika minut a synchronizací; důvodem je nutnost „podchytit“ různá zpoždění při přenosu času a patřičně je vyhodnotit. Průběh synchronizace zjednodušeně ukazuje obrázek:

861

Velmi důležitou vlastností NTP je jeho softwarová přenositelnost – existuje software prakticky pro všechny významné platformy – a jeho případná implementace je díky dokumentaci bezproblémová. Základním přenosovým protokolem je UDP – volba není náhodná, nepřítomnost trvalého spojení je výhodná např. v případě výpadku velmi vytíženého serveru. Čas je distribuován relativně k UTC (Universal Coordinated Time), který je shodný s GMT. Tedy není úplně shodný, UTC je vlastně rozšířenou verzí GMT. Základní změnou byl přechod na přesné cesiové hodiny. Situace kolem časů není tak úplně jednoduchá. Současná definice je přibližně tato: Základním časem je tzv. TAI (Internation Atomic Time), kdy jedna sekunda je dána jako 9.192.631.770 os­cilací cesiového atomu. Z něj vede cesta k UT1 (Astronomical Time), který je vázán na zeměpisné jevy. To má za následek, že se s jistou periodou proti TAI drobně mění. Od UTC se však očekává, že bude mít stejnou sekundu jako TAI a zároveň bude odpovídat UT1 kvůli návaznosti na GMT – proto musí být čas od času v UTC přeskočena jedna sekunda. Abychom se však vrátili zpět k NTP, protože přesný čas je pro řadu aplikací velmi důležitý, je možno veškerou komunikaci pochopitelně šifrovat, a to buď pomocí DES-CBC nebo MD5.

Samotný protokol NTP prodělal postupně značný vývoj, je to možná trochu překvapivé, ale je to jeden z nejstarších dosud používaných protokolů. Jeho základy lze datovat od Hello routing protokolu (RFC 891), který byl používán řadu let v pokusném operačním systému Fuzzball. Ten je úzce svázán s nultou verzí NTP (RFC 958) z 1985 a jeho tvůrcem Davidem L. Millesem. První verze protokolu (RFC 1059) již obsahovala některé důležité algoritmy. V roce 1989 pak přichází NTP verze 2 (RFC 1119), mimochodem je to vůbec první RFC napsané v postscriptu, ještě více se však toto RFC proslavilo diskusemi, které se kolem něho vedly. Šlo tehdy o souboj dvojice protokolů určených k synchronizaci času – NTP a DTSS (Digital Time Synchronization Service). Výsledkem krutého boje dvou různých filozofií byla implementace („krádež“) klíčové metody pro korekci času z DTSS do NTP, což vzalo zastáncům DTSS vítr z plachet. Další verze vstupuje na scénu v roce 1992 (RFC 1305) a kromě řady vylepšení v oblasti algoritmů přináší také např. broadcast režim a především popis propojení se zdrojem přesného času. Aby se to všechno trochu zamotalo, přichází SNTP (Simple NTP), které nepoužívá některé algoritmy. Jde vlastně o verzi pro klienty kompatibilní s klasickým NTP. Zatím poslední SNTP je verze 4 (RFC 2030), to samé platí i o NTP, ale čtvrtá verze je zatím pouze vývojová, takže v podobě RFC dostupná není. Změn je celá řada, a to včetně aritmetiky používané při výpočtech.

Ještě se vraťme k problému přesného času. Nejde totiž o to pouze ho získat, musíme s ním být také schopni pracovat. I to je jedna z cest, kterou se technologie NTP vydala – přesnější počítání času jádrem operačního systému. To je však trošku jiný příběh (jmenuje se nanokernel). Pokud jde o přesnost NTP, tak pochopitelně záleží na podmínkách. Na Internetu se dá dosáhnout přesnosti několika desítek milisekund i lepší, na lokálních sítích jde o milisekundy. Teoreticky pak NTP umí až přesnost 200 pikosekund, což by měla být doba, za kterou proběhne signál dva centimetry dlouhým drátem.

Závěrem se podívejme na situaci v České republice. Na mezinárodním listu veřejně přístupných NTP serverů první a druhé vrstvy máme jeden významný server první vrstvy (ntp.cesnet.cz), který provozuje CESNET. Měl by být už propojen se státním etalonem času. Dva servery druhé vrstvy provozuje Contactel (ntp1.contactel.cz, ntp2.contactel.cz). Pochopitelně to není ani zdaleka všechno na českém Internetu, ale tyto tři jsou asi opravdu těmi nejznámějšími.


V článku NTP – filozofie synchronizace času po Internetu autor bohužel neuvedl hlavní důvod pro existenci hierarchie časových serverů. Tímto důvodem je možnost rozložit zátěž a distribuovat službu NTP podle potřeb uživatelů. Servery vyšších úrovní (Stratum-1 a Stratum-2) jsou určeny především k synchronizaci dalších serverů a nikoliv koncových stanic.

A zde je hlavní problém: v článku je zmíněn primární NTP server CESNETu. Tento server je v současné době jediný veřejný Stratum-1 v České republice a je tedy samozřejmé, že z kapacitních důvodů nemůže být využíván celou internetovou komunitou. Je určen především pro akademickou komunitu a jako zdroj přesného času pro další NTP servery ve velkých sítích.

BRAND24

Jak si tedy vybrat vhodný NTP server?

  • běžný domácí uživatel by měl využívat NTP server svého ISP
  • totéž platí pro správce menší sítě
  • správce střední nebo větší sítě by si měl zkonfigurovat svůj vlastní server, který bude typicky Stratum-3. Přitom je vhodné odebírat čas od několika (dvou až tří) nezávislých NTP serverů. Je vhodné si ověřit zda se trvalým využíváním těchto serverů neporušují pravidla deklarovaná jejich provozovateli. Často je nutné si vyžádat souhlas nebo alespoň zaslat oznámení

Vladimír Smotlacha
CESNET

Byl pro vás článek přínosný?

Autor článku

Autor je redaktorem serveru Lupa. Jeho specializací jsou poskytovatelé připojení a technické aspekty Internetu.
Upozorníme vás na články, které by vám neměly uniknout (maximálně 2x týdně).