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 (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ů.
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ý.
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.
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.
// 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);
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).
| Strata | Popis | Přesnost |
|---|---|---|
| Stratum 0 | Atomové hodiny, GPS, rádiové signály | Nanosekundy |
| Stratum 1 | Servery připojené k referenci | Mikrosekundy |
| Stratum 2 | Veřejné NTP servery | 1–10 ms |
| Stratum 3 | Lokální servery organizací | 10–50 ms |
| Stratum 4+ | Klientská zařízení | do 100 ms |
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 (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í.
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.
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.
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.
// 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 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.
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
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.
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.
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.
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.
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í
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í.
Přečtěte si také