Ağ saati algılama

Android cihazlar, bir ağ kaynağından doğru Unix epoch zamanını otomatik olarak elde etmeye çalışır. Android, saat bilgilerini almak için UDP protokolünü kullanan SNTP protokolünü kullanır.

Bu sayfada açıklanan bileşenler, ağ saat kaynağı olarak adlandırılan otomatik saat algılama sisteminin bir parçasıdır. Cihazınızda otomatik saat algılama destekleniyorsa ve time_detector hizmeti bunu kullanacak şekilde yapılandırılmışsa Android cihazın sistem saatini ayarlamak için bir ağ saat sunucusu tarafından gönderilen bir saat sinyali kullanılabilir.

Android, varsayılan olarak birincil otomatik saat algılama kaynağı olarak ağ saati kaynağını kullanır.

Ağ saati algılama sistemi

Android sistem sunucusunda çalışan network_time_update_service hizmeti, ağ saati algılama sistemini uygular. Hizmet, bir sunucudan saat sinyali almak için düzenli olarak SNTP kullanır. Hizmet ayrıca ağ bağlantısını izler ve uzun süre boyunca zayıf bağlantı olduğunda son zaman sinyali alınamadığında saati yenileme işlemini tetikler.

network_time_update_service hizmeti, önyükleme işleminden sonra ve ağ bağlantısı ilk kez kurulduğunda zaman sinyali elde etmeye çalışır. Daha sonra hizmet, elinde tuttuğu en son sinyali güncel tutmaya çalışır. Bu mekanizma, Android cihazların ihtiyaçlarını dünya genelindeki birçok Android cihazın saatini yenilemesiyle oluşabilecek önemli yük arasında denge kurar.

network_time_update_service, dahili API'leri kullanarak time_detector hizmetine ağ saati önerileri gönderir. Diğer Android platform bileşenleri bu ağ saati önerilerini kullanır.

time_detector hizmeti, ağ saat kaynağından öneriler aldıktan sonra sistem saatinin yapılandırılan öncelikli kurallara göre güncellenip güncellenmeyeceğini belirler.

Otomatik saat algılama sistemini, sistem saatini otomatik olarak ayarlamak için ağ kaynağı önerilerini kullanacak şekilde yapılandırmak üzere core/res/res/values/config.xml sistem sunucusu yapılandırma dosyasını kullanın. network değerinin config_autoTimeSourcesPriority içinde istenen konumda bulunduğundan emin olun. Ayrıntılar için Zaman Kaynağı Önceliği başlıklı makaleyi inceleyin.

Cihaz yapılandırması

Bu bölümde, cihaz üreticilerinin ağ saati algılama sistemini nasıl yapılandırabileceği açıklanmaktadır.

Temel AOSP yapılandırması şu adrestedir: frameworks/base/core/res/res/values/config.xml

Yapılandırma anahtarı AOSP değeri Açıklama
config_ntpRetry 3 Yenileme başarısız olduğunda, sistem normal aralığı (config_ntpPollingInterval) kullanmadan önce daha kısa bir NTP aralığı (config_ntpPollingIntervalShorter) kullanarak ağ saatini sorgulamaya kaç kez çalıştığıdır. 0'den düşük bir değer, sistemin başarılı bir şekilde yenileyebilmesi için daha kısa NTP aralığında sorgulamaya yeniden çalıştığı anlamına gelir.
config_ntpPollingInterval 64800000 (18 saat) Milisaniye cinsinden normal ağ zamanı anket aralığı.
config_ntpPollingIntervalShorter 60000 (1 dakika) Milisaniye cinsinden ağ zamanı yeniden deneme anketi aralığı. Saat yenileme başarısız olduğunda kullanılır.
config_ntpServers Tek giriş: ntp://time.android.com Doğru saati almak için kullanılacak NTP sunucuları. Öğeler şu biçimde olmalıdır: ntp://<host>[:port].
Bu, kayıtlı bir IANA URI şeması değildir.
config_ntpTimeout 5.000 Zaman aşımı öncesinde NTP sunucu yanıtı için bekleme süresi (milisaniye cinsinden).

Sunucular

AOSP varsayılan olarak time.android.com adresindeki zaman sunucularını kullanır. Bu adres, Google Public NTP için bir takma addır. Bu hizmet için HDS yoktur. Ayrıntılar için Google Public NTP SSS sayfasını inceleyin.

Birden fazla sunucu desteği

Android 14 ve sonraki sürümlerde çerçeve birden fazla NTP sunucusunu destekler. Bu, cihazların dünya genelinde tek bir yapılandırmayla dağıtıldığı ancak time.android.com gibi sunuculara erişimin belirli yerlerde kısıtlandığı durumları destekler.

Algoritma, config_ntpServersyapılandırma anahtarında belirtilen her sunucuya dener. Yanıt veren bir sunucu bulduğunda sistem, yenileme işlemi başarısız olana veya cihaz yeniden başlatılana kadar bu sunucuyu kullanmaya devam eder.

 Doğruluk

Android'in varsayılan ağ saati senkronizasyonu, her zaman güncel bir saat sinyali almasını sağlamak için yaklaşık günde bir kez tek bir saat sorgusu ile SNTP kullanır.

Android'in SNTP uygulamasında zaman hatasının en büyük nedeni ağ gecikmesi etkileridir. SNTP, simetrik ağ gecikmeleri olduğunu varsayar. Yani istek için ağ gecikmesi, yanıt için ağ gecikmesiyle aynıdır ve doğru zaman tam olarak bu ağ gidiş dönüşünün ortasındadır. Ağ gidiş dönüş süresi genellikle birkaç yüz milisaniye civarındadır ve kablolu ağlarda gecikme simetriktir. Bu da kullanıcılar tarafından neredeyse fark edilemeyen düzeyde yanlışlıklara neden olur. Ancak mobil veya radyo telefonlarında, ağ işlemine nispeten uzun, asimetrik gecikmeler eklenebilir. Bu da daha fazla hataya neden olur.

config_ntpTimeout için AOSP varsayılan ayarı 5000 milisaniye olarak ayarlandığında ve tüm ağ gecikmesi yalnızca gelen veya giden bağlantıya odaklanırsa maksimum teorik hata yaklaşık 2,5 saniyedir.

Genel sistem saati doğruluğu, Android cihazın bir saat sinyali alındıktan sonra geçen süreyi doğru şekilde izleyebilme özelliğinden de etkilenir. Bu durum, yalnızca ağ saati algılama değil, Android'deki tüm saat tutmayla ilgili bir sorundur ve time_detector hizmetinin eski saat önerilerini dikkate almaması bu nedenledir. network_time_update_service hizmeti, time_detector hizmetinin güncel zaman önerileri almasını sağlamak ve time_detector hizmetinin daha düşük öncelikli ve genellikle daha düşük doğruluktaki veya bazen telephony gibi yanlış zaman kaynaklarına geri dönmesini önlemek için config_ntpPollingInterval aralığını kullanarak düzenli olarak yenilenir.

Otomatik saat algılama kullanıldığında cihazın sistem saatinin doğruluğu, time_detector hizmetinin diğer yapılandırmalarından (ör. saat ayarlanmadan önce bir saat önerisinin mevcut sistem saatinden ne kadar farklı olması gerektiğini etkileyen sabitler ve işaretler) etkilenebilir (ServiceConfigAccessorImpl.java).

Cihaz üreticileri, önceki yapılandırma seçeneklerini ve sabitlerini kullanarak doğruluğu değiştirebilir. Ancak platformun SNTP uygulamasının sınırlamalarının, daha sık ağ işlemlerinin güç tüketimi üzerindeki olası etkisinin, daha sık ancak daha küçük saat ayarlarının cihazda çalışan uygulamalar üzerindeki etkisinin ve sunucu yükü üzerindeki etkisinin farkında olmanız önemlidir.

Ağ zamanının diğer kullanımları

network kaynağını kullanan otomatik saat algılama yapılandırılmazsa veya kullanıcı otomatik saat algılamayı devre dışı bıraktıysa network_time_update_service hizmeti tarafından elde edilen saat aşağıdaki bileşenler tarafından kullanılmaya devam eder:

  • SystemClock.currentNetworkTimeClock() yöntemi.
  • Dahili platform işlevleri. Örneğin, A-GPS, ağ saati bilgilerine sahip olduğunda GNSS (konum) ilk düzeltmesini daha hızlı bulabilir.

Hata ayıklama ve test

Aşağıdaki bölümde, ağ saati algılama özelliğinde hata ayıklama ve test için kullanılan kabuk komutları açıklanmaktadır.

network_time_update_service hizmetiyle etkileşim kurma

network_time_update_service'ün mevcut durumunu dökmek için şunları kullanın:

adb shell cmd network_time_update_service dump

Teste yardımcı olabilecek bir dizi komut satırı seçeneğini görmek için şunları kullanın:

adb shell cmd network_time_update_service help