Deteksi waktu jaringan

Perangkat Android akan otomatis mencoba mendapatkan waktu epoch Unix 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 sistem deteksi waktu otomatis yang disebut sebagai asal waktu jaringan. Sinyal waktu dari server waktu jaringan dapat digunakan untuk menyetel jam sistem perangkat Android saat deteksi waktu otomatis didukung di perangkat dan layanan time_detector dikonfigurasi untuk menggunakannya.

Secara default, Android menggunakan asal waktu jaringan sebagai asal deteksi waktu otomatis utama.

Sistem deteksi waktu jaringan

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

Layanan network_time_update_service mencoba mendapatkan sinyal waktu setelah booting dan saat konektivitas jaringan pertama kali dibuat. Layanan kemudian mencoba mempertahankan sinyal terbaru yang disimpannya. Fitur ini menyeimbangkan kebutuhan setiap perangkat Android dengan beban substansial yang dapat dihasilkan oleh banyak perangkat Android di seluruh dunia yang memperbarui waktunya.

Menggunakan API internal, network_time_update_service mengirimkan saran waktu jaringan ke layanan time_detector. Komponen platform Android lainnya kemudian menggunakan saran waktu jaringan ini.

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

Untuk mengonfigurasi sistem deteksi waktu otomatis agar menggunakan saran asal jaringan untuk menyetel jam sistem secara otomatis, gunakan file konfigurasi server sistem core/res/res/values/config.xml. Pastikan nilai network dimuat di config_autoTimeSourcesPriority di posisi yang diinginkan. Untuk mengetahui detailnya, lihat Prioritas Sumber Waktu.

Konfigurasi perangkat

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

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 frekuensi sistem mencoba polling waktu jaringan dengan interval polling NTP yang lebih singkat (config_ntpPollingIntervalShorter), sebelum mundur dan menggunakan interval polling normal (config_ntpPollingInterval). Nilai yang kurang dari 0 berarti sistem mencoba ulang polling pada interval polling NTP yang lebih singkat 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 refresh waktu gagal.
config_ntpServers Satu entri: ntp://time.android.com digunakan server NTP untuk mendapatkan waktu yang akurat. Item harus dalam bentuk: ntp://<host>[:port].
Ini bukan skema URI IANA terdaftar.
config_ntpTimeout 5000 Waktu tunggu respons server NTP dalam milidetik sebelum waktu tunggu habis.

Server

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

Dukungan beberapa server

Untuk Android 14 dan yang lebih tinggi, framework ini mendukung beberapa server NTP. Hal ini mendukung situasi saat 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 kunci konfigurasi config_ntpServers. Jika menemukan server yang merespons, sistem akan terus menggunakan server tersebut hingga gagal dimuat ulang atau perangkat dimulai ulang.

 Akurasi

Sinkronisasi waktu jaringan default Android menggunakan SNTP dengan satu kueri waktu kira-kira sekali sehari untuk mencoba memastikannya selalu memiliki sinyal waktu terbaru.

Efek latensi jaringan adalah kontributor terbesar terhadap ketidakakuratan waktu dalam penerapan SNTP Android. SNTP mengasumsikan penundaan jaringan simetris, yaitu, latensi jaringan untuk permintaan sama dengan latensi jaringan untuk respons, dan waktu yang benar terletak tepat di tengah perjalanan bolak-balik jaringan tersebut. Sering kali, waktu round-trip jaringan berkisar beberapa ratus milidetik dan pada jaringan berkabel, latensi mendekati simetris, sehingga menyebabkan tingkat ketidakakuratan yang hampir tidak terlihat oleh pengguna. Namun, dengan telepon seluler atau radio, ada beberapa tahap saat penundaan asimetris yang relatif lama dapat disisipkan ke dalam transaksi jaringan yang menyebabkan ketidakakuratan yang lebih besar.

Dengan setelan default AOSP untuk config_ntpTimeout yang ditetapkan ke 5000 milidetik, dan jika semua latensi jaringan hanya terkonsentrasi pada segmen masuk atau keluar, error teoretis maksimumnya adalah sekitar 2,5 detik.

Akurasi jam sistem secara keseluruhan juga dipengaruhi oleh kemampuan perangkat Android untuk melacak waktu berlalu secara akurat setelah sinyal waktu diperoleh. Hal ini merupakan masalah dengan semua pencatatan waktu di Android, bukan hanya deteksi waktu jaringan, dan merupakan alasan layanan time_detector mengabaikan saran waktu lama. Layanan network_time_update_service diperbarui secara teratur menggunakan interval config_ntpPollingInterval agar layanan time_detector tetap disediakan dengan saran waktu yang baru dan untuk memastikan bahwa layanan time_detector tidak kembali ke prioritas yang lebih rendah dan sering kali memiliki akurasi yang lebih rendah atau asal waktu yang terkadang salah seperti telephony.

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

Produsen perangkat dapat mengubah akurasi menggunakan opsi dan konstanta konfigurasi sebelumnya. Namun, penting untuk mengetahui batasan implementasi SNTP platform, dan potensi dampaknya terhadap konsumsi daya dari operasi jaringan yang lebih sering, dampak terhadap aplikasi yang berjalan di perangkat dari penyesuaian jam yang lebih sering tetapi lebih kecil, dan pengaruhnya terhadap beban server.

Penggunaan waktu jaringan lainnya

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

  • Metode SystemClock.currentNetworkTimeClock().
  • Fungsi platform internal. Misalnya, A-GPS dapat menemukan perbaikan GNSS (lokasi) terlebih dahulu dengan lebih cepat jika A-GPS memiliki informasi waktu jaringan.

Proses debug dan pengujian

Bagian berikut menjelaskan perintah shell untuk men-debug dan menguji 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 kumpulan opsi command line yang dapat membantu pengujian, gunakan:

adb shell cmd network_time_update_service help