Clock Sync (saat senkronizasyonu), bir cihazın dahili saatini referans zaman kaynağıyla hizalama işlemidir. Mobil uygulamalarda, push bildirimleri, SSL/TLS sertifikaları, kriptografik protokoller ve analitiğin doğru çalışması için hassas senkronizasyon kritik öneme sahiptir. Google Security Blog'a (2024) göre, mobil cihazlardaki HTTPS bağlantı hatalarının %30'undan fazlası, sistem saatinde 5 saniyeyi aşan senkronizasyon bozukluğundan kaynaklanmaktadır.
Önemli Noktalar
Saat senkronizasyonu (Clock Sync), bir cihazın dahili saatini referans UTC zamanına (Koordineli Evrensel Zaman) hizalamak için kullanılan bir mekanizmadır. Senkronizasyon olmadan, bir mobil cihazdaki kuvars kristal osilatörü kademeli olarak sürüklenir — sıcaklığa ve bileşen kalitesine bağlı olarak günde 1–10 saniyelik bir sapma olur. Senkronizasyon, harici kaynaklardan (internetteki NTP sunucuları, GPS uyduları veya hücre kuleleri) hassas zaman alarak bu sapmayı telafi eder. İdeal olarak, bir cihaz 1 saniye içinde doğruluğu korumak için her 4–6 saatte bir senkronize olmalıdır.
Bir mobil cihazda iki tür saat bulunur: donanım (RTC, Gerçek Zamanlı Saat) ayrı bir pil yedeklemesi ile — cihaz kapalıyken bile çalışmaya devam eder, ve yazılım (sistem zamanı), işletim sistemi tarafından yönetilir. Önyükleme sırasında sistem zamanı RTC'den başlatılır ve daha sonra saat üretici kesintileri aracılığıyla korunur. NTP senkronizasyonu sistem zamanını düzeltir ve bazı durumlarda düzeltmeyi RTC'ye de yazar. Android'de, donanım RTC'sine erişim kısıtlıdır — uygulamalar root erişimi olmadan onu değiştiremez.
Bir mobil uygulamanın çalışmasının birçok yönü, doğru sistem zamanına kritik olarak bağlıdır. SSL sertifikalarının geçerlilik süreleri vardır: cihaz saati sertifikanın veriliş tarihinden önceye veya son kullanma tarihinden sonraya ayarlanmışsa, HTTPS bağlantısı engellenir. OAuth token'ları ve JWT kimlik doğrulaması, süre sonunu kontrol etmek için zaman damgaları kullanır — senkronizasyon bozukluğu yanlış yetkilendirme hatalarına yol açar. Push bildirimleri zamanla planlanır ve saat saparsa, kullanıcı bildirimleri yanlış zamanda alır veya hiç alamaz.
Uygulama güvenliği de yanlış zamandan etkilenir: zaman tabanlı şifreleme (zamana dayalı OTP), yanlış zaman damgalı olay günlükleri, sunucu tarafında hatalı hız sınırlama (sunucu “gelecekteki” istekleri engeller). OWASP Mobile Top 10'a (2024) göre, sistem saatine güvensizlik, yetersiz platform güvenliği kategorisine girer. Geliştiricilerin, yalnızca istemci saatlerine güvenmek yerine her zaman sunucuda zamanı kontrol etmeleri önerilir. Fark bir eşiği aşarsa (5 saniye önerilir), uygulama senkronizasyon gerçekleşene kadar kritik işlemleri engellemelidir.
| Senaryo | Senkronizasyon bozukluğunun etkisi |
|---|---|
| HTTPS/TLS | Sertifikalar süresi dolmuş veya geçersiz sayılır |
| OAuth 2.0 / JWT | Token'lar süresi dolmuş olarak reddedilir |
| Push bildirimleri | Bildirimler yanlış zamanda gelir |
| Analitik | Yanlış zaman damgalı olaylar raporları bozar |
| Kriptografi | Zamana dayalı OTP sunucuyla eşleşmez |
| Hız sınırlama | Sunucu “gelecekteki” zamanlı istekleri engeller |
Saat senkronizasyonu için ana protokoller NTP ve basitleştirilmiş sürümü SNTP'dir. NTP (RFC 5905), sunucu filtreleme, sapma analizi ve PLL düzeltmesi ile tam bir protokoldür. Sunucularda ve ağ ekipmanlarında kullanılır. SNTP (RFC 4330), sürekli senkronizasyon gerektirmeyen istemci cihazlar için hafif bir sürümdür. Bir SNTP istemcisi istek gönderir, yanıt alır ve geçmiş analizi olmadan zamanı ayarlar. Mobil cihazlarda özellikle SNTP kullanılır — Android'in yerleşik Google Time Service'i (GTS), time.google.com sunucularıyla SNTP aracılığıyla senkronize olur.
NTP/SNTP'nin yanı sıra, mobil cihazlarda zaman senkronizasyonu GPS alıcısı (ideal koşullarda 10 ns'ye kadar doğruluk) ve hücresel ağ (NITZ — Ağ Kimliği ve Zaman Dilimi aracılığıyla) ile mümkündür. GPS maksimum doğruluk sağlar ancak yalnızca açık havada çalışır ve çok fazla enerji tüketir. NITZ, ağa kaydolurken otomatik olarak mobil operatör tarafından sağlanır, ancak tüm operatörler bunu desteklemez. Android tüm yöntemlerin bir kombinasyonunu kullanır: öncelikli olarak GTS (SNTP), yedek olarak NITZ ve yüksek doğruluk gerektiren uygulamalar için GPS.
Sunucu ve istemcinin farklı cihazlarda olduğu dağıtık sistemlerde, saat senkronizasyonu temel sınırlamalarla karşı karşıyadır. Ağ gecikmesi, istemcide kesin zamanın açık bir şekilde belirlenmesini imkansız hale getirir: bir paket 200 ms sürdüyse, istek ve yanıt anında sunucudaki zaman zaten farklıdır. NTP bu sorunu RTT ölçümü ve istatistiksel işleme yoluyla çözer, ancak dağıtık işlemler (örneğin, banka havaleleri) için bu yetersizdir — mantıksal saatler (Lamport zaman damgaları) veya vektör saatleri kullanılır.
Fiziksel saatler (duvar saati) — NTP aracılığıyla senkronize edilen gerçek UTC zamanı. Mantıksal saatler — fiziksel zamana bağlı olmayan, sistemdeki olayların sıra numaraları. Dağıtık sistemlerde, olay sıralaması için genellikle vektör saatleri kullanılır: her düğüm, tüm küme düğümleri için bir sayaç vektörü depolar. Mobil uygulamalar için, 1–5 saniye doğrulukla fiziksel senkronizasyon yeterlidir — bu, OAuth, SSL ve push bildirimlerinin doğru çalışmasını sağlar. Kesin olay sıralaması gerekiyorsa (örneğin, gerçek zamanlı sohbetlerde), sunucu düzeyinde mantıksal senkronizasyon eklenir.
Bir Android uygulamasında saat senkronizasyonu birkaç şekilde gerçekleştirilebilir. En basiti, REST API aracılığıyla sunucu zamanını almaktır: sunucu, yanıt gövdesinde veya HTTP Date başlığında bir Unix Zaman Damgası döndürür. Bu yaklaşım ek kütüphane gerektirmez ve zamanın sunucuyla eşleşmesini garanti eder. İkinci yol, bir NTP sunucusuna doğrudan sorgulama için bir SNTP istemcisi kullanmaktır. Üçüncüsü, cihaz internete bağlıysa sistem zamanını otomatik olarak senkronize eden Android Google Time Service'e güvenmektir.
Yetkilendirme ve finansal işlemler içeren Android uygulamalarında birleşik bir yaklaşım önerilir: her API isteğinde, sunucu zamanı ile System.currentTimeMillis() arasındaki fark kaydedilir. Bu fark, sistem saati senkronize olsun veya olmasın, istemcideki tüm zaman hesaplamalarına uygulanır. Bu yaklaşıma saat sapması düzeltmesi (clock skew correction) denir ve sunucuyla bilinen son farkı depolayan bir sınıf aracılığıyla uygulanır. Ek olarak, WorkManager aracılığıyla her 4–6 saatte bir arka plan NTP senkronizasyonu çalıştırılabilir.
// Saat sapması düzeltmesi
class ClockSyncManager {
private var serverTimeDiff: Long = 0 // serverTime - deviceTime (ms)
fun updateServerTime(serverTimestampMs: Long) {
serverTimeDiff = serverTimestampMs - System.currentTimeMillis()
}
fun getCorrectedTime(): Long {
return System.currentTimeMillis() + serverTimeDiff
}
fun isSyncValid(maxDiffMs: Long = 5000): Boolean {
return Math.abs(serverTimeDiff) < maxDiffMs
}
}
Android'de periyodik arka plan zaman senkronizasyonu için, PeriodicWorkRequest ile WorkManager'ı kullanın. Senkronizasyon görevi bir SNTP isteği veya REST API çağrısı gerçekleştirir, sunucu zamanını alır ve ClockSyncManager'ı günceller. PeriodicWorkRequest için minimum aralık 15 dakikadır, ancak zaman senkronizasyonu için 4–6 saat yeterlidir. Senkronizasyon sırasında ağ durumunu göz önünde bulundurun — dolaşım sırasında gereksiz istekleri önlemek için NetworkType.CONNECTED kullanın. Senkronizasyon başarısız olursa, önceki düzeltmeyi kaydedin — giderek azalan doğrulukla geçerli kalır.
Modern mobil cihazlar, yerleşik hizmetler aracılığıyla zamanı otomatik olarak senkronize eder. Android'de — Google Play Services'in bir parçası olan Google Time Service (GTS). iOS'te — işletim sistemine yerleşik bir NTP istemcisi. Bu hizmetler uygulamalardan bağımsız çalışır ve ek yapılandırma gerektirmez. Kullanıcı ayarlardan otomatik senkronizasyonu devre dışı bırakabilir, bu da uygulamalar için risk oluşturur — işte tam da bu durumda geliştiricinin kendi senkronizasyonunu uygulaması gerekir. Settings.Global.getInt(AUTO_TIME) aracılığıyla otomatik senkronizasyon durumunu kontrol etmeniz ve devre dışı olduğunda kullanıcıyı uyarmanız önerilir.
| Platform | Senkronizasyon hizmeti | Protokol |
|---|---|---|
| Android | Google Time Service (GTS) | SNTP |
| iOS | Yerleşik NTP istemcisi | NTP |
| Hücresel ağ | NITZ (operatör) | NITZ |
| GPS alıcısı | Uydu sinyali | GPS Atomic Time |
Yalnızca otomatik senkronizasyona güvenmek tehlikelidir — kullanıcı onu devre dışı bırakabilir veya internetsiz bir bölgede olabilir. En iyi uygulama, her API isteğinde sunucudan zaman almak ve SharedPreferences veya DataStore'da senkronizasyon bozukluğunu depolamaktır. Kritik işlemler (ödeme, yetkilendirme, belge imzalama) için, yürütmeden önce her zaman isSyncValid()'i kontrol edin. Senkronizasyon bozukluğu eşiği aşarsa — kullanıcıya otomatik senkronizasyonu etkinleştirmesini veya senkronizasyonu beklemesini öneren bir ekran gösterin. Oyun ve eğlence uygulamaları için, başlangıçta sunucudan zaman almak ve saatte bir güncellemek yeterlidir.
Sıkça Sorulan Sorular
Saat senkronizasyonu, bir cihazın sistem zamanını referans UTC ile hizalama işlemidir. NTP veya SNTP protokolleri aracılığıyla çalışır: cihaz sunucuya bir istek gönderir, ağ gecikmesini ölçer ve saati için bir düzeltme hesaplar. Sonuç, ağa bağlı olarak 1–100 ms hatayla doğru zamandır.
Senkronizasyon olmadan arızalar mümkündür: SSL sertifikaları HTTPS'yi engeller, OAuth token'ları süresi dolmuş sayılır, push bildirimleri yanlış zamanda gelir, analitik yanlış zaman damgaları kaydeder. Kritik işlemler (ödeme, yetkilendirme) için, 5 saniyeyi aşan senkronizasyon bozukluğu bir güvenlik tehdidi olarak kabul edilir ve işlemi engellemelidir.
Başlıcaları NTP (doğruluk 1–50 ms, filtreleme ve PLL ile) ve SNTP'dir (10–100 ms, basitleştirilmiş). Ek olarak: GPS (10 ns, ancak yalnızca açık havada) ve NITZ (mobil operatör aracılığıyla, doğruluk ~1 saniye). Android, SNTP üzerinde Google Time Service'i kullanır, iOS yerleşik bir NTP istemcisi kullanır.
time.google.com veya pool.ntp.org'a doğrudan SNTP sorgulamaları için Apache Commons Net kütüphanesini (NTPUDPClient sınıfı) kullanın. Bir alternatif, API'nizin HTTP yanıt başlıklarından sunucu zamanını almaktır. Sürekli düzeltme için, sunucu zamanı ile yerel zaman arasındaki farkı depolayan bir ClockSyncManager uygulayın.
Saat sapması düzeltmesi (clock skew correction) uygulayın: her API isteğinde, sunucu zamanı ile System.currentTimeMillis() arasındaki farkı kaydedin. Bu farkı uygulamanın tüm işlemlerinde zaman düzeltmesi için kullanın. Fark 5 saniyeyi aşarsa — kritik işlemleri engelleyin ve kullanıcıya ayarlardan otomatik senkronizasyonu etkinleştirmesini önerin.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun