Ağ Zaman Tespiti

Android aygıtları otomatik olarak bir ağ kaynağından doğru Unix dönem zamanını almaya çalışır. Android, zaman bilgisini elde etmek için UDP protokolünü kullanan SNTP protokolünü kullanır.

Bu sayfada açıklanan bileşenler, ağ zaman kaynağı olarak adlandırılan otomatik zaman algılama sisteminin bir parçasıdır. Cihazda otomatik zaman algılama desteklendiğinde ve time_detector hizmeti bunu kullanacak şekilde yapılandırıldığında, Android cihazının sistem saatini ayarlamak için bir ağ zaman sunucusundan gelen zaman sinyali kullanılabilir.

Varsayılan olarak Android, birincil otomatik zaman algılama kaynağı olarak ağ zaman kaynağını kullanır.

Ağ zaman tespit sistemi

Android sistem sunucusunda çalışan network_time_update_service hizmeti, ağ zaman algılama sistemini uygular. Hizmet, sunucudan zaman sinyali almak için düzenli olarak SNTP'yi kullanır. Hizmet aynı zamanda ağ bağlantısını da izler ve uzun süre zayıf bağlantının ardından yakın zaman sinyali gelmediğinde zaman yenilemeyi tetikler.

network_time_update_service hizmeti, önyüklemeden sonra ve ağ bağlantısı ilk kez kurulduğunda bir zaman sinyali almaya çalışır. Hizmet daha sonra tuttuğu en son sinyali taze tutmaya çalışır. Bireysel Android cihazların ihtiyaçlarını, dünya çapındaki birçok Android cihazının zamanlarını yenilemesinin oluşturabileceği önemli yük ile dengeler.

network_time_update_service , dahili API'leri kullanarak ağ zamanı önerilerini time_detector hizmetine gönderir. Daha sonra diğer Android platformu bileşenleri bu ağ süresi önerilerini kullanır.

time_detector hizmeti, ağ zaman kaynağından öneriler aldıktan sonra sistem saatinin yapılandırılmış önceliklendirme kurallarına göre güncellenip güncellenmeyeceğini belirler.

Otomatik zaman algılama sistemini, sistem saatini otomatik olarak ayarlamak amacıyla ağ kaynağı önerilerini kullanacak şekilde yapılandırmak için core/res/res/values/config.xml sistem sunucusu yapılandırma dosyasını kullanın. Değer network config_autoTimeSourcesPriority istenen konumda bulunduğundan emin olun. Ayrıntılar için bkz. Zaman Kaynağı Önceliği .

Cihaz konfigürasyonu

Bu bölümde cihaz üreticilerinin ağ zaman algılama sistemini nasıl yapılandırabilecekleri açıklanmaktadır.

Temel AOSP yapılandırması frameworks/base/core/res/res/values/config.xml konumundadır:

Yapılandırma anahtarı AOSP değeri Tanım
config_ntpRetry 3 Yenileme başarısız olduktan sonra bu, sistemin geri çekilmeden ve normal yoklama aralığını ( config_ntpPollingIntervalShorter ) kullanmadan önce, daha kısa bir NTP yoklama aralığı ( config_ntpPollingInterval ) ile ağ zaman yoklaması yapmayı deneme sayısıdır. 0 küçük bir değer, sistemin başarıyla yenileninceye kadar daha kısa NTP yoklama aralığında yoklamayı yeniden denediği anlamına gelir.
config_ntpPollingInterval 64800000 (18 saat) Milisaniye cinsinden normal ağ zamanı yoklama aralığı.
config_ntpPollingIntervalShorter 60000 (1 dakika) Milisaniye cinsinden ağ yeniden deneme zamanı yoklama aralığı. Zaman yenileme başarısız olduğunda kullanılır.
config_ntpServers Tek bir giriş: ntp://time.android.com Doğru zamanı elde etmek 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 5000 Zaman aşımına uğramadan önce milisaniye cinsinden NTP sunucusu yanıtı için beklenecek süre.

Sunucular

Varsayılan olarak AOSP, Google Public NTP'nin takma adı olan time.android.com adresindeki zaman sunucularını kullanır. Bu hizmetin SLA'sı yoktur. Ayrıntılar için Google Genel NTP SSS sayfasına bakın.

Çoklu sunucu desteği

Android 14 ve üzeri için çerçeve birden fazla NTP sunucusunu destekler. Bu, cihazların tek bir yapılandırmayla küresel olarak 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, yenileme başarısız olana veya cihaz yeniden başlatılana kadar bu sunucuyu kullanmaya devam eder.

Kesinlik

Android'in varsayılan ağ zaman senkronizasyonu, her zaman yakın zaman sinyaline sahip olduğundan emin olmak için yaklaşık günde bir kez tek zamanlı sorguyla SNTP'yi kullanır.

Ağ gecikme etkileri, Android'in SNTP uygulamasında zaman yanlışlığına en büyük katkıyı sağlayan faktördür. SNTP, simetrik ağ gecikmelerini varsayar; yani, isteğin ağ gecikmesi, yanıtın ağ gecikmesiyle aynıdır ve doğru zaman, ağ gidiş dönüşünün tam ortasında yer alır. Çoğu zaman ağ gidiş-dönüş süresi birkaç yüz milisaniye mertebesindedir ve kablolu bir ağda gecikme simetriğe yakındır, bu da kullanıcılar tarafından neredeyse algılanamayacak düzeyde yanlışlığa yol açar. Bununla birlikte, mobil veya telsiz telefon hizmetlerinde, bir ağ işlemine nispeten uzun, asimetrik gecikmelerin eklenebildiği ve daha fazla yanlışlığa yol açabildiği birkaç aşama vardır.

config_ntpTimeout için AOSP varsayılan ayarı 5000 milisaniyeye ayarlandığında ve tüm ağ gecikmesi yalnızca gelen veya giden bacakta yoğunlaşmışsa maksimum teorik hata yaklaşık 2,5 saniyedir.

Genel sistem saatinin doğruluğu, Android cihazının bir zaman sinyali alındıktan sonra geçen zamanı doğru bir şekilde takip etme yeteneğinden de etkilenir. Bu, yalnızca ağ zaman tespiti için değil, Android'deki tüm zaman işleyişiyle ilgili bir sorundur ve time_detector hizmetinin eski zaman önerilerini göz ardı etmesinin nedeni budur. network_time_update_service hizmeti, time_detector hizmetinin yeni zaman önerileriyle birlikte sağlanmasını sağlamak ve time_detector hizmetinin daha düşük önceliğe ve genellikle daha düşük doğruluk oranına veya bazen telephony gibi hatalı zaman kökenlerine geri dönmemesini sağlamak için config_ntpPollingInterval aralığını kullanarak düzenli olarak yenilenir.

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

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

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

network kaynağı kullanılarak otomatik zaman algılama yapılandırılmamışsa veya kullanıcı otomatik zaman algılamayı devre dışı bırakmışsa network_time_update_service hizmeti tarafından elde edilen zaman aşağıdaki bileşenler tarafından kullanılmaya devam edilir:

  • SystemClock.currentNetworkTimeClock() yöntemi.
  • Dahili platform fonksiyonları. Örneğin A-GPS, ağ zaman bilgisine sahip olduğunda bir GNSS'nin (konum) ilk tespitini daha hızlı yapabilir.

Hata ayıklama ve test etme

Aşağıdaki bölümde ağ zaman algılama özelliğinde hata ayıklama ve test etmeye yönelik kabuk komutları açıklanmaktadır.

network_time_update_service hizmetiyle etkileşim kurun

network_time_update_service mevcut durumunu boşaltmak için şunu 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 şunu kullanın:

adb shell cmd network_time_update_service help