Rilevamento del tempo di rete

I dispositivi Android tentano automaticamente di ottenere l'ora corretta dell'epoca Unix da un'origine di rete. Android utilizza il protocollo SNTP, che utilizza il protocollo UDP, per ottenere informazioni sull'ora.

I componenti descritti in questa pagina fanno parte del sistema di rilevamento automatico noto come origine ora della rete. Un indicatore di ora da è possibile utilizzare un server dell'ora di rete per impostare l'orologio di sistema del dispositivo Android il rilevamento automatico dell'ora è supportato sul dispositivo e su time_detector configurato per utilizzarlo.

Per impostazione predefinita, Android utilizza l'origine dell'ora della rete come principale rilevamento automatico dell'ora.

Sistema di rilevamento del tempo di rete

Il servizio network_time_update_service eseguito sul server del sistema Android e implementare il sistema di rilevamento del tempo di rete. Il servizio utilizza periodicamente SNTP per ottenere un segnale orario da un server. Il servizio monitora anche la rete e attiva un aggiornamento dell'ora quando non è disponibile alcun segnale dell'ora recente dopo lunghi periodi di connessione scadente.

Il servizio network_time_update_service tenta di ottenere un segnale di orario dopo l'avvio e quando viene stabilita la connettività di rete. La quindi tenta di mantenere aggiornato l'ultimo segnale. Bilancia le esigenze dei singoli dispositivi Android con il carico sostanziale che potrebbe generati da molti dispositivi Android in tutto il mondo e aggiornano il loro tempo.

Utilizzando le API interne, network_time_update_service invia il tempo di rete suggerimenti al servizio time_detector. Altra piattaforma Android utilizza questi suggerimenti per il tempo di rete.

Dopo aver ricevuto suggerimenti dall'origine dell'ora della rete, time_detector servizio determina se aggiornare l'orologio di sistema in base le regole di assegnazione delle priorità configurate.

Per configurare il sistema di rilevamento automatico dell'ora in modo che utilizzi l'origine della rete per impostare automaticamente l'orologio di sistema, utilizza File di configurazione del server di sistema core/res/res/values/config.xml. Assicurati che il valore network è contenuto in config_autoTimeSourcesPriority nel posizione. Per maggiori dettagli, vedi Priorità dell'origine ora.

Configurazione dispositivo

Questa sezione descrive in che modo i produttori di dispositivi possono configurare la rete di rilevamento dell'ora.

La configurazione AOSP di base è frameworks/base/core/res/res/values/config.xml:

Chiave di configurazione Valore AOSP Descrizione
config_ntpRetry 3 Se il sistema non riesce ad aggiornare, questo è il numero di volte polling del tempo di rete con un intervallo di polling NTP più breve (config_ntpPollingIntervalShorter), prima di eseguire il backup e utilizzare l'intervallo di polling normale (config_ntpPollingInterval). Un valore meno di 0 indica che il sistema riesegue il polling all'NTP più breve per l'intervallo di polling finché l'aggiornamento non riesce.
config_ntpPollingInterval 64800000 (18 ore) Il normale intervallo di polling del tempo di rete in millisecondi.
config_ntpPollingIntervalShorter 60000 (1 minuto) L'intervallo di polling dei nuovi tentativi in millisecondi durante la rete. Utilizzata quando quando l'aggiornamento non riesce.
config_ntpServers Una singola voce: ntp://time.android.com server NTP da utilizzare per ottenere l'ora esatta. Gli elementi devono avere il seguente formato: ntp://<host>[:port].
Questo non è uno schema URI IANA registrato.
config_ntpTimeout 5000 Tempo di attesa di una risposta del server NTP in millisecondi prima del timeout.

Server

Per impostazione predefinita, AOSP utilizza i server temporali all'indirizzo time.android.com, che è un alias per Google Public NTP. Questo servizio ha senza SLA. Per maggiori dettagli, consulta Domande frequenti su Google Public NTP.

Supporto di più server

Per Android 14 e versioni successive, il framework supporta più server NTP. Questo supporta le situazioni in cui i dispositivi vengono distribuiti a livello globale con un'unica configurazione, ma dove l'accesso come time.android.com, è soggetta a limitazioni in alcune località.

L'algoritmo prova ogni server specificato nell'config_ntpServers chiave di configurazione. Quando ne trova una che risponde, il sistema continua a usare il server finché l'aggiornamento non riesce o il dispositivo non si riavvia.

Accuratezza

La sincronizzazione ora di rete predefinita di Android utilizza SNTP con una singola query temporale circa una volta al giorno per fare in modo che il segnale sia sempre recente.

Gli effetti della latenza di rete sono il fattore principale che contribuisce all'inesattezza dei tempi con Implementazione di SNTP di Android. SNTP presuppone ritardi di rete simmetrici, ovvero la latenza di rete per la richiesta è la stessa della latenza di rete per e il momento giusto si trova esattamente nel mezzo. di round trip della rete. Spesso, il tempo di round trip della rete è nell'ordine di alcuni centinaia di millisecondi e su una rete cablata la latenza è vicina a simmetrico, portando a livelli di imprecisione quasi impercettibili utenti. Tuttavia, nel caso della telefonia mobile o radio, esistono diverse fasi in cui relativamente lunghi, ritardi asimmetrici possono essere inseriti in una transazione di rete il che porta a maggiori inesattezze.

Con l'impostazione predefinita di AOSP per config_ntpTimeout impostata su 5000 millisecondi, e se tutta la latenza di rete è concentrata esclusivamente sulla latenza in entrata o in uscita gamba, l'errore teorico massimo è di circa 2,5 secondi.

La precisione complessiva dell'orologio di sistema dipende anche dalla capacità del dispositivo Android per tenere traccia del tempo trascorso in modo preciso dopo aver ottenuto un indicatore di tempo. Si tratta di un preoccuparsi di tutti i servizi di cronometraggio su Android, non solo del rilevamento del tempo di rete, perché il servizio time_detector ignora i suggerimenti precedenti. La Il servizio network_time_update_service viene aggiornato regolarmente utilizzando il Intervallo di config_ntpPollingInterval per mantenere il servizio time_detector forniti con nuovi suggerimenti di orario e per garantire che time_detector non torna a una priorità inferiore e spesso a un'accuratezza a volte origini temporali errate, come telephony.

Quando viene utilizzato il rilevamento automatico dell'ora, la precisione dell'orologio di sistema del dispositivo può essere interessata da altre configurazioni del servizio time_detector, ad esempio costanti e flag che determinano la differenza tra un suggerimento di orario e l'altro l'ora corrente dell'orologio di sistema prima della regolazione dell'orologio (ServiceConfigAccessorImpl.java).

I produttori di dispositivi possono modificare l'accuratezza utilizzando la configurazione precedente le opzioni e le costanti. Ma è importante conoscere i limiti delle dell'implementazione SNTP della piattaforma e il potenziale impatto sul consumo energetico da operazioni di rete più frequenti, impatto sulle app in esecuzione sul dispositivo più frequenti ma più piccole, e l'effetto sul carico del server.

Altri utilizzi del tempo di rete

Se il rilevamento automatico dell'ora utilizzando l'origine network non è configurato o se l'utente ha disattivato il rilevamento automatico dell'ora, l'orario ottenuto Il servizio network_time_update_service è ancora utilizzato dai seguenti componenti:

  • La SystemClock.currentNetworkTimeClock() .
  • Funzioni di piattaforma interne. Ad esempio, l'A-GPS può individuare una posizione GNSS la prima correzione più rapida se sono disponibili informazioni sull'ora della rete.

Debug e test

La sezione seguente descrive i comandi shell per il debug e il test del rilevamento del tempo di rete.

Interagire con il servizio network_time_update_service

Per eseguire il dump dello stato attuale di network_time_update_service, usa:

adb shell cmd network_time_update_service dump

Per visualizzare un insieme di opzioni della riga di comando che possono essere utili durante i test, utilizza:

adb shell cmd network_time_update_service help