NTP — co to je, časový protokol a synchronizace v aplikacích

Autor: IT Sectr Publikováno: 2026-07-14 Doba čtení: 9 min

NTP (Network Time Protocol) — síťový protokol synchronizace hodin, který zajišťuje přesnost času až na milisekundy v lokálních sítích a až na desítky milisekund v globální síti. Protokol vyvinutý Davidem Millsem v roce 1985 se používá ve všech moderních operačních systémech, mobilních zařízeních a síťových zařízeních pro sladění vnitřních hodin s referenčním časem UTC. Podle NTP Pool Project (2026) provádí denně více než 4 miliardy zařízení NTP požadavky pro synchronizaci.

Hlavní body

  • NTP — protokol synchronizace času přes síť, přesnost od 1 ms (LAN) do 50 ms (WAN)
  • Hierarchie strat — systém úrovní (stratum 0–16), kde stratum 0 jsou referenční atomové hodiny
  • Korekce driftu — NTP nejen nastavuje čas, ale upravuje taktovací frekvenci pro stálou přesnost
  • SNTP — zjednodušená verze NTP pro zařízení s omezenými prostředky, používá se v IoT a Androidu
  • Bezpečnost — NTPv4 podporuje autentizaci pomocí symetrických klíčů a NTS (Network Time Security)

Co je NTP?

NTP (Network Time Protocol) — je síťový protokol určený pro přesnou synchronizaci vnitřních hodin počítače s referenčním zdrojem času přes paketově přepínanou síť. Protokol popsaný v RFC 5905 (NTPv4) využívá hierarchický systém serverů, kde každá úroveň se nazývá strata (stratum). Klient NTP odesílá požadavky na server, měří dobu přenosu paketu (RTT) a vypočítává odchylku vlastních hodin vůči referenčnímu času. Korekční algoritmus zohledňuje nejen jednorázovou odchylku, ale také drift generátoru taktu, což umožňuje udržovat přesnost po dlouhou dobu bez opakovaných požadavků.

Historie vývoje NTP

Protokol byl vyvinut Davidem Millsem v roce 1985 pro síť ARPANET. První specifikace (RFC 958) popisovala jednoduchý synchronizační algoritmus s přesností až 100 ms. NTPv3 (RFC 1305, 1992) přidal filtrační algoritmus a vylepšené zpracování zpoždění. NTPv4 (RFC 5905, 2010) — aktuální verze — zahrnuje podporu IPv6, automatickou konfiguraci serverů a ochranu proti útokům prostřednictvím Network Time Security (NTS). Za 40 let se protokol vyvinul z vědeckého projektu na infrastrukturní standard, bez kterého je provoz finančních transakcí, telekomunikací a mobilních sítí nemožný.

Jak NTP funguje

Princip fungování NTP je založen na měření doby přenosu paketu v síti. Klient odešle požadavek s časovým razítkem T1 (místní čas odeslání). Server přijme požadavek v okamžiku T2 (čas serveru), vytvoří odpověď s razítkem T3 a odešle ji. Klient přijme odpověď v okamžiku T4. Se znalostí všech čtyř časových razítek klient vypočítá odchylku offset = ((T2 - T1) + (T3 - T4)) / 2 a zpoždění delay = (T4 - T1) - (T3 - T2). Pokud je zpoždění větší než 1 sekunda, je výsledek považován za nespolehlivý — to je ochrana proti přetíženým nebo nestabilním kanálům.

Korekce driftu hodin

Prosté nastavení přesného času nestačí — křemenný generátor na zařízení neustále driftuje (předbíhá nebo se zpožďuje) v důsledku teploty, stárnutí a napětí. NTP řeší tento problém pomocí algoritmu PLL (Phase-Locked Loop): nenastavuje čas násilně, ale upravuje rychlost chodu hodin. Pokud zařízení předbíhá o 0,1 sekundy za hodinu, NTP zpomalí systémové hodiny, dokud není drift kompenzován. Tento přístup umožňuje synchronizovat jednou za několik hodin ve stabilních sítích, namísto každých 30 sekund.

cpp
// Zjednodušené schéma algoritmu NTP
struct NTPPacket {
    uint8_t flags;      // LI, VN, Režim
    uint8_t stratum;    // úroveň straty serveru
    uint32_t refTimestamp;  // referenční časové razítko
    uint32_t originTimestamp; // T1
    uint32_t recvTimestamp;   // T2
    uint32_t xmitTimestamp;   // T3
};

// Vypočítat odchylku a zpoždění
double offset = ((t2 - t1) + (t3 - t4)) / 2.0;
double delay = (t4 - t1) - (t3 - t2);

Straty — hierarchie NTP

Celý systém NTP je organizován do hierarchie, kde každá úroveň se nazývá strata (stratum). Stratum 0 — referenční hodiny: atomové hodiny, GPS přijímače nebo rádiové signály WWVB. Tato zařízení nejsou přímo připojena k síti. Stratum 1 — servery přímo připojené k referenčním hodinám. Stratum 2 přijímá čas od stratum 1, stratum 3 od stratum 2, a tak dále až do stratum 15. Čím vyšší číslo straty, tím nižší je potenciální přesnost — každá úroveň přidává malé zpoždění a chybu. Stratum 16 znamená, že čas není dostupný (není synchronizován).

StrataPopisPřesnost
Stratum 0Atomové hodiny, GPS, rádiové signályNanosekundy
Stratum 1Servery připojené k referenciMikrosekundy
Stratum 2Veřejné NTP servery1–10 ms
Stratum 3Lokální servery organizací10–50 ms
Stratum 4+Klientská zařízenído 100 ms

Výběr serveru podle straty

Pro mobilní zařízení jsou optimální servery stratum 2 — je jich dostatek a poskytují dobrou rovnováhu mezi přesností a dostupností. Například pool.ntp.org — fond tisíců serverů po celém světě, který automaticky rozkládá zátěž. Pro aplikace v Androidu se nedoporučuje přímé použití stratum 1: zaprvé vytváří nadměrnou zátěž na primární servery, a zadruhé mobilní zařízení potřebuje přesnost 10–50 ms, kterou poskytuje stratum 2. V podnikových sítích se instaluje lokální server stratum 3-4, který se synchronizuje s externím stratum 2.

SNTP — zjednodušená verze NTP

SNTP (Simple Network Time Protocol, RFC 4330) — zjednodušená implementace NTP pro zařízení s omezenými prostředky: mikrokontroléry, IoT senzory a mobilní aplikace, které nevyžadují vysokou přesnost. Na rozdíl od plného NTP, SNTP neprovádí filtrování více serverů, neanalyzuje drift hodin a nepoužívá složité algoritmy PLL. Klient SNTP odešle požadavek, obdrží odpověď a jednorázově nastaví čas. Přesnost SNTP je 10–100 ms v závislosti na síti — to stačí pro naprostou většinu mobilních scénářů, kromě finančních transakcí.

Kdy použít SNTP místo NTP

SNTP je vhodný pro aplikace v Androidu, které potřebují jednoduše získat aktuální čas ze serveru, aniž by udržovaly stálou synchronizaci. Například aplikace zobrazuje čas ze serveru při přihlášení nebo se synchronizuje jednou denně. Plný NTP je vyžadován pro serverové systémy, telekomunikační zařízení, finanční platformy a distribuované databáze, kde je kritická stálá přesnost a monitorování driftu. Pro mobilní vývoj stačí SNTP — vestavěná časová služba Androidu jej používá pro pravidelnou synchronizaci se servery Google.

Implementace NTP v Androidu

V aplikacích pro Android je získání přesného času prostřednictvím NTP vyžadováno, když může být systémový čas změněn uživatelem nebo se liší od skutečného času kvůli chybějící síti. Android nemá vestavěného veřejného klienta NTP — vývojáři používají knihovnu Apache Commons Net SntpClient nebo řešení třetích stran. V roce 2022 Google přidal interní třídu SntpClient do Android API (prostřednictvím Google Play Services), ale vyžaduje konfiguraci a není zdokumentována pro obecné použití. Alternativní přístup — dotaz na čas prostřednictvím REST API, které vrací časové razítko serveru v těle odpovědi.

Příklad implementace SNTP klienta

Základní implementace SNTP v Androidu spočívá v odeslání UDP paketu na NTP server (např. pool.ntp.org), parsování odpovědi a extrahování času odeslání (T3 — Transmit Timestamp). Kód by měl zpracovávat síťové timeouty a chyby parsování — v reálné aplikaci se tato operace provádí na pozadí a výsledek se ukládá do mezipaměti do další synchronizace. Knihovna Apache Commons Net poskytuje hotovou třídu NTPUDPClient, kterou lze v Androidu použít s minimálními úpravami, přidáním závislosti do build.gradle.

kotlin
// Získat NTP čas přes 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
    }
}

Přesnost NTP a ovlivňující faktory

Přesnost NTP závisí na několika faktorech: zpoždění sítě (RTT), stabilitě kanálu, zatížení serveru a kvalitě lokálního generátoru taktu. V lokální síti se zpožděním menším než 1 ms dosahuje NTP přesnosti 0.1–1 ms. Přes internet při zpoždění 10–50 ms přesnost klesá na 10–50 ms. Důležitější než jednorázová přesnost je stabilita: pokud se zpoždění mění (jitter), NTP vyžaduje více času na výpočet spolehlivé odchylky. Pro mobilní zařízení je hlavním faktorem nestability přepínání mezi Wi-Fi a mobilní sítí, při kterém se zpoždění může změnit o řád.

Doporučení pro mobilní vývoj

Pro aplikace v Androidu citlivé na přesný čas se doporučuje: používat více NTP serverů a vybírat minimální zpoždění; nesynchronizovat v okamžicích přepínání sítě; ukládat do mezipaměti poslední získaný čas a korigovat jej pomocí System.currentTimeMillis. Pro hry a aplikace v reálném čase (NTP není vhodný kvůli zpoždění sítě) — používejte čas serveru přenášený v každém požadavku. V aplikacích pro finanční transakce vždy kontrolujte odchylku od serveru — pokud je rozdíl větší než 5 sekund, blokujte operaci jako potenciálně nebezpečnou.

Často kladené otázky

Co je NTP a k čemu slouží?

NTP (Network Time Protocol) — protokol synchronizace hodin přes internet. Je potřeba pro sladění času na zařízeních s referenčním UTC. Bez NTP se počítačové hodiny rozcházejí o sekundy denně kvůli driftu křemenného generátoru, což je kritické pro finanční transakce, logování a bezpečnost.

Jak je organizována hierarchie NTP?

Systém NTP používá úrovně — straty: stratum 0 (atomové hodiny a GPS), stratum 1 (servery připojené k referenci), stratum 2 (veřejné NTP servery), stratum 3–4 (lokální servery), stratum 5–15 (klienti). Čím vyšší strata, tím větší potenciální chyba. Stratum 16 znamená, že čas není synchronizován.

Jaký je rozdíl mezi NTP a SNTP?

SNTP — zjednodušená verze NTP pro zařízení s omezenými prostředky. Nefiltruje servery, neanalyzuje drift hodin a nepoužívá PLL. SNTP je vhodný pro mobilní aplikace, kde je přesnost 10–100 ms dostačující. Plný NTP je potřebný pro servery, telekomunikační zařízení a fintech systémy.

Jak získat přesný čas přes NTP v Androidu?

Použijte knihovnu Apache Commons Net s třídou NTPUDPClient. Odešlete požadavek na pool.ntp.org, přijměte odpověď a extrahujte Transmit Timestamp. Alternativně použijte REST API svého serveru, který vrací čas serveru v hlavičce Date nebo v těle odpovědi ve formátu Unix Timestamp.

Proč je synchronizace času na mobilních zařízeních důležitá?

Bez synchronizace NTP se systémový čas na zařízení může lišit o minuty a hodiny. To narušuje push notifikace, SSL certifikáty (kontrola platnosti), logy, plánovače úloh a kryptografické protokoly. V aplikacích s finančními transakcemi je odchylka větší než 5 sekund považována za bezpečnostní hrozbu.

Shrnutí

  • NTP — síťový protokol synchronizace času s přesností od 1 ms (LAN) do 50 ms (WAN) prostřednictvím hierarchie strat stratum 0–16
  • Korekce driftu — NTP nejen nastavuje čas, ale upravuje taktovací frekvenci pomocí PLL, což umožňuje udržovat přesnost hodinami mezi synchronizacemi
  • Hierarchie strat — každá úroveň (stratum) přidává potenciální chybu; pro mobilní zařízení jsou optimální servery stratum 2 typu pool.ntp.org
  • SNTP — zjednodušená verze NTP pro IoT a Android, bez filtrování a PLL; přesnost 10–100 ms je dostačující pro většinu scénářů
  • Implementace v Androidu — přes Apache Commons Net (NTPUDPClient) nebo REST API s časovým razítkem serveru; platforma nemá vestavěného veřejného klienta NTP
  • Bezpečnost — NTPv4 podporuje Network Time Security (NTS) pro ochranu před podvrhem odpovědí; kritické pro finanční a podnikové aplikace
  • Faktory přesnosti — RTT, jitter, přepínání sítě; mobilní aplikace potřebují přesnost 10–50 ms, ale kritické operace vyžadují kontrolu odchylky od serveru

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také