Синхронизација сата у апликацијама — суштина, протоколи и имплементација

Аутор: IT Sectr Објављено: 2026-07-14 Време читања: 9 мин

Clock Sync (синхронизација сата) — процес усклађивања показатеља унутрашњег сата уређаја са референтним извором времена. У мобилним апликацијама прецизна синхронизација је критична за исправан рад push обавештења, SSL/TLS сертификата, криптографских протокола и аналитике. Према Google Security Blog (2024), више од 30% отказа HTTPS веза на мобилним уређајима изазвано је десинхронизацијом системског времена већом од 5 секунди.

Главно

  • Clock Sync — усклађивање сата уређаја са референтним UTC путем протокола NTP, SNTP или GPS
  • Критичност — десинхронизација већа од 5 секунди нарушава рад SSL, push обавештења, OAuth токена и дневника
  • Основни протоколи — NTP (прецизност 1–50 ms) и SNTP (поједностављена верзија, 10–100 ms)
  • Android синхронизација — уграђени Google Time Service (GTS) синхронизује се путем SNTP са Google серверима
  • Програмска корекција — за апликације је критично да упореде време са сервером, а не да се ослањају на системско време уређаја

Шта је синхронизација сата?

Синхронизација сата (Clock Sync) — механизам усклађивања унутрашњег сата уређаја са референтним временом UTC (Universal Coordinated Time). Без синхронизације, кварцни генератор у мобилном уређају постепено одступа — дрифт износи 1–10 секунди дневно у зависности од температуре и квалитета компоненти. Синхронизација компензује овај дрифт, добијајући тачно време из спољних извора: NTP сервера на интернету, GPS сателита или мобилних базних станица. У идеалном случају, уређај би требало да се синхронизује сваких 4–6 сати ради одржавања прецизности у границама 1 секунде.

Хардверски и софтверски сат

У мобилном уређају постоје две врсте сатова: хардверски (RTC, Real-Time Clock) са засебним напајањем из батерије — ради чак и када је уређај искључен, и софтверски (system time)) којим управља оперативни систем. При покретању уређаја, системско време се иницијализује из RTC-а, а затим одржава путем прекида тактног генератора. NTP синхронизација коригује системско време, а у неким случајевима — уписује корекцију и у RTC. На Android-у приступ хардверском RTC-у је ограничен — апликације га не могу мењати без root права.

Зашто је потребна синхронизација времена у мобилним апликацијама

Многи аспекти рада мобилне апликације критично зависе од тачног системског времена. SSL сертификати имају рок трајања: ако је на уређају време подешено раније од датума издавања сертификата или касније од датума његовог истека, HTTPS веза ће бити блокирана. OAuth токени и JWT аутентификација користе временске ознаке за проверу ваљаности — десинхронизација доводи до лажног одбијања ауторизације. Push обавештења се планирају по времену, и ако сат одступа, корисник прима обавештења у погрешно време или их уопште не прима.

Последице десинхронизације

Безбедност апликација такође страда од нетачног времена: шифровање засновано на времену (time-based OTP), дневници догађаја са нетачним ознакама, неисправан рад rate-limiting-а на страни сервера (сервер блокира „будуће" захтеве). Према OWASP Mobile Top 10 (2024), неповерење у системско време спада у категорију недовољне безбедности платформе. Програмерима се препоручује да увек проверавају време на серверу, а не да се ослањају искључиво на клијентски сат. Ако разлика премаши праг (препоручује се 5 секунди), апликација треба да блокира критичне операције до синхронизације.

СценариоЕфекат десинхронизације
HTTPS/TLSСертификати се сматрају истеклим или неважећим
OAuth 2.0 / JWTТокени се одбијају као истекли
Push обавештењаОбавештења стижу у погрешно време
АналитикаДогађаји са нетачним временским ознакама искривљују извештаје
КриптографијаTime-based OTP се не поклапа са сервером
Rate limitingСервер блокира захтеве са „будућим" временом

Протоколи синхронизације: NTP и SNTP

Основни протоколи за синхронизацију сата — NTP и његова поједностављена верзија SNTP. NTP (RFC 5905) — комплетан протокол са филтрирањем сервера, анализом дрифта и PLL корекцијом. Користи се на серверима и мрежној опреми. SNTP (RFC 4330) — лака верзија за клијентске уређаје, не захтева сталну синхронизацију. SNTP клијент шаље захтев, добија одговор и подешава време без анализе историје. На мобилним уређајима користи се управо SNTP — уграђени Android Google Time Service (GTS) синхронизује се путем SNTP са серверима time.google.com.

Додатне методе синхронизације

Поред NTP/SNTP, синхронизација времена на мобилним уређајима могућа је путем GPS пријемника (прецизност до 10 ns у идеалним условима) и мобилне мреже (путем NITZ — Network Identity and Time Zone). GPS пружа максималну прецизност, али ради само на отвореном простору и троши много енергије. NITZ обезбеђује мобилни оператер аутоматски при регистрацији у мрежи, али га не подржавају сви оператери. Android користи комбинацију свих метода: GTS (SNTP) као приоритет, NITZ као резерву и GPS за апликације које захтевају високу прецизност.

Проблеми синхронизације у дистрибуираним системима

У дистрибуираним системима — када се сервер и клиент налазе на различитим уређајима — синхронизација сата се суочава са фундаменталним ограничењима. Кашњење мреже (latency) онемогућава једнозначно одређивање тачног времена на клијенту: ако је пакет путовао 200 ms, време на серверу у тренутку слања захтева и пријема одговора је већ другачије. NTP решава овај проблем путем RTT мерења и статистичке обраде, али за дистрибуиране трансакције (нпр. банковних трансфера) то није довољно — користе се логички сатови (Lamport ознаке) или векторски сатови.

Физички vs. логички сатови

Физички сатови (wall clock) — реално UTC време, синхронизовано путем NTP. Логички сатови — редни бројеви догађаја у систему, неповезани са физичким временом. У дистрибуираним системима за уређивање догађаја често се користе векторски сатови: сваки чвор чува вектор бројача за све чворове кластера. За мобилне апликације довољна је физичка синхронизација са прецизношћу 1–5 секунди — обезбеђује исправан рад OAuth, SSL и push обавештења. Ако је потребно строго уређивање догађаја (нпр. у четовима у реалном времену), додаје се логичка синхронизација на нивоу сервера.

Имплементација синхронизације сата у Android-у

Имплементација синхронизације сата у Android апликацији може се извести на неколико начина. Најједноставнији — добити време сервера путем REST API-ја: сервер враћа Unix Timestamp у телу одговора или HTTP заглављу Date. Овај приступ не захтева додатне библиотеке и гарантује да се време поклапа са серверским. Други начин — коришћење SNTP клијента за директни упит NTP серверу. Трећи — ослањање на Android Google Time Service, који аутоматски синхронизује системско време ако је уређај повезан на интернет.

Поређење приступа за Android

У Android апликацијама са ауторизацијом и финансијским операцијама препоручује се комбиновани приступ: при сваком захтеву ка API-ју чува се разлика између времена сервера и System.currentTimeMillis(). Ова разлика се примењује на сва временска израчунавања на клијенту, без обзира на то да ли је системски сат синхронизован. Овај приступ се назива clock skew correction и имплементира се кроз класу која чува последњу познату разлику са сервером. Додатно, може се покренути позадинска NTP синхронизација сваких 4–6 сати путем WorkManager-а.

kotlin
// Корекција одступања сата
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
    }
}

Позадинска синхронизација путем WorkManager-а

За периодичну позадинску синхронизацију времена на Android-у користите WorkManager са PeriodicWorkRequest-ом. Задатак синхронизације извршава SNTP упит или позив REST API-ја, добија време сервера и ажурира ClockSyncManager. Минимални интервал за PeriodicWorkRequest је 15 минута, али за синхронизацију времена довољно је 4–6 сати. При синхронизацији узмите у обзир стање мреже — користите NetworkType.CONNECTED ради спречавања непотребних захтева у роумингу. Ако синхронизација није успела, сачувајте претходну корекцију — она остаје важећа са постепено опадајућом прецизношћу.

Аутоматска синхронизација времена на уређајима

Савремени мобилни уређаји синхронизују време аутоматски путем уграђених сервиса. На Android-у — Google Time Service (GTS), део Google Play Services. На iOS-у — NTP клијент уграђен у оперативни систем. Ови сервиси раде независно од апликација и не захтевају додатну конфигурацију. Корисник може искључити аутоматску синхронизацију у подешавањима, што ствара ризик за апликације — управо у овом случају програмер треба да имплементира сопствену синхронизацију. Препоручује се провера статуса аутоматске синхронизације путем Settings.Global.getInt(AUTO_TIME) и упозорење корисника када је искључена.

ПлатформаСервис синхронизацијеПротокол
AndroidGoogle Time Service (GTS)SNTP
iOSУграђени NTP клијентNTP
Мобилна мрежаNITZ (оператерски)NITZ
GPS пријемникСателитски сигналGPS Atomic Time

Препоруке за програмере

Ослањање искључиво на аутоматску синхронизацију је ризично — корисник је може искључити или се налазити у зони без интернета. Најбоља пракса — добијати време са сервера при сваком захтеву ка API-ју и чувати десинхронизацију у SharedPreferences или DataStore-у. За критичне операције (плаћања, ауторизација, потписивање докумената) обавезно проверите isSyncValid() пре извршења. Ако десинхронизација премашује праг — прикажите кориснику екран са предлогом да укључи аутоматску синхронизацију или да сачека синхронизацију. За игре и забавне апликације довољно је добити време са сервера при покретању и ажурирати га сваког сата.

Често постављана питања

Шта је синхронизација сата и како функционише?

Синхронизација сата — процес усклађивања системског времена уређаја са референтним UTC-ом. Функционише путем NTP или SNTP протокола: уређај шаље захтев серверу, мери кашњење мреже и израчунава корекцију за свој сат. Резултат — тачно време са грешком од 1–100 ms у зависности од мреже.

Зашто синхронизовати време у мобилним апликацијама?

Без синхронизације могући су откази: SSL сертификати блокирају HTTPS, OAuth токени се сматрају истеклим, push обавештења стижу у погрешно време, аналитика бележи нетачне ознаке. За критичне операције (плаћања, ауторизација) десинхронизација већа од 5 секунди сматра се безбедносном претњом и треба да блокира операцију.

Који протоколи се користе за синхронизацију?

Основни — NTP (прецизност 1–50 ms, са филтрирањем и PLL) и SNTP (10–100 ms, поједностављен). Додатно: GPS (10 ns, али само на отвореном) и NITZ (путем мобилног оператера, прецизност ~1 секунда). Android користи Google Time Service на SNTP-у, iOS — уграђени NTP клијент.

Како синхронизовати време путем NTP-а у Android-у?

Користите библиотеку Apache Commons Net (класа NTPUDPClient) за директни SNTP упит ка time.google.com или pool.ntp.org. Алтернатива — добијање времена сервера из HTTP заглавља одговора вашег API-ја. За сталну корекцију имплементирајте ClockSyncManager који чува разлику између серверског и локалног времена.

Шта урадити ако се време на уређају разликује од сервера?

Имплементирајте clock skew correction: при сваком захтеву ка API-ју чувајте разлику између времена сервера и System.currentTimeMillis(). Користите ову разлику за корекцију времена у свим операцијама апликације. Ако разлика премаши 5 секунди — блокирајте критичне трансакције и предложите кориснику да укључи аутоматску синхронизацију у подешавањима.

Закључак

  • Clock Sync — процес усклађивања системског сата са референтним временом UTC путем NTP, SNTP, GPS или мобилне мреже
  • Критичност — десинхронизација преко 5 секунди нарушава SSL/TLS, OAuth, push обавештења, аналитику и криптографију
  • Основни протоколи — NTP (са PLL корекцијом и филтрирањем, прецизност 1–50 ms) и SNTP (поједностављен, прецизност 10–100 ms)
  • Android имплементација — путем Google Time Service уграђено, путем Apache Commons Net или REST API програмски; WorkManager за позадинску синхронизацију
  • Clock skew correction — обавезна пракса: чувајте разлику серверског и локалног времена, коригујте сва израчунавања на клијенту
  • Дистрибуирани системи — за строго уређивање догађаја додатно се користе логички сатови (Lamport, векторски)
  • Препорука — проверавајте статус AUTO_TIME у Android-у, упозоравајте корисника при искључивању аутоматске синхронизације и блокирајте операције при десинхронизацији > 5 секунди

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође