Name
ntpd – Network Time Protocol (NTP) daemon
Synopsis
ntpd ]
Beschrijving
Het ntpd programma is een besturingssysteemdaemon die de systeemtijd instelt en onderhoudt in synchronisme met standaard Internet tijdservers. Het is een complete implementatie van het Network Time Protocol (NTP) versie 4, maar behoudt ook compatibiliteit met versie 3, zoals gedefinieerd door RFC-1305, en versie 1 en 2, zoals gedefinieerd door RFC-1059 en RFC-1119, respectievelijk. ntpd voert de meeste berekeningen uit in 64-bit floating point rekenkundige bewerkingen en doet relatief onhandige64-bit fixed point bewerkingen alleen als dat nodig is om de ultieme precisie, ongeveer 232 picoseconden, te behouden. Hoewel de ultieme precisie niet haalbaar is met gewone werkstations en netwerken van vandaag, kan het nodig zijn met toekomstige gigahertz CPU klokken en gigabit LANs.
Hoe ntp werkt
Het ntpd programma werkt door berichten uit te wisselen met een of meer geconfigureerde servers op aangewezen poll intervallen. Wanneer het programma voor de eerste of latere keer wordt gestart, heeft het van de meeste van deze servers een aantal uitwisselingen nodig, zodat de signaalverwerkings- en matigingsalgoritmen de gegevens kunnen accumuleren en groomen en de klok kunnen instellen. Om het netwerk tegen bursts te beschermen wordt het eerste poll interval voor elke server vertraagd met een interval dat over een paar seconden is gerandomiseerd. Met het standaard aanvankelijke poll interval van 64s kunnen enkele minuten verstrijken voordat de klok is ingesteld. De aanvankelijke vertraging om de klok in te stellen kan worden verminderd door het sleutelwoord iburst te gebruiken met het commando serverconfiguratie, zoals beschreven op de pagina Configuratieopties.
De meeste besturingssystemen en hardware van tegenwoordig bevatten een tijd-van-het-jaar (TOY) chip om de tijd bij te houden gedurende perioden dat de stroom uit staat. Wanneer de machine wordt opgestart, wordt de chip gebruikt om de tijd van het besturingssysteem te initialiseren. Nadat de machine met een NTP-server is gesynchroniseerd, corrigeert het besturingssysteem de chip van tijd tot tijd. In het geval er geen TOY chip is of om de een of andere reden zijn tijd meer dan 1000s van de server tijd afwijkt, neemt ntpd aan dat er iets vreselijk mis moet zijn en de enige betrouwbare actie is dat de operator ingrijpt en de klok met de hand instelt. Dit zorgt ervoor dat ntpd afsluit met een paniekboodschap in het systeemlog. De -g optie heft deze controle op en de klok zal worden ingesteld op de server tijd ongeacht de chip tijd. Echter, en ter bescherming tegen defecte hardware, zoals wanneer de CMOS batterij defect raakt of de klokteller defect raakt, zodra de klok is ingesteld, zal een fout groter dan 1000s ntpd toch doen afsluiten.
Onder normale omstandigheden past ntpd de klok aan in kleine stapjes zodat de tijdschaal effectief continu is en zonder discontinuïteiten. Onder omstandigheden van extreme netwerk congestie, kan de roundtrip delay jitter meer dan drie seconden bedragen en kan de synchronisatie afstand, die gelijk is aan de helft van de roundtrip delay plus error budget termen, zeer groot worden. De ntpd algoritmen negeren sample offsets die langer zijn dan 128 ms, tenzij het interval waarin geen sample offset kleiner is dan 128 ms langer is dan 900s. Het eerste monster daarna, ongeacht de offset, zet de klok op de aangegeven tijd. In de praktijk vermindert dit het aantal valse alarmen waarbij de klok foutief is ingesteld tot een zeer laag aantal.
Als gevolg van dit gedrag, als de klok eenmaal is ingesteld, zal deze zeer zelden meer dan 128 ms afwijken, zelfs in extreme gevallen van netwerk pad congestie en jitter. Soms, in het bijzonder wanneer ntpd voor het eerst wordt gestart, kan de fout groter zijn dan 128 ms. Dit kan er soms toe leiden dat de klok wordt teruggezet als de lokale kloktijd meer dan 128 s in de toekomst ligt ten opzichte van de server. In sommige toepassingen kan dit gedrag onaanvaardbaar zijn. Als de -x optie is opgenomen op de commandoregel, zal de klok nooit worden gestapt en zullen alleen slew correcties worden gebruikt.
De problemen moeten zorgvuldig worden onderzocht voordat wordt besloten om de -x optie te gebruiken. De maximaal mogelijke slew rate is beperkt tot 500 parts-per-million (PPM) als gevolg van de correctheidsprincipes waarop het NTP protocol en algoritme ontwerp zijn gebaseerd. Als gevolg hiervan kan de lokale klok er lang over doen om naar een aanvaardbare offset te convergeren, ongeveer 2.000 s voor elke seconde dat de klok buiten het aanvaardbare bereik is. Gedurende dit interval zal de lokale klok niet consistent zijn met enige andere netwerkklok en kan het systeem niet worden gebruikt voor gedistribueerde toepassingen die een correct gesynchroniseerde netwerktijd vereisen.
Ondanks de bovenstaande voorzorgsmaatregelen komen bij grote frequentiefouten de resulterende tijd-offsets soms buiten het 128-ms bereik en is een uiteindelijke stap- of zwenktijdcorrectie vereist. Als na zo’n correctie de frequentiefout zo groot is dat het eerste monster buiten het acceptabele bereik valt, komt ntpd in dezelfde toestand als wanneer het ntp.drift bestand niet aanwezig is. De bedoeling van dit gedrag is om snel de frequentie te corrigeren en de werking te herstellen naar de normale volgmodus. In de meest extreme gevallen (time.ien.it komt in me op), kunnen er af en toe step/slew correcties zijn en daaropvolgende frequentie correcties. Het helpt in deze gevallen om het burst sleutelwoord te gebruiken bij het configureren van de server.
Frequency Discipline
Het ntpd gedrag bij het opstarten hangt af van of het frequentie bestand, meestal ntp.drift, bestaat. Dit bestand bevat de laatste schatting van de klokfrequentie fout. Als de ntpd wordt gestart en het bestand bestaat niet, gaat de ntpd in een speciale modus die is ontworpen om zich snel aan te passen aan de specifieke systeem klok oscillator tijd en frequentie fout. Dit duurt ongeveer 15 minuten, waarna de tijd en frequentie op de nominale waarden worden ingesteld en de ntpd in de normale modus komt, waarin de tijd en frequentie continu worden bijgehouden ten opzichte van de server. Na een uur wordt het frequentiebestand aangemaakt en wordt de huidige frequentie offset er naar toe geschreven. Wanneer de ntpd wordt gestart en het bestand bestaat, wordt de ntpd frequentie geïnitialiseerd vanuit het bestand en gaat onmiddellijk naar de normale modus. Daarna wordt de huidige frequentie offset ieder uur naar het bestand geschreven.
Bedrijfsmodi
ntpd kan werken in een van de verschillende modi, waaronder symmetrisch actief/passief, client/server broadcast/multicast en manycast, zoals beschreven in de pagina over verbindingsbeheer. Het werkt normaal continu terwijl het kleine veranderingen in frequentie controleert en de klok trimt voor de ultimateprecisie. Hij kan echter ook werken in een eenmalige modus waarbij de tijd wordt ingesteld vanaf een externe server en de frequentie wordt ingesteld vanaf een eerder opgenomen frequentiebestand. Een broadcast/multicast- of manycast-client kan servers op afstand ontdekken, de correctiefactoren voor de propagatievertraging tussen server en client berekenen en zichzelf automatisch configureren. Dit maakt het mogelijk om een vloot van werkstations in te zetten zonder configuratie details te specificeren die specifiek zijn voor de lokale omgeving.
Standaard draait ntpd in continue modus waarbij elk van mogelijk meerdere externe servers wordt gepolst met intervallen die worden bepaald door een ingewikkelde statemachine. De statemachine meet de incidentele roundtrip vertraging jitter en oscillator frequentie dwaling en bepaalt het beste poll interval met behulp van eenheuristisch algoritme. Gewoonlijk, en in de meeste bedrijfsomgevingen, zal de “state machine” beginnen met intervallen van 64s en uiteindelijk in stappen toenemen tot 1024s. Een kleine hoeveelheid willekeurige variatie wordt geïntroduceerd om “bunching” bij de servers te voorkomen. Bovendien, mocht een server voor enige tijd onbereikbaar worden, dan wordt het poll interval verhoogd in stappen tot 1024s om netwerk overhead te verminderen.
In sommige gevallen kan het niet praktisch zijn voor ntpd om continu te draaien. Een veel voorkomende oplossing is het draaien van het ntpdate programma vanuit een cronjob op bepaalde tijden. Dit programma beschikt echter niet over de geavanceerde signaalverwerking, foutcontrole en beperkende algoritmen van ntpd De-q optie is voor dit doel bedoeld. Het instellen van deze optie zorgt ervoor dat ntpd afsluit net nadat de klok voor de eerste keer is ingesteld met de geconfigureerde servers. De procedure voor het voor de eerste keer instellen van de klok is dezelfde als in continue modus; de meeste toepassingen zullen waarschijnlijk het sleutelwoordiburst willen specificeren met het server configuratie commando. Met dit sleutelwoord wordt een volley van berichten uitgewisseld om de gegevens te verzorgen en wordt de klok ingesteld in ongeveer 10 s. Als er na een paar minuten niets wordt gehoord, gaat de daemon over tot time-out en verlaat hij de server. Na een gepaste rouwperiode kan het ntpdate programma met pensioen worden gestuurd.
Wanneer kernel ondersteuning beschikbaar is om de klokfrequentie te disciplineren, wat het geval is voor standaard Solaris, Tru64, Linux en FreeBSD, is er een handige functie beschikbaar om de klokfrequentie te disciplineren. Eerst wordt ntpd in continue modus gedraaid met geselecteerde servers om de intrinsieke klokfrequentie offset te meten en vast te leggen in het frequentiebestand. Het kan enkele uren duren voordat de frequentie en offset tot rust zijn gekomen. Daarna wordt ntpd gestopt en in eenmalige modus gedraaid als dat nodig is. Bij elke start wordt de frequentie uit het bestand gelezen en initialiseert de kernel frequentie.
Poll Interval Controle
Deze versie van NTP bevat een ingewikkelde toestandsmachine om de netwerk belasting te verminderen en toch een kwaliteit van synchronisatie te behouden die consistent is met de waargenomen jitter en wander. Er zijn een aantal manieren om de werking aan te passen om de nauwkeurigheid te vergroten door het interval te verkleinen of om de netwerk overhead te verkleinen door het te vergroten. De gebruiker wordt echter aangeraden zorgvuldig de gevolgen te overwegen van het veranderen van het poll aanpassingsbereik van het standaard minimum van 64 s tot het standaard maximum van 1.024 s. Het standaard minimum kan veranderd worden met het tinker minpoll commando in een waarde niet minder dan 16 s. Deze waarde wordt gebruikt voor alle geconfigureerde associaties, tenzij overschreven door de minpoll optie op het configuratiecommando. Merk op dat de meeste apparaatstuurprogramma’s niet goed zullen werken als het poll interval minder dan 64 s is en dat de broadcast server en manycast cliënt-associaties ook de standaardwaarde zullen gebruiken, tenzij deze wordt overschreven.
In sommige gevallen waarbij inbel- of toldiensten betrokken zijn, kan het nuttig zijn om het minimum interval te verhogen tot enkele tientallen minuten en het maximum interval tot een dag of zo. Onder normale bedrijfsomstandigheden, zodra de klokdiscipline-lus is gestabiliseerd, zal het interval worden verhoogd in stappen van het minimum tot het maximum. Hierbij wordt er echter van uitgegaan dat de intrinsieke klokfrequentiefout klein genoeg is om door de discipline-lus te worden gecorrigeerd. Het vastlegbereik van de lus is 500 PPM bij een interval van 64s, afnemend met een factor twee voor elke verdubbeling van het interval. Bij een minimum van 1.024 s, bijvoorbeeld, is het vangbereik slechts 31 PPM. Als de intrinsieke fout groter is dan dit, moet het drift bestand ntp.drift speciaal worden aangepast om de restfout onder deze grens te brengen.Als dit eenmaal is gedaan, wordt het drift bestand automatisch eenmaal per uur bijgewerkt en is het beschikbaar om de frequentie te initialiseren bij volgende herstarts van de daemon.
het Huff-n’-puff Filter
In scenario’s waar een aanzienlijke hoeveelheid gegevens moeten worden gedownload of geupload over telefoonmodems, kan de kwaliteit van de tijdwaarneming ernstig worden aangetast. Dit komt doordat de differentiële vertragingen op de twee transmissierichtingen vrij groot kunnen zijn. In veel gevallen zijn de schijnbare tijdfouten zo groot dat zij de stapdrempel overschrijden en er een stapcorrectie kan optreden tijdens en na de gegevensoverdracht.
Het huff-n’-puff filter is ontworpen om in deze gevallen de schijnbare tijdafwijking te corrigeren. Het is afhankelijk van de kennis van de propagatievertraging wanneer er geen ander verkeer aanwezig is. In veel voorkomende scenario’s gebeurt dit buiten werktijd. Het filter houdt een schuifregister bij dat de minimale vertraging over het meest recente interval onthoudt, gewoonlijk gemeten in uren. Onder omstandigheden van ernstige vertraging corrigeert het filter de schijnbare afwijking aan de hand van het teken van de afwijking en het verschil tussen de schijnbare vertraging en de minimale vertraging. De naam van het filter geeft de negatieve (huff) en positieve (puff) correctie weer, die afhangt van het teken van de offset.
Het filter wordt geactiveerd door het tinker commando en het huffpuff sleutelwoord, zoals beschreven in de Diversen Opties pagina.
Noten
Als NetInfo ondersteuning is ingebouwd in ntpd, dan zal ntpd proberen zijn configuratie te lezen van de NetInfo als het standaard ntp.conf bestand niet kan worden gelezen en geen bestand wordt gespecificeerd door de -c optie.
In contexten waar een hostnaam wordt verwacht, dwingt een -4 qualifier voorafgaand aan de hostnaam DNS resolutie naar de IPv4 namespace, terwijl een -6qualifier DNS resolutie naar de IPv6 namespace dwingt.
Diverse interne ntpd variabelen kunnen worden getoond en configuratie opties kunnen worden gewijzigd terwijl de ntpd draait met behulp van de ntpq enntpdc utility programma’s.
Wanneer ntpd start kijkt het naar de waarde van umask, en indien nul stelt ntpd de umask in op 022
Niet als de -n, -d of -D optie wordt gebruikt, verandert ntpd de huidige werkdirectory in de root directory, dus alle opties of commando’s die paden specificeren moeten een absoluut pad of een pad relatief aan de root gebruiken.
Command Line Options
-4 Forceer DNS resolutie van hostnamen naar de IPv4 namespace. -6 Forceer DNS-resolutie van hostnamen naar de IPv6-namespace. -a Vereis cryptografische authenticatie voor broadcast client, multicast client en symmetrische passieve associaties. Dit is de standaardinstelling. -A Geen cryptografische authenticatie vereisen voor broadcastclients, multicastclients en symmetrische passieve koppelingen. Dit is bijna nooit een goed idee. -b Schakel de client in om te synchroniseren met broadcast servers. -c conffile Specificeer de naam en het pad van het configuratiebestand, standaard /etc/ntp.conf -d Specificeer debug-modus. Deze optie kan meer dan eens voorkomen, waarbij elke keer dat de optie voorkomt een gedetailleerdere weergave wordt aangegeven. -D level Specificeer het debug-niveau rechtstreeks. -f driftfile Specificeer de naam en het pad van het frequentiebestand. Dit is dezelfde operatie als het configuratiecommando driftfile driftfile. -g Normaal verlaat ntpd met een bericht naar het systeem log als de offset de panic drempel overschrijdt, welke standaard 1000 s is. Met deze optie kan de tijd zonder beperking op elke waarde worden ingesteld; dit kan echter slechts eenmaal gebeuren. Als de drempel daarna wordt overschreden, zal ntpd afsluiten met een bericht naar de systeemlog. Deze optie kan worden gebruikt met de -q en -x opties. Zie het tinker commando voor andere opties. -i jaildir Chroot de server naar de directory jaildir Deze optie houdt ook in dat de server probeert root privileges te laten vallen bij het opstarten (anders geeft chroot heel weinig extra beveiliging), en is alleen beschikbaar als het OS ondersteunt om de server te draaien zonder volledige root privileges. Het kan nodig zijn om ook een -u optie te specificeren. -I iface Luister op de interface. Deze optie kan een onbeperkt aantal keren voorkomen. -k keyfile Geef de naam en het pad van het symmetrische sleutelbestand op. Dit is dezelfde operatie als het configuratiecommando keys keyfile. -l logfile Geef de naam en het pad van het logbestand op. Standaard is dit het systeemlogbestand. Dit is dezelfde operatie als het logfile logfileconfiguratie commando. -L Niet luisteren naar virtuele IP’s. De standaard is om te luisteren. -m Vergrendel geheugen. -n Niet forken. -N Voor zover toegestaan door het besturingssysteem, laat de ntpd draaien met de hoogste prioriteit. -p pidfile Geef de naam en het pad aan van het bestand dat wordt gebruikt om het ntpd proces ID vast te leggen. Dit is dezelfde operatie als het pidfile pidfileconfiguratie commando. -P priority Voor zover toegestaan door het besturingssysteem, laat je de ntpd draaien met de gespecificeerde prioriteit. -q Verlaat de ntpd net na de eerste keer dat de klok is ingesteld. Dit gedrag imiteert dat van het ntpdate programma, dat moet worden teruggetrokken. De opties -g en -x kunnen samen met deze optie worden gebruikt. Opmerking: De kernel tijddiscipline is uitgeschakeld met deze optie. -r broadcastdelay Geef de standaard voortplantingsvertraging op van de broadcast/multicast server naar deze cliënt. Dit is alleen nodig als de vertraging niet automatisch door het protocol kan worden berekend. -s statsdir Specificeer het pad naar de map voor bestanden die worden aangemaakt door de statistiekvoorziening. Dit is dezelfde operatie als het configuratiecommando statsdir statsdir. -t key Voeg een sleutelnummer toe aan de lijst van vertrouwde sleutels. Deze optie kan meer dan eens voorkomen. -u user Specificeer een gebruiker, en optioneel een groep, om naar over te schakelen. Deze optie is alleen beschikbaar als het besturingssysteem ondersteunt om de server zonder volledige root-privileges te draaien. Momenteel wordt deze optie ondersteund onder NetBSD (configure met –enable-clockctl) en Linux (configure met –enable-linuxcaps). -U interface update interval Aantal seconden om te wachten tussen interface list scans om nieuwe en verwijderde netwerkinterfaces op te pikken. Stel in op 0 om het dynamisch updaten van de interface-lijst uit te schakelen. De standaardinstelling is om elke 5 minuten te scannen. -v variabele-Variabele Voeg een systeemvariabele toe die standaard op de lijst staat. -x Normaal wordt de tijd gesleept als de offset kleiner is dan de step-drempel, die standaard 128 ms is, en getrapt als hij boven de drempel ligt. Deze optie stelt de drempel in op 600 s, wat ruim binnen het nauwkeurigheidsvenster is om de klok handmatig in te stellen. Opmerking: Aangezien de slew rate van typische Unix kernels beperkt is tot 0.5 ms/s, vereist elke seconde aanpassing een amortisatie-interval van 2000 s. Een aanpassing van 600 s zal dus bijna 14 dagen in beslag nemen. Deze optie kan gebruikt worden met de -g en -q opties. Zie het tinker commando voor andere opties. Opmerking: De kernel tijddiscipline is uitgeschakeld met deze optie.
het configuratiebestand
Ordergaans leest ntpd het ntp.conf configuratiebestand bij het opstarten om de synchronisatiebronnen en bedrijfsmodi te bepalen.Het is ook mogelijk om een werkende, zij het beperkte, configuratie geheel op de commandoregel op te geven, waardoor een configuratiebestand niet meer nodig is. Dit kan vooral nuttig zijn wanneer de lokale host moet worden geconfigureerd als een broadcast/multicast client, waarbij alle peers worden bepaald door te luisteren naar broadcasts op run time.
Normaal wordt het configuratiebestand geïnstalleerd in de /etc directory, maar het kan ook elders worden geïnstalleerd (zie de -c conffile commandoregeloptie). Het bestandsformaat is gelijk aan dat van andere Unix-configuratiebestanden – commentaar begint met een #-teken en loopt door tot het einde van de regel; lege regels worden genegeerd.
Configuratiecommando’s bestaan uit een initieel trefwoord gevolgd door een lijst van argumenten, waarvan sommige optioneel kunnen zijn, gescheiden door witruimte. Commando’s mogen niet worden voortgezet over meerdere regels. Argumenten kunnen zijn: hostnamen, hostadressen geschreven in numerieke vorm met een puntkomma, gehele getallen, drijvende komma getallen (wanneer tijden in seconden worden gespecificeerd) en tekststrings. Optionele argumenten worden in de volgende beschrijvingen gescheiden door, terwijl alternatieven gescheiden worden door | De notatie betekent een optionele, onbepaalde herhaling van het laatste item voor de
Exit Codes
Een exit code zonder nul geeft een fout aan. Alle foutmeldingen worden standaard gelogd in het systeemlog.
De exit code is alleen 0 wanneer ntpd wordt beëindigd door een signaal, of wanneer de -q optie wordt gebruikt en ntpd met succes de systeemklok instelt.
Zie ook
ntp.conf(5), ntpq(8), ntpdc(8)