Network Time Protocol (NTP): Definition und Funktionsweise

Die Uhren von Computersystemen leisten jedem, der wissen will, wie spät es ist, und weder Armbanduhr noch Smartphone parat hat, wertvolle Unterstützung. Dass die Systemzeit 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 kommunikativen Austausch zwischen zwei oder mehr Systemen und insbesondere für den korrekten Ablauf netzwerkübergreifender Prozesse bzw. Dienste nehmen Zeitstempel nämlich eine zentrale Rolle ein. Um Systemkomplikationen aufgrund asynchroner Uhrzeiten zu verhindern, wurde 1985 das sogenannte Network Time Protocol (NTP) veröffentlicht.

Was ist NTP (Network Time Protocol)?

Das Network Time Protocol (NTP) ist das Ergebnis der Entwicklungsarbeiten von David L. Mills, seines Zeichens Professor an der University of Delaware. Eine erste offizielle Spezifikation des Protokolls, das Teil der Internetprotokollfamilie ist, wurde im September 1985 in RFC 958 veröffentlicht. Darin wird NTP als Protokoll zum Synchronisieren mehrerer Netzwerkuhren durch ein Set verteilter Clients und Server beschrieben. Als Vorgänger sind das Time Protocol sowie ICMP Timestamp message aufgeführt, deren Funktionen im Network Time Protocol vereint wurden. NTP baut auf dem User Datagram Protocol (UDP) auf, das einen verbindungslosen Datentransport ermöglicht. Die dafür vorgesehene UDP-Portnummer ist 123.

NTP stellt die grundsätzlichen Protokollmechanismen zur Verfügung, die dafür notwendig sind, die Zeit verschiedener Systeme bis zu einer Genauigkeit in der Größenordnung von Nanosekunden zu synchronisieren. Darüber hinaus enthält es Bestimmungen, um die Genauigkeit und vermutliche Fehlerquellen der lokalen Systemuhr sowie die Eigenschaften der Referenzuhr zu spezifizieren. Dabei gibt das Protokoll allerdings lediglich die Art der Datenrepräsentation und Nachrichtenformate vor, ohne selbst Synchronisierungs- und Filteralgorithmen zu liefern.

Definition

NTP (Network Time Protocol) ist ein in RFC 958 beschriebenes Protokoll zur Synchronisierung von Uhren in Computersystemen. Es baut auf dem verbindungslosen UDP-Protokoll auf (Port 123) und gehört zur Internetprotokollfamilie. Für den Synchronisierungsprozess setzt NTP auf die Coordinated Universal Time (UTC), die von den einzelnen Clients und Servern in einem hierarchischen System bezogen wird.

Wie funktioniert NTP?

Um die Uhren von Computern bis auf die Nanosekunde genau synchronisieren zu können, nutzt das Network Time Protocol die Coordinated Universal Time (UTC), die seit 1972 gültige, einheitliche Weltzeit. Diese wird durch verschiedene Methoden ermittelt – u. a. mithilfe von Funk- und Satellitensystemen. Wichtige Dienste wie das Global Positioning System (GPS) sind mit speziellen Empfängern ausgestattet, um die entsprechenden Signale entgegenzunehmen. Da es weder kosteneffizient noch realisierbar wäre, jeden einzelnen Computer mit solchen Empfängern zu bestücken, gibt es darüber hinaus sogenannte primäre Zeitserver (Primary Time Servers), die ebenfalls über einen UTC-Empfänger verfügen. Über Protokolle wie NTP synchronisieren diese Server dann die Uhren von Computern in ihrem Netzwerk.

Bei diesem Synchronisierungsprozess gibt es verschiedene hierarchisch gegliederte Grade des Abstands zu der UTC-Quelle, die man auch als Strata (lat. für „Schichten“) bezeichnet. So sind alle technischen Geräte, die ihre Zeit von einem primären Zeitserver oder einem Satelliten-Navigationssystem beziehen, in der Kategorie Stratum-0 eingestuft. Beispiel hierfür sind Atom- oder Funkuhren. Ein Computer, der die UTC von einer solchen Atom- oder Funkuhr bezieht, entspricht Stratum-1 und so weiter. Jedes System ist dabei gleichzeitig Client des vorangehenden Stratums und Server für Systeme des folgenden Stratums (zumindest potenziell).

Hinweis

Kurzzeitige und lokal bedingte Zeitschwankungen bei der NTP-Synchronisierung werden durch verschiedene Algorithmen behoben: So kompensieren beispielsweise Messverfahren der Paketumlaufzeit (Zeit, die ein Datenpaket von der Quelle zum Ziel und wieder zurück benötigt) auf Basis des Berkeley-Algorithmus lokale Abweichungen. Für die Fehlerbehebung in der Prozessorumgebung wird etwa der Marzullo-Algorithmus eingesetzt.

Die wichtigsten Features von NTP im Überblick

Die Basiseigenschaften des Network Time Protocols, das mittlerweile bereits in der vierten Version (NTPv4) vorliegt, lassen sich folgendermaßen zusammenfassen:

  • NTP sieht eine Referenzuhr vor, die als Fixpunkt für sämtliche Synchronisierungsprozesse fungiert. Alle Uhren werden also nach dieser Uhr bzw. Uhrzeit ausgerichtet. Von Beginn an wurde hierfür auf die Coordinated Universal Time (UTC) gesetzt, die als einheitliche Weltzeituhr anerkannt ist.
  • NTP ist ein fehlertolerantes Protokoll, das automatisch nach den besten Zeitquellen für die Synchronisation sucht. Um den akkumulierten Fehler zu minimieren, können dabei auch mehrere Quellen miteinander kombiniert werden. Zeitquellen, die temporär oder dauerhaft starke abweichende Werte liefern, erkennt und ignoriert das Network Time Protocol nach Möglichkeit.
  • NTP ist hochgradig skalierbar: In jedem Synchronisierungsnetzwerk kann es mehrere Referenzuhren geben. Ferner ist jeder Netzwerkknoten in der Lage, Zeitinformationen in einem hierarchischen Gebilde bidirektional (Punkt-zu-Punkt) oder unidirektional (in eine Richtung) weiterzugeben.
  • NTP ist sehr genau. Dank der Möglichkeit, den jeweils besten Kandidaten für die Synchronisation zu wählen, ist eine Auflösung im Nanosekunden-Bereich (etwa 2-32 Sekunden) möglich.
  • NTP kann vorübergehende Netzwerkverbindungsprobleme überbrücken: Zu diesem Zweck verwendet das Protokoll Messwerte aus der Vergangenheit, um die aktuelle Zeit bzw. Abweichungen zu ermitteln.

Welche Betriebssysteme unterstützen das NTP-Protokoll?

Ursprünglich wurde das Network Time Protocol speziell für UNIX-Systeme entwickelt, in denen das Protokoll bis heute in Form des Hintergrundprozesses (Daemons) ntpd implementiert ist. Dieser dient sowohl als Client, der das lokale System synchronisieren kann, als auch als NTP-Server für andere Systeme. Der Service war lange Zeit auch in Linux-Distributionen die erste Wahl zur Implementierung von NTP – neuere Versionen setzen zur Zeitsynchronisierung aber zunehmend auch auf die Client-Anwendung timesyncd, die Bestandteil des Systemmanagers systemd ist. Auch macOS- und Windows-Betriebssysteme greifen mittlerweile auf das Network Time Protocol, um die UTC mit einfachen Systemprozessen und ohne zusätzliche Software über das Internet zu beziehen.

Welche Alternativen zum Network Time Protocol gibt es?

NTP ist zwar weltweit als Zeitsynchronisierungs-Standard angesehen, ist jedoch insbesondere in Sachen Sicherheit nicht unfehlbar. Da es auf dem verbindungslosen UDP-Protokoll basiert, kann ein Angreifer beispielsweise Pakete mit gefälschter Absenderadresse (durch IP-Spoofing) an einen NTP-Server verschicken. Als Absenderadresse wird dabei die Adresse des Systems gewählt, das angegriffen werden soll. Der Server schickt seine Antwort, die wesentlich größer als die vom Angreifer gesendete Anfrage ist, an den vermeintlichen Absender – also das Opfersystem – zurück. Verfährt der Angreifer nun im großen Stil auf diese Weise, indem er eine Vielzahl solcher manipulierter Anfragen aussendet, kann er das Zielsystem überlasten (siehe auch unseren Artikel DoS und DDoS: Angriffsmuster im Überblick.

In der Konsequenz haben sich verschiedene Projekte der Entwicklung alternativer, sichererer Lösungen gewidmet, die anstelle der gängigen NTP-Client- und -Serverlösungen genutzt werden können:

  • tlsdate: tlsdate wurde 2012 von Jacob Appelbaum geschrieben und auf GitHub veröffentlicht. Anstelle von UDP nutzt tlsdate das TCP-Protokoll für den Datentransport. Der Dienst verschlüsselt den Verbindungsaufbau via TLS, um die Manipulation der Datenpakete zu verhindern. Darüber hinaus nutzt tlsdate die TLS-Funktionen „ServerHello“ und „ClientHello“, um die Zeit zu synchronisieren. Die NTP-Alternative funktioniert allerdings nur mit TLS 1.1 und 1.2.
  • Ntimed: Ntimed ist eine NTP-Implementierung, deren Fokus speziell auf Sicherheit und Performance gerichtet ist. Zu diesem Zweck wurde der Programmcode von ntpd, auf dem Ntimed aufbaut, „entschlackt“ und optimiert. Das Software-Paket, das aus Client-, Server- und Master-Datei besteht, steht im offiziellen Ntimed-GitHub-Verzeichnis zur freien Verfügung.
  • NTPsec: Bei NTPsec handelt es sich ebenfalls um eine Variante des klassischen ntpd-Services. Allerdings wurden über 175.000 Codezeilen gegenüber dem Original eingespart. Außerdem hat das Entwicklerteam eine Vielzahl unsicherer String-Funktionen wie „strcpy“, „sprintf“ oder „gets“ durch sichere Pendants ersetzt. Diese und weitere Unterschiede lassen sich auf der offiziellen Homepage des Open-Source-Projekts in ausführlicher Form einsehen.

Abseits der Software-Alternativen gibt es noch das Precision Time Protocol (PTP). Anders als beim Network Time Protocol liegt der Fokus dieses Netzwerkprotokolls für Linux-Systeme explizit auf einer besonders hohen Synchronisierungsgenauigkeit. Diese liegt bei PTP im Mikrosekunden-Bereich, womit sogar die Genauigkeit von NTP unterboten wird. Zudem stellt das Protokoll minimale Anforderungen an Prozessorleistung und Netzwerkbandbreite, weshalb es auch für einfache und kostengünstige Geräte bestens geeignet ist.

Hinweis

Während man bei der Wahl der Synchronisierungsprotokolle bzw. -dienste gewisse Freiheiten besitzt, ist die Synchronisierung an sich ein Prozess, der für die Funktionalität diverser Netzwerkanwendungen (insbesondere im Internet) unbedingt erforderlich ist. Datenbanktransaktionen oder E-Mail-Kommunikation schlagen beispielsweise schnell fehl, wenn Client und Server zeittechnisch nicht auf einer Wellenlänge sind. Eine noch wichtigere Rolle spielt eine exakte Systemzeit bei der Flugverkehrskontrolle, bei der mikrosekundengenaue Werte für den reibungslosen Ablauf unerlässlich sind.

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

Bei dem von Adrian von Bidder initiierten pool.ntp.org-Projekt, das seit Juli 2005 von Ask Bjørn Hansen geleitet wird, handelt es sich um einen riesigen virtuellen Cluster aus über 4.000 NTP-Zeitservern. Der Großteil der auf der ganzen Welt verteilten 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 erfolgreichen Projekts zu verdanken: Jeder, der über einen Server mit statischer IP-Adresse verfügt, der permanent mit dem Internet verbunden ist, kann diesen nämlich in den Cluster aufnehmen lassen. Trotz steigender Nachfrage kann der Service daher bis dato kostenfrei und ohne jegliche Einschränkungen genutzt werden.

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

Wer den NTP-Server-Pool nutzen möchte, um die Systemzeit eigener Geräte zu synchronisieren, kann dies unter UNIX bzw. Linux mit dem ntpd-Dienst realisieren. Hierfür ist lediglich folgende Konfiguration 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

Voraussetzung ist, dass die Systemzeit zumindest grob eingestellt ist. Um den Status des ntpd-Dienstes abzurufen, gibt man nach einigen Minuten den folgenden Abfragebefehl ein:

ntpq -pn

Der NTP-Client präsentiert eine Auflistung der IP-Adressen der zufällig eingesetzten Zeitserver aus dem Pool. Ist einer dieser Server mit einem Stern (*) markiert, wird die Systemzeit fortan wie gewünscht synchronisiert.

pool.ntp.org unter Windows als Zeitserver-Quelle einstellen

Da das Network Time Protocol mittlerweile auch von Windows automatisch unterstützt wird, ist der NTP-Pool auch für User der Microsoft-Systeme jederzeit verfügbar. Es gilt lediglich, einen passenden Adressbereich von pool.ntp.org in den Internetzeiteinstellungen einzutragen (für Deutschland beispielsweise „de.pool.ntp.org“). Dazu öffnet man die Systemsteuerung und wählt den Punkt „Datum und Zeit“ aus:

Über den Reiter „Internetzeit“ gelangt man dann zum Zeitserver-Menü, in dem die Adresse des favorisierten NTP-Servers aus dem pool.ntp.org-Pool eingetragen werden kann:

Waren die Änderungen erfolgreich, passt Windows zum nächsten Synchronisierungszeitpunkt die Systemzeit an: