Synchronizácia času - NTP protokol

26. 2. 2002
Doba čtení: 5 minut

Sdílet

V predchádzajúcom dieli sme si povedali čosi o systémových a hardvérových hodinách a možnostiach vyrovnávania ich pravidelných odchýliek v prípade, že nemáme prístup do siete Internet. Ak tento prístup máme, môžeme si situáciu výrazne zjednodušiť synchronizáciou času cez NTP protokol, o ktorom si dnes povieme viac.
NTP protokol

NTP (Network Time Protocol) je sieťový UDP/IP protokol. Slúži na sychronizovanie systémového času medzi servermi Internetu. Vyvinutý bol Davidom Millsom z Univerzity Delaware. Je platným štandartom podľa príslušných RFC dokumentov (STD 12, RFC 1119, RFC 1305, RFC 2030). Používa univerzálny čas UTC (Coordinated Universal Time) na synchronizovanie času s presnosťou na mili až mikrosekundy. Aktuálna verzia NTP protokolu je 4 a má sebou viac ako 20 ročný vývoj. Klasický unixový NTP daemon (ntpd) je možné prevádzkovať na rôznych platformách a architektúrách, počnúc UNIX-based systémami, cez VMS až k MS-Windows.

Tiež je možné používať zjednodušenú verziu NTP protokolu: SNTP (Simple Network Ttime Protocol). Rozdiel je v tom, že klient s podporou iba SNTP nemôže slúžiť zároveň aj ako server pre ďalších klientov.

Synchronizovať čas je pre bežného užívateľa užitočné a navyše veľmi jednoduché. Odpadajú najmä potenciálne problémy, ktoré by mohli vzniknúť nepresnosťou systémových hodín a taktiež rôzne starosti s pravidelným manuálnym nastavovaním času je to teda aj pohodlné.

Sú však aj miesta, kde sú požiadavky na presný čas doslova nevynutné. Tu zastupuje synchronizácia času nenahraditeľnú úlohu. Ide hlavne o relačné databázové systémy využívajúce časovú značku (timestamp); monitorovanie, meranie a kontrola počítačových sietí; správa a najmä kontrola platnosti resp. životnosti šifrovacích kľúčov a certifikátov a mnohé iné. Tieto zložky sa potom následne využívajú v príslušných produkčných sférach a prostrediach, kde tvoria spravidla dôležité a nezanedbateľné elementy svojich výrobných a vývojových reťazcov.

NTP protokol však neslúži len na získavanie presného času. Sú miesta, kde ani tak veľmi nezáleží na presnom čase ako na jeho precíznej synchronizácii medzi serverom a viacerými klientami. Príkladom je napr. autentifikačná služba Kerberos. NTP protokol má teda svoje miesto aj na separovaných lokálnych sieťach alebo podsieťach.

Algoritmus

Samotný NTP algoritmus je pomerne zložitý. Vychádzajúc z predpokladu, že každá strana spojenia má svoj špecifický čas nevieme zistiť presne (iba približne) dobu, ktorou paket putoval od serveru ku klientovi, resp. od klienta k serveru. Táto odchýlka sa však dá minimalizovať na minimum práve vďaka NTP algoritmu.

Pri posielaní požiadavky na NTP server, zapíše klient do paketu aktuálny systémový čas (originate timestamp). Po putovaní sieťou dorazí paket na server a ten na ňom vykoná dva zápisy vlastného systémového času: jeden pri obdržaní (receive timestamp) a ďalší pri spätnom posielaní resp. odpovedaní klientovi (transmit timestamp). Klient potom na základe času obdžania (final timestamp) a uvedených troch zložiek aspoň približne vypočíta svoju časovú vzdialenosť od NTP servera. Tá je rovná polovici celkovej veľkosti putovania paketu mínus čas spracovávania NTP serverom.

Vyjadrené vzorcom:

                (final_ts - originate_ts) - (transmit_ts - receive_ts)
time_distance = ------------------------------------------------------ =
                                          2

                (receive_ts - originate_ts) + (final_ts - transmit_ts)
              = ------------------------------------------------------
                                          2

Pre samotnú časovú synchronizáciu s jedným serverom je nutné vykonať viac prenosov. Pomocou nich je možné zistiť časovú vzdialenosť (time offset) medzi klientom a serverom a takisto najvačšiu možnú odchýlku (dispersion) od tejto vzdialenosti. Výsledný čas konkrétneho servera nie je akceptovaný kým nie je vykonaný potrebný počet prenosov a kým nie sú splnené všetky podmienky definované v špecifikácii NTP protokolu. Inými slovami, čas nemôže byť synchronizovaný pomocou zdroja, ktorý je považovaný za chybný.

Na synchronizovnaie času sa spravidla používa viac ako jeden zdroj (pokiaľ nie sme na lokálnej sieti s jedným time serverom). Vyššieuvedený algoritmus sa aplikuje na všetky zdroje. Pre každý jeden server je vytvorená sada dátových typov a štruktúr, ktorá je za pomoci špecifických konštánt analyzovaná filterom. To by malo mať za následok zlepšenie kvality presnosti výsledného času príslušného servera. Na základe tejto analýzy sú zdroje rozdelené na platné a neplatné. Nakoniec je pomocou časov všetkých platných zdrojov vytvorený čas výsledný a tým sú potom nastavené systémové hodiny klienta.

Zdroje času na Internete

NTP servery v sieti Internet sa delia na primárne a sekundárne. Primárne (stratum-1) synchronizujú svoj čas voči reálnym zdrojom presného času a to obvykle pomocou rádiových, modemových alebo satelitných systémov, ako je napríklad GPS (Global Positioning Service). Sekundárne (stratum-2) zase synchronizujú presný čas voči serverom primárnym. Z uvedeného vyplýva, že sekundárne servery musia vystupovať aj v úlohe klienta. Okrem klasického symetrického klient/server módu sa môže použiť aj multicast mód (server vysiela dáta a vybraný konečný počet klientov prijíma). To všetko s možnosťou použitia kryptovanej autentifikácie.

Stratum vyjadruje mieru odchýlky časového zdroja od univerzálneho času. Rádiové hodiny, ktoré získavajú čas zo špecializovaných vysielačov alebo satelitného navigačného systému sú stratum-0. Primárny NTP server, ktorý je s týmito hodinami priamo spojený je stratum-1. Sekundárne servery, ktoré synchronizujú čas voči primárnym pomocou NTP protokolu sú stratum-2. Ďalšie sú stratum-3, a pod.

Čo sa týka štatistiky, v roku 1999 sa nachádzalo v sieti Internet už viac ako 230 primárnych a viac ako 100000 sekundárnych time serverov. Toto číslo neustále narastá a v dnešnej dobe už dosahuje pravdepodobne aj dvojnásobných rozmerov.

V sieti sa samozrejme nachádzajú aj verejné primárne alebo sekundárne time servery. Pretože zaťaženie primárnych serverov býva vysoké, doporučuje sa používať radšej servery sekundárne, ktorých odchýlka je oproti primárnym serverom zanedbateľná. Tu sa nachádza ich zoznam. Mnohé z nich majú uvedené svoje vlastné špecifické podmienky používania. Niekedy je to obmedzenie na príslušný región, niekedy stačí len poslať e-mail so žiadosťou. Prosím, dodržujte tieto podmienky.

Doporučuje sa taktiež používať DNS, pretože IP adresy sa zvyknú čas od času zmeniť. Ak máte chuť, vyberte si za príslušných podmienok konkrétne NTP servery zo zonamu, pretože v ďalšom dieli seriálu nainštalujeme a nakonfigurujeme aplikáciu chrony, pomocou ktorej budeme synchronizovať čas oproti vybraným zdrojom z Internetu, zároveň globálne synchronizovať čas na našej lokálnej sieti a vyrovnávať odchýlky od presného času po vypnutí počítača (serveru).

bitcoin_skoleni

Zdroje

RFC dokumenty a štandarty: STD 12, RFC 867, RFC 868, RFC 958, RFC 1059, RFC 1119, RFC 1128, RFC 1129, RFC 1165, RFC 1305 (PDF), RFC 1361, RFC 1708, RFC 1769, RFC 2030
NTP homepage: http://www.ee­cis.udel.edu/~ntp/
NTP FAQ: http://www.ee­cis.udel.edu/~ntp/ntpf­aq/NTP-a-faq.htm
Public NTP Time Servers: http://www.ee­cis.udel.edu/~mi­lls/ntp/server­s.htm

Autor článku