NTP — o que é, protocolo de tempo e sincronização em aplicações

Autor: IT Sectr Publicado: 2026-07-14 Tempo de leitura: 9 min

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 é um protocolo de sincronização de tempo pela rede, precisão de 1 ms (LAN) a 50 ms (WAN)
  • Hierarquia de estratos — um sistema de níveis (stratum 0–16), onde stratum 0 são os relógios atómicos de referência
  • Correção de deriva — NTP não apenas ajusta a hora, mas adapta a frequência do relógio para precisão contínua
  • SNTP — uma versão simplificada do NTP para dispositivos com recursos limitados, usada em IoT e Android
  • Segurança — NTPv4 suporta autenticação por chaves simétricas e NTS (Network Time Security)

O que é NTP?

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.

História do desenvolvimento do NTP

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.

Como funciona o NTP

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.

Correção da deriva do relógio

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.

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

Estratos — hierarquia do NTP

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).

EstratoDescriçãoPrecisão
Stratum 0Relógios atómicos, GPS, sinais de rádioNanossegundos
Stratum 1Servidores ligados à referênciaMicrossegundos
Stratum 2Servidores NTP públicos1–10 ms
Stratum 3Servidores locais de organizações10–50 ms
Stratum 4+Dispositivos clienteaté 100 ms

Escolher um servidor por estrato

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 — versão simplificada do NTP

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.

Quando usar SNTP em vez de NTP

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.

Implementação do NTP no Android

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.

Exemplo de implementação de cliente SNTP

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.

kotlin
// 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
    }
}

Precisão do NTP e fatores de influência

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.

Recomendações para desenvolvimento móvel

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

O que é NTP e para que serve?

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.

Como está estruturada a hierarquia do NTP?

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.

Qual a diferença entre NTP e SNTP?

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.

Como obter a hora exata através do NTP no Android?

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.

Por que a sincronização de hora é importante em dispositivos móveis?

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

  • NTP é um protocolo de sincronização de tempo em rede que fornece precisão de 1 ms (LAN) a 50 ms (WAN) através de uma hierarquia de estratos 0–16
  • Correção de deriva — NTP não apenas ajusta a hora, mas adapta a frequência do relógio através de PLL, mantendo a precisão por horas entre sincronizações
  • Hierarquia de estratos — cada nível (estrato) adiciona erro potencial; para dispositivos móveis, servidores de estrato 2 como pool.ntp.org são ótimos
  • SNTP — uma versão simplificada do NTP para IoT e Android, sem filtragem nem PLL; a precisão de 10–100 ms é suficiente para a maioria dos cenários
  • Implementação no Android — através de Apache Commons Net (NTPUDPClient) ou API REST com marca de tempo do servidor; não existe um cliente NTP público integrado na plataforma
  • Segurança — NTPv4 suporta Network Time Security (NTS) para proteção contra falsificação de respostas; crítico para aplicações financeiras e empresariais
  • Fatores de precisão — RTT, jitter, mudança de rede; as aplicações móveis precisam de 10–50 ms de precisão, mas operações críticas requerem verificação da discrepância com o servidor

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.

Discutir o projeto

Leia também