NTP: Přesný čas na PC prostřednictvím Internetu

zdroj: http://www.hw.cz/Teorie-a-praxe/Dokumentace/ART1027-Presny-cas-na-PC-prostrednictvim-Internetu.html

Pokud máte připojení na internet, lze čas ve vašich zařízeních synchronizovat s časem ze serverů připojených na internet a poskytujících příslušnou službu. Automaticky seřizovat čas na PC lze pomocí dvou k tomu určených protokolů: staršího Time a novějších NTP a SNTP.

Jestliže chceme obecně synchronizovat čas mezi dvěma stroji, musíme být schopni zjistit co možná nejpřesněji rozdíl mezi jejich systémovými časy. Obvyklý postup vypadá takto: server odešle klientovi zprávu s vyznačeným časem odeslání. Klient zprávu přijme a zaznamená si čas. Rozdíl mezi těmito dvěma časy ovšem zahrnuje dvě složky – jednak rozdíl mezi systémovým časem obou strojů, ale promítne se zde také zpoždění způsobené síťovým přenosem. Proto klient odešle zprávu zpět serveru, kde se opět zaznamená čas odeslání a server zaznamená čas přijetí. Server pak má k dispozici 4 časové údaje: čas odeslání první zprávy klientovi (čas dle serveru), čas přijetí první zprávy klientem (čas podle klienta), čas odeslání druhé zprávy klienta serveru (čas dle klienta) a čas přijetí této druhé zprávy serverem (čas dle serveru). Pokud budeme předpokládat, že cesta zprávy mezi serverem a klientem trvá oběma směry stejně dlouho (což sice nemusí být úplně pravda, ale pro zjednodušení s tímto předpokladem vystačíme), můžeme z těchto 4 časů poměrně přesně odvodit skutečný rozdíl mezi systémovým časem serveru a klienta. Podívejme se nyní na některé protokoly detailně.

Protokoly pro synchronizaci času

Protokol Time

Protokol Time je velmi jednoduchý. Spočívá v tom, že server poslouchá na portu č. 37 a po připojení na tento port (pomocí protokolu TCP nebo UDP) zašle uživateli 32bitové číslo se znaménkem (ve formátu dvojkového doplňku). Číslo je počet sekund od 00:00:00 1. ledna 1900 GMT. Číslo 2.398.291.200 tedy odpovídá 00:00:00 1. ledna 1976 GMT a číslo -1.297.728.000 odpovídá 00:00:00 17. listopadu 1858 GMT. Pokud server tuto službu neposkytuje, spojení je buď odmítnuto, a nebo ihned uzavřeno. Přesnost synchronizace času pomocí tohoto protokolu není nijak velká a pohybuje se do 1 sekundy. Podrobný popis protokolu Time lze nalézt v dokumentu RFC-868.

NTP

Network Time Protocol (port 123 udp a pro trasování také tcp) používající mj. 64bitové časové značky ve formátu čísla s pevnou řádovou čárkou je již mnohem sofistikovanější a složitější než Time, ale také přesnější. Je přímo určen pro trvalou synchronizaci hodin více počítačů po síti. Filozofie protokolu NTP spočívá v tom, že se nesnaží synchronizovat hodiny počítačů navzájem (tedy nesnaží se čas jaksi „zprůměrovat“), ale synchronizuje je oproti času UTC („Universal Time Coordinated“).

Synchronizované servery jsou to postaveny do hierarchické několika úrovňové stromové struktury, díky které lze rozložit zátěž a distribuovat službu NTP podle potřeb uživatelů. V nejvyšší vrstvě jsou vlastní časová zařízení (atomové hodiny, GPS, hodiny řízené časovým signálem, atp.) Každý server je v určité vrstvě (stratum), přičemž ve vrstvě číslo jedna (stratum-1) je server, který je připojen na nějaké externí časové zařízení (stratum-0). Jeho „potomci“ (např. ve druhé, třetí nebo čtvrté vrstvě) se považují za méně přesné.

Primárních serverů (stratum-1) bylo na světě v roce 1999 cca 230, sekundárních (stratum-2) pak něco přes 100.000 a jejich počet neustále roste. Vlastníci primárních serverů obvykle omezují, kdo se k nim smí připojovat. Poskytovatelé internetových služeb mají zpravidla vlastní servery stratum-2, odchylka těchto sekundárních serverů od primárních je zanedbatelná a servery této úrovně se nejvíce používají pro synchronizaci času. Menší firma si jistě založí jeden nebo více serverů na úrovni stratum-3 a klientské stanice, které se s nimi budou synchronizovat, pak budou na úrovni stratum-4. Obecně platí, že čím vyšší úroveň (nižší číslo), tím je zaručena vyšší přesnost a menší tolerance, ale vzhledem k tomu, že velmi záleží také na parametrech síťového připojení, je nejrozumnější synchronizovat se podle topologicky blízkého stroje, i kdyby byl nižší úrovně. Přestože NTP stanoví maximální možný počet vrstev na 15, již pátá vrstva se vyskytuje pouze výjimečně a nejvíce počítačů se nachází ve třetí vrstvě (tj. synchronizují se podle serveru úrovně stratum-2).

Principiálně rozlišujeme několik základních vztahů mezi jednotlivými „účastníky“ synchronizačního procesu:

  • 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.

Protokol NTP používá sofistikované algoritmy zohledňující vlastnosti protokolů z rodiny UDP/IP, topologickou vzdálenost serverů (čas, který uplyne od vyslání údaje k jeho přijetí), eliminují síťový jitter a další statistické chyby. Přitom platí pravidla, jak měnit místní čas: Je-li odchylka příliš vysoká, považuje se za nepravděpodobnou chybu a čas se synchronizovat nebude. Je-li naopak přijatelná, budou se systémové hodiny mírně zrychlovat nebo přibrzďovat o malou hodnotu. Proto také úvodní synchronizace nějakou dobu trvá, řádově několik minut. Přesnost synchronizace tímto protokolem je v řádu desetin milisekundy.Základním přenosovým protokolem je UDP. Popis protokolu NTP pak lze nalézt v dokumentu RFC-1305.

SNTP

Protokol SNTP (Simple Network Time Protocol) vychází z protokolu NTP (Network Time Protocol) a používá pro komunikaci také port č. 123. Hlavní rozdíl je v tom, že klient s podporou pouze SNTP nemůže zároveň sloužit i jako server pro další klienty, umožňuje synchronizaci pouze podle jednoho serveru a dosahuje menší přesnosti synchronizace času. Přesnost synchronizace tímto protokolem se pohybuje v řádu jednotek až desítek milisekund, což je pro běžnou práci naprosto dostačující.Podrobný popis protokolu SNTP lze nalézt v dokumentu RFC-2030.

Servery poskytující přesný čas

Serverů poskytujících přesný čas existuje velmi mnoho a záleží na vás, který si zvolíte. Většina softwarových klientů nějaké zná a má je předdefinovány. Nejlepší je samozřejmě seřizovat čas ze serveru, který je pokud možno nejlépe řízen přímo nějakým časovým normálem a má velmi dobré připojení k internetu. Takovými jsou většinou vojenské servery (poznáte je podle top level domény .mil, např. tick.usno.navy.mil), akademie věd, univerzity a podobně. Servery s protokolem SNTP samozřejmě provozuje i německý Fyzikální a technický spolkový úřad (PTB). Servery PTB mají adresy ptbtime1.ptb.de a ptbtime2.ptb.de. Seznam některých veřejných serverů poskytujících přesný čas lze najít např. na http://www.eecis.udel.edu/~mills/ntp/clock2a.html.

Přesnost synchronizace času pomocí protokolu Time není nijak velká, pohybuje se kolem 1 sekundy. Naopak nejpřesnějším je protokol NTP, který umožňuje udržovat systémový čas s přesností desetin milisekundy. Proto ho také časové servery v Internetu používají k synchronizaci s globálním jednotným časem UTC (Universal Time Coordinated).

Prakticky dosažitelná přesnost času vůči UTC na úrovni koncových klientských PC vrstvy 3 je několik milisekund. Dosažitelná přesnost seřízení hodin v závislosti na operačním systému je podle studií společnosti OSC uvedena v tabulce.

Operační systémPřesnost synchronizace [ ms ]
QNX
± 0,002
Unixové OS, LINUX
± 1
Windows NT2000/XP
± 5
Windows 95/98/Me
± 500

Přesnost synchronizace pomocí NTP/SNTP

Klient si jako svůj zdroj času zvolí takový server, který má co nejnižší číslo vrstvy (je nejdůvěryhodnější), ale současně musí být dobře dostupný. Pokud tedy budeme mít na výběr ze dvou serverů, z nichž jeden je z vrstvy 1 a druhý z vrstvy 2, neznamená to, že si klient vybere jako zdroj synchronizace vždy server z vrstvy 1. Pokud bude výrazně hůře dostupný (odezva sítě bude delší či nestabilnější) než server z vrstvy 2, může si klient vybrat jako zdroj synchronizace server z vrstvy 2, záleží také na konkrétní implementaci v daném klientu. Proto se doporučuje zadávat v konfiguraci klienta několik NTP serverů.

Software pro synchronizaci času

Pro synchronizaci času ve vašem počítači je zapotřebí kromě připojení k internetu (synchronizace funguje i přes vytáčené připojení) i software, který synchronizaci času podle výše zmíněných protokolů dokáže provést. Programy pro synchronizaci času počítače existují prakticky pro všechny platformy (od DOSu po UNIX), a je jich opravdu velké množství, poměrně kompletní seznam lze najít např. na adrese http://www.ntp.org/. Podporu však nabízejí i samotné operační systémy.

Interní klienti operačních systémů

Pro využití služby NTP existují téměř ve všech operačních systémech příkazy (klienti), které umí jednorázově nastavit čas svých lokálních hodin, ale nekorigují jejich rychlost.

Pro jednorázové či periodické nastavení času v unixových systémech existuje nástroj ntpdate, který nastaví místní čas podle jednoho nebo několika určených SNTP serverů:

ntpdate sntp.server.cz

Pro nepřetržitou synchronizaci slouží démon ntpd, jehož parametry lze většinou nastavit v souboru ntp.conf.

Přestože ve Win NT/2000/XP je pro práci s SNTP k dispozici příkaz net time:

net time /setsntp:sntp.server.cz

používají se na této platformě častěji klienti nepocházející z operačního systému, jako jsou Dimension 4, TrueTime WinSync, nebo NetTime.

Windows XP

Windows XP již obsahují prostředek pro seřízení systémových hodin s použitím SNTP, který nevyžaduje použití příkazové řádky ani znalost dalších příkazů. Konfigurace je dosažitelná dvojklikem na hodiny v dolním rohu obrazovky a zvolením záložky Čas v Internetu, nebo přes menu Start => Nastavení => Ovládací panely => Datum a čas => Vlastnosti => Čas v internetu. Jeho velkou nevýhodou je, že k synchronizaci hodin dochází jen jednou týdně v definovaný okamžik (čas poslední synchronizace). Pokud v tento okamžik bude váš počítač zrovna vypnutý nebo se nezdaří připojení k časovému serveru (naneštěstí je možné definovat pouze jeden NTP server), synchronizace neproběhne vůbec. Čas je však možné kdykoliv synchronizovat ručně stiskem tlačítka „Aktualizovat“.

Windows 98

Ve starších verzích Windows lze použít program cmdtime využívající protokol SNTP, který nemá žádné konfigurační soubory a jména NTP serverů se definují jako parametry v povelové řádce. Nejvhodnější způsob spouštění je zadat ho jako úlohu v Plánovači úloh (Scheduler) nebo vytvořením jednořádkového dávkového souboru (cmdtime.exe SNMP_server1 SNMP_server2) spouštěného automaticky například po spuštění počítače.

Programy pro synchronizaci času

Jednodušším a elegantnějším způsobem jak synchronizovat čas na PC je využít některý z freewarových či sharewarových programů, které nejen že nevyžadují od uživatele znalost příkazů operačního systému, ale nabízejí i celou řadu dalších možností a služeb od předdefinovaných adres časových serverů, automatické synchronizace při každém spuštění počítače nebo dle nastaveného časového intervalu až po schopnost udělat z vašeho počítače synchronizační server.

Dimension 4

Dimension 4 je pravděpodobně nejrozšířenějším z klientů pro synchronizaci času. Patří mezi volně šiřitelný software fungující na operačních systémech Windows od verze 95 výše. Tento program dokáže synchronizovat čas vašeho PC pomocí protokolu Time i SNTP (z důvodů přesnosti je samozřejmě lepší používat protokol SNTP). Všechny potřebné funkce jsou obsaženy v hlavním okně aplikace. K dispozici je řada přednastavených časových serverů, lze nastavit časové pásmo, zvolit a nakonfigurovat server, atd. Program má jednoduché a intuitivní ovládání. Ke stažení je k dispozici na adrese http://www.thinkman.com/dimension4/.

WebTime

Je nejmenší synchronizátor času, který vám zabere na disku pouhých 148 kB. Ovládání je jednoduché a intuitivní. Program je rozdělen do několika záložek umožňující výběr z několika nastavených časových serverů či nastavení vlastností programu, umístění ikony na pracovní plochu, spuštění programu při startu atd. Jediná funkce, která tomuto programu chybí, je přidání časového serveru. WebTime je distribuován jako freeware na adrese http://www.gregorybraun.com/.

TrueTime WinSync

Dalším programem je program WinSync firmy TrueTime. Program je také ke stažení zdarma (http://www.truetime.net/software-winsync.html), ale je třeba vyplnit registrační formulář. Umožňuje synchronizaci po spuštění počítače, v pevném časovém intervalu nebo je-li odchylka lokálního času od UTC větší než povolená hodnota. Nastavení časové zóny je samozřejmostí stejně jako ignorování časové informace, jejíž odchylka je příliš velká (lze ji nastavit), a tedy nepravděpodobná. Předdefinovaných serverů sice program mnoho nemá, lze je však snadno doplňovat. K dispozici je též verze fungující jako server, která je však již placená (30 zkušebních dní).

NetTime

Program NetTime umí pracovat s oběma protokoly, Time i SNTP. Ačkoliv vypadá velmi jednoduše, velmi pohodlně se konfiguruje. Obsahuje v sobě také prostředky plánovaného spuštění včetně možnosti spouštění po startu počítače nebo jako služba systému Windows. Program je ke stažení na adrese http://nettime.sourceforge.net/. Program je, jak už adresa napovídá k dispozici zdarma.

Programy pro synchronizaci času počítače existují prakticky pro všechny platformy (od DOSu po UNIX) a je jich opravdu velké množství, poměrně kompletní seznam lze najít např. na adrese http://www.ntp.org/.

Závěr

Ačkoli čas na PC by bylo možné synchronizovat také pomocí rádiem vysílaných časových značek (např. pomocí přijímače DCF 77), u systémů pravidelně připojovaných nebo trvale připojených k internetu je výhodnější a levnější využití protokolu NTP či SNTP. Časové informace poskytované NTP a SNTP servery lze využít nejen pro synchronizaci času na připojených zařízeních, ale i k jeho nastavení v dalších systémech, které nejsou vybaveny hodinami reálného času, a které přesto časové informace využívají. Jedná se především o monitorovací systémy či o autonomní zařízení předávající data po internetové síti a nemající zajištěné nepřerušené napájení, atp. Po spuštění takového systému či jeho restartu se systémový čas sám nastaví podle vzdáleného serveru.

Martin Poupa
poupa@ kae.zcu.cz

DOWNLOAD & Odkazy

NTP: Přesný čas na PC prostřednictvím Internetu