Erkennung der Netzwerkzeit

Android-Geräte versuchen automatisch, die korrekte Unix-Epochen-Zeit von eine Netzwerkquelle. Android nutzt das SNTP-Protokoll, das das UDP-Protokoll nutzt, Zeitinformationen zu erhalten.

Die auf dieser Seite beschriebenen Komponenten sind Teil der automatischen Zeiterkennung System, auch als Ursprung im Netzwerk bezeichnet. Ein Zeitsignal von kann ein Netzwerkzeitserver verwendet werden, um die Systemuhr des Android-Geräts einzustellen, wenn Die automatische Zeiterkennung wird auf dem Gerät und der time_detector unterstützt ist für dessen Verwendung konfiguriert.

Standardmäßig verwendet Android den Ursprung des Netzwerks als primären Ursprung Ursprung der automatischen Zeiterkennung.

System zur Netzwerkzeiterkennung

Der Dienst network_time_update_service, der auf dem Android-Systemserver ausgeführt wird Implementiert das System zur Netzwerkzeiterkennung. Der Dienst verwendet regelmäßig SNTP, um ein Zeitsignal von einem Server abzurufen. Der Dienst überwacht auch das Netzwerk Verbindung und löst eine Zeitaktualisierung aus, wenn kein aktuelles Zeitsignal verfügbar ist auch wenn die Verbindung schlecht war.

Der Dienst network_time_update_service versucht, ein Zeitsignal abzurufen nach dem Booten und beim ersten Herstellen der Netzwerkverbindung. Die und versucht dann, das neueste Signal auf dem neuesten Stand zu halten. Es schafft ein Gleichgewicht zwischen die Anforderungen der einzelnen Android-Geräte erfüllen, die von vielen Android-Geräten weltweit generiert wurden.

network_time_update_service sendet über interne APIs die Netzwerkzeit Vorschläge für den time_detector-Dienst. Andere Android-Plattform verwenden diese Netzwerkzeitvorschläge.

Nach Erhalt von Vorschlägen vom Ursprung des Netzwerks, time_detector bestimmt, ob die Systemuhr entsprechend dem konfigurierten Priorisierungsregeln.

So konfigurieren Sie das automatische Zeiterkennungssystem für die Verwendung des Netzwerkursprungs zum automatischen Einstellen der Systemuhr verwenden, verwenden Sie Systemserver-Konfigurationsdatei core/res/res/values/config.xml. Stellen Sie sicher, dass die Der Wert network ist in der Spalte config_autoTimeSourcesPriority enthalten: . Weitere Informationen finden Sie unter Priorität der Zeitquelle.

Gerätekonfiguration

In diesem Abschnitt wird beschrieben, wie Gerätehersteller das Netzwerk konfigurieren können Zeiterkennungssystems.

Die AOSP-Basiskonfiguration befindet sich frameworks/base/core/res/res/values/config.xml:

Konfigurationsschlüssel AOSP-Wert Beschreibung
config_ntpRetry 3 Wenn die Aktualisierung fehlschlägt, gibt dies an, wie oft das System versucht, Netzwerkzeit-Polling mit einem kürzeren NTP-Pollingintervall (config_ntpPollingIntervalShorter), bevor die Daten zurückgesetzt und verwendet werden das normale Pollingintervall (config_ntpPollingInterval). Ein Wert weniger als 0 bedeutet, dass das System den Abruf mit dem kürzeren NTP wiederholt Pollingintervall, bis er aktualisiert werden kann.
config_ntpPollingInterval 64800000 (18 Stunden) Das normale Netzwerkzeit-Pollingintervall in Millisekunden.
config_ntpPollingIntervalShorter 60000 (1 Minute) Das Zeitintervall für die Netzwerkwiederholung in Millisekunden. Wird verwendet, wenn eine zeitbedingte Aktualisierung fehlschlägt.
config_ntpServers Ein einzelner Eintrag: ntp://time.android.com NTP-Server, die zur Ermittlung einer genauen Zeit verwendet werden sollen. Elemente müssen das folgende Format haben: ntp://<host>[:port]
Dies ist kein registriertes IANA-URI-Schema.
config_ntpTimeout 5.000 Zeit in Millisekunden, die auf eine NTP-Serverantwort gewartet wird, bevor das Zeitlimit überschritten wird.

Server

Standardmäßig verwendet AOSP Zeitserver unter time.android.com, einem Alias für Google Public NTP. Dieser Dienst hat kein SLA. Weitere Informationen finden Sie in der Häufig gestellte Fragen zu Google Public NTP

Unterstützung mehrerer Server

Ab Android 14 unterstützt das Framework auf mehreren NTP-Servern. Dies ist hilfreich, wenn Geräte die global verteilt sind, mit einer einzigen Konfiguration, aber mit Zugriff auf Server wie time.android.com ist an bestimmten Orten eingeschränkt.

Der Algorithmus versucht jeden in der config_ntpServers angegebenen Server Konfigurationsschlüssel. Findet es eine Antwort, verwendet das System bis er nicht aktualisiert wird oder das Gerät neu startet.

Genauigkeit

Die standardmäßige Netzwerkzeitsynchronisierung von Android verwendet SNTP mit einer einzigen Zeitabfrage um sicherzustellen, dass immer ein aktuelles Zeitsignal verfügbar ist.

Netzwerk-Latenzeffekte tragen am stärksten zu Zeitungenauigkeiten bei SNTP-Implementierung von Android SNTP geht von symmetrischen Netzwerkverzögerungen aus, ist die Netzwerklatenz für die Anfrage gleich die Netzwerklatenz für die und die richtige Zeit liegt genau in der Mitte Netzwerk-Roundtrips. Häufig liegt die Netzwerk-Umlaufzeit in der Größenordnung von und in einem kabelgebundenen Netzwerk liegt die Latenz bei symmetrisch sein, was zu Ungenauigkeiten führt, die für Nutzenden. Bei Mobilfunk- und Funktelefonen gibt es jedoch mehrere Phasen, in denen Relativ lange, asymmetrische Verzögerungen können in eine Netzwerktransaktion eingefügt werden. was zu Ungenauigkeiten führt.

Wenn die AOSP-Standardeinstellung für config_ntpTimeout auf 5000 Millisekunden festgelegt ist, Bezieht sich die gesamte Netzwerklatenz ausschließlich auf den eingehenden oder ausgehenden Traffic, liegt der maximale theoretische Fehler bei etwa 2, 5 Sekunden.

Die Genauigkeit der Systemuhr insgesamt wird auch dadurch beeinflusst, um die verstrichene Zeit genau zu verfolgen, nachdem ein Zeitsignal empfangen wurde. Dies ist ein die gesamte Zeitmessung unter Android betreffen, nicht nur die Netzwerkzeiterkennung. warum der Dienst time_detector alte Zeitvorschläge ignoriert. Die Der network_time_update_service-Dienst wird regelmäßig mit dem config_ntpPollingInterval-Intervall, um den time_detector-Dienst beizubehalten aktuelle Uhrzeitvorschläge erhalten und sicherstellen, dass time_detector nicht auf eine niedrigere Priorität und oft Gelegentlich falsche Zeitursprünge wie telephony.

Bei Verwendung der automatischen Zeiterkennung kann die Genauigkeit der Systemuhr des Geräts die von anderen Konfigurationen des time_detector-Dienstes betroffen sind, z. B. dem Konstanten und Markierungen, die beeinflussen, wie sich ein Zeitvorschlag von dem die aktuelle Systemuhrzeit vor dem Anpassen der Uhr (ServiceConfigAccessorImpl.java)

Gerätehersteller können die Genauigkeit mithilfe der vorherigen Konfiguration ändern Optionen und Konstanten. Es ist jedoch wichtig, sich der Einschränkungen des der SNTP-Implementierung der Plattform und die möglichen Auswirkungen auf den Stromverbrauch von häufigeren Netzwerkvorgängen und Auswirkungen auf Apps, die auf dem Gerät ausgeführt werden, häufigere, aber kleinere Uhranpassungen und die Auswirkungen auf die Serverauslastung.

Andere Verwendungen der Netzwerkzeit

Wenn die automatische Zeiterkennung mit dem Ursprung network nicht konfiguriert ist oder wenn der Nutzer die automatische Zeiterkennung deaktiviert hat, also die vom Der Dienst network_time_update_service wird weiterhin von den folgenden Komponenten verwendet:

Fehlerbehebung und Tests

Im folgenden Abschnitt werden Shell-Befehle zum Debugging und Testen der Funktion zur Erkennung der Netzwerkzeit.

Mit dem Dienst network_time_update_service interagieren

Verwenden Sie folgenden Befehl, um den aktuellen Status von network_time_update_service zu sichern:

adb shell cmd network_time_update_service dump

Um eine Reihe von Befehlszeilenoptionen anzuzeigen, die beim Testen helfen können, verwenden Sie:

adb shell cmd network_time_update_service help