NTP (Network Time Protocol) é um protocolo de rede de sincronização de tempo que fornece precisão de milissegundos em redes locais e de dezenas de milissegundos na rede global. Desenvolvido por David Mills em 1985, o protocolo é usado em todos os sistemas operacionais modernos, dispositivos móveis e equipamentos de rede para sincronizar relógios internos com o horário de referência UTC. De acordo com o NTP Pool Project (2026), mais de 4 bilhões de dispositivos realizam solicitações NTP diariamente para sincronização.
Principais pontos
NTP (Network Time Protocol) é um protocolo de rede projetado para a sincronização precisa do relógio interno de um computador com uma fonte de referência de tempo através de uma rede de comutação de pacotes. Descrito na RFC 5905 (NTPv4), o protocolo utiliza um sistema hierárquico de servidores, onde cada nível é chamado de estrato. Um cliente NTP envia solicitações a um servidor, mede o tempo de ida e volta do pacote (RTT) e calcula o desvio do seu próprio relógio em relação ao tempo de referência. O algoritmo de correção leva em conta não apenas um desvio único, mas também a deriva do gerador de relógio, permitindo manter a precisão por longos períodos sem solicitações repetidas.
O protocolo foi desenvolvido por David Mills em 1985 para a rede ARPANET. A primeira especificação (RFC 958) descrevia um algoritmo simples de sincronização com precisão de até 100 ms. O NTPv3 (RFC 1305, 1992) adicionou um algoritmo de filtragem e melhorou o processamento de atrasos. O NTPv4 (RFC 5905, 2010), a versão atual, inclui suporte a IPv6, configuração automática de servidores e proteção contra ataques através do Network Time Security (NTS). Ao longo de 40 anos, o protocolo evoluiu de um projeto de pesquisa para um padrão de infraestrutura sem o qual transações financeiras, telecomunicações e redes móveis seriam impossíveis.
O princípio de funcionamento do NTP baseia-se na medição do tempo de viagem do pacote na rede. O cliente envia uma solicitação com uma marca de tempo T1 (hora local de envio). O servidor recebe a solicitação no momento T2 (hora do servidor), gera uma resposta com a marca T3 e a envia. O cliente recebe a resposta no momento T4. Usando as quatro marcas de tempo, o cliente calcula o desvio = ((T2 - T1) + (T3 - T4)) / 2 e o atraso = (T4 - T1) - (T3 - T2). Se o atraso exceder 1 segundo, o resultado é considerado não fiável, o que protege contra canais sobrecarregados ou instáveis.
Simplesmente acertar a hora exata não é suficiente: o oscilador de quartzo de um dispositivo deriva constantemente (adianta ou atrasa) devido à temperatura, envelhecimento e tensão. NTP resolve este problema usando o algoritmo PLL (Phase-Locked Loop): ele não ajusta a hora à força, mas adapta a velocidade do relógio. Se o dispositivo adianta 0,1 segundos por hora, o NTP atrasa o relógio do sistema até compensar a deriva. Esta abordagem permite sincronizar a cada poucas horas em redes estáveis, em vez de a cada 30 segundos.
// Simplified NTP algorithm schema
struct NTPPacket {
uint8_t flags; // LI, VN, Mode
uint8_t stratum; // server stratum level
uint32_t refTimestamp; // reference timestamp
uint32_t originTimestamp; // T1
uint32_t recvTimestamp; // T2
uint32_t xmitTimestamp; // T3
};
// Calculate offset and delay
double offset = ((t2 - t1) + (t3 - t4)) / 2.0;
double delay = (t4 - t1) - (t3 - t2);
Todo o sistema NTP está organizado numa hierarquia, onde cada nível é chamado de estrato. O estrato 0 são os relógios de referência: relógios atómicos, recetores GPS ou sinais de rádio WWVB. Estes dispositivos não estão ligados diretamente à rede. O estrato 1 são servidores ligados diretamente aos relógios de referência. O estrato 2 recebe a hora do estrato 1, o estrato 3 do estrato 2, e assim sucessivamente até ao estrato 15. Quanto maior o número do estrato, potencialmente menor é a precisão, pois cada nível adiciona um pequeno atraso e erro. O estrato 16 significa que a hora não está disponível (não sincronizada).
| Estrato | Descrição | Precisão |
|---|---|---|
| Stratum 0 | Relógios atómicos, GPS, sinais de rádio | Nanossegundos |
| Stratum 1 | Servidores ligados à referência | Microssegundos |
| Stratum 2 | Servidores NTP públicos | 1–10 ms |
| Stratum 3 | Servidores locais de organizações | 10–50 ms |
| Stratum 4+ | Dispositivos cliente | até 100 ms |
Para dispositivos móveis, os servidores de estrato 2 são ótimos — há suficientes e oferecem um bom equilíbrio entre precisão e disponibilidade. Por exemplo, pool.ntp.org é um conjunto de milhares de servidores em todo o mundo que distribui a carga automaticamente. Para aplicações Android, não é recomendado usar o estrato 1 diretamente: primeiro, cria uma carga excessiva nos servidores primários e, segundo, um dispositivo móvel só precisa de precisão de 10–50 ms, que o estrato 2 fornece. Em redes corporativas, instala-se um servidor local de estrato 3-4 que sincroniza com um estrato 2 externo.
SNTP (Simple Network Time Protocol, RFC 4330) é uma implementação simplificada do NTP para dispositivos com recursos limitados: microcontroladores, sensores IoT e aplicações móveis que não requerem alta precisão. Ao contrário do NTP completo, o SNTP não realiza filtragem de múltiplos servidores, não analisa a deriva do relógio nem utiliza algoritmos PLL complexos. Um cliente SNTP envia uma solicitação, recebe uma resposta e ajusta a hora uma única vez. A precisão do SNTP é de 10–100 ms dependendo da rede, suficiente para a grande maioria dos cenários móveis, exceto transações financeiras.
SNTP é adequado para aplicações Android que simplesmente precisam obter a hora atual do servidor sem manter uma sincronização contínua. Por exemplo, uma aplicação mostra a hora do servidor ao iniciar sessão ou sincroniza uma vez por dia. O NTP completo é necessário para sistemas servidores, equipamentos de telecomunicações, plataformas financeiras e bases de dados distribuídas onde a precisão constante e a monitorização da deriva são críticas. Para desenvolvimento móvel, o SNTP é suficiente: o serviço de hora integrado do Android utiliza-o para sincronização periódica com os servidores do Google.
Em aplicações Android, obter a hora exata através do NTP é necessário quando a hora do sistema pode ser alterada pelo utilizador ou difere da hora real por falta de rede. O Android não tem um cliente NTP público incorporado: os programadores usam a biblioteca Apache Commons Net SntpClient ou soluções de terceiros. Em 2022, a Google adicionou uma classe SntpClient interna à API do Android (através do Google Play Services), mas requer configuração e não está documentada para uso geral. Uma abordagem alternativa é solicitar a hora através de uma API REST que devolve a marca de tempo do servidor no corpo da resposta.
Uma implementação básica de SNTP no Android consiste em enviar um pacote UDP para um servidor NTP (por exemplo, pool.ntp.org), analisar a resposta e extrair a marca de tempo de transmissão (T3). O código deve lidar com timeouts de rede e erros de análise; numa aplicação real, esta operação é realizada numa thread em segundo plano e o resultado é armazenado em cache até à próxima sincronização. A biblioteca Apache Commons Net fornece uma classe NTPUDPClient pronta a usar que pode ser utilizada no Android com modificações mínimas, adicionando a dependência ao build.gradle.
// Get NTP time via 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
}
}
A precisão do NTP depende de vários fatores: atraso de rede (RTT), estabilidade do canal, carga do servidor e qualidade do gerador de relógio local. Numa rede local com atraso inferior a 1 ms, o NTP atinge uma precisão de 0,1–1 ms. Através da internet com atraso de 10–50 ms, a precisão diminui para 10–50 ms. Mais importante do que a precisão pontual é a estabilidade: se o atraso varia (jitter), o NTP precisa de mais tempo para calcular um desvio fiável. Para dispositivos móveis, o principal fator de instabilidade é a mudança entre Wi-Fi e redes móveis, onde o atraso pode variar numa ordem de grandeza.
Para aplicações Android sensíveis à hora exata, recomenda-se: usar vários servidores NTP e selecionar o de menor atraso; evitar sincronizar durante mudanças de rede; armazenar em cache a última hora obtida e ajustá-la através de System.currentTimeMillis. Para jogos e aplicações em tempo real (o NTP não é adequado aqui devido à latência de rede), use a hora do servidor transmitida em cada solicitação. Em aplicações financeiras, verifique sempre a discrepância com o servidor: se a diferença exceder 5 segundos, bloqueie a operação como potencialmente insegura.
Perguntas frequentes
NTP (Network Time Protocol) é um protocolo de sincronização de relógio através da internet. Serve para alinhar a hora dos dispositivos com a referência UTC. Sem NTP, os relógios dos computadores desviam-se segundos por dia devido à deriva do oscilador de quartzo, o que é crítico para transações financeiras, registos e segurança.
O sistema NTP utiliza níveis — estratos: stratum 0 (relógios atómicos e GPS), stratum 1 (servidores ligados à referência), stratum 2 (servidores NTP públicos), stratum 3–4 (servidores locais), stratum 5–15 (clientes). Quanto maior o estrato, maior o erro potencial. O estrato 16 significa que a hora não está sincronizada.
SNTP é uma versão simplificada do NTP para dispositivos com recursos limitados. Não filtra servidores, não analisa a deriva do relógio nem usa PLL. O SNTP é adequado para aplicações móveis onde a precisão de 10–100 ms é suficiente. O NTP completo é necessário para servidores, equipamentos de telecomunicações e sistemas fintech.
Use a biblioteca Apache Commons Net com a classe NTPUDPClient. Envie uma solicitação para pool.ntp.org, obtenha a resposta e extraia a marca de tempo de transmissão. Alternativamente, use a API REST do seu servidor, que devolve a hora do servidor no cabeçalho Date ou no corpo da resposta como uma marca de tempo Unix.
Sem a sincronização NTP, a hora do sistema num dispositivo pode diferir em minutos ou horas. Isso afeta notificações push, validação de certificados SSL, registos, agendadores de tarefas e protocolos criptográficos. Em aplicações financeiras, uma discrepância de mais de 5 segundos é considerada uma ameaça de segurança.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também