Deteksi Waktu Jaringan

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

Komponen yang dijelaskan pada 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 ketika deteksi waktu otomatis didukung pada 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 penyegaran waktu ketika tidak ada sinyal waktu terkini yang tersedia setelah konektivitas buruk dalam jangka waktu lama.

Layanan network_time_update_service mencoba mendapatkan sinyal waktu setelah boot dan ketika konektivitas jaringan pertama kali dibuat. Layanan kemudian mencoba untuk menjaga sinyal terbaru yang dimilikinya tetap segar. Ini menyeimbangkan kebutuhan masing-masing perangkat Android dengan beban besar yang dapat dihasilkan oleh banyak perangkat Android di seluruh dunia yang menyegarkan 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 mengatur jam sistem secara otomatis, gunakan file konfigurasi server sistem core/res/res/values/config.xml . Pastikan network nilai terdapat dalam config_autoTimeSourcesPriority pada posisi yang diinginkan. Untuk detailnya, lihat Prioritas Sumber Waktu .

Konfigurasi perangkat

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

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

Kunci konfigurasi nilai AOSP Keterangan
config_ntpRetry 3 Setelah gagal menyegarkan, ini adalah berapa kali sistem mencoba polling waktu jaringan dengan interval polling NTP yang lebih pendek ( 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 pendek hingga berhasil melakukan penyegaran.
config_ntpPollingInterval 64800000 (18 jam) Interval polling waktu jaringan normal dalam milidetik.
config_ntpPollingIntervalShorter 60000 (1 menit) Interval polling waktu jaringan coba lagi dalam milidetik. Digunakan ketika penyegaran waktu gagal.
config_ntpServers Satu entri: ntp://time.android.com Server NTP digunakan untuk mendapatkan waktu yang akurat. Item harus dalam bentuk: ntp://<host>[:port] .
Ini bukan skema IANA URI yang terdaftar.
config_ntpTimeout 5000 Waktunya menunggu respons server NTP dalam milidetik sebelum batas waktu habis.

Server

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

Dukungan beberapa server

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

Algoritme mencoba setiap server yang ditentukan dalam kunci konfigurasi config_ntpServers . Ketika menemukan server yang merespons, sistem akan terus menggunakan server tersebut hingga gagal melakukan penyegaran atau perangkat melakukan boot ulang.

Ketepatan

Sinkronisasi waktu jaringan default Android menggunakan SNTP dengan kueri waktu tunggal kira-kira sekali sehari untuk mencoba memastikan sinyal waktu terkini selalu ada.

Efek latensi jaringan adalah kontributor terbesar terhadap ketidakakuratan waktu pada implementasi SNTP Android. SNTP mengasumsikan penundaan jaringan simetris, yaitu latensi jaringan untuk permintaan sama dengan latensi jaringan untuk respons, dan waktu yang tepat terletak tepat di tengah perjalanan pulang pergi jaringan tersebut. Seringkali, waktu bolak-balik jaringan berada di urutan beberapa ratus milidetik dan pada jaringan kabel latensinya mendekati simetris, sehingga menyebabkan tingkat ketidakakuratan yang hampir tidak terlihat oleh pengguna. Namun, pada telepon seluler atau radio, terdapat beberapa tahapan yang dapat menyebabkan penundaan asimetris yang relatif lama ke dalam transaksi jaringan sehingga menyebabkan ketidakakuratan yang lebih besar.

Dengan pengaturan default AOSP untuk config_ntpTimeout diatur ke 5000 milidetik, dan jika semua latensi jaringan hanya terkonsentrasi pada bagian masuk atau keluar, kesalahan teoritis maksimum adalah sekitar 2,5 detik.

Akurasi jam sistem secara keseluruhan juga dipengaruhi oleh kemampuan perangkat Android untuk melacak waktu yang telah berlalu secara akurat setelah sinyal waktu diperoleh. Hal ini berkaitan dengan semua ketepatan waktu di Android, bukan hanya deteksi waktu jaringan, dan itulah sebabnya layanan time_detector mengabaikan saran waktu lama. Layanan network_time_update_service menyegarkan secara teratur menggunakan interval config_ntpPollingInterval untuk menjaga layanan time_detector tetap diberikan saran waktu baru dan untuk memastikan bahwa layanan time_detector tidak kembali ke prioritas yang lebih rendah dan sering kali akurasi yang lebih rendah atau asal waktu yang terkadang salah seperti telephony .

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

Produsen perangkat dapat mengubah akurasi menggunakan opsi konfigurasi dan konstanta sebelumnya. Namun penting untuk menyadari keterbatasan implementasi SNTP platform, dan potensi dampak terhadap konsumsi daya akibat operasi jaringan yang lebih sering, dampak terhadap aplikasi yang berjalan di perangkat karena penyesuaian jam yang lebih sering namun lebih kecil, dan pengaruhnya terhadap beban server.

Kegunaan lain dari waktu jaringan

Jika deteksi waktu otomatis menggunakan asal 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 bila memiliki informasi waktu jaringan.

Debugging dan pengujian

Bagian berikut menjelaskan perintah shell untuk debugging 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 serangkaian opsi baris perintah yang dapat membantu pengujian, gunakan:

adb shell cmd network_time_update_service help