NTP (Network Time Protocol) — мрежни протокол синхронизације сата, који обезбеђује тачност времена до милисекунди у локалним мрежама и до десетина милисекунди у глобалној мрежи. Протокол, који је развио Дејвид Милс 1985. године, користи се у свим савременим оперативним системима, мобилним уређајима и мрежној опреми за усаглашавање унутрашњих сатова са референтним временом UTC. Према NTP Pool Project (2026), више од 4 милијарде уређаја дневно обавља NTP захтеве за синхронизацију.
Главно
NTP (Network Time Protocol) — мрежни протокол намењен прецизној синхронизацији унутрашњег сата рачунара са референтним извором времена преко мреже са комутацијом пакета. Протокол, описан у RFC 5905 (NTPv4), користи хијерархијски систем сервера, где се сваки ниво назива стратом (stratum). NTP клијент шаље захтеве серверу, мери време проласка пакета (RTT, round-trip time) и израчунава померај сопственог сата у односу на референтно време. Алгоритам корекције узима у обзир не само једнократни померај, већ и одступање тактног генератора, што омогућава одржавање тачности дуго времена без поновљених захтева.
Протокол је развио Дејвид Милс 1985. године за мрежу ARPANET. Прва спецификација (RFC 958) описивала је једноставан алгоритам синхронизације са тачношћу до 100 ms. NTPv3 (RFC 1305, 1992) додао је алгоритам филтрације и побољшану обраду кашњења. NTPv4 (RFC 5905, 2010) — тренутна верзија — укључује подршку за IPv6, аутоматску конфигурацију сервера и заштиту од напада преко Network Time Security (NTS). За 40 година, протокол је прешао пут од научног пројекта до инфраструктурног стандарда, без којег је немогућ рад финансијских трансакција, телекомуникација и мобилних мрежа.
Принцип рада NTP заснива се на мерењу времена проласка пакета у мрежи. Клијент шаље захтев са ознаком времена T1 (локално време слања). Сервер прима захтев у тренутку T2 (серверско време), формира одговор са ознаком T3 и шаље га. Клијент прима одговор у тренутку T4. Знајући све четири временске ознаке, клијент израчунава померај offset = ((T2 - T1) + (T3 - T4)) / 2 и кашњење delay = (T4 - T1) - (T3 - T2). Ако је кашњење веће од 1 секунде, резултат се сматра непоузданим — ово је заштита од преоптерећених или нестабилних канала.
Једноставно подешавање тачног времена није довољно — кварцни генератор на уређају стално одступа (напредује или заостаје) због температуре, старења и напона. NTP решава овај проблем помоћу алгоритма PLL (Phase-Locked Loop): он не поставља време насилно, већ подешава брзину хода сата. Ако уређај напредује 0,1 секунду на сат, NTP успорава ход системског сата док се одступање не компензује. Овај приступ омогућава синхронизацију једном у неколико сати у стабилним мрежама, уместо сваких 30 секунди.
// Поједностављена шема NTP алгоритма
struct NTPPacket {
uint8_t flags; // LI, VN, Режим
uint8_t stratum; // ниво страта сервера
uint32_t refTimestamp; // референтна временска ознака
uint32_t originTimestamp; // T1
uint32_t recvTimestamp; // T2
uint32_t xmitTimestamp; // T3
};
// Израчунај померај и кашњење
double offset = ((t2 - t1) + (t3 - t4)) / 2.0;
double delay = (t4 - t1) - (t3 - t2);
Цео систем NTP организован је у хијерархију, где се сваки ниво назива стратом (stratum). Stratum 0 — референтни сатови: атомски сатови, GPS пријемници или радио сигнали WWVB. Ови уређаји нису директно повезани на мрежу. Stratum 1 — сервери директно повезани на референтне сатове. Stratum 2 примају време од stratum 1, stratum 3 — од stratum 2, и тако даље до stratum 15. Што је већи број страта, потенцијално је мања тачност — сваки ниво додаје мало кашњење и грешку. Stratum 16 значи да време није доступно (није синхронизовано).
| Страт | Опис | Тачност |
|---|---|---|
| Stratum 0 | Атомски сатови, GPS, радио сигнали | Наносекунде |
| Stratum 1 | Сервери повезани на референцу | Микросекунде |
| Stratum 2 | Јавни NTP сервери | 1–10 ms |
| Stratum 3 | Локални сервери организација | 10–50 ms |
| Stratum 4+ | Клијентски уређаји | до 100 ms |
За мобилне уређаје оптимални су сервери stratum 2 — има их довољно и пружају добар баланс између тачности и доступности. На пример, pool.ntp.org — група од хиљада сервера широм света, која аутоматски распоређује оптерећење. За Android апликације не препоручује се директно коришћење stratum 1: прво, ствара прекомерно оптерећење примарних сервера, а друго, мобилни уређај захтева тачност 10–50 ms, коју обезбеђује stratum 2. У корпоративним мрежама поставља се локални stratum 3-4 сервер, који се синхронизује са спољним stratum 2.
SNTP (Simple Network Time Protocol, RFC 4330) — поједностављена имплементација NTP за уређаје са ограниченим ресурсима: микроконтролере, IoT сензоре и мобилне апликације које не захтевају високу тачност. За разлику од пуног NTP, SNTP не врши филтрацију више сервера, не анализира одступање сата и не користи сложене PLL алгоритме. SNTP клијент шаље захтев, прима одговор и једнократно поставља време. Тачност SNTP је 10–100 ms у зависности од мреже — ово је довољно за огромну већину мобилних сценарија, осим финансијских трансакција.
SNTP је погодан за Android апликације којима је потребно једноставно добити тренутно време са сервера, без одржавања сталне синхронизације. На пример, апликација приказује време са сервера при пријави или се синхронизује једном дневно. Пуни NTP је потребан за серверске системе, телекомуникациону опрему, финансијске платформе и дистрибуиране базе података, где су стална тачност и праћење одступања критични. За мобилни развој довољан је SNTP — уграђени Android сервис времена користи га за периодичну синхронизацију са Google серверима.
У Android апликацијама добијање тачног времена преко NTP је потребно када системско време може бити промењено од стране корисника или се разликује од стварног због недостатка мреже. Android нема уграђеног јавног NTP клијента — програмери користе библиотеку Apache Commons Net SntpClient или решења трећих страна. 2022. године Google је додала унутрашњу класу SntpClient у Android API (преко Google Play Services), али захтева конфигурацију и није документована за општу употребу. Алтернативни приступ — захтев за време преко REST API-ја, који враћа временску ознаку сервера у телу одговора.
Основна имплементација SNTP на Android-у састоји се од слања UDP пакета на NTP сервер (нпр. pool.ntp.org), парсирања одговора и издвајања времена слања (T3 — Transmit Timestamp). Код треба да обрађује мрежна времена и грешке парсирања — у стварној апликацији ова операција се изводи у позадини, а резултат се кешира до следеће синхронизације. Библиотека Apache Commons Net пружа готову класу NTPUDPClient, која се може користити у Android-у са минималним изменама, додавањем зависности у build.gradle.
// Преузми NTP време преко Apache Commons Net
fun getNtpTime(server: String = "pool.ntp.org"): Date? {
return try {
val client = NTPUDPClient()
client.setDefaultTimeout(5000)
val info = client.getTime(InetAddress.getByName(server))
client.close()
Date(info.getMessage().getTransmitTimeStamp().getTime())
} catch (e: Exception) {
null
}
}
Тачност NTP зависи од неколико фактора: кашњења мреже (RTT), стабилности канала, оптерећења сервера и квалитета локалног тактног генератора. У локалној мрежи са кашњењем мањим од 1 ms NTP достиже тачност 0.1–1 ms. Преко интернета при кашњењу 10–50 ms тачност опада на 10–50 ms. Важнија од једнократне тачности је стабилност: ако кашњење варира (jitter), NTP захтева више времена за израчунавање поузданог помераја. За мобилне уређаје главни фактор нестабилности је пребацивање између Wi-Fi и мобилне мреже, при чему се кашњење може променити за ред величине.
За Android апликације осетљиве на тачно време препоручује се: користите више NTP сервера и бирајте минимално кашњење; не синхронизујте се у тренуцима пребацивања мреже; кеширајте последње добијено време и коригујте га преко System.currentTimeMillis. За игре и апликације реалног времена (NTP није погодан због кашњења мреже) — користите серверско време које се преноси у сваком захтеву. У апликацијама за финансијске трансакције обавезно проверавајте разлику са сервером — ако је разлика већа од 5 секунди, блокирајте операцију као потенцијално небезбедну.
Често постављана питања
NTP (Network Time Protocol) — протокол синхронизације сата преко интернета. Потребан је за усаглашавање времена на уређајима са референтним UTC. Без NTP, рачунарски сатови одступају секундама дневно због одступања кварцног генератора, што је критично за финансијске трансакције, евидентирање и безбедност.
NTP систем користи нивое — стратове: stratum 0 (атомски сатови и GPS), stratum 1 (сервери повезани на референцу), stratum 2 (јавни NTP сервери), stratum 3–4 (локални сервери), stratum 5–15 (клијенти). Што је страт виши, потенцијална грешка је већа. Stratum 16 значи да време није синхронизовано.
SNTP — поједностављена верзија NTP за уређаје са ограниченим ресурсима. Не филтрира сервере, не анализира одступање сата и не користи PLL. SNTP је погодан за мобилне апликације где је тачност 10–100 ms довољна. Пуни NTP је потребан серверима, телекомуникационој опреми и fintech системима.
Користите библиотеку Apache Commons Net са класом NTPUDPClient. Пошаљите захтев на pool.ntp.org, примите одговор и издвојите Transmit Timestamp. Алтернативно, користите REST API свог сервера, који враћа серверско време у заглављу Date или у телу одговора у формату Unix Timestamp.
Без синхронизације NTP, системско време на уређају може да одступа минутима и сатима. То нарушава рад push обавештења, SSL сертификата (провера важења), евиденција, планирача задатака и криптографских протокола. У апликацијама са финансијским трансакцијама, десинхронизација већа од 5 секунди сматра се безбедносном претњом.
Закључак
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође