NTP (Network Time Protocol) — hálózati óraszinkronizációs protokoll, amely ezredmásodperces időpontosságot biztosít a helyi hálózatokban és több tíz ezredmásodperces pontosságot a globális hálózatban. A David Mills által 1985-ben kifejlesztett protokollt minden modern operációs rendszerben, mobileszközben és hálózati berendezésben használják a belső órák UTC referenciaidőhöz való igazítására. Az NTP Pool Project (2026) adatai szerint több mint 4 milliárd eszköz végez naponta NTP-kéréseket a szinkronizáláshoz.
Főbb pontok
NTP (Network Time Protocol) — egy hálózati protokoll, amely a számítógép belső órájának pontos szinkronizálására szolgál egy referencia időforrással csomagkapcsolt hálózaton keresztül. Az RFC 5905 (NTPv4) szabványban leírt protokoll hierarchikus szerverrendszert használ, ahol minden szintet sztrátumnak (stratum) neveznek. Az NTP-kliens kéréseket küld a szervernek, megméri a csomag oda-vissza útjának idejét (RTT), és kiszámítja saját órájának eltolódását a referenciaidőhöz képest. A korrekciós algoritmus nemcsak az egyszeri eltolódást veszi figyelembe, hanem az órajelgenerátor driftjét is, ami lehetővé teszi a pontosság hosszú távú fenntartását ismételt kérések nélkül.
A protokollt David Mills fejlesztette ki 1985-ben az ARPANET hálózathoz. Az első specifikáció (RFC 958) egy egyszerű szinkronizációs algoritmust írt le 100 ms pontossággal. Az NTPv3 (RFC 1305, 1992) szűrési algoritmust és továbbfejlesztett késleltetés-feldolgozást adott hozzá. Az NTPv4 (RFC 5905, 2010) — a jelenlegi verzió — IPv6-támogatást, automatikus szerverkonfigurációt és Network Time Security (NTS) segítségével történő támadásvédelmet tartalmaz. 40 év alatt a protokoll tudományos projektből infrastrukturális szabvánnyá vált, amely nélkül a pénzügyi tranzakciók, a távközlés és a mobilhálózatok működése lehetetlen.
Az NTP működési elve a csomag hálózati áthaladási idejének mérésén alapul. A kliens T1 időbélyeggel (helyi küldési idő) küld kérést. A szerver a kérést T2 pillanatban (szerveridő) fogadja, T3 bélyeggel választ hoz létre és küldi el. A kliens a választ T4 pillanatban fogadja. Mind a négy időbélyeg ismeretében a kliens kiszámítja az offset = ((T2 - T1) + (T3 - T4)) / 2 eltolódást és a delay = (T4 - T1) - (T3 - T2) késleltetést. Ha a késleltetés nagyobb, mint 1 másodperc, az eredmény megbízhatatlannak minősül — ez védelem a túlterhelt vagy instabil csatornák ellen.
A pontos idő egyszerű beállítása nem elegendő — a kvarcoszcillátor az eszközön folyamatosan driftel (előre- vagy hátrafelé halad) a hőmérséklet, öregedés és feszültség miatt. Az NTP ezt a problémát a PLL (Phase-Locked Loop) algoritmussal oldja meg: nem erőltetetten állítja be az időt, hanem az óra járási sebességét hangolja. Ha az eszköz 0,1 másodpercet siet óránként, az NTP lelassítja a rendszerórát, amíg a drift kompenzálásra nem kerül. Ez a megközelítés lehetővé teszi a szinkronizálást néhány óránként stabil hálózatokban, ahelyett hogy 30 másodpercenként kellene.
// Az NTP algoritmus egyszerűsített sémája
struct NTPPacket {
uint8_t flags; // LI, VN, Mód
uint8_t stratum; // szerver sztrátum szintje
uint32_t refTimestamp; // referencia időbélyeg
uint32_t originTimestamp; // T1
uint32_t recvTimestamp; // T2
uint32_t xmitTimestamp; // T3
};
// Számítsa ki az eltolódást és a késleltetést
double offset = ((t2 - t1) + (t3 - t4)) / 2.0;
double delay = (t4 - t1) - (t3 - t2);
A teljes NTP rendszer hierarchiába szerveződik, ahol minden szintet sztrátumnak (stratum) neveznek. Stratum 0 — referenciaórák: atomórák, GPS-vevők vagy WWVB rádiójelek. Ezek az eszközök nem csatlakoznak közvetlenül a hálózatra. Stratum 1 — a referenciaórákhoz közvetlenül csatlakozó szerverek. Stratum 2 a stratum 1-től kapja az időt, stratum 3 a stratum 2-től, és így tovább stratum 15-ig. Minél magasabb a sztrátum száma, annál alacsonyabb a potenciális pontosság — minden szint egy kis késleltetést és hibát ad hozzá. A Stratum 16 azt jelenti, hogy az idő nem elérhető (nincs szinkronizálva).
| Sztrátum | Leírás | Pontosság |
|---|---|---|
| Stratum 0 | Atomórák, GPS, rádiójelek | Nanoszekundum |
| Stratum 1 | Referenciához csatlakozó szerverek | Mikroszekundum |
| Stratum 2 | Nyilvános NTP-szerverek | 1–10 ms |
| Stratum 3 | Szervezetek helyi szerverei | 10–50 ms |
| Stratum 4+ | Klienseszközök | 100 ms-ig |
Mobileszközök esetében a stratum 2 szerverek optimálisak — elég sok van belőlük, és jó egyensúlyt biztosítanak a pontosság és az elérhetőség között. Például a pool.ntp.org — több ezer szerverből álló készlet világszerte, amely automatikusan elosztja a terhelést. Android-alkalmazásokhoz nem ajánlott a stratum 1 közvetlen használata: egyrészt túlzott terhelést okoz az elsődleges szervereken, másrészt a mobileszköznek elegendő a 10–50 ms pontosság, amit a stratum 2 biztosít. Vállalati hálózatokban egy helyi stratum 3-4 szervert telepítenek, amely egy külső stratum 2-vel szinkronizál.
SNTP (Simple Network Time Protocol, RFC 4330) — az NTP egyszerűsített megvalósítása korlátozott erőforrású eszközökhöz: mikrokontrollerekhez, IoT-érzékelőkhöz és mobilalkalmazásokhoz, amelyek nem igényelnek nagy pontosságot. A teljes NTP-vel ellentétben az SNTP nem végez több szerver szűrését, nem elemzi az óra driftjét, és nem használ összetett PLL-algoritmusokat. Az SNTP-kliens küld egy kérést, fogad egy választ, és egyszer beállítja az időt. Az SNTP pontossága 10–100 ms a hálózattól függően — ez a mobil forgatókönyvek túlnyomó többségéhez elegendő, kivéve a pénzügyi tranzakciókat.
SNTP azokhoz az Android-alkalmazásokhoz alkalmas, amelyek egyszerűen le akarják kérni a pontos időt a szerverről anélkül, hogy folyamatos szinkronizációt tartanának fenn. Például az alkalmazás bejelentkezéskor megjeleníti a szerveridőt, vagy naponta egyszer szinkronizál. Teljes NTP-re van szükség szerverrendszerekhez, távközlési berendezésekhez, pénzügyi platformokhoz és elosztott adatbázisokhoz, ahol a folyamatos pontosság és a drift monitorozása kritikus. A mobilfejlesztéshez az SNTP elegendő — az Android beépített időszolgáltatása ezt használja a Google szervereivel való időszakos szinkronizáláshoz.
Android-alkalmazásokban a pontos idő NTP-n keresztüli lekérése akkor szükséges, ha a rendszeridőt a felhasználó megváltoztathatja, vagy a hálózat hiánya miatt eltér a valós időtől. Az Androidban nincs beépített nyilvános NTP-kliens — a fejlesztők az Apache Commons Net SntpClient könyvtárat vagy harmadik féltől származó megoldásokat használnak. 2022-ben a Google hozzáadta az Android API-hoz (Google Play Services segítségével) a belső SntpClient osztályt, de ez konfigurációt igényel, és nem dokumentált általános használatra. Alternatív megközelítés — idő lekérése REST API-n keresztül, amely a szerver időbélyegét adja vissza a válasz törzsében.
Az SNTP alapvető megvalósítása Androidban egy UDP-csomag NTP-szerverre (pl. pool.ntp.org) küldéséből, a válasz elemzéséből és a küldési idő (T3 — Transmit Timestamp) kinyeréséből áll. A kódnak kezelnie kell a hálózati időtúllépéseket és az elemzési hibákat — valós alkalmazásban ezt a műveletet háttérszálon hajtják végre, az eredményt pedig a következő szinkronizálásig gyorsítótárazzák. Az Apache Commons Net könyvtár kész NTPUDPClient osztályt biztosít, amely minimális módosításokkal használható Androidban, a build.gradle fájlban függőség hozzáadásával.
// NTP idő lekérése Apache Commons Net segítségével
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
}
}
Az NTP pontossága több tényezőtől függ: a hálózati késleltetéstől (RTT), a csatorna stabilitásától, a szerver terhelésétől és a helyi órajelgenerátor minőségétől. 1 ms-nál kisebb késleltetésű helyi hálózatban az NTP 0.1–1 ms pontosságot ér el. Az interneten keresztül 10–50 ms késleltetés mellett a pontosság 10–50 ms-ra csökken. Az egyszeri pontosságnál fontosabb a stabilitás: ha a késleltetés változik (jitter), az NTP-nek több időre van szüksége a megbízható eltolódás kiszámításához. Mobileszközök esetében az instabilitás fő tényezője a Wi-Fi és a mobilhálózat közötti váltás, amely során a késleltetés egy nagyságrenddel is változhat.
A pontos időre érzékeny Android-alkalmazásokhoz ajánlott: használjon több NTP-szervert, és válassza a minimális késleltetést; ne szinkronizáljon hálózatváltás pillanataiban; gyorsítótárazza az utoljára kapott időt, és korrigálja System.currentTimeMillis segítségével. Játékokhoz és valós idejű alkalmazásokhoz (az NTP nem alkalmas a hálózati késleltetés miatt) — használja a minden kérésben továbbított szerveridőt. Pénzügyi tranzakciós alkalmazásokban mindig ellenőrizze a szervertől való eltérést — ha az eltérés 5 másodpercnél nagyobb, blokkolja a műveletet potenciálisan nem biztonságosként.
Gyakran Ismételt Kérdések
NTP (Network Time Protocol) — óraszinkronizációs protokoll az interneten keresztül. Az eszközök idejének referencia UTC-hez igazításához szükséges. NTP nélkül a számítógép-órák másodperceket tévednek naponta a kvarcoszcillátor driftje miatt, ami kritikus a pénzügyi tranzakciók, naplózás és biztonság szempontjából.
Az NTP rendszer szinteket — sztrátumokat használ: stratum 0 (atomórák és GPS), stratum 1 (referenciához csatlakozó szerverek), stratum 2 (nyilvános NTP-szerverek), stratum 3–4 (helyi szerverek), stratum 5–15 (kliensek). Minél magasabb a sztrátum, annál nagyobb a potenciális hiba. A Stratum 16 azt jelenti, hogy az idő nincs szinkronizálva.
SNTP — az NTP egyszerűsített változata korlátozott erőforrású eszközökhöz. Nem szűri a szervereket, nem elemzi az óra driftjét, és nem használ PLL-t. Az SNTP olyan mobilalkalmazásokhoz alkalmas, ahol a 10–100 ms pontosság elegendő. A teljes NTP szerverekhez, távközlési berendezésekhez és fintech rendszerekhez szükséges.
Használja az Apache Commons Net könyvtárat az NTPUDPClient osztállyal. Küldjön kérést a pool.ntp.org címre, fogadja a választ, és nyerje ki a Transmit Timestamp-et. Alternatívaként használja a saját szerverének REST API-ját, amely a szerveridőt adja vissza a Date fejlécben vagy a válasz törzsében Unix Timestamp formátumban.
NTP szinkronizálás nélkül a rendszeridő az eszközön percekkel és órákkal is eltérhet. Ez megzavarja a push értesítések, SSL tanúsítványok (érvényesség ellenőrzése), naplók, feladatütemezők és kriptográfiai protokollok működését. Pénzügyi tranzakciós alkalmazásokban az 5 másodpercnél nagyobb eltérés biztonsági fenyegetésnek minősül.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is