Ağ saatini 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. Cihazda otomatik saat algılama özelliği desteklendiğinde ve time_detector hizmeti bunu kullanacak şekilde yapılandırıldığında, ağ saat sunucusundan alınan zaman sinyali Android cihazın sistem saatini ayarlamak için 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üreli zayıf bağlantı süresinden sonra yakın zaman sinyali olmadığında bir zaman yenilemesi 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. Ardından hizmet, elinde bulundurduğu en son sinyali güncel tutmaya çalışır. Bu mekanizma, tek tek 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 ağ süresi önerilerini time_detector hizmetine gönderir. Diğer Android platformu bileşenleri de 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 küçü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 yeniden deneme ağ zamanı yoklama aralığı. Saat yenileme başarısız olduğunda kullanılır.
config_ntpServers Tek giriş: ntp://time.android.com Doğru zamanı 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ğil.
config_ntpTimeout 5.000 Zaman aşımı öncesinde NTP sunucu yanıtı için beklenecek süre (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_ntpServers yapılandırma anahtarında belirtilen her sunucuyu dener. Yanıt veren bir sunucu bulduğunda sistem, yenilenmeyene veya cihaz yeniden başlatılana kadar o 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.

Ağ gecikmesi etkileri, Android'in SNTP uygulamasındaki zaman hatasına en çok katkıda bulunan faktörlerdir. 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 önerileriyle sağlanması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ı kullanarak otomatik zaman 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 zaman yine aşağıdaki bileşenler tarafından kullanılır:

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