Deteksi waktu jaringan

Perangkat Android secara 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 jika 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 menggunakan SNTP secara berkala untuk mendapatkan sinyal waktu dari server. Layanan ini juga memantau konektivitas jaringan dan memicu pembaruan waktu jika tidak ada sinyal waktu terbaru yang tersedia setelah periode konektivitas yang buruk dalam waktu yang 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 dimilikinya agar tetap baru. Layanan ini menyeimbangkan kebutuhan setiap perangkat Android dengan beban besar yang dapat dihasilkan oleh banyak perangkat Android di seluruh dunia yang memperbarui waktu mereka.

Dengan 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 menentukan apakah akan memperbarui jam sistem sesuai dengan aturan prioritas yang 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 ada dalam config_autoTimeSourcesPriority pada 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 ada di frameworks/base/core/res/res/values/config.xml:

Kunci konfigurasi Nilai AOSP Deskripsi
config_ntpRetry 3 Setelah gagal memuat ulang, ini adalah jumlah percobaan sistem untuk melakukan polling waktu jaringan dengan interval polling NTP yang lebih singkat (config_ntpPollingIntervalShorter), sebelum mundur dan menggunakan interval polling normal (config_ntpPollingInterval). Nilai kurang dari 0 berarti sistem mencoba lagi polling pada interval polling NTP yang lebih singkat hingga berhasil memuat 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 Server NTP yang akan digunakan untuk mendapatkan waktu yang akurat. Item harus dalam bentuk: ntp://<host>[:port].
Ini bukan skema URI IANA terdaftar.
config_ntpTimeout 5000 Waktu untuk menunggu 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 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. Saat menemukan server yang merespons, sistem akan terus menggunakan server tersebut hingga gagal memuat ulang atau perangkat dimulai ulang.

 Akurasi

Sinkronisasi waktu jaringan default Android menggunakan SNTP dengan satu kueri waktu sekitar sekali sehari untuk mencoba memastikan bahwa Android selalu memiliki sinyal waktu terbaru.

Efek latensi jaringan adalah kontributor terbesar terhadap ketidakakuratan waktu dengan 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 pulang pergi jaringan tersebut. Sering kali, waktu perjalanan pulang pergi jaringan berorde beberapa ratus milidetik dan pada jaringan kabel, latensi hampir simetris, sehingga menyebabkan tingkat ketidakakuratan yang hampir tidak dapat dirasakan oleh pengguna. Namun, dengan telepon seluler atau radio, ada beberapa tahap di mana penundaan asimetris yang relatif lama dapat dimasukkan ke dalam transaksi jaringan yang menyebabkan ketidakakuratan yang lebih besar.

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

Akurasi clock sistem secara keseluruhan juga dipengaruhi oleh kemampuan perangkat Android untuk melacak waktu yang telah berlalu secara akurat setelah sinyal waktu diperoleh. Hal ini menjadi masalah dengan semua pencatatan waktu di Android, bukan hanya deteksi waktu jaringan, dan itulah sebabnya layanan time_detector mengabaikan saran waktu lama. Layanan network_time_update_service diperbarui secara rutin menggunakan interval config_ntpPollingInterval untuk terus menyediakan saran waktu baru bagi layanan time_detector dan memastikan bahwa layanan time_detector tidak kembali ke asal waktu yang berprioritas lebih rendah dan sering kali berakurasi lebih rendah atau terkadang salah, seperti telephony.

Jika deteksi waktu otomatis digunakan, akurasi jam sistem perangkat dapat terpengaruh oleh konfigurasi layanan time_detector lainnya, seperti konstanta dan flag yang memengaruhi seberapa jauh saran waktu harus berbeda 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 penerapan SNTP platform, dan potensi dampak pada konsumsi daya dari operasi jaringan yang lebih sering, dampak pada aplikasi yang berjalan di perangkat dari penyesuaian clock yang lebih sering tetapi lebih kecil, dan efek pada beban server.

Penggunaan lain waktu jaringan

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 pertama GNSS (lokasi) lebih cepat jika 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 mengekspor 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