Detección del tiempo de red

Los dispositivos Android intentan obtener automáticamente el tiempo Unix correcto del tiempo Unix una fuente de red. Android usa el protocolo SNTP, que usa el protocolo UDP, para obtener información sobre el tiempo.

Los componentes descritos en esta página forman parte de la detección automática de hora al que se hace referencia como origen de hora de la red. Una señal de tiempo de se puede utilizar un servidor de hora de red para configurar el reloj del sistema del dispositivo Android cuando La detección automática de la hora es compatible con el dispositivo y time_detector el servicio está configurado para usarlo.

De forma predeterminada, Android usa el origen de tiempo de red como principal el origen de detección automática de la hora.

Sistema de detección de la hora de la red

El servicio network_time_update_service que se ejecuta en el servidor del sistema Android implementa el sistema de detección de la hora de la red. El servicio usa periódicamente SNTP para obtener una señal de hora de un servidor. El servicio también supervisa la configuración conectividad y activa una actualización de tiempo cuando no hay una señal reciente disponible después de largos períodos de conectividad deficiente.

El servicio network_time_update_service intenta obtener una señal de hora después del inicio y cuando se establece la conectividad de red. El el servicio intenta mantener actualizada la señal más reciente. Equilibra la necesidades de los dispositivos Android individuales con la carga sustancial que podrían generados por muchos dispositivos Android de todo el mundo, que actualizan su tiempo.

Con las APIs internas, network_time_update_service envía la hora de red sugerencias al servicio time_detector. Otra plataforma de Android usan estas sugerencias de hora de red.

Después de recibir sugerencias del origen de hora de la red, el time_detector determina si debe actualizar el reloj del sistema según la las reglas de priorización configuradas.

Para configurar el sistema de detección automática de la hora de modo que use el origen de la red para configurar el reloj del sistema automáticamente, usa el Archivo de configuración del servidor del sistema core/res/res/values/config.xml. Asegúrate de que las el valor network se encuentra en config_autoTimeSourcesPriority en la posición. Para obtener más información, consulta Prioridad de la fuente de tiempo.

Configuración del dispositivo

En esta sección, se describe cómo los fabricantes de dispositivos pueden configurar la red de detección de tiempo.

La configuración básica del AOSP se encuentra frameworks/base/core/res/res/values/config.xml:

Clave de configuración Valor de AOSP Descripción
config_ntpRetry 3 Después de un error de actualización, esta es la cantidad de veces que el sistema intenta sondeo en la hora de la red con un intervalo de sondeo NTP más corto (config_ntpPollingIntervalShorter), antes de retroceder y usar el intervalo de sondeo normal (config_ntpPollingInterval). Un valor inferior a 0 significa que el sistema vuelve a realizar el sondeo al NTP más corto el intervalo de sondeo hasta que se pueda actualizar correctamente.
config_ntpPollingInterval 64800000 (18 horas) El intervalo de sondeo del tiempo de red normal en milisegundos.
config_ntpPollingIntervalShorter 60000 (1 minuto) El intervalo de sondeo del tiempo de red de reintento en milisegundos. Se usa cuando falla una actualización de tiempo.
config_ntpServers Una sola entrada: ntp://time.android.com Servidores NTP que se deben usar para obtener una hora precisa. Los elementos deben tener el siguiente formato: ntp://<host>[:port]
Este no es un esquema de URI de IANA registrado.
config_ntpTimeout 5000 Tiempo para esperar una respuesta del servidor NTP en milisegundos antes del tiempo de espera.

Servidores

De forma predeterminada, AOSP usa servidores de tiempo en time.android.com, que es un alias para NTP pública de Google. Este servicio tiene sin ANS. Para obtener más información, consulta la Preguntas frecuentes sobre NTP públicas de Google.

Compatibilidad con varios servidores

Para Android 14 y versiones posteriores, el framework admite varios servidores NTP. Esto es compatible con situaciones en las que los dispositivos distribuidos globalmente con una sola configuración, pero en los que el acceso a los como time.android.com, está restringido en ciertos lugares.

El algoritmo prueba con cada servidor especificado en el archivo config_ntpServers. de configuración de Terraform. Cuando encuentra uno que responde, el sistema sigue usando ese servidor hasta que no se actualice o el dispositivo se reinicie.

Exactitud

La sincronización de hora de red predeterminada de Android utiliza SNTP con una única consulta de tiempo. aproximadamente una vez al día para asegurarse de tener una señal de hora reciente.

Los efectos de la latencia de red son el factor que más contribuye a la falta de exactitud en el tiempo, con Implementación de SNTP de Android SNTP asume retrasos simétricos de la red, es decir, la latencia de red para la solicitud es la misma que la latencia de la red respuesta y el momento correcto está justo en medio de esa ida y vuelta de la red. A menudo, el tiempo de ida y vuelta de la red está en el orden milésimas de segundo y, en una red por cable, la latencia es cercana a simétrica, lo que lleva a niveles de imprecisión que son casi imperceptibles para usuarios. Sin embargo, con la telefonía móvil o de radio, hay varias etapas Los retrasos relativamente largos y asimétricos pueden introducirse en una transacción de red lo que genera una mayor imprecisión.

Con la configuración predeterminada de AOSP para config_ntpTimeout establecida en 5000 milisegundos, y si toda la latencia de la red se concentra únicamente en el tráfico entrante o saliente, el error teórico máximo es de aproximadamente 2.5 segundos.

La precisión general del reloj del sistema también se ve afectada por la capacidad del dispositivo Android. para realizar un seguimiento preciso del tiempo transcurrido después de que se obtiene una señal de tiempo. Este es un le preocupa la hora en Android, no solo la detección de la hora de la red, y por qué el servicio time_detector ignora las sugerencias de horarios anteriores. El El servicio network_time_update_service se actualiza con regularidad mediante el Intervalo de config_ntpPollingInterval para mantener el servicio time_detector proporcionadas con sugerencias de horarios actualizados y para garantizar que el time_detector no recurre a una prioridad más baja y, a menudo, una menor precisión o orígenes de hora incorrectos ocasionalmente, como telephony.

Cuando se usa la detección automática de la hora, se puede modificar la precisión del reloj del sistema del dispositivo afectados por otras configuraciones del servicio time_detector, como la constantes y marcas que afectan qué tan diferente debe ser una sugerencia de hora la hora actual del reloj del sistema antes de que se ajuste el reloj (ServiceConfigAccessorImpl.java).

Los fabricantes de dispositivos pueden modificar la precisión con la configuración anterior opciones y constantes. Sin embargo, es importante conocer las limitaciones del la implementación de SNTP de la plataforma y el impacto potencial en el consumo de operaciones de red más frecuentes, impacto en las apps que se ejecutan en el dispositivo desde ajustes de reloj más frecuentes pero menores, y el efecto en la carga del servidor.

Otros usos del tiempo de red

Si la detección automática de la hora con el origen network no está configurada o si el usuario inhabilitó la detección de hora automática, la hora obtenida por Los siguientes componentes todavía usan el servicio de network_time_update_service:

  • El SystemClock.currentNetworkTimeClock() .
  • Funciones de la plataforma interna Por ejemplo, A-GPS puede localizar un GNSS (ubicación) antes de arreglarlo más rápido cuando tiene información de la hora de la red.

Depuración y pruebas

En la siguiente sección, se describen los comandos de shell para depurar y probar la la función de detección del tiempo de red.

Interactúa con el servicio network_time_update_service

Para volcar el estado actual de network_time_update_service, usa lo siguiente:

adb shell cmd network_time_update_service dump

Para ver un conjunto de opciones de línea de comandos que pueden ayudarte con las pruebas, usa lo siguiente:

adb shell cmd network_time_update_service help