Wykrywanie czasu sieci

Urządzenia z Androidem automatycznie próbują uzyskać prawidłowy czas uniksowy z okresu do źródła sieciowego. Android używa protokołu SNTP, który używa protokołu UDP, w celu uzyskania informacji o czasie.

Komponenty opisane na tej stronie są częścią automatycznego wykrywania czasu określa się go jako źródło czasu sieci. Sygnał czasowy od Sieciowy serwer czasu może służyć do ustawiania zegara systemowego urządzenia z Androidem, gdy urządzenie i time_detector obsługują automatyczne wykrywanie czasu jest skonfigurowana tak, aby z niej korzystać.

Domyślnie Android używa źródła czasu sieci jako głównego źródło automatycznego wykrywania czasu.

System wykrywania czasu sieci

Usługa network_time_update_service działająca na serwerze systemu Android implementuje system wykrywania czasu sieci. Usługa okresowo używa SNTP, aby uzyskać sygnał czasowy z serwera. Usługa monitoruje również sieć połączenia i powoduje odświeżenie czasu, gdy brak jest sygnału ostatniej godziny po dłuższym okresie słabego połączenia.

Usługa network_time_update_service próbuje uzyskać sygnał czasu po uruchomieniu i pierwszym nawiązaniu połączenia sieciowego. próbuje następnie utrzymać najnowszy sygnał, który przechowuje. Równoważy się dostosowane do potrzeb poszczególnych urządzeń z Androidem przy dużym obciążeniu, które można generowanych przez wiele urządzeń z Androidem na całym świecie.

Za pomocą wewnętrznych interfejsów API network_time_update_service przesyła czas pracy sieci sugestie do usługi time_detector. Inna platforma Androida a następnie korzystają z tych sugestii.

Po otrzymaniu sugestii ze źródła czasu sieci time_detector decyduje, czy zaktualizować zegar systemowy zgodnie z skonfigurowane reguły ustalania priorytetów.

Aby skonfigurować system automatycznego wykrywania czasu tak, aby używał punktu początkowego sieci sugestii automatycznego ustawienia zegara systemowego, użyj Plik konfiguracji serwera systemowego core/res/res/values/config.xml. Upewnij się, że parametr wartość network znajduje się w config_autoTimeSourcesPriority w żądanym pozycji. Więcej informacji: Priorytet źródła czasu.

Konfiguracja urządzenia

Ta sekcja zawiera informacje o tym, jak producenci urządzeń mogą skonfigurować sieć w systemie wykrywania czasu.

Podstawowa konfiguracja AOSP jest w frameworks/base/core/res/res/values/config.xml:

Klucz konfiguracji Wartość AOSP Opis
config_ntpRetry 3 Jeśli nie uda się odświeżyć, jest to liczba prób podejmowanych przez system odpytywanie w czasie sieci z krótszym interwałem odpytywania NTP (config_ntpPollingIntervalShorter), zanim wycofasz kopię zapasową i zaczniesz używać normalny interwał sondowania (config_ntpPollingInterval). Wartość A mniejsza niż 0 oznacza, że system ponawia próbę odpytywania na krótszym NTP interwał sondowania, dopóki nie uda się go odświeżyć.
config_ntpPollingInterval 64800000 (18 godzin) Normalny interwał odpytywania w czasie sieci (w milisekundach).
config_ntpPollingIntervalShorter 60000 (1 minuta) Interwał sondowania w czasie ponawiania próby sieci w milisekundach. Używana, gdy nie można odświeżyć w czasie.
config_ntpServers Pojedynczy wpis: ntp://time.android.com Serwery NTP używane do uzyskania dokładnego czasu. Elementy muszą mieć następujący format: ntp://<host>[:port]
To nie jest zarejestrowany schemat URI IANA.
config_ntpTimeout 5000 Czas oczekiwania na odpowiedź serwera NTP (w milisekundach) przed upływem limitu czasu.

Serwery

Domyślnie AOSP używa serwerów czasu pod adresem time.android.com, który jest aliasem dla Publiczny NTP Google. Ta usługa ma brak gwarancji jakości usług. Więcej informacji: Najczęstsze pytania na temat publicznego NTP Google.

Obsługa wielu serwerów

W przypadku Androida 14 i nowszych platforma obsługuje na wielu serwerach NTP. Dotyczy to sytuacji, w których urządzenia rozprowadzane globalnie w jednej konfiguracji, lecz gdzie dostęp do serwerów takich jak time.android.com, w których obowiązują ograniczenia.

Algorytm próbuje używać każdego serwera określonego w zasadzie config_ntpServers. klucz konfiguracyjny. Po wykryciu, że system zareaguje, będzie dalej używać do momentu odświeżenia lub ponownego uruchomienia urządzenia.

Dokładność

Domyślna synchronizacja czasu sieci na Androidzie używa protokołu SNTP z pojedynczym zapytaniem mniej więcej raz dziennie, by mieć pewność, że telefon ma zawsze aktualny sygnał czasu.

Efekty opóźnienia w sieci są najważniejszą przyczyną niedokładności czasu Implementacja protokołu SNTP na Androidzie. SNTP zakłada symetryczne opóźnienia sieci, czyli opóźnienie sieciowe dla żądania jest takie samo jak opóźnienie sieci dla żądań a właściwy czas przypada dokładnie w środku tej w obie strony. Czas przesyłania danych w obie strony sieci jest często rzędu kilku ok. 100 milisekund, a w sieci przewodowej opóźnienie jest zbliżone do są symetryczne, co prowadzi do poziomów niedokładności, które są niemal niezauważalne dla użytkowników. Jednak w przypadku telefonii komórkowej lub radiowej istnieje kilka etapów, w transakcjach sieciowych mogą występować stosunkowo duże opóźnienia asymetryczne co prowadzi do większej niedokładności.

Jeśli domyślne ustawienie AOSP w systemie config_ntpTimeout ma wartość 5000 milisekund, i jeśli wszystkie opóźnienia sieciowe są skupione wyłącznie na ruchu przychodzącym lub wychodzącym. nogi, maksymalny błąd teoretyczny wynosi około 2,5 sekundy.

Na ogólną dokładność zegara systemowego wpływa również zdolność urządzenia z Androidem pozwala dokładnie śledzić czas, który upłynął od uzyskania sygnału czasowego. To jest martwi się rejestrowaniem czasu w Androidzie, nie tylko wykrywaniem czasu sieci. Dlaczego usługa time_detector ignoruje stare sugestie. Usługa network_time_update_service jest regularnie odświeżana za pomocą Interwał config_ntpPollingInterval umożliwiający zachowanie usługi time_detector z sugestiami na temat aktualnego terminu i upewnij się, że time_detector nie przechodzi na niższy priorytet i często ma niższą dokładność lub czasami nieprawidłowe źródła czasu, takie jak telephony.

Jeśli jest używane automatyczne wykrywanie czasu, dokładność zegara systemowego urządzenia może być na które mają wpływ inne konfiguracje usługi time_detector, takie jak stałe i flagi, które wpływają na to, jak różna musi być sugestia czasu aktualne ustawienie zegara systemowego przed skorygowaniem zegara (ServiceConfigAccessorImpl.java).

Producenci urządzeń mogą zmienić dokładność przy użyciu poprzedniej konfiguracji opcje i stałe. Warto jednak pamiętać o ograniczeniach wdrożenie protokołu SNTP na platformie oraz potencjalny wpływ na zużycie energii częstsze operacje sieciowe, może to mieć wpływ na aplikacje uruchomione na urządzeniu częstsze, ale mniejsze regulacje zegara i wpływ na obciążenie serwera.

Inne zastosowania czasu sieciowego

Jeśli automatyczne wykrywanie czasu przy użyciu punktu początkowego network nie zostało skonfigurowane lub jeśli użytkownik wyłączył automatyczne wykrywanie czasu, czyli czas uzyskany przez Z usługi network_time_update_service nadal mogą korzystać te komponenty:

  • SystemClock.currentNetworkTimeClock() .
  • Funkcje platformy wewnętrznej. Na przykład A-GPS może zlokalizować GNSS (lokalizację). można je rozwiązać szybciej, gdy dostępne są informacje o czasie sieci.

Debugowanie i testowanie

W tej sekcji opisano polecenia powłoki służące do debugowania i testowania Wykrywanie czasu korzystania z sieci.

Interakcja z usługą network_time_update_service

Aby skopiować bieżący stan instancji network_time_update_service, użyj polecenia:

adb shell cmd network_time_update_service dump

Aby zobaczyć zestaw opcji wiersza poleceń, które mogą pomóc w testowaniu, użyj:

adb shell cmd network_time_update_service help