NTP (Network Time Protocol) ist ein Netzwerk-Zeitsynchronisationsprotokoll, das in lokalen Netzwerken eine Genauigkeit von Millisekunden und im globalen Netzwerk von zig Millisekunden bietet. Das 1985 von David Mills entwickelte Protokoll wird in allen modernen Betriebssystemen, Mobilgeräten und Netzwerkgeräten verwendet, um interne Uhren mit der UTC-Referenzzeit zu synchronisieren. Laut dem NTP Pool Project (2026) führen täglich über 4 Milliarden Geräte NTP-Anfragen zur Synchronisation durch.
Wichtige Punkte
NTP (Network Time Protocol) ist ein Netzwerkprotokoll zur genauen Synchronisation der internen Uhr eines Computers mit einer Referenzzeitquelle über ein paketvermitteltes Netzwerk. Beschrieben in RFC 5905 (NTPv4), verwendet das Protokoll ein hierarchisches System von Servern, wobei jede Ebene als Stratum bezeichnet wird. Ein NTP-Client sendet Anfragen an einen Server, misst die Paketumlaufzeit (RTT) und berechnet den Offset seiner eigenen Uhr relativ zur Referenzzeit. Der Korrekturalgorithmus berücksichtigt nicht nur einen einmaligen Offset, sondern auch die Drift des Taktgenerators, sodass die Genauigkeit über längere Zeiträume ohne wiederholte Anfragen aufrechterhalten werden kann.
Das Protokoll wurde von David Mills 1985 für das ARPANET entwickelt. Die erste Spezifikation (RFC 958) beschrieb einen einfachen Synchronisationsalgorithmus mit einer Genauigkeit von bis zu 100 ms. NTPv3 (RFC 1305, 1992) fügte einen Filteralgorithmus und eine verbesserte Verarbeitung von Verzögerungen hinzu. NTPv4 (RFC 5905, 2010) — die aktuelle Version — enthält IPv6-Unterstützung, automatische Serverkonfiguration und Schutz vor Angriffen über Network Time Security (NTS). In 40 Jahren hat sich das Protokoll von einem Forschungsprojekt zu einem Infrastrukturstandard entwickelt, ohne den Finanztransaktionen, Telekommunikation und mobile Netzwerke unmöglich wären.
Das Funktionsprinzip von NTP basiert auf der Messung der Paketlaufzeit im Netzwerk. Der Client sendet eine Anfrage mit einem Zeitstempel T1 (lokale Sendezeit). Der Server empfängt die Anfrage zum Zeitpunkt T2 (Serverzeit), erzeugt eine Antwort mit Zeitstempel T3 und sendet sie. Der Client empfängt die Antwort zum Zeitpunkt T4. Mit allen vier Zeitstempeln berechnet der Client den Offset = ((T2 - T1) + (T3 - T4)) / 2 und die Verzögerung = (T4 - T1) - (T3 - T2). Wenn die Verzögerung 1 Sekunde überschreitet, gilt das Ergebnis als unzuverlässig — dies schützt vor überlasteten oder instabilen Kanälen.
Allein das Einstellen der genauen Uhrzeit reicht nicht aus — der Quarzoszillator eines Geräts driftet ständig (geht vor oder nach) aufgrund von Temperatur, Alterung und Spannung. NTP löst dieses Problem mithilfe des PLL (Phase-Locked Loop)-Algorithmus: Er stellt die Uhrzeit nicht zwangsweise ein, sondern passt die Taktgeschwindigkeit an. Wenn das Gerät 0,1 Sekunden pro Stunde vorgeht, verlangsamt NTP die Systemuhr, bis die Drift kompensiert ist. Dieser Ansatz ermöglicht in stabilen Netzwerken eine Synchronisation alle paar Stunden statt alle 30 Sekunden.
// Simplified NTP algorithm schema
struct NTPPacket {
uint8_t flags; // LI, VN, Mode
uint8_t stratum; // server stratum level
uint32_t refTimestamp; // reference timestamp
uint32_t originTimestamp; // T1
uint32_t recvTimestamp; // T2
uint32_t xmitTimestamp; // T3
};
// Calculate offset and delay
double offset = ((t2 - t1) + (t3 - t4)) / 2.0;
double delay = (t4 - t1) - (t3 - t2);
Das gesamte NTP-System ist in einer Hierarchie organisiert, wobei jede Ebene als Stratum bezeichnet wird. Stratum 0 ist die Referenzuhr: Atomuhren, GPS-Empfänger oder WWVB-Funksignale. Diese Geräte sind nicht direkt mit dem Netzwerk verbunden. Stratum 1 — Server, die direkt mit den Referenzuhren verbunden sind. Stratum 2 empfängt die Zeit von Stratum 1, Stratum 3 von Stratum 2 und so weiter bis Stratum 15. Je höher die Stratum-Nummer, desto geringer potenziell die Genauigkeit — jede Ebene fügt eine kleine Verzögerung und einen Fehler hinzu. Stratum 16 bedeutet, dass die Zeit nicht verfügbar (nicht synchronisiert) ist.
| Stratum | Beschreibung | Genauigkeit |
|---|---|---|
| Stratum 0 | Atomuhren, GPS, Funksignale | Nanosekunden |
| Stratum 1 | Mit Referenz verbundene Server | Mikrosekunden |
| Stratum 2 | Öffentliche NTP-Server | 1–10 ms |
| Stratum 3 | Lokale Server von Organisationen | 10–50 ms |
| Stratum 4+ | Client-Geräte | bis 100 ms |
Für Mobilgeräte sind Stratum-2-Server optimal — es gibt genug von ihnen und sie bieten eine gute Balance zwischen Genauigkeit und Verfügbarkeit. Beispielsweise ist pool.ntp.org ein Pool von Tausenden Servern weltweit, der die Last automatisch verteilt. Für Android-Anwendungen wird die direkte Verwendung von Stratum 1 nicht empfohlen: Erstens erzeugt es eine übermäßige Last auf den primären Servern, und zweitens benötigt ein mobiles Gerät nur eine Genauigkeit von 10–50 ms, die Stratum 2 bietet. In Unternehmensnetzwerken wird ein lokaler Stratum-3-4-Server eingerichtet, der mit einem externen Stratum 2 synchronisiert.
SNTP (Simple Network Time Protocol, RFC 4330) ist eine vereinfachte Implementierung von NTP für Geräte mit begrenzten Ressourcen: Mikrocontroller, IoT-Sensoren und mobile Anwendungen, die keine hohe Genauigkeit benötigen. Im Gegensatz zu vollständigem NTP führt SNTP keine Filterung mehrerer Server durch, analysiert keine Uhrendrift und verwendet keine komplexen PLL-Algorithmen. Ein SNTP-Client sendet eine Anfrage, empfängt eine Antwort und stellt die Uhrzeit einmalig ein. Die Genauigkeit von SNTP beträgt je nach Netzwerk 10–100 ms — dies ist für die überwiegende Mehrheit mobiler Szenarien ausreichend, mit Ausnahme von Finanztransaktionen.
SNTP eignet sich für Android-Anwendungen, die einfach die aktuelle Uhrzeit von einem Server abrufen müssen, ohne eine kontinuierliche Synchronisation aufrechtzuerhalten. Beispielsweise zeigt eine App die Serverzeit beim Login an oder synchronisiert einmal täglich. Vollständiges NTP ist für Serversysteme, Telekommunikationsausrüstung, Finanzplattformen und verteilte Datenbanken erforderlich, bei denen konstante Genauigkeit und Driftüberwachung kritisch sind. Für die mobile Entwicklung ist SNTP ausreichend — der integrierte Android-Zeitdienst verwendet es zur periodischen Synchronisation mit Google-Servern.
In Android-Anwendungen ist das Abrufen der genauen Uhrzeit über NTP erforderlich, wenn die Systemzeit vom Benutzer geändert werden kann oder aufgrund fehlender Netzwerkverbindung von der tatsächlichen Zeit abweicht. Android verfügt über keinen integrierten öffentlichen NTP-Client — Entwickler verwenden die Bibliothek Apache Commons Net SntpClient oder Drittanbieterlösungen. Im Jahr 2022 fügte Google eine interne SntpClient-Klasse zur Android-API hinzu (über Google Play Services), die jedoch Konfiguration erfordert und nicht für die allgemeine Verwendung dokumentiert ist. Ein alternativer Ansatz ist die Zeitanfrage über eine REST-API, die den Server-Zeitstempel im Antwortkörper zurückgibt.
Eine grundlegende SNTP-Implementierung auf Android besteht aus dem Senden eines UDP-Pakets an einen NTP-Server (z. B. pool.ntp.org), dem Parsen der Antwort und dem Extrahieren des Sendezeitstempels (T3). Der Code muss Netzwerk-Timeouts und Parse-Fehler behandeln — in einer realen Anwendung wird diese Operation in einem Hintergrundthread ausgeführt und das Ergebnis bis zur nächsten Synchronisation zwischengespeichert. Die Bibliothek Apache Commons Net bietet eine fertige NTPUDPClient-Klasse, die mit minimalen Änderungen in Android verwendet werden kann, indem die Abhängigkeit zu build.gradle hinzugefügt wird.
// Get NTP time via Apache Commons Net
fun getNtpTime(server: String = "pool.ntp.org"): Date? {
return try {
val client = NTPUDPClient()
client.setDefaultTimeout(5000)
val info = client.getTime(InetAddress.getByName(server))
client.close()
Date(info.getMessage().getTransmitTimeStamp().getTime())
} catch (e: Exception) {
null
}
}
Die Genauigkeit von NTP hängt von mehreren Faktoren ab: Netzwerkverzögerung (RTT), Kanalstabilität, Serverauslastung und Qualität des lokalen Taktgenerators. In einem lokalen Netzwerk mit einer Verzögerung von weniger als 1 ms erreicht NTP eine Genauigkeit von 0,1–1 ms. Über das Internet mit einer Verzögerung von 10–50 ms sinkt die Genauigkeit auf 10–50 ms. Wichtiger als die einmalige Genauigkeit ist die Stabilität: Wenn die Verzögerung schwankt (Jitter), benötigt NTP mehr Zeit zur Berechnung eines zuverlässigen Offsets. Für Mobilgeräte ist der Hauptfaktor für Instabilität der Wechsel zwischen WLAN und Mobilfunknetzen, bei dem sich die Verzögerung um Größenordnungen ändern kann.
Für zeitkritische Android-Anwendungen wird empfohlen: mehrere NTP-Server verwenden und den mit der geringsten Verzögerung auswählen; Synchronisation während Netzwerkwechsel vermeiden; die zuletzt erhaltene Zeit zwischenspeichern und über System.currentTimeMillis anpassen. Für Spiele und Echtzeitanwendungen (NTP ist hier aufgrund der Netzwerklatenz nicht geeignet) verwenden Sie die Serverzeit, die in jeder Anfrage übermittelt wird. In Finanzanwendungen überprüfen Sie immer die Abweichung vom Server — wenn die Differenz 5 Sekunden überschreitet, blockieren Sie die Operation als potenziell unsicher.
Häufig gestellte Fragen
NTP (Network Time Protocol) ist ein Uhrensynchronisationsprotokoll über das Internet. Es wird benötigt, um die Zeit auf Geräten mit der UTC-Referenz abzugleichen. Ohne NTP weichen Computeruhren aufgrund der Quarzoszillator-Drift um Sekunden pro Tag ab, was für Finanztransaktionen, Protokollierung und Sicherheit kritisch ist.
Das NTP-System verwendet Ebenen — Strata: Stratum 0 (Atomuhren und GPS), Stratum 1 (mit Referenz verbundene Server), Stratum 2 (öffentliche NTP-Server), Stratum 3–4 (lokale Server), Stratum 5–15 (Clients). Je höher das Stratum, desto größer der potenzielle Fehler. Stratum 16 bedeutet, dass die Zeit nicht synchronisiert ist.
SNTP ist eine vereinfachte Version von NTP für Geräte mit begrenzten Ressourcen. Es filtert keine Server, analysiert keine Uhrendrift und verwendet kein PLL. SNTP eignet sich für mobile Anwendungen, bei denen eine Genauigkeit von 10–100 ms ausreicht. Vollständiges NTP wird für Server, Telekommunikationsausrüstung und Fintech-Systeme benötigt.
Verwenden Sie die Bibliothek Apache Commons Net mit der Klasse NTPUDPClient. Senden Sie eine Anfrage an pool.ntp.org, erhalten Sie die Antwort und extrahieren Sie den Sendezeitstempel. Alternativ verwenden Sie die REST-API Ihres Servers, die die Serverzeit im Date-Header oder im Antwortkörper als Unix-Zeitstempel zurückgibt.
Ohne NTP-Synchronisation kann die Systemzeit auf einem Gerät um Minuten oder Stunden abweichen. Dies beeinträchtigt Push-Benachrichtigungen, SSL-Zertifikatsprüfung, Protokolle, Aufgabenplaner und kryptografische Protokolle. In Finanzanwendungen gilt eine Abweichung von mehr als 5 Sekunden als Sicherheitsbedrohung.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch