Nume

ntpd – Network Time Protocol (NTP) daemon

Sinopsis

ntpd ]

Descriere

Programul ntpd este un daemon al sistemului de operare care setează și menține ora sistemului în sincronism cu serverele de timp standard de pe Internet. Este o implementare completă a protocolului NTP (Network Time Protocol) versiunea 4, dar păstrează, de asemenea, compatibilitatea cu versiunea 3, așa cum este definită de RFC-1305, și cu versiunile 1și 2, așa cum sunt definite de RFC-1059 și, respectiv, RFC-1119. ntpd efectuează majoritatea calculelor în aritmetică în virgulă mobilă pe 64 de biți și efectuează operații relativ greoaie în virgulă fixă pe 64 de biți numai atunci când este necesar pentru a păstra precizia finală, de aproximativ 232 de picosecunde. În timp ce precizia supremă nu este realizabilă cu stațiile de lucru și rețelele obișnuite de astăzi, ea poate fi necesară cu viitoarele ceasuri CPU de gigahertzi și rețelele LAN gigabit.

Cum funcționează Ntp

Programul ntpd funcționează prin schimbul de mesaje cu unul sau mai multe servere configurate la intervale de interogare desemnate. Atunci când este pornit, fie pentru prima dată, fie pentru următoarele, programul necesită mai multe schimburi de la majoritatea acestor servere, astfel încât algoritmii de procesare și atenuare a semnalelor să poatăacumula și îngriji datele și să seteze ceasul. Pentru a proteja rețeaua împotriva exploziilor, intervalul inițial de interogare pentru fiecare server este întârziat cu un interval aleatoriu de câteva secunde. La intervalul inițial implicit de interogare de 64 de secunde, pot trece mai multe minute înainte ca ceasul să fie setat. Întârzierea inițială pentru setarea ceasului poate fi redusă folosind cuvântul cheie iburst cu comanda de configurare a serverului, așa cum este descris în pagina Opțiuni de configurare.

Majoritatea sistemelor de operare și a hardware-ului de astăzi încorporează un cip de temporizare (TOY) pentru a menține ora în perioadele în care curentul este oprit. Atunci când mașina este pornită, cipul este utilizat pentru a inițializa ora sistemului de operare. După ce mașina s-a sincronizat cu un server NTP, sistemul de operare corectează cipul din când în când. În cazul în care nu există un cip TOY sau, din anumite motive, ora sa este la o diferență mai mare de 1000 de secunde față de ora serverului, ntpd presupune că ceva trebuie să fie teribil de greșit și singura acțiune fiabilă este ca operatorul să intervină și să regleze manual ceasul. Acest lucru face ca ntpd să iasă cu un mesaj de panică în jurnalul sistemului. Opțiunea -g anulează această verificare și ceasul va fi setat la ora serverului indiferent de ora cipului. Cu toate acestea, și pentru a se proteja împotriva defecțiunilor hardware, cum ar fi atunci când bateria CMOS se defectează sau când contorul ceasului devine defect, odată ce ceasul a fost setat, o eroare mai mare de1000s va face ca ntpd să iasă oricum.

În condiții obișnuite, ntpd ajustează ceasul în pași mici, astfel încât scala de timp să fie efectiv continuă și fără discontinuități. În condiții de congestie extremă a rețelei, jitterul întârzierii dus-întors poate depăși trei secunde, iar distanța de sincronizare, care este egală cu jumătate din termenul de întârziere dus-întors plus termenii bugetului de eroare, poate deveni foarte mare. Algoritmii ntpd elimină decalajele de eșantionare care depășesc 128 ms, cu excepția cazului în care intervalul în care niciun decalaj de eșantionare nu este mai mic de 128 ms depășește 900 de secunde. Prima eșantionare de după aceasta, indiferent de decalaj, duce ceasul la ora indicată. În practică, acest lucru reduce rata alarmelor false în cazul în care ceasul este pasat din eroare la o incidență extrem de mică.

Ca urmare a acestui comportament, odată ce ceasul a fost setat, acesta se abate foarte rar mai mult de 128 ms, chiar și în cazuri extreme de congestie a căii de rețea și de fluctuație. Uneori, în special atunci când ntpd este pornit pentru prima dată, eroarea poate depăși 128 ms. Acest lucru poate cauza, ocazional, ca ceasul să fie setat înapoi dacă ora ceasului local este mai mult de 128 s în viitor în raport cu serverul. În unele aplicații, acest comportament poate fi inacceptabil. Dacă opțiunea -x este inclusă în linia de comandă, ceasul nu va fi niciodată etapizat și vor fi utilizate doar corecțiile de derulare.

Este necesar să se analizeze cu atenție aceste probleme înainte de a decide să se utilizeze opțiunea -x. Rata maximă posibilă de slew este limitată la 500 părți pe milion(PPM) ca o consecință a principiilor de corectitudine pe care se bazează protocolul NTP și proiectarea algoritmului. Ca urmare, ceasul local poate avea nevoie de mult timp pentru a converge la un decalaj acceptabil, aproximativ 2.000 s pentru fiecare secundă în care ceasul se află în afara intervalului acceptabil. În acest interval, ceasul local nu va fi în concordanță cu nici un alt ceas de rețea, iar sistemul nu poate fi utilizat pentru aplicații distribuite care necesită o sincronizare corectă a timpului de rețea.

În ciuda precauțiilor de mai sus, uneori, atunci când sunt prezente erori mari de frecvență, decalajele de timp rezultate se îndepărtează în afara intervalului de 128 ms și este necesară o corecție a timpului de pas sau de baleiaj evenimențial. Dacă în urma unei astfel de corecții eroarea de frecvență este atât de mare încât primul eșantion este în afara intervaluluiacceptabil, ntpd intră în aceeași stare ca atunci când fișierul ntp.drift nu este prezent. Intenția acestui comportament este de a corecta rapid frecvența și de a restabili funcționarea în modul normal de urmărire. În cazurile cele mai extreme (îmi vine în minte time.ien.it), pot exista ocazional corecții de pas/slew și corecții ulterioare de frecvență. În aceste cazuri este utilă utilizarea cuvântului cheie burst la configurarea serverului.

Disciplina frecvenței

Comportamentul ntpd la pornire depinde de existența sau nu a fișierului de frecvență, de obicei ntp.drift. Acest fișier conține cea mai recentă estimare a erorii de frecvență a ceasului. Atunci când ntpd este pornit și fișierul nu există, ntpd intră într-un mod special conceput pentru a se adapta rapid la eroarea particulară de timp și frecvență a oscilatorului ceasului de sistem. Acest lucru durează aproximativ 15 minute, după care ora și frecvența sunt setate la valorile nominale, iar ntpd intră în modul normal, în care ora și frecvența sunt urmărite continuu în raport cu serverul. După o oră se creează fișierul de frecvență și se scrie în el decalajul de frecvență curent. Atunci când ntpd este pornit și fișierul există, frecvența ntpd este inițializată din fișier și intră imediat în modul normal. După aceea, decalajul de frecvență curent este scris în fișier la intervale de o oră.

Moduri de funcționare

ntpd poate funcționa în oricare dintre mai multe moduri, inclusiv simetric activ/pasiv, client/server broadcast/multicast și manycast, așa cum este descris în paginaAssociation Management. În mod normal, funcționează în mod continuu, în timp ce monitorizează micile modificări de frecvență și reglează ceasul pentru o precizie maximă. Cu toate acestea, poate funcționa într-un mod unic în care ora este setată de pe un server extern, iar frecvența este setată dintr-un fișier de frecvență înregistrat anterior. Un client broadcast/multicast sau manycast poate descoperi serverele la distanță, poate calcula factorii de corecție a întârzierii de propagare server-client și își poate configura în mod automat. Acest lucru face posibilă implementarea unei flote de stații de lucru fără a specifica detalii de configurare specifice mediului local.

În mod implicit, ntpd rulează în modul continuu, în care fiecare dintre cele eventual mai multe servere externe este interogat la intervale determinate de o mașină de stare intricată. Mașina de stat măsoară jitterul incidental al întârzierii dus-întors și fluctuația frecvenței oscilatorului și determină cel mai bun interval de interogare folosind un algoritm euristic. În mod normal, și în majoritatea mediilor de operare, mașina de stat va începe cu intervale de 64 de secunde și, în cele din urmă, va crește în trepte până la 1024 de secunde.O mică cantitate de variație aleatorie este introdusă pentru a evita aglomerarea la servere. În plus, în cazul în care un server devine inaccesibil pentru o anumită perioadă de timp, intervalul de interogare este mărit în pași până la 1024s pentru a reduce costurile de rețea.

În unele cazuri, este posibil să nu fie practic ca ntpd să funcționeze continuu. O soluție de rezolvare obișnuită a fost de a rula programul ntpdate dintr-un cronjob la momente desemnate. Cu toate acestea, acest program nu dispune de algoritmii de procesare a semnalelor meșteșugite, de verificare a erorilor și de atenuare a acestora pe care îi are ntpd Opțiunea-q este destinată acestui scop. Setarea acestei opțiuni va face ca ntpd să iasă imediat după ce setează ceasul pentru prima dată cu servereleconfigurate. Procedura de setare inițială a ceasului este aceeași ca în modul continuu; majoritatea aplicațiilor vor dori probabil să specifice cuvântul cheieiburst cu comanda de configurare a serverului. Cu acest cuvânt cheie, se schimbă o serie de mesaje pentru a aranja datele, iar ceasul este setat în aproximativ 10 s. Dacă nu se aude nimic după câteva minute, daemonul se oprește și iese. După o perioadă adecvată de doliu, programul ntpdatepoate fi retras.

Când este disponibil suportul kernelului pentru a disciplina frecvența ceasului, ceea ce este cazul pentru Solaris, Tru64, Linux și FreeBSD stock, este disponibilă o caracteristică utilă pentru a disciplina frecvența ceasului. În primul rând, ntpd este rulat în modul continuu cu serverele selectate pentru a măsura și înregistra decalajul intrinsec al frecvenței ceasului în fișierul de frecvență. Este posibil să fie nevoie de câteva ore pentru ca frecvența și decalajul să se stabilizeze. Apoi, ntpd se oprește și se rulează în modul „one-time”, după caz. La fiecare pornire, frecvența este citită din fișier și inițializează frecvența nucleului.

Controlul intervalului de sondaj

Această versiune de NTP include o mașină de stare complexă pentru a reduce sarcina rețelei, menținând în același timp o calitate a sincronizării în concordanță cu jitterul și rătăcirea observate. Există o serie de modalități de adaptare a funcționării pentru a îmbunătăți precizia prin reducerea intervalului sau pentru a reduce sarcina rețelei prin creșterea acestuia. Cu toate acestea, utilizatorul este sfătuit să analizeze cu atenție consecințele modificării intervalului de reglare a sondajului de la minimul implicit de 64 s la maximul implicit de 1 024 s. Minimul implicit poate fi modificat cu comanda tinker minpoll la o valoare care să nu fie mai mică de 16 s. Această valoare este utilizată pentru toate asociațiile configurate, cu excepția cazului în care este suprascrisă de opțiunea minpoll din comanda de configurare. Rețineți că majoritatea driverelor de dispozitiv nu vor funcționa corespunzător dacă intervalul de interogare este mai mic de 64 s și că asociațiile server de difuzare și client manycast vor folosi, de asemenea, valoarea implicită, dacă nu este suprascrisă.

În unele cazuri care implică servicii de apelare sau de taxare, poate fi utilă creșterea intervalului minim la câteva zeci de minute și a intervalului maxim la o zi sau mai mult. În condiții normale de funcționare, odată ce bucla de disciplină a ceasului s-a stabilizat, intervalul va fi mărit în trepte de la minim la maxim. Totuși, acest lucru presupune că eroarea intrinsecă a frecvenței ceasului este suficient de mică pentru ca bucla de disciplină să o corecteze. Intervalul de captură al buclei este de 500 PPMla un interval de 64s, scăzând cu un factor de doi pentru fiecare dublare a intervalului. La un minim de 1 024 s, de exemplu, intervalul de captură este de numai 31 PPM. Dacă eroarea intrinsecă este mai mare decât aceasta, fișierul drift ntp.drift va trebui să fie special adaptat pentru a reduce eroarea reziduală sub această limită. odată ce acest lucru este realizat, fișierul drift este actualizat automat o dată pe oră și este disponibil pentru a inițializa frecvența la repornirile ulterioare ale daemonului.

Filtrul Huff-n’-puff

În scenariile în care o cantitate considerabilă de date trebuie să fie descărcată sau încărcată prin modemuri telefonice, calitatea cronometrării poate fi serios degradată. Acest lucru se întâmplă deoarece întârzierile diferențiale pe cele două direcții de transmisie pot fi destul de mari. În multe cazuri, erorile de timp aparente sunt atât de mari încât depășesc pragul de pas și poate apărea o corecție de pas în timpul și după ce transferul de date este în curs.

Filtrul huff-n’-puff este conceput pentru a corecta decalajul de timp aparent în aceste cazuri. Acesta depinde de cunoașterea întârzierii de propagare atunci când nu este prezent alt trafic. În scenarii obișnuite, acest lucru se întâmplă în alte perioade decât orele de lucru. Filtrul menține un registru cu deplasare care reține întârzierea minimă pe parcursul celui mai recent interval măsurat, de obicei, în ore. În condiții de întârziere severă, filtrul corectează decalajul aparent folosind semnul decalajului și diferența dintre întârzierea aparentă și întârzierea minimă. Numele filtrului reflectă corecția negativă (huff) și pozitivă (puff), care depinde de semnul decalajului.

Filtrul este activat de comanda tinker și de cuvântul cheie huffpuff, așa cum este descris în pagina de opțiuni diverse.

Note

Dacă suportul NetInfo este încorporat în ntpd, atunci ntpd va încerca să citească configurația sa din NetInfo dacă se utilizează valoarea implicită ntp.conf nu poate fi citit și nu este specificat niciun fișier prin opțiunea -c.

În contextele în care se așteaptă un nume de gazdă, un calificativ -4 care precede numele de gazdă forțează rezoluția DNS la spațiul de nume IPv4, în timp ce un calificativ -6 forțează rezoluția DNS la spațiul de nume IPv6.

Diverse variabile interne ale ntpd pot fi afișate și opțiunile de configurare pot fi modificate în timp ce ntpd rulează cu ajutorul programelor utilitare ntpq șintpdc.

Când ntpd pornește, se uită la valoarea lui umask, iar dacă aceasta este zero, ntpd va seta umask la 022

Dacă nu se folosește opțiunea -n, -d sau -D, ntpd schimbă directorul de lucru curent în directorul rădăcină, astfel încât orice opțiuni sau comenzi care specifică căi trebuie să folosească o cale absolută sau o cale relativă la rădăcină.

Opțiuni de linie de comandă

-4 Forțați rezoluția DNS a numelor de gazdă în spațiul de nume IPv4. -6 Forțați rezoluția DNS a numelor de gazde la spațiul de nume IPv6. -a Solicitați autentificarea criptografică pentru clientul de difuzare, clientul de multicast și asociațiile pasive simetrice. Aceasta este valoarea implicită. -A Nu solicitați autentificarea criptografică pentru asociațiile de tip broadcast client, multicast client și asociații pasive simetrice. Aceasta nu este aproape niciodată o idee bună. -b Permiteți clientului să se sincronizeze cu serverele de difuzare. -c conffile Specificați numele și calea fișierului de configurare, implicit /etc/ntp.conf -d Specificați modul de depanare. Această opțiune poate apărea de mai multe ori, fiecare apariție indicând detalii mai mari de afișare. -D level Specifică direct nivelul de depanare. -f driftfile Specificați numele și calea fișierului de frecvență. Aceasta este aceeași operațiune ca și comanda de configurare driftfile driftfile driftfile. -g În mod normal, ntpd iese cu un mesaj în jurnalul sistemului dacă decalajul depășește pragul de panică, care este de 1000 s în mod implicit. Această opțiune permite catime să fie setat la orice valoare fără restricții; cu toate acestea, acest lucru se poate întâmpla doar o singură dată. Dacă pragul este depășit după aceea, ntpd va ieși cu un mesaj către jurnalul sistemului. Această opțiune poate fi utilizată împreună cu opțiunile -q și -x. Consultați comanda tinker pentru alte opțiuni. -i jaildir Chroot the server to the directory jaildir Această opțiune presupune, de asemenea, că serverul încearcă să renunțe la privilegiile de root la pornire (în caz contrar,chroot oferă foarte puțină securitate suplimentară) și este disponibilă numai dacă sistemul de operare acceptă rularea serverului fără privilegii complete de root. Este posibil să fie necesar să specificați și o opțiune -u. -I iface Ascultă pe interfață. Această opțiune poate apărea de un număr nelimitat de ori. -k keyfile Specificați numele și calea fișierului de chei simetrice. Aceasta este aceeași operațiune ca și comanda de configurare keys keyfile. -l logfile Specifică numele și calea fișierului jurnal. Valoarea implicită este fișierul jurnal de sistem. Aceasta este aceeași operațiune ca și comanda logfile logfile logfileconfiguration. -L Do not listen to virtual IPs. Valoarea implicită este de a asculta. -m Blochează memoria. -n Don’t fork. -N În măsura permisă de sistemul de operare, rulați ntpd la cea mai mare prioritate. -p pidfile Specifică numele și calea fișierului utilizat pentru a înregistra ID-ul procesului ntpd. Aceasta este aceeași operațiune ca și comanda pidfile pidfileconfiguration. -P priority În măsura permisă de sistemul de operare, rulați ntpd la prioritatea specificată. -q Ieșiți din ntpd imediat după ce este setat prima dată ceasul. Acest comportament îl imită pe cel al programului ntpdate, care urmează să fie retras. Opțiunile-g și -x pot fi utilizate cu această opțiune. Notă: Disciplina de timp a kernelului este dezactivată cu această opțiune. -r broadcastdelay Specifică întârzierea de propagare implicită de la serverul de broadcast/multicast la acest client. Această opțiune este necesară numai în cazul în care întârzierea nu poate fi calculată automat de către protocol. -s statsdir Specifică calea de acces la directorul pentru fișierele create de facilitatea de statistici. Aceasta este aceeași operațiune ca și comanda de configurare statsdir statsdir. -t key Adaugă un număr de cheie la lista de chei de încredere. Această opțiune poate apărea de mai multe ori. -u user Specifică un utilizator și, opțional, un grup în care să se treacă. Această opțiune este disponibilă numai dacă sistemul de operare acceptă rularea serverului fără privilegii complete de root. în prezent, această opțiune este acceptată în NetBSD (configurați cu –enable-clockctl) și Linux (configurați cu –enable-linuxcaps). -U interval de actualizare a interfeței Număr de secunde de așteptat între scanările listei de interfețe pentru a prelua interfețe de rețea noi și șterse. Setați la 0 pentru a dezactiva actualizarea dinamică a listei de interfețe. valoarea implicită este de a scana la fiecare 5 minute. -v variabilă-V variabilă Adăugați o variabilă de sistem listată în mod implicit. -x În mod normal, timpul este rotit dacă decalajul este mai mic decât pragul de pas, care este de 128 ms în mod implicit, și în trepte dacă este mai mare decât pragul. Această opțiune stabilește pragul la 600 s, ceea ce se încadrează bine în fereastra de precizie pentru a seta manual ceasul. Notă: Deoarece rata de deplasare a nucleelor Unix tipice este limitată la 0,5 ms/s, fiecare secundă de ajustare necesită un interval de amortizare de 2000 s. Astfel, o ajustare de până la 600 s va dura aproape 14 zile pentru a fi finalizată. această opțiune poate fi utilizată împreună cu opțiunile -g și -q. Consultați comanda tinker pentru alte opțiuni. Notă: Disciplina de timp a kernelului este dezactivată cu această opțiune.

fișierul de configurare

În mod normal, ntpd citește fișierul de configurare ntp.conf la momentul pornirii pentru a determina sursele de sincronizare și modurile de funcționare. este, de asemenea, posibil să se specifice o configurație funcțională, deși limitată, în întregime pe linia de comandă, evitându-se astfel necesitatea unui fișier de configurare. Acest lucru poate fi deosebit de util atunci când gazda locală urmează să fie configurată ca un client broadcast/multicast, toți omologii fiind determinați prin ascultarea transmisiunilor la momentul lansării.

De obicei, fișierul de configurare este instalat în directorul /etc, dar ar putea fi instalat în altă parte (a se vedea opțiunea de linie de comandă -c conffile). Formatul fișierului este similar cu cel al altor fișiere de configurare Unix – comentariile încep cu caracterul # și se extind până la sfârșitul liniei; liniile goale sunt ignorate.

Comenzile de configurare constau dintr-un cuvânt cheie inițial urmat de o listă de argumente, dintre care unele pot fi opționale, separate prin spații albe. Comenzile nu pot fi continuate pe mai multe linii. Argumentele pot fi nume de gazde, adrese de gazde scrise sub formă numerică, sub formă de cvartet punctat, numere întregi, numere cu virgulă mobilă (atunci când se specifică timpi în secunde) și șiruri de text. Argumentele opționale sunt delimitate prin în următoarele descrieri, în timp ce alternativele sunt separate prin | Notația înseamnă o repetare opțională, nedefinită a ultimului element înainte de

Coduri de ieșire

Un cod de ieșire diferit de zero indică o eroare. Orice mesaj de eroare este înregistrat în jurnalul de sistem în mod implicit.

Codul de ieșire este 0 numai atunci când ntpd este terminat de un semnal sau când se utilizează opțiunea -q și ntpd setează cu succes ceasul de sistem.

Vezi și

ntp.conf(5), ntpq(8), ntpdc(8)

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.