Deteksi waktu jaringan

Perangkat Android secara otomatis akan mencoba memperoleh waktu Unix epoch yang benar dari sumber jaringan. Android menggunakan protokol SNTP, yang menggunakan protokol UDP, untuk mendapatkan informasi waktu.

Komponen yang dijelaskan di halaman ini adalah bagian dari deteksi waktu otomatis yang disebut sebagai asal waktu jaringan. Sinyal waktu dari server waktu jaringan dapat digunakan untuk mengatur jam sistem perangkat Android ketika deteksi waktu otomatis didukung di perangkat dan time_detector layanan dikonfigurasi untuk menggunakannya.

Secara default, Android menggunakan asal waktu jaringan sebagai titik awal origin deteksi waktu otomatis.

Sistem deteksi waktu jaringan

Layanan network_time_update_service yang berjalan di server sistem Android menerapkan sistem deteksi waktu jaringan. Layanan secara berkala menggunakan SNTP untuk mendapatkan sinyal waktu dari server. Layanan ini juga memantau jaringan konektivitas dan memicu refresh waktu ketika tidak ada sinyal waktu terbaru yang tersedia setelah koneksi buruk dalam waktu lama.

Layanan network_time_update_service mencoba mendapatkan sinyal waktu setelah {i>booting<i} dan ketika konektivitas jaringan pertama kali dibuat. Tujuan {i>service<i} kemudian mencoba untuk menjaga sinyal terbaru yang ditahannya tetap segar. Hal ini menyeimbangkan perangkat Android individual dengan beban yang cukup besar yang dapat yang dihasilkan oleh banyak perangkat Android di seluruh dunia yang memperbarui waktu mereka.

Menggunakan API internal, network_time_update_service mengirimkan waktu jaringan saran ke layanan time_detector. Platform Android lain kemudian menggunakan saran waktu jaringan ini.

Setelah menerima saran dari asal waktu jaringan, time_detector layanan tersebut akan menentukan apakah akan memperbarui jam sistem sesuai dengan aturan prioritas yang dikonfigurasi.

Untuk mengonfigurasi sistem deteksi waktu otomatis agar menggunakan asal jaringan untuk menyetel jam sistem secara otomatis, gunakan metode File konfigurasi server sistem core/res/res/values/config.xml. Pastikan atribut nilai network dimuat dalam config_autoTimeSourcesPriority dalam kolom posisi Anda. Untuk mengetahui detailnya, lihat Prioritas Sumber Waktu.

Konfigurasi perangkat

Bagian ini menjelaskan cara produsen perangkat dapat mengonfigurasi jaringan sistem deteksi waktu.

Konfigurasi AOSP dasar berada di frameworks/base/core/res/res/values/config.xml:

Kunci konfigurasi Nilai AOSP Deskripsi
config_ntpRetry 3 Setelah gagal memuat ulang, ini adalah berapa kali sistem mencoba polling waktu jaringan dengan interval polling NTP yang lebih pendek (config_ntpPollingIntervalShorter), sebelum melakukan pencadangan dan menggunakan interval polling normal (config_ntpPollingInterval). Sebuah nilai kurang dari 0 berarti sistem akan mencoba kembali polling pada NTP yang lebih pendek interval polling hingga berhasil dimuat ulang.
config_ntpPollingInterval 64800000 (18 jam) Interval polling waktu jaringan normal dalam milidetik.
config_ntpPollingIntervalShorter 60000 (1 menit) Interval polling waktu jaringan percobaan ulang dalam milidetik. Digunakan saat pembaruan waktu gagal.
config_ntpServers Satu entri: ntp://time.android.com digunakan server NTP untuk mendapatkan waktu yang akurat. Item harus berbentuk: ntp://<host>[:port].
Ini bukan skema URI IANA yang terdaftar.
config_ntpTimeout 5000 Waktu menunggu respons server NTP dalam milidetik sebelum waktu tunggu.

Server

Secara default, AOSP menggunakan server waktu di time.android.com, yang merupakan alias untuk NTP Publik Google. Layanan ini memiliki tanpa SLA. Untuk mengetahui detailnya, lihat FAQ NTP Publik Google.

Dukungan beberapa server

Untuk Android 14 dan yang lebih baru, framework ini mendukung beberapa server NTP. Hal ini mendukung situasi ketika perangkat didistribusikan secara global dengan satu konfigurasi, tetapi akses ke server seperti time.android.com dibatasi di tempat tertentu.

Algoritma mencoba setiap server yang ditentukan dalam config_ntpServers kunci konfigurasi. Ketika menemukan yang merespons, sistem terus menggunakan server itu sampai gagal di-refresh atau perangkat dimulai ulang.

Akurasi

Sinkronisasi waktu jaringan default Android menggunakan SNTP dengan kueri satu kali kira-kira sekali sehari untuk memastikan selalu ada sinyal waktu terbaru.

Efek latensi jaringan adalah kontributor terbesar terhadap ketidakakuratan waktu dengan Implementasi SNTP Android. SNTP mengasumsikan penundaan jaringan simetris, yaitu, latensi jaringan untuk permintaan sama dengan latensi jaringan untuk jawaban, dan waktu yang tepat terletak di tengah-tengah itu, jaringan bolak-balik. Sering kali, waktu dua arah jaringan berada dalam urutan beberapa seratus milidetik dan pada jaringan berkabel, latensinya mendekati simetris, yang menyebabkan tingkat ketidakakuratan yang hampir tidak terlihat oleh pelanggan. Namun, dengan telepon seluler atau radio ada beberapa tahap di mana relatif lama, penundaan asimetris dapat dimasukkan ke dalam transaksi jaringan yang berujung pada ketidakakuratan yang lebih besar.

Dengan setelan default AOSP untuk config_ntpTimeout yang ditetapkan ke 5000 milidetik, dan jika semua latensi jaringan hanya terkonsentrasi pada aliran masuk atau keluar, kaki, maksimum kesalahan teoritis adalah sekitar 2,5 detik.

Akurasi jam sistem secara keseluruhan juga dipengaruhi oleh kemampuan perangkat Android untuk melacak waktu berlalu secara akurat setelah mendapatkan sinyal waktu. Ini adalah terhadap semua pengaturan waktu di Android, bukan hanya deteksi waktu jaringan, dan mengapa layanan time_detector mengabaikan saran lama. Tujuan Layanan network_time_update_service dimuat ulang secara rutin menggunakan Interval config_ntpPollingInterval untuk mempertahankan layanan time_detector dilengkapi dengan saran waktu terbaru dan untuk memastikan bahwa time_detector layanan tidak kembali ke prioritas yang lebih rendah dan sering kali memiliki akurasi yang lebih rendah atau terkadang kesalahan asal waktu, seperti telephony.

Saat deteksi waktu otomatis digunakan, akurasi jam sistem perangkat dapat terpengaruh oleh konfigurasi lain dari layanan time_detector, seperti yang memengaruhi konstanta dan penanda yang memengaruhi seberapa berbedanya saran waktu waktu jam sistem saat ini sebelum jam disesuaikan (ServiceConfigAccessorImpl.java).

Produsen perangkat dapat mengubah akurasi menggunakan konfigurasi sebelumnya opsi dan konstanta. Tetapi penting untuk menyadari batasan-batasan dari implementasi SNTP platform, dan potensi dampak terhadap konsumsi daya dari operasi jaringan yang lebih sering, dampak ke aplikasi yang berjalan di perangkat dari lebih sering tetapi lebih kecil, dan efek pada beban server.

Penggunaan waktu jaringan lainnya

Jika deteksi waktu otomatis yang menggunakan asal network tidak dikonfigurasi atau jika pengguna telah menonaktifkan deteksi waktu otomatis, yakni waktu yang diperoleh Layanan network_time_update_service masih digunakan oleh komponen berikut:

  • Tujuan SystemClock.currentNetworkTimeClock() .
  • Fungsi platform internal. Misalnya, A-GPS dapat menemukan GNSS (lokasi) pertama-tama memperbaiki lebih cepat ketika perangkat memiliki informasi waktu jaringan.

Proses debug dan pengujian

Bagian berikut menjelaskan perintah shell untuk proses debug dan pengujian fitur deteksi waktu jaringan.

Berinteraksi dengan layanan network_time_update_service

Untuk membuang status network_time_update_service saat ini, gunakan:

adb shell cmd network_time_update_service dump

Untuk melihat serangkaian opsi command line yang dapat membantu pengujian, gunakan:

adb shell cmd network_time_update_service help