Název
ntpd – Network Time Protocol (NTP) daemon
Synopse
ntpd ]
Popis
Program ntpd je démon operačního systému, který nastavuje a udržuje systémový denní čas v synchronizaci s internetovými standardními časovými servery. Jedná se o kompletní implementaci protokolu NTP (Network Time Protocol) verze 4, ale zachovává také kompatibilitu s verzí 3, jak ji definuje RFC-1305, a verzí 1 a 2, jak je definuje RFC-1059, respektive RFC-1119. ntpd provádí většinu výpočtů v 64bitové aritmetice s plovoucí desetinnou čárkou a relativně neohrabané64bitové operace s pevnou desetinnou čárkou provádí pouze tehdy, je-li to nutné pro zachování konečné přesnosti, přibližně 232 pikosekund. Ačkoli tato maximální přesnost není dosažitelná s běžnými pracovními stanicemi a sítěmi dneška, může být vyžadována s budoucími gigahertzovými takty procesorů a gigabitovými sítěmi LAN.
Jak funguje Ntp
Program ntpd pracuje tak, že si vyměňuje zprávy s jedním nebo více nakonfigurovanými servery v určených intervalech dotazování. Při spuštění, ať už poprvé nebo následně, vyžaduje program několik výměn od většiny těchto serverů, aby algoritmy pro zpracování a zmírnění signálu mohlyakumulovat a upravit data a nastavit hodiny. Aby byla síť chráněna před bursty, je počáteční interval dotazování pro každý server zpožděn o interval náhodně rozdělený na několik sekund. Při výchozím počátečním intervalu dotazování 64 s může uplynout několik minut, než se nastaví hodiny. Počáteční zpoždění pro nastavení hodin lze zkrátit pomocí klíčového slova iburst v konfiguračním příkazu serveru, jak je popsáno na stránce Možnosti konfigurace.
Většina dnešních operačních systémů a hardwaru obsahuje čip ročního času (TOY), který udržuje čas během období, kdy je vypnuto napájení. Při spuštění počítače se tento čip použije k inicializaci času operačního systému. Po synchronizaci počítače se serverem NTP operační systém čas od času čip opraví. V případě, že čip TOY není k dispozici nebo se jeho čas z nějakého důvodu liší od času serveru o více než 1000s, ntpd předpokládá, že je něco strašně špatně a jedinou spolehlivou akcí je zásah obsluhy a ruční nastavení hodin. To způsobí ukončení ntpd s panickou zprávou do systémového protokolu. Volba -g tuto kontrolu potlačí a hodiny budou nastaveny na čas serveru bez ohledu na čas čipu. Nicméně a na ochranu před poškozeným hardwarem, například při selhání baterie CMOS nebo poškození čítače hodin, po nastavení hodin chyba větší než1000s stejně způsobí ukončení ntpd.
Za běžných podmínek ntpd nastavuje hodiny v malých krocích, takže časová stupnice je skutečně spojitá a bez přerušení. Za podmínek extrémního přetížení sítě může rozptyl kruhového zpoždění překročit tři sekundy a synchronizační vzdálenost, která se rovná polovině kruhového zpoždění plus členům rozpočtu chyb, může být velmi velká. Algoritmy ntpd vyřazují posuny vzorků přesahující 128 ms, pokud interval, během něhož není žádný posun vzorku menší než 128 ms, nepřesáhne 900 s. První následující vzorek, bez ohledu na offset, posune hodiny na uvedený čas. V praxi to snižuje míru falešných poplachů, kdy jsou hodiny krokovány chybně, na mizivě nízký výskyt.
V důsledku tohoto chování se hodiny po nastavení velmi zřídka odchýlí o více než 128 ms, a to i v extrémních případech přetížení síťové cesty a rozptylu. Někdy, zejména při prvním spuštění ntpd, může chyba překročit 128 ms. To může příležitostně způsobit, že se hodiny nastaví zpětně, pokud je čas místních hodin vzhledem k serveru více než 128 s v budoucnosti. V některých aplikacích může být toto chování nepřijatelné. Pokud je na příkazovém řádku uvedena volba -x, hodiny nebudou nikdy krokovány a budou použity pouze korekce slew.
Před rozhodnutím o použití volby -x by měla být tato problematika pečlivě prozkoumána. Maximální možná rychlost slew je omezena na 500 parts-per-million(PPM) v důsledku zásad správnosti, na kterých je založen protokol NTP a návrh algoritmu. V důsledku toho může trvat dlouho, než místní hodiny konvergují k přijatelnému posunu, přibližně 2 000 s za každou sekundu, kdy jsou hodiny mimo přijatelný rozsah. Během tohoto intervalu nebudou místní hodiny konzistentní s žádnými jinými síťovými hodinami a systém nelze použít pro distribuované aplikace, které vyžadují správně synchronizovaný síťový čas.
I přes výše uvedená opatření se někdy při velkých frekvenčních chybách výsledné časové posuny dostanou mimo rozsah 128 ms a je nutná případná korekce kroku nebo času posunu. Pokud je po takové korekci frekvenční chyba tak velká, že první vzorek je mimo přijatelný rozsah, ntpd se dostane do stejného stavu, jako když soubor ntp.drift není přítomen. Záměrem tohoto chování je rychle opravit frekvenci a obnovit provoz do normálního režimu sledování. V nejextrémnějších případech (na mysli přichází time.ien.it) může docházet k občasným korekcím kroku/slevu a následným korekcím frekvence. V těchto případech pomáhá použít při konfiguraci serveru klíčové slovo burst.
Frekvenční disciplína
Chování ntpd při spuštění závisí na tom, zda existuje soubor s frekvencí, obvykle ntp.drift. Tento soubor obsahuje poslední odhad chyby hodinového kmitočtu. Pokud je ntpd spuštěn a soubor neexistuje, přejde ntpd do speciálního režimu určeného k rychlému přizpůsobení se časové a frekvenční chybě hodinového oscilátoru particularsystem. To trvá přibližně 15 minut, poté se čas a frekvence nastaví na nominální hodnoty a thentpd přejde do normálního režimu, ve kterém jsou čas a frekvence průběžně sledovány vzhledem k serveru. Po jedné hodině je vytvořen soubor s frekvencí a je do něj zapsán aktuální frekvenční offset. Když je ntpd spuštěn a soubor existuje, je frekvence ntpd inicializována ze souboru a okamžitě přejde do normálního režimu. Poté je do souboru v hodinových intervalech zapisován aktuální frekvenční offset.
Provozní režimy
ntpd může pracovat v některém z několika režimů, včetně symetrického aktivního/pasivního, klient/server broadcast/multicast a manycast, jak je popsáno na stránce Správa asociace. Normálně pracuje nepřetržitě, přičemž sleduje malé změny frekvence a trimuje hodiny pro maximálnípřesnost. Může však pracovat v jednorázovém režimu, kdy je čas nastaven z externího serveru a frekvence je nastavena z dříve zaznamenaného frekvenčního souboru. Vysílací/multicastový nebo manycastový klient může zjišťovat vzdálené servery, počítat faktory korekce zpoždění šíření mezi serverem a klientem a konfigurovat seautomaticky. To umožňuje nasadit flotilu pracovních stanic bez zadávání konfiguračních detailů specifických pro místní prostředí.
Ve výchozím nastavení běží ntpd v kontinuálním režimu, kdy je každý z případně několika externích serverů dotazován v intervalech určených složitým statemachine. Stavový stroj měří náhodné zpoždění při obchůzce a kolísání frekvence oscilátoru a pomocí aheuristického algoritmu určuje nejlepší interval dotazování. Obvykle a ve většině provozních prostředí bude stavový stroj začínat s intervaly 64 s a nakonec se budou zvyšovat po krocích až na 1024 s. Aby se zabránilo hromadění na serverech, je zavedena malá náhodná odchylka. Kromě toho, pokud se server stane na nějakou dobu nedostupným, je interval dotazování zvyšován po krocích na 1024s, aby se snížila síťová režie.
V některých případech nemusí být praktické, aby ntpd běžel nepřetržitě. Obvyklým řešením bylo spouštění programu ntpdate z cronjobu v určených časech. Tento program však nemá propracované algoritmy pro zpracování signálů, kontrolu chyb a zmírňování následků jako ntpd K tomuto účelu je určena volba The-q. Nastavení této volby způsobí, že ntpd skončí hned po prvním nastavení hodin skonfigurovanými servery. Postup pro počáteční nastavení hodin je stejný jako v kontinuálním režimu; většina aplikací bude pravděpodobně chtít zadat klíčové slovoiburst pomocí konfiguračního příkazu serveru. S tímto klíčovým slovem se vymění salva zpráv pro úpravu dat a hodiny se nastaví asi za 10 s. Pokud se po několika minutách nic neozve, démon se ukončí a skončí. Po vhodné době smutku může být program ntpdate ukončen.
Pokud je k dispozici podpora jádra pro disciplínu taktovací frekvence, což je případ systémů Solaris, Tru64, Linux a FreeBSD, je k dispozici užitečná funkce pro disciplínu taktovací frekvence. Nejprve je ntpd spuštěn v nepřetržitém režimu s vybranými servery, aby změřil a zaznamenal posun vnitřníhodinové frekvence do souboru s frekvencí. Může trvat několik hodin, než se frekvence a offset ustálí. Poté se ntpd zastaví a spustí se v jednorázovém režimu podle potřeby. Při každém spuštění se frekvence načte ze souboru a inicializuje se frekvence jádra.
Řízení intervalu dotazování
Tato verze NTP obsahuje složitý stavový stroj pro snížení zatížení sítě při zachování kvality synchronizace odpovídající pozorovanému jitteru a wanderu. Existuje řada způsobů, jak tuto operaci přizpůsobit tak, aby se zvýšila přesnost zkrácením intervalu nebo aby se snížila zátěž sítě jeho zvýšením. Uživateli se však doporučuje pečlivě zvážit důsledky změny rozsahu nastavení poll z výchozího minima 64 s na výchozí maximum 1 024 s. Výchozí minimum lze změnit příkazem tinker minpoll na hodnotu ne menší než 16 s. Tato hodnota se použije pro všechna nakonfigurovaná sdružení, pokud není potlačena volbou minpoll v konfiguračním příkazu. Všimněte si, že většina ovladačů zařízení nebude pracovat správně, pokud je interval dotazování kratší než 64 s, a že asociace broadcast serveru a manycast klienta budou také používat výchozí hodnotu, pokud nebude přepsána.
V některých případech zahrnujících vytáčené nebo placené služby může být užitečné zvýšit minimální interval na několik desítek minut a maximální interval na den nebo podobně. Za normálních provozních podmínek, jakmile se smyčka disciplíny hodin ustálí, bude interval zvyšován v krocích od minima kmaximu. To však předpokládá, že vlastní chyba taktovací frekvence je dostatečně malá na to, aby ji disciplinární smyčka korigovala. Rozsah zachycení smyčky je 500 PPMpři intervalu 64 s klesajícím o dvojnásobek při každém zdvojnásobení intervalu. Například při minimálním intervalu 1 024 s je rozsah zachycení pouze 31 PPM. Pokud je vlastní chyba větší než tato hodnota, musí být soubor drift ntp.drift speciálně upraven, aby se zbytková chyba snížila pod tuto mez. jakmile je to provedeno, soubor drift je automaticky aktualizován jednou za hodinu a je k dispozici pro inicializaci frekvence při dalších restartech démona.
The Huff-n‘-puff Filter
Ve scénářích, kdy je třeba stáhnout nebo odeslat značné množství dat přes telefonní modemy, může být kvalita měření času vážně zhoršena. K tomu dochází proto, že rozdílná zpoždění v obou směrech přenosu mohou být poměrně velká. V mnoha případech jsou zdánlivé časové chyby tak velké, žepřekračují prahové hodnoty kroku a během přenosu dat a po něm může dojít ke korekci kroku.
Filtr huff-n‘-puff je určen ke korekci zdánlivého časového posunu v těchto případech. Závisí na znalosti zpoždění šíření, když není přítomen žádný jiný provoz. V běžných scénářích k tomu dochází v jiné než pracovní době. Filtr udržuje posuvný registr, který si pamatuje minimální zpoždění za poslední interval měřený obvykle v hodinách. Za podmínek velkého zpoždění filtr koriguje zdánlivý posun pomocí znaménka posunu a rozdílu mezi zdánlivým a minimálním zpožděním. Název filtru odráží zápornou (huff) a kladnou (puff) korekci, která závisí na znaménku posunu.
Filtr se aktivuje příkazem tinker a klíčovým slovem huffpuff, jak je popsáno na stránce Různé volby.
Poznámky
Je-li do ntpd zabudována podpora NetInfo, pak se ntpd pokusí načíst svou konfiguraci z NetInfo, pokud je výchozí ntp.conf nelze přečíst a žádný soubor není zadán volbou -c.
V kontextech, kde se očekává název hostitele, kvalifikátor -4 před názvem hostitele vynucuje překlad DNS do jmenného prostoru IPv4, zatímco kvalifikátor -6 vynucuje překlad DNS do jmenného prostoru IPv6.
Různé vnitřní proměnné ntpd lze zobrazit a měnit konfigurační volby za běhu ntpd pomocí obslužných programů ntpq antpdc.
Při spuštění ntpd se podívá na hodnotu umask, a pokud je nulová, ntpd nastaví umask na 022
Pokud není použita volba -n, -d nebo -D, ntpd změní aktuální pracovní adresář na kořenový adresář, takže všechny volby nebo příkazy určující cesty musí používat absolutní cestu nebo cestu relativní ke kořenovému adresáři.
Příkazy příkazového řádku
-4 Vynutit překlad názvů hostitelů DNS do jmenného prostoru IPv4. -6 Vynutí překlad názvů hostitelů DNS do jmenného prostoru IPv6. -a Vyžadovat kryptografické ověřování pro klienty broadcast, klienty multicast a symetrické pasivní asociace. Toto je výchozí nastavení. -A Nevyžadovat kryptografické ověřování pro broadcast klienta, multicast klienta a symetrické pasivní asociace. To není téměř nikdy dobrý nápad. -b Povolit klientovi synchronizaci s vysílacími servery. -c conffile Zadejte název a cestu ke konfiguračnímu souboru, výchozí /etc/ntp.conf -d Zadejte režim ladění. Tato volba se může vyskytnout vícekrát, přičemž každý výskyt znamená větší podrobnost zobrazení. -D level Zadejte přímo úroveň ladění. -f driftfile Zadejte název a cestu k souboru s frekvencí. Jedná se o stejnou operaci jako u konfiguračního příkazu driftfile driftfile. -g Za normálních okolností se ntpd ukončí se zprávou do systémového protokolu, pokud posun překročí práh paniky, který je ve výchozím nastavení 1000 s. Tato volba umožňuje nastavit čas na libovolnou hodnotu bez omezení; může se tak však stát pouze jednou. Pokud je prahová hodnota překročena i poté, ntpd se ukončí se zprávou do systémového protokolu. Tuto volbu lze použít s volbami -q a -x. Další možnosti naleznete v příkazu tinker. -i jaildir Chroot serveru do adresáře jaildir Tato volba také znamená, že se server při spuštění pokusí upustit od práv roota (jinak chroot poskytuje jen velmi malou dodatečnou bezpečnost), a je k dispozici pouze v případě, že operační systém podporuje spuštění serveru bez plných práv roota. Možná bude nutné zadat také volbu -u. -I iface Poslouchat na rozhraní. Tato volba se může objevit neomezený početkrát. -k keyfile Zadejte název a cestu k souboru symetrického klíče. Jedná se o stejnou operaci jako u konfiguračního příkazu keys keyfile. -l logfile Zadejte název a cestu k souboru protokolu. Výchozí je systémový soubor protokolu. Jedná se o stejnou operaci jako příkaz logfile logfileconfiguration. -L Neposlouchat virtuální IP adresy. Ve výchozím nastavení je nastaveno naslouchání. -m Uzamknout paměť. -n Neodkládat paměť. -N V rozsahu povoleném operačním systémem spouštějte ntpd s nejvyšší prioritou. -p pidfile Zadejte název a cestu k souboru používanému pro záznam ID procesu ntpd. Jedná se o stejnou operaci jako u příkazu pidfile pidfileconfiguration. -P priority V rozsahu povoleném operačním systémem spustí ntpd se zadanou prioritou. -q Ukončí ntpd hned po prvním nastavení hodin. Toto chování napodobuje chování programu ntpdate, který má být ukončen. S touto volbou lze použít volby-g a -x. Poznámka: Časová disciplína jádra je s touto volbou zakázána. -r broadcastdelay Určuje výchozí zpoždění šíření z broadcast/multicast serveru do tohoto klienta. Tato volba je nutná pouze v případě, že zpoždění nelze vypočítatautomaticky pomocí protokolu. -s statsdir Zadejte cestu k adresáři pro soubory vytvořené statistickým zařízením. Jedná se o stejnou operaci jako konfigurační příkaz statsdir statsdir. -t key Přidání čísla klíče do seznamu důvěryhodných klíčů. Tato volba se může vyskytnout více než jednou. -u user Zadejte uživatele a volitelně skupinu, na kterou se má přepnout. Tato volba je k dispozici pouze v případě, že operační systém podporuje spuštění serveru bez plných práv roota. v současné době je tato volba podporována pod NetBSD (konfigurace s –enable-clockctl) a Linuxem (konfigurace s –enable-linuxcaps). -U interval aktualizace rozhraní Počet sekund, které se počkají mezi skenováním seznamu rozhraní za účelem výběru nového a odstranění síťového rozhraní. Nastavením na 0 zakážete dynamickou aktualizaci seznamu rozhraní. výchozí nastavení je skenování každých 5 minut. -v proměnná-V proměnná Přidejte systémovou proměnnou uvedenou ve výchozím nastavení. -x Normálně se čas posouvá, pokud je posun menší než prahová hodnota kroku, která je ve výchozím nastavení 128 ms, a krokuje se, pokud je nad touto hodnotou. Tato volba nastaví práh na 600 s, což je v rámci okna přesnosti pro ruční nastavení hodin. Poznámka: Protože rychlost posuvu typických unixových jader je omezenana 0,5 ms/s, každá sekunda nastavení vyžaduje amortizační interval 2000 s. Nastavení o délce 600 s tedy bude trvat téměř 14 dní. tuto volbu lze použít s volbami -g a -q. Další možnosti naleznete v příkazu tinker. Poznámka: Časová disciplína jádra je touto volbou zakázána.
konfigurační soubor
Obvykle ntpd při spuštění čte konfigurační soubor ntp.conf, aby určil zdroje synchronizace a provozní režimy. je také možné zadat funkční, i když omezenou konfiguraci zcela na příkazovém řádku, čímž odpadá potřeba konfiguračního souboru. To může být užitečné zejména v případě, kdy má být místní hostitel nakonfigurován jako broadcast/multicast klient, přičemž všichni peeři jsou určováni nasloucháním broadcastům v době spuštění.
Obvykle je konfigurační soubor nainstalován v adresáři /etc, ale může být nainstalován i jinde (viz volba příkazového řádku -c conffile). Formát souboru je podobný jako u jiných unixových konfiguračních souborů – komentáře začínají znakem # a sahají až na konec řádku; prázdné řádky jsou ignorovány.
Konfigurační příkazy se skládají z počátečního klíčového slova následovaného seznamem argumentů, z nichž některé mohou být volitelné, oddělených bílými znaky. Příkazy nesmí pokračovat na více řádcích. Argumenty mohou být jména hostitelů, adresy hostitelů zapsané v číselném tvaru s tečkami, celá čísla, čísla s pohyblivou řádovou čárkou (při zadávání časů v sekundách) a textové řetězce. Nepovinné argumenty jsou v následujících popisech odděleny znaky, zatímco alternativy jsou odděleny znaky | Zápis znamená nepovinné, neurčité opakování poslední položky před
Kódy ukončení
Nulový kód ukončení znamená chybu. Veškerá chybová hlášení jsou ve výchozím nastavení zaznamenána do systémového protokolu.
Kód ukončení je 0 pouze tehdy, když je ntpd ukončen signálem nebo když je použita volba -q a ntpd úspěšně nastaví systémové hodiny.
Viz také
ntp.conf(5), ntpq(8), ntpdc(8)
.