Clock Sync (soat sinxronizatsiyasi) — qurilma ichki soati ko'rsatkichlarini etalon vaqt manbai bilan moslashtirish jarayoni. Mobil ilovalarda aniq sinxronizatsiya push-bildirishnomalar, SSL/TLS sertifikatlari, kriptografik protokollar va analitikaning to'g'ri ishlashi uchun juda muhimdir. Google Security Blog (2024) ma'lumotlariga ko'ra, mobil qurilmalardagi HTTPS ulanishlarining 30% dan ortig'idagi nosozliklar tizim vaqtining 5 soniyadan ko'proq sinxronizatsiyalanmaganligi sababli yuzaga keladi.
Asosiy fikrlar
Soat sinxronizatsiyasi (Clock Sync) — qurilmaning ichki soatini etalon UTC (Universal Coordinated Time) vaqtiga moslashtirish mexanizmi. Sinxronizatsiyasiz mobil qurilmadagi kvars generatori asta-sekin xato ko'rsatadi — harorat va komponentlar sifatiga qarab kuniga 1–10 soniya siljish yuz beradi. Sinxronizatsiya bu siljishni kompensatsiyalab, aniq vaqtni tashqi manbalardan oladi: internetdagi NTP serverlari, GPS sun'iy yo'ldoshlari yoki mobil tayanch stansiyalar. Ideal holda, qurilma 1 soniya aniqlikni saqlash uchun har 4–6 soatda sinxronizatsiyalanishi kerak.
Mobil qurilmada ikki xil soat mavjud: apparat (RTC, Real-Time Clock) alohida batareyadan quvvatlanadi — qurilma o'chirilganida ham ishlaydi, va dasturiy (system time) operatsion tizim tomonidan boshqariladi. Qurilma yuklanganda tizim vaqti RTC dan boshlanadi, so'ngra takt generatorining uzilishlari orqali saqlanadi. NTP sinxronizatsiyasi tizim vaqtini korreksiyalaydi, ba'zi hollarda esa tuzatishni RTC ga ham yozadi. Android-da apparat RTC ga kirish cheklangan — ilovalar root huquqisiz uni o'zgartira olmaydi.
Mobil ilova ishining ko'p jihatlari aniq tizim vaqtiga juda bog'liq. SSL sertifikatlari ma'lum amal qilish muddatiga ega: agar qurilmada vaqt sertifikatning chiqarilgan sanasidan oldin yoki amal qilish muddati tugashidan keyin o'rnatilgan bo'lsa, HTTPS ulanishi bloklanadi. OAuth tokenlari va JWT autentifikatsiyasi vaqt belgilaridan foydalanadi — sinxronizatsiyasizlik noto'g'ri avtorizatsiya rad etilishiga olib keladi. Push-bildirishnomalar vaqtga qarab rejalashtiriladi va soat xato ko'rsatsa, foydalanuvchi bildirishnomalarni noto'g'ri vaqtda oladi yoki umuman olmaydi.
Ilovalarning xavfsizligi ham noto'g'ri vaqtdan zarar ko'radi: vaqtga asoslangan shifrlash (time-based OTP), noto'g'ri belgili hodisa jurnallari, server tomonida rate-limitingning noto'g'ri ishlashi (server "kelajak" so'rovlarni bloklaydi). OWASP Mobile Top 10 (2024) ma'lumotlariga ko'ra, tizim vaqtiga ishonchsizlik platformaning yetarli darajada xavfsiz emasligi toifasiga kiradi. Dasturchilarga har doim serverda vaqtni tekshirish tavsiya etiladi, faqat mijoz soatiga tayanmasdan. Agar farq chegaradan oshsa (tavsiya etilgan 5 soniya), ilova sinxronizatsiyaga qadar muhim operatsiyalarni bloklashi kerak.
| Ssenariy | Sinxronizatsiyasizlikning effekti |
|---|---|
| HTTPS/TLS | Sertifikatlar muddati o'tgan yoki yaroqsiz deb hisoblanadi |
| OAuth 2.0 / JWT | Tokenlar muddati o'tgan deb rad etiladi |
| Push-bildirishnomalar | Bildirishnomalar noto'g'ri vaqtda keladi |
| Analitika | Noto'g'ri vaqt belgili hodisalar hisobotlarni buzadi |
| Kriptografiya | Time-based OTP server bilan mos kelmaydi |
| Rate limiting | Server "kelajak" vaqtli so'rovlarni bloklaydi |
Soat sinxronizatsiyasi uchun asosiy protokollar — NTP va uning soddalashtirilgan versiyasi SNTP. NTP (RFC 5905) — server filtrlash, siljish tahlili va PLL korreksiyasiga ega to'liq protokol. Serverlar va tarmoq uskunalarida ishlatiladi. SNTP (RFC 4330) — mijoz qurilmalari uchun yengil versiya, doimiy sinxronizatsiyani talab qilmaydi. SNTP mijozi so'rov yuboradi, javob oladi va tarixni tahlil qilmasdan vaqtni o'rnatadi. Mobil qurilmalarda aynan SNTP ishlatiladi — o'rnatilgan Android Google Time Service (GTS) time.google.com serverlari bilan SNTP orqali sinxronizatsiyalanadi.
NTP/SNTP dan tashqari, mobil qurilmalarda vaqt sinxronizatsiyasi GPS qabul qilgichi(ideal sharoitda 10 ns aniqlik) va mobil tarmoq (NITZ — Network Identity and Time Zone) orqali mumkin. GPS maksimal aniqlikni ta'minlaydi, lekin faqat ochiq havoda ishlaydi va ko'p energiya sarflaydi. NITZ mobil operator tomonidan tarmoqqa ro'yxatdan o'tishda avtomatik ta'minlanadi, ammo barcha operatorlar uni qo'llab-quvvatlamaydi. Android barcha usullarning kombinatsiyasidan foydalanadi: GTS (SNTP) ustuvor, NITZ zaxira sifatida va GPS yuqori aniqlik talab qiladigan ilovalar uchun.
Tarqalgan tizimlarda — server va mijoz turli qurilmalarda bo'lganda — soat sinxronizatsiyasi fundamental cheklovlarga duch keladi. Tarmoq kechikishi (latency) mijozda aniq vaqtni bir ma'noli aniqlashni imkonsiz qiladi: agar paket 200 ms yurgan bo'lsa, so'rov yuborish va javob olish paytida serverdagi vaqt allaqachon farq qiladi. NTP bu muammoni RTT o'lchash va statistik qayta ishlash orqali hal qiladi, ammo tarqalgan tranzaksiyalar (masalan, bank o'tkazmalari) uchun bu yetarli emas — mantiqiy soatlardan (Lamport belgilari) yoki vektor soatlardan foydalaniladi.
Fizik soatlar (wall clock) — NTP orqali sinxronizatsiyalanadigan real UTC vaqti. Mantiqiy soatlar — tizimdagi hodisalarning tartib raqamlari, fizik vaqtga bog'liq emas. Tarqalgan tizimlarda hodisalarni tartiblash uchun ko'pincha vektor soatlardan foydalaniladi: har bir node klasterning barcha node'lari uchun hisoblagich vektorini saqlaydi. Mobil ilovalar uchun 1–5 soniya aniqlikdagi fizik sinxronizatsiya yetarli — bu OAuth, SSL va push-bildirishnomalarning to'g'ri ishlashini ta'minlaydi. Agar hodisalarning qat'iy tartiblanishi talab etilsa (masalan, real vaqt chatlarida), server darajasida mantiqiy sinxronizatsiya qo'shiladi.
Soat sinxronizatsiyasini Android ilovasida bir necha usulda tatbiq etish mumkin. Eng oddiyi — REST API orqali server vaqtini olish: server javob tanasida yoki HTTP Date sarlavhasida Unix Timestamp qaytaradi. Bu yondashuv qo'shimcha kutubxonalarni talab qilmaydi va vaqtning server bilan mos kelishini kafolatlaydi. Ikkinchi usul — NTP serveriga to'g'ridan-to'g'ri so'rov uchun SNTP mijozidan foydalanish. Uchinchi — Android Google Time Service ga tayanish, qurilma internetga ulanganda tizim vaqtini avtomatik sinxronizatsiyalaydi.
Avtorizatsiya va moliyaviy operatsiyalarga ega Android ilovalarida aralash yondashuv tavsiya etiladi: har bir API so'rovida server vaqti bilan System.currentTimeMillis() orasidagi farq saqlanadi. Bu farq tizim soati sinxronizatsiyalanganligidan qat'iy nazar, mijozdagi barcha vaqt hisob-kitoblariga qo'llaniladi. Bu yondashuv clock skew correction deb ataladi va server bilan so'nggi ma'lum farqni saqlaydigan sinf orqali tatbiq etiladi. Qo'shimcha ravishda, WorkManager orqali har 4–6 soatda fon NTP sinxronizatsiyasi ishga tushirilishi mumkin.
// Soat siljishini tuzatish
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-da davriy fon vaqt sinxronizatsiyasi uchun WorkManager bilan PeriodicWorkRequest dan foydalaning. Sinxronizatsiya topshirig'i SNTP so'rovi yoki REST API chaqiruvini bajaradi, server vaqtini oladi va ClockSyncManager ni yangilaydi. PeriodicWorkRequest uchun minimal interval 15 daqiqa, ammo vaqt sinxronizatsiyasi uchun 4–6 soat yetarli. Sinxronizatsiya paytida tarmoq holatini hisobga oling — roumingda keraksiz so'rovlarning oldini olish uchun NetworkType.CONNECTED dan foydalaning. Sinxronizatsiya muvaffaqiyatsiz bo'lsa, avvalgi tuzatishni saqlang — u asta-sekin kamayib boruvchi aniqlik bilan ishonchli qoladi.
Zamonaviy mobil qurilmalar vaqtni o'rnatilgan xizmatlar orqali avtomatik sinxronizatsiyalaydi. Android-da — Google Play Services ning bir qismi bo'lgan Google Time Service (GTS). iOS-da — operatsion tizimga o'rnatilgan NTP mijozi. Bu xizmatlar ilovalardan mustaqil ishlaydi va qo'shimcha sozlashni talab qilmaydi. Foydalanuvchi avtomatik sinxronizatsiyani sozlamalardan o'chirib qo'yishi mumkin, bu ilovalar uchun xavf tug'diradi — aynan shu holatda dasturchi o'z sinxronizatsiyasini tatbiq etishi kerak. Settings.Global.getInt(AUTO_TIME) orqali avtosinxronizatsiya holatini tekshirish va o'chirilganida foydalanuvchini ogohlantirish tavsiya etiladi.
| Platforma | Sinxronizatsiya xizmati | Protokol |
|---|---|---|
| Android | Google Time Service (GTS) | SNTP |
| iOS | O'rnatilgan NTP mijozi | NTP |
| Mobil tarmoq | NITZ (operator) | NITZ |
| GPS qabul qilgich | Sun'iy yo'ldosh signali | GPS Atomic Time |
Faqat avtomatik sinxronizatsiyaga tayanish xavfli — foydalanuvchi uni o'chirishi yoki internetsiz zonada bo'lishi mumkin. Eng yaxshi amaliyot — har bir API so'rovida serverdan vaqt olish va farqni SharedPreferences yoki DataStoreda saqlash. Muhim operatsiyalar (to'lovlar, avtorizatsiya, hujjat imzolash) uchun bajarishdan oldin albatta isSyncValid() ni tekshiring. Agar farq chegaradan oshsa — foydalanuvchiga avtosinxronizatsiyani yoqish yoki sinxronizatsiyani kutish taklifi bilan ekranni ko'rsating. O'yin va ko'ngilochar ilovalar uchun vaqtni ishga tushirishda serverdan olish va har soatda yangilash yetarli.
Tez-tez so'raladigan savollar
Soat sinxronizatsiyasi — qurilmaning tizim vaqtini etalon UTC ga moslashtirish jarayoni. NTP yoki SNTP protokollari orqali ishlaydi: qurilma serverga so'rov yuboradi, tarmoq kechikishini o'lchaydi va o'z soati uchun tuzatish hisoblaydi. Natija — tarmoqqa qarab 1–100 ms xato bilan aniq vaqt.
Sinxronizatsiyasiz nosozliklar mumkin: SSL sertifikatlari HTTPSni bloklaydi, OAuth tokenlari muddati o'tgan deb hisoblanadi, push-bildirishnomalar noto'g'ri vaqtda keladi, analitika noto'g'ri belgilar yozadi. Muhim operatsiyalar (to'lovlar, avtorizatsiya) uchun 5 soniyadan ortiq sinxronizatsiyasizlik xavfsizlik tahdidi hisoblanadi va operatsiyani bloklashi kerak.
Asosiy — NTP (aniqlik 1–50 ms, filtrlash va PLL bilan) va SNTP (10–100 ms, soddalashtirilgan). Qo'shimcha: GPS (10 ns, lekin faqat ochiq havoda) va NITZ (mobil operator orqali, aniqlik ~1 soniya). Android Google Time Service SNTPda, iOS esa o'rnatilgan NTP mijozida ishlaydi.
time.google.com yoki pool.ntp.org ga to'g'ridan-to'g'ri SNTP so'rovi uchun Apache Commons Net kutubxonasidan (NTPUDPClient sinfi) foydalaning. Muqobil — APIngizning HTTP javob sarlavhalaridan server vaqtini olish. Doimiy tuzatish uchun server va lokal vaqt orasidagi farqni saqlaydigan ClockSyncManager ni tatbiq eting.
Clock skew correction ni tatbiq eting: har bir API so'rovida server vaqti bilan System.currentTimeMillis() orasidagi farqni saqlang. Bu farqni ilovaning barcha vaqt operatsiyalarida tuzatish uchun ishlating. Farq 5 soniyadan oshsa — muhim tranzaksiyalarni bloklang va foydalanuvchiga sozlamalarda avtosinxronizatsiyani yoqishni taklif qiling.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.