Определение времени сети

Устройства Android автоматически пытаются получить правильное время эпохи Unix из сетевого источника. Android использует протокол SNTP, который использует протокол UDP, для получения информации о времени.

Компоненты, описанные на этой странице, являются частью системы автоматического определения времени, называемой источником сетевого времени . Сигнал времени с сетевого сервера времени можно использовать для установки системных часов устройства Android, если на устройстве поддерживается автоматическое определение времени и служба time_detector настроена на его использование.

По умолчанию Android использует источник сетевого времени в качестве основного источника автоматического определения времени.

Система определения сетевого времени

Служба network_time_update_service , работающая на системном сервере Android, реализует систему определения сетевого времени. Служба периодически использует SNTP для получения сигнала времени с сервера. Служба также контролирует сетевое подключение и запускает обновление времени, когда последний сигнал времени недоступен после длительных периодов плохого подключения.

Служба network_time_update_service пытается получить сигнал времени после загрузки и при первом установлении сетевого подключения. Затем служба пытается сохранить последний имеющийся у нее сигнал в актуальном состоянии. Он уравновешивает потребности отдельных устройств Android со значительной нагрузкой, которую могут создавать многие устройства Android по всему миру, освежающие свое время.

Используя внутренние API, network_time_update_service отправляет предложения по сетевому времени в службу time_detector . Другие компоненты платформы Android затем используют эти предложения по времени в сети.

After receiving suggestions from the network time origin, the time_detector service determines whether to update the system clock according to the configured prioritization rules .

Чтобы настроить систему автоматического определения времени на использование предложений сетевого происхождения для автоматической установки системных часов, используйте файл конфигурации системного сервера core/res/res/values/config.xml . Убедитесь, что network создания ценности содержится в config_autoTimeSourcesPriority в нужной позиции. Подробности см. в разделе «Приоритет источника времени» .

Конфигурация устройства

В этом разделе описывается, как производители устройств могут настроить систему определения времени сети.

Базовая конфигурация AOSP находится в frameworks/base/core/res/res/values/config.xml :

Конфигурационный ключ Значение AOSP Описание
config_ntpRetry 3 After failing to refresh, this is the number of times the system tries network time polling with a shorter NTP polling interval ( config_ntpPollingIntervalShorter ), before backing off and using the normal polling interval ( config_ntpPollingInterval ). Значение меньше 0 означает, что система повторяет опрос с более коротким интервалом опроса NTP, пока не сможет успешно обновиться.
config_ntpPollingInterval 64800000 (18 часов) Обычный интервал опроса времени сети в миллисекундах.
config_ntpPollingIntervalShorter 60000 (1 минута) Интервал повторного опроса сети в миллисекундах. Используется в случае сбоя обновления времени.
config_ntpServers Одна запись: ntp://time.android.com NTP-серверы, используемые для получения точного времени. Элементы должны быть в формате: ntp://<host>[:port] .
Это не зарегистрированная схема URI IANA.
config_ntpTimeout 5000 Время ожидания ответа NTP-сервера в миллисекундах до истечения времени ожидания.

Серверы

По умолчанию AOSP использует серверы времени по адресу time.android.com , который является псевдонимом Google Public NTP . У этой услуги нет соглашения об уровне обслуживания. Подробности см. в FAQ по публичному NTP Google .

Поддержка нескольких серверов

Для Android 14 и более поздних версий платформа поддерживает несколько серверов NTP. This supports situations where devices are distributed globally with a single configuration, but where access to servers such as time.android.com is restricted in certain places.

Алгоритм проверяет каждый сервер, указанный в конфигурационном ключе config_ntpServers . Когда он находит тот, который отвечает, система продолжает использовать этот сервер до тех пор, пока он не перестанет обновляться или устройство не перезагрузится.

Точность

Сетевая синхронизация времени в Android по умолчанию использует SNTP с одним запросом времени примерно раз в день, чтобы обеспечить всегда наличие актуального сигнала времени.

Эффекты задержки в сети вносят наибольший вклад в неточность времени при реализации SNTP в Android. SNTP предполагает симметричные сетевые задержки, то есть задержка в сети для запроса такая же, как задержка в сети для ответа, а правильное время находится точно в середине этого обратного прохождения по сети. Часто время прохождения сигнала туда и обратно составляет порядка нескольких сотен миллисекунд, а в проводной сети задержка близка к симметричной, что приводит к уровням неточностей, которые практически незаметны для пользователей. Однако в случае мобильной или радиотелефонии существует несколько этапов, на которых в сетевую транзакцию могут быть включены относительно длительные асимметричные задержки, что приводит к большей неточности.

Если для параметра AOSP по умолчанию для config_ntpTimeout установлено значение 5000 миллисекунд, и если вся задержка сети сосредоточена исключительно на входящем или исходящем участке, максимальная теоретическая ошибка составляет примерно 2,5 секунды.

На общую точность системных часов также влияет способность устройства Android точно отслеживать прошедшее время после получения сигнала времени. This is a concern with all timekeeping on Android, not just network time detection, and is why the time_detector service disregards old time suggestions. Служба network_time_update_service регулярно обновляется с использованием интервала config_ntpPollingInterval , чтобы обеспечить службу time_detector свежими предложениями по времени и гарантировать, что служба time_detector не возвращается к источникам времени с более низким приоритетом и часто с меньшей точностью или иногда к неправильным источникам времени, таким как telephony .

Когда используется автоматическое определение времени, на точность системных часов устройства могут влиять другие конфигурации службы time_detector , такие как константы и флаги, которые влияют на то, насколько предложение времени должно отличаться от текущего времени системных часов до настройки часов ( ServiceConfigAccessorImpl.java ).

Производители устройств могут изменять точность, используя предыдущие параметры конфигурации и константы. Но важно помнить об ограничениях реализации SNTP платформы, а также о потенциальном влиянии на энергопотребление от более частых сетевых операций, о влиянии на приложения, работающие на устройстве, от более частых, но меньших корректировок тактовой частоты, а также о влиянии на нагрузку на сервер.

Другое использование сетевого времени

Если автоматическое определение времени с использованием network источника не настроено или пользователь отключил автоматическое определение времени, время, полученное службой network_time_update_service , по-прежнему используется следующими компонентами:

  • Метод SystemClock.currentNetworkTimeClock() .
  • Внутренние функции платформы. Например, A-GPS может быстрее определить местоположение GNSS (местоположения), если у него есть информация о времени сети.

Отладка и тестирование

В следующем разделе описаны команды оболочки для отладки и тестирования функции определения времени сети.

Взаимодействие со службой network_time_update_service

Чтобы сбросить текущее состояние network_time_update_service , используйте:

adb shell cmd network_time_update_service dump

Чтобы просмотреть набор параметров командной строки, которые могут помочь в тестировании, используйте:

adb shell cmd network_time_update_service help
,

Устройства Android автоматически пытаются получить правильное время эпохи Unix из сетевого источника. Android использует протокол SNTP, который использует протокол UDP, для получения информации о времени.

Компоненты, описанные на этой странице, являются частью системы автоматического определения времени, называемой источником сетевого времени . Сигнал времени с сетевого сервера времени можно использовать для установки системных часов устройства Android, если на устройстве поддерживается автоматическое определение времени и служба time_detector настроена на его использование.

По умолчанию Android использует источник сетевого времени в качестве основного источника автоматического определения времени.

Система определения сетевого времени

Служба network_time_update_service , работающая на системном сервере Android, реализует систему определения сетевого времени. Служба периодически использует SNTP для получения сигнала времени с сервера. Служба также контролирует сетевое подключение и запускает обновление времени, когда последний сигнал времени недоступен после длительных периодов плохого подключения.

Служба network_time_update_service пытается получить сигнал времени после загрузки и при первом установлении сетевого подключения. Затем служба пытается сохранить последний имеющийся у нее сигнал в актуальном состоянии. Он уравновешивает потребности отдельных устройств Android со значительной нагрузкой, которую могут создавать многие устройства Android по всему миру, освежающие свое время.

Используя внутренние API, network_time_update_service отправляет предложения по сетевому времени в службу time_detector . Другие компоненты платформы Android затем используют эти предложения по времени в сети.

После получения предложений от источника сетевого времени сервис time_detector определяет, следует ли обновлять системные часы в соответствии с настроенными правилами расстановки приоритетов .

Чтобы настроить систему автоматического определения времени на использование предложений сетевого происхождения для автоматической установки системных часов, используйте файл конфигурации системного сервера core/res/res/values/config.xml . Убедитесь, что network создания ценности содержится в config_autoTimeSourcesPriority в нужной позиции. Подробности см. в разделе «Приоритет источника времени» .

Конфигурация устройства

В этом разделе описывается, как производители устройств могут настроить систему определения времени сети.

The base AOSP configuration is at frameworks/base/core/res/res/values/config.xml :

Конфигурационный ключ Значение AOSP Описание
config_ntpRetry 3 После неудачного обновления это количество раз, которое система пытается выполнить опрос сетевого времени с более коротким интервалом опроса NTP ( config_ntpPollingIntervalShorter ), прежде чем отступить и использовать обычный интервал опроса ( config_ntpPollingInterval ). Значение меньше 0 означает, что система повторяет опрос с более коротким интервалом опроса NTP, пока не сможет успешно обновиться.
config_ntpPollingInterval 64800000 (18 часов) Обычный интервал опроса времени сети в миллисекундах.
config_ntpPollingIntervalShorter 60000 (1 минута) Интервал повторного опроса сети в миллисекундах. Используется в случае сбоя обновления времени.
config_ntpServers A single entry: ntp://time.android.com NTP-серверы, используемые для получения точного времени. Элементы должны быть в формате: ntp://<host>[:port] .
Это не зарегистрированная схема URI IANA.
config_ntpTimeout 5000 Время ожидания ответа NTP-сервера в миллисекундах до истечения времени ожидания.

Серверы

По умолчанию AOSP использует серверы времени по адресу time.android.com , который является псевдонимом Google Public NTP . У этой услуги нет соглашения об уровне обслуживания. For details, see the Google Public NTP FAQ .

Поддержка нескольких серверов

Для Android 14 и более поздних версий платформа поддерживает несколько серверов NTP. Это поддерживает ситуации, когда устройства распределены по всему миру с одной конфигурацией, но доступ к таким серверам, как time.android.com ограничен в определенных местах.

Алгоритм проверяет каждый сервер, указанный в конфигурационном ключе config_ntpServers . Когда он находит тот, который отвечает, система продолжает использовать этот сервер до тех пор, пока он не перестанет обновляться или устройство не перезагрузится.

Точность

Сетевая синхронизация времени в Android по умолчанию использует SNTP с одним запросом времени примерно раз в день, чтобы обеспечить всегда наличие актуального сигнала времени.

Эффекты задержки в сети вносят наибольший вклад в неточность времени при реализации SNTP в Android. SNTP предполагает симметричные сетевые задержки, то есть задержка в сети для запроса такая же, как задержка в сети для ответа, а правильное время находится точно в середине этого обратного прохождения по сети. Часто время прохождения сигнала туда и обратно составляет порядка нескольких сотен миллисекунд, а в проводной сети задержка близка к симметричной, что приводит к уровням неточностей, которые практически незаметны для пользователей. Однако в случае мобильной или радиотелефонии существует несколько этапов, на которых в сетевую транзакцию могут вноситься относительно длительные асимметричные задержки, что приводит к большей неточности.

With the AOSP default setting for config_ntpTimeout set to 5000 milliseconds, and if all network latency is solely concentrated on the inbound or outbound leg, the maximum theoretical error is approximately 2.5 seconds.

На общую точность системных часов также влияет способность устройства Android точно отслеживать прошедшее время после получения сигнала времени. Это проблема всех хронометража на Android, а не только определения времени в сети, и именно поэтому служба time_detector игнорирует предложения старого времени. The network_time_update_service service refreshes regularly using the config_ntpPollingInterval interval to keep the time_detector service supplied with fresh time suggestions and to ensure that the time_detector service doesn't fall back to lower-priority and often lower-accuracy or occasionally incorrect time origins such as telephony .

When automatic time detection is used, device system clock accuracy can be affected by other configurations of the time_detector service, such as the constants and flags that affect how different a time suggestion has to be from the current system clock time before the clock is adjusted ( ServiceConfigAccessorImpl.java ).

Производители устройств могут изменять точность, используя предыдущие параметры конфигурации и константы. Но важно помнить об ограничениях реализации SNTP платформы, а также о потенциальном влиянии на энергопотребление от более частых сетевых операций, о влиянии на приложения, работающие на устройстве, от более частых, но меньших корректировок тактовой частоты, а также о влиянии на нагрузку на сервер.

Другое использование сетевого времени

Если автоматическое определение времени с использованием network источника не настроено или если пользователь отключил автоматическое определение времени, время, полученное службой network_time_update_service , по-прежнему используется следующими компонентами:

  • Метод SystemClock.currentNetworkTimeClock() .
  • Внутренние функции платформы. Например, A-GPS может быстрее определить местоположение GNSS (местоположения), если у него есть информация о времени сети.

Отладка и тестирование

В следующем разделе описаны команды оболочки для отладки и тестирования функции определения времени сети.

Взаимодействие со службой network_time_update_service

Чтобы сбросить текущее состояние network_time_update_service , используйте:

adb shell cmd network_time_update_service dump

Чтобы просмотреть набор параметров командной строки, которые могут помочь в тестировании, используйте:

adb shell cmd network_time_update_service help