NTP — mi ez, időprotokoll és szinkronizálás az alkalmazásokban

Szerző: IT Sectr Megjelenés: 2026-07-14 Olvasási idő: 9 perc

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 — időszinkronizációs protokoll hálózaton keresztül, pontosság 1 ms (LAN) és 50 ms (WAN) között
  • Sztrátum hierarchia — szintrendszer (stratum 0–16), ahol a stratum 0 a referencia atomórák
  • Drift korrekció — az NTP nem csak beállítja az időt, hanem az órajel frekvenciáját is hangolja a folyamatos pontosság érdekében
  • SNTP — az NTP egyszerűsített változata korlátozott erőforrású eszközökhöz, IoT-ben és Androidban használják
  • Biztonság — az NTPv4 támogatja a hitelesítést szimmetrikus kulcsokkal és NTS-sel (Network Time Security)

Mi az NTP?

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.

Az NTP fejlődéstörténete

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.

Hogyan működik az NTP

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.

Az óra driftjének korrekciója

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.

cpp
// 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);

Sztrátumok — az NTP hierarchiája

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átumLeírásPontosság
Stratum 0Atomórák, GPS, rádiójelekNanoszekundum
Stratum 1Referenciához csatlakozó szerverekMikroszekundum
Stratum 2Nyilvános NTP-szerverek1–10 ms
Stratum 3Szervezetek helyi szerverei10–50 ms
Stratum 4+Klienseszközök100 ms-ig

Szerverválasztás sztrátum alapján

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 — az NTP egyszerűsített változata

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.

Mikor használjunk SNTP-t NTP helyett

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.

NTP megvalósítása Androidban

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.

Példa SNTP-kliens megvalósítására

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.

kotlin
// 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 és a befolyásoló tényezők

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.

Ajánlások mobilfejlesztéshez

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

Mi az NTP és mire használják?

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.

Hogyan épül fel az NTP hierarchiája?

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.

Mi a különbség az NTP és az SNTP között?

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.

Hogyan kaphatok pontos időt NTP-n keresztül Androidban?

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.

Miért fontos az idők szinkronizálása mobileszközökön?

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

  • NTP — hálózati időszinkronizációs protokoll, amely 1 ms (LAN) és 50 ms (WAN) közötti pontosságot biztosít a stratum 0–16 hierarchián keresztül
  • Drift korrekció — az NTP nem csak beállítja az időt, hanem PLL segítségével hangolja az órajelet, lehetővé téve a pontosság órákon át tartó fenntartását a szinkronizálások között
  • Sztrátum hierarchia — minden szint (stratum) potenciális hibát ad hozzá; mobileszközökhöz a pool.ntp.org típusú stratum 2 szerverek optimálisak
  • SNTP — az NTP egyszerűsített változata IoT-hez és Androidhoz, szűrés és PLL nélkül; a 10–100 ms pontosság a legtöbb forgatókönyvhöz elegendő
  • Megvalósítás Androidban — Apache Commons Net (NTPUDPClient) vagy REST API segítségével szerver időbélyeggel; a platformnak nincs beépített nyilvános NTP-kliens
  • Biztonság — az NTPv4 támogatja a Network Time Security (NTS) szolgáltatást a válaszok hamisításának megakadályozására; kritikus a pénzügyi és vállalati alkalmazások számára
  • Pontossági tényezők — RTT, jitter, hálózatváltás; a mobilalkalmazásoknak 10–50 ms pontosságra van szükségük, de a kritikus műveletekhez a szervertől való eltérés ellenőrzése szükséges

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.

Projekt megbeszélése

Olvassa el is