Die Uhren von Com­pu­ter­sys­te­men leisten jedem, der wissen will, wie spät es ist, und weder Arm­band­uhr noch Smart­phone parat hat, wertvolle Un­ter­stüt­zung. Dass die Sys­tem­zeit aber nicht nur für den Benutzer, sondern auch für die Rechner selbst von Relevanz ist, ist jedoch wohl nur den Wenigsten bewusst. Beim kom­mu­ni­ka­ti­ven Austausch zwischen zwei oder mehr Systemen und ins­be­son­de­re für den korrekten Ablauf netz­werk­über­grei­fen­der Prozesse bzw. Dienste nehmen Zeit­stem­pel nämlich eine zentrale Rolle ein. Um Sys­tem­kom­pli­ka­tio­nen aufgrund asyn­chro­ner Uhrzeiten zu ver­hin­dern, wurde 1985 das so­ge­nann­te Network Time Protocol (NTP) ver­öf­fent­licht.

Was ist NTP (Network Time Protocol)?

Das Network Time Protocol (NTP) ist das Ergebnis der Ent­wick­lungs­ar­bei­ten von David L. Mills, seines Zeichens Professor an der Uni­ver­si­ty of Delaware. Eine erste of­fi­zi­el­le Spe­zi­fi­ka­ti­on des Pro­to­kolls, das Teil der In­ter­net­pro­to­koll­fa­mi­lie ist, wurde im September 1985 in RFC 958 ver­öf­fent­licht. Darin wird NTP als Protokoll zum Syn­chro­ni­sie­ren mehrerer Netz­werk­uh­ren durch ein Set ver­teil­ter Clients und Server be­schrie­ben. Als Vorgänger sind das Time Protocol sowie ICMP Timestamp message auf­ge­führt, deren Funk­tio­nen im Network Time Protocol vereint wurden. NTP baut auf dem User Datagram Protocol (UDP) auf, das einen ver­bin­dungs­lo­sen Da­ten­trans­port er­mög­licht. Die dafür vor­ge­se­he­ne UDP-Port­num­mer ist 123.

NTP stellt die grund­sätz­li­chen Pro­to­koll­me­cha­nis­men zur Verfügung, die dafür notwendig sind, die Zeit ver­schie­de­ner Systeme bis zu einer Ge­nau­ig­keit in der Grö­ßen­ord­nung von Na­no­se­kun­den zu syn­chro­ni­sie­ren. Darüber hinaus enthält es Be­stim­mun­gen, um die Ge­nau­ig­keit und ver­mut­li­che Feh­ler­quel­len der lokalen Systemuhr sowie die Ei­gen­schaf­ten der Re­fe­renz­uhr zu spe­zi­fi­zie­ren. Dabei gibt das Protokoll al­ler­dings lediglich die Art der Da­ten­re­prä­sen­ta­ti­on und Nach­rich­ten­for­ma­te vor, ohne selbst Syn­chro­ni­sie­rungs- und Fil­ter­al­go­rith­men zu liefern.

De­fi­ni­ti­on

NTP (Network Time Protocol) ist ein in RFC 958 be­schrie­be­nes Protokoll zur Syn­chro­ni­sie­rung von Uhren in Com­pu­ter­sys­te­men. Es baut auf dem ver­bin­dungs­lo­sen UDP-Protokoll auf (Port 123) und gehört zur In­ter­net­pro­to­koll­fa­mi­lie. Für den Syn­chro­ni­sie­rungs­pro­zess setzt NTP auf die Coor­di­na­ted Universal Time (UTC), die von den einzelnen Clients und Servern in einem hier­ar­chi­schen System bezogen wird.

Wie funk­tio­niert NTP?

Um die Uhren von Computern bis auf die Na­no­se­kun­de genau syn­chro­ni­sie­ren zu können, nutzt das Network Time Protocol die Coor­di­na­ted Universal Time (UTC), die seit 1972 gültige, ein­heit­li­che Weltzeit. Diese wird durch ver­schie­de­ne Methoden ermittelt – u. a. mithilfe von Funk- und Sa­tel­li­ten­sys­te­men. Wichtige Dienste wie das Global Po­si­tio­ning System (GPS) sind mit spe­zi­el­len Emp­fän­gern aus­ge­stat­tet, um die ent­spre­chen­den Signale ent­ge­gen­zu­neh­men. Da es weder kos­ten­ef­fi­zi­ent noch rea­li­sier­bar wäre, jeden einzelnen Computer mit solchen Emp­fän­gern zu bestücken, gibt es darüber hinaus so­ge­nann­te primäre Zeit­ser­ver (Primary Time Servers), die ebenfalls über einen UTC-Empfänger verfügen. Über Pro­to­kol­le wie NTP syn­chro­ni­sie­ren diese Server dann die Uhren von Computern in ihrem Netzwerk.

Bei diesem Syn­chro­ni­sie­rungs­pro­zess gibt es ver­schie­de­ne hier­ar­chisch ge­glie­der­te Grade des Abstands zu der UTC-Quelle, die man auch als Strata (lat. für „Schichten“) be­zeich­net. So sind alle tech­ni­schen Geräte, die ihre Zeit von einem primären Zeit­ser­ver oder einem Sa­tel­li­ten-Na­vi­ga­ti­ons­sys­tem beziehen, in der Kategorie Stratum-0 ein­ge­stuft. Beispiel hierfür sind Atom- oder Funkuhren. Ein Computer, der die UTC von einer solchen Atom- oder Funkuhr bezieht, ent­spricht Stratum-1 und so weiter. Jedes System ist dabei gleich­zei­tig Client des vor­an­ge­hen­den Stratums und Server für Systeme des folgenden Stratums (zumindest po­ten­zi­ell).

Hinweis

Kurz­zei­ti­ge und lokal bedingte Zeit­schwan­kun­gen bei der NTP-Syn­chro­ni­sie­rung werden durch ver­schie­de­ne Al­go­rith­men behoben: So kom­pen­sie­ren bei­spiels­wei­se Mess­ver­fah­ren der Pa­ket­um­lauf­zeit (Zeit, die ein Da­ten­pa­ket von der Quelle zum Ziel und wieder zurück benötigt) auf Basis des Berkeley-Al­go­rith­mus lokale Ab­wei­chun­gen. Für die Feh­ler­be­he­bung in der Pro­zes­sor­um­ge­bung wird etwa der Marzullo-Al­go­rith­mus ein­ge­setzt.

Die wich­tigs­ten Features von NTP im Überblick

Die Ba­sis­ei­gen­schaf­ten des Network Time Protocols, das mitt­ler­wei­le bereits in der vierten Version (NTPv4) vorliegt, lassen sich fol­gen­der­ma­ßen zu­sam­men­fas­sen:

  • NTP sieht eine Re­fe­renz­uhr vor, die als Fixpunkt für sämtliche Syn­chro­ni­sie­rungs­pro­zes­se fungiert. Alle Uhren werden also nach dieser Uhr bzw. Uhrzeit aus­ge­rich­tet. Von Beginn an wurde hierfür auf die Coor­di­na­ted Universal Time (UTC) gesetzt, die als ein­heit­li­che Welt­zeit­uhr anerkannt ist.
  • NTP ist ein feh­ler­to­le­ran­tes Protokoll, das au­to­ma­tisch nach den besten Zeit­quel­len für die Syn­chro­ni­sa­ti­on sucht. Um den ak­ku­mu­lier­ten Fehler zu mi­ni­mie­ren, können dabei auch mehrere Quellen mit­ein­an­der kom­bi­niert werden. Zeit­quel­len, die temporär oder dauerhaft starke ab­wei­chen­de Werte liefern, erkennt und ignoriert das Network Time Protocol nach Mög­lich­keit.
  • NTP ist hoch­gra­dig ska­lier­bar: In jedem Syn­chro­ni­sie­rungs­netz­werk kann es mehrere Re­fe­renz­uh­ren geben. Ferner ist jeder Netz­werk­kno­ten in der Lage, Zeit­in­for­ma­tio­nen in einem hier­ar­chi­schen Gebilde bi­di­rek­tio­nal (Punkt-zu-Punkt) oder uni­di­rek­tio­nal (in eine Richtung) wei­ter­zu­ge­ben.
  • NTP ist sehr genau. Dank der Mög­lich­keit, den jeweils besten Kan­di­da­ten für die Syn­chro­ni­sa­ti­on zu wählen, ist eine Auflösung im Na­no­se­kun­den-Bereich (etwa 2-32 Sekunden) möglich.
  • NTP kann vor­über­ge­hen­de Netz­werk­ver­bin­dungs­pro­ble­me über­brü­cken: Zu diesem Zweck verwendet das Protokoll Messwerte aus der Ver­gan­gen­heit, um die aktuelle Zeit bzw. Ab­wei­chun­gen zu ermitteln.

Welche Be­triebs­sys­te­me un­ter­stüt­zen das NTP-Protokoll?

Ur­sprüng­lich wurde das Network Time Protocol speziell für UNIX-Systeme ent­wi­ckelt, in denen das Protokoll bis heute in Form des Hin­ter­grund­pro­zes­ses (Daemons) ntpd im­ple­men­tiert ist. Dieser dient sowohl als Client, der das lokale System syn­chro­ni­sie­ren kann, als auch als NTP-Server für andere Systeme. Der Service war lange Zeit auch in Linux-Dis­tri­bu­tio­nen die erste Wahl zur Im­ple­men­tie­rung von NTP – neuere Versionen setzen zur Zeit­syn­chro­ni­sie­rung aber zunehmend auch auf die Client-Anwendung timesyncd, die Be­stand­teil des Sys­tem­ma­na­gers systemd ist. Auch macOS- und Windows-Be­triebs­sys­te­me greifen mitt­ler­wei­le auf das Network Time Protocol, um die UTC mit einfachen Sys­tem­pro­zes­sen und ohne zu­sätz­li­che Software über das Internet zu beziehen.

Welche Al­ter­na­ti­ven zum Network Time Protocol gibt es?

NTP ist zwar weltweit als Zeit­syn­chro­ni­sie­rungs-Standard angesehen, ist jedoch ins­be­son­de­re in Sachen Si­cher­heit nicht unfehlbar. Da es auf dem ver­bin­dungs­lo­sen UDP-Protokoll basiert, kann ein Angreifer bei­spiels­wei­se Pakete mit ge­fälsch­ter Ab­sen­der­adres­se (durch IP-Spoofing) an einen NTP-Server ver­schi­cken. Als Ab­sen­der­adres­se wird dabei die Adresse des Systems gewählt, das an­ge­grif­fen werden soll. Der Server schickt seine Antwort, die we­sent­lich größer als die vom Angreifer gesendete Anfrage ist, an den ver­meint­li­chen Absender – also das Op­fer­sys­tem – zurück. Verfährt der Angreifer nun im großen Stil auf diese Weise, indem er eine Vielzahl solcher ma­ni­pu­lier­ter Anfragen aussendet, kann er das Ziel­sys­tem über­las­ten (siehe auch unseren Artikel DoS und DDoS: An­griffs­mus­ter im Überblick.

In der Kon­se­quenz haben sich ver­schie­de­ne Projekte der Ent­wick­lung al­ter­na­ti­ver, si­che­re­rer Lösungen gewidmet, die anstelle der gängigen NTP-Client- und -Ser­ver­lö­sun­gen genutzt werden können:

  • tlsdate: tlsdate wurde 2012 von Jacob Appelbaum ge­schrie­ben und auf GitHub ver­öf­fent­licht. Anstelle von UDP nutzt tlsdate das TCP-Protokoll für den Da­ten­trans­port. Der Dienst ver­schlüs­selt den Ver­bin­dungs­auf­bau via TLS, um die Ma­ni­pu­la­ti­on der Da­ten­pa­ke­te zu ver­hin­dern. Darüber hinaus nutzt tlsdate die TLS-Funk­tio­nen „Ser­ver­Hel­lo“ und „Cli­ent­Hel­lo“, um die Zeit zu syn­chro­ni­sie­ren. Die NTP-Al­ter­na­ti­ve funk­tio­niert al­ler­dings nur mit TLS 1.1 und 1.2.
  • Ntimed: Ntimed ist eine NTP-Im­ple­men­tie­rung, deren Fokus speziell auf Si­cher­heit und Per­for­mance gerichtet ist. Zu diesem Zweck wurde der Pro­gramm­code von ntpd, auf dem Ntimed aufbaut, „ent­schlackt“ und optimiert. Das Software-Paket, das aus Client-, Server- und Master-Datei besteht, steht im of­fi­zi­el­len Ntimed-GitHub-Ver­zeich­nis zur freien Verfügung.
  • NTPsec: Bei NTPsec handelt es sich ebenfalls um eine Variante des klas­si­schen ntpd-Services. Al­ler­dings wurden über 175.000 Code­zei­len gegenüber dem Original ein­ge­spart. Außerdem hat das Ent­wick­ler­team eine Vielzahl un­si­che­rer String-Funk­tio­nen wie „strcpy“, „sprintf“ oder „gets“ durch sichere Pendants ersetzt. Diese und weitere Un­ter­schie­de lassen sich auf der of­fi­zi­el­len Homepage des Open-Source-Projekts in aus­führ­li­cher Form einsehen.

Abseits der Software-Al­ter­na­ti­ven gibt es noch das Precision Time Protocol (PTP). Anders als beim Network Time Protocol liegt der Fokus dieses Netz­werk­pro­to­kolls für Linux-Systeme explizit auf einer besonders hohen Syn­chro­ni­sie­rungs­ge­nau­ig­keit. Diese liegt bei PTP im Mi­kro­se­kun­den-Bereich, womit sogar die Ge­nau­ig­keit von NTP un­ter­bo­ten wird. Zudem stellt das Protokoll minimale An­for­de­run­gen an Pro­zes­sor­leis­tung und Netz­werk­band­brei­te, weshalb es auch für einfache und kos­ten­güns­ti­ge Geräte bestens geeignet ist.

Hinweis

Während man bei der Wahl der Syn­chro­ni­sie­rungs­pro­to­kol­le bzw. -dienste gewisse Frei­hei­ten besitzt, ist die Syn­chro­ni­sie­rung an sich ein Prozess, der für die Funk­tio­na­li­tät diverser Netz­werk­an­wen­dun­gen (ins­be­son­de­re im Internet) unbedingt er­for­der­lich ist. Da­ten­bank­trans­ak­tio­nen oder E-Mail-Kom­mu­ni­ka­ti­on schlagen bei­spiels­wei­se schnell fehl, wenn Client und Server zeit­tech­nisch nicht auf einer Wel­len­län­ge sind. Eine noch wich­ti­ge­re Rolle spielt eine exakte Sys­tem­zeit bei der Flug­ver­kehrs­kon­trol­le, bei der mi­kro­se­kun­den­ge­naue Werte für den rei­bungs­lo­sen Ablauf un­er­läss­lich sind.

pool.ntp.org: Der Internet-Cluster aus tausenden NTP-Servern

Bei dem von Adrian von Bidder in­iti­ier­ten pool.ntp.org-Projekt, das seit Juli 2005 von Ask Bjørn Hansen geleitet wird, handelt es sich um einen riesigen vir­tu­el­len Cluster aus über 4.000 NTP-Zeit­ser­vern. Der Großteil der auf der ganzen Welt ver­teil­ten Server, die von mehreren Millionen Systemen genutzt werden, steht dabei in Europa. Dass der NTP-Pool im Laufe der Zeit stetig gewachsen ist, ist der Community des er­folg­rei­chen Projekts zu verdanken: Jeder, der über einen Server mit sta­ti­scher IP-Adresse verfügt, der permanent mit dem Internet verbunden ist, kann diesen nämlich in den Cluster aufnehmen lassen. Trotz stei­gen­der Nachfrage kann der Service daher bis dato kos­ten­frei und ohne jegliche Ein­schrän­kun­gen genutzt werden.

So können UNIX-/Linux-Nutzer den NTP-Pool nutzen

Wer den NTP-Server-Pool nutzen möchte, um die Sys­tem­zeit eigener Geräte zu syn­chro­ni­sie­ren, kann dies unter UNIX bzw. Linux mit dem ntpd-Dienst rea­li­sie­ren. Hierfür ist lediglich folgende Kon­fi­gu­ra­ti­on für das NTP-Driftfile nötig:

driftfile /var/lib/ntp/ntp.drift
server 0.pool.ntp.org
server 1.pool.ntp.org
server 2.pool.ntp.org
server 3.pool.ntp.org

Vor­aus­set­zung ist, dass die Sys­tem­zeit zumindest grob ein­ge­stellt ist. Um den Status des ntpd-Dienstes abzurufen, gibt man nach einigen Minuten den folgenden Ab­fra­ge­be­fehl ein:

ntpq -pn

Der NTP-Client prä­sen­tiert eine Auf­lis­tung der IP-Adressen der zufällig ein­ge­setz­ten Zeit­ser­ver aus dem Pool. Ist einer dieser Server mit einem Stern (*) markiert, wird die Sys­tem­zeit fortan wie gewünscht syn­chro­ni­siert.

pool.ntp.org unter Windows als Zeit­ser­ver-Quelle ein­stel­len

Da das Network Time Protocol mitt­ler­wei­le auch von Windows au­to­ma­tisch un­ter­stützt wird, ist der NTP-Pool auch für User der Microsoft-Systeme jederzeit verfügbar. Es gilt lediglich, einen passenden Adress­be­reich von pool.ntp.org in den In­ter­net­zeit­ein­stel­lun­gen ein­zu­tra­gen (für Deutsch­land bei­spiels­wei­se „de.pool.ntp.org“). Dazu öffnet man die Sys­tem­steue­rung und wählt den Punkt „Datum und Zeit“ aus:

Über den Reiter „In­ter­net­zeit“ gelangt man dann zum Zeit­ser­ver-Menü, in dem die Adresse des fa­vo­ri­sier­ten NTP-Servers aus dem pool.ntp.org-Pool ein­ge­tra­gen werden kann:

Waren die Än­de­run­gen er­folg­reich, passt Windows zum nächsten Syn­chro­ni­sie­rungs­zeit­punkt die Sys­tem­zeit an:

Zum Hauptmenü