A sincronização de tempo NTP é o processo pelo qual computadores, servidores e dispositivos de rede definem e mantêm automaticamente relógios precisos, comunicando-se com servidores de tempo dedicados pela internet ou por uma rede local. O Network Time Protocol (NTP) realiza esse trabalho desde 1985, tornando-o um dos protocolos de internet mais antigos ainda em uso generalizado. Sem ele, cada dispositivo da sua rede iria lentamente se desviar para sua própria versão de "agora", causando falhas de autenticação, logs quebrados e sessões de depuração muito confusas.
Índice de Conteúdo
- O que é NTP e Por Que Existe
- Desvio de Relógio: Por Que Computadores Mentem Sobre a Hora
- Como o NTP Realmente Sincroniza um Relógio
- Níveis de Stratum Explicados
- Servidores de Tempo: De Onde Vem a Hora Precisa
- NTP vs SNTP vs PTP: Qual é a Diferença
- Exemplos Práticos para Desenvolvedores e Administradores de Sistema
- Por Que a Precisão de Tempo Importa Mais do Que Você Pensa
O que é NTP e Por Que Existe
NTP significa Network Time Protocol. Foi desenvolvido pelo Dr. David L. Mills na Universidade de Delaware e é definido na RFC 5905. A versão atual é NTPv4. Seu único objetivo é sincronizar os relógios de dispositivos em rede para dentro de alguns milissegundos do Tempo Universal Coordenado (UTC).
Antes do NTP, não havia uma forma padrão para uma máquina perguntar "que horas são?" pela rede. Cada sistema mantinha a hora de forma independente usando seu relógio de hardware interno, e esses relógios se desviavam constantemente um do outro. Conforme as redes cresceram, isso se tornou um problema real: sistemas distribuídos precisam que todos os seus participantes concordem sobre a hora, ou coisas como ordenação de arquivos, transações de banco de dados e tokens de segurança quebram.
Desvio de Relógio: Por Que Computadores Mentem Sobre a Hora
Todo computador possui um relógio de hardware chamado Relógio de Tempo Real (RTC), que é alimentado por uma pequena bateria na placa-mãe. Ele marca o tempo usando um oscilador de cristal de quartzo. O problema é que os osciladores de quartzo não são perfeitamente precisos. Eles ganham ou perdem alguns milissegundos por dia dependendo da temperatura, idade e variação de fabricação.
Esse pequeno desvio se acumula ao longo do tempo:
- Um relógio desviando 10 ms por dia fica atrasado em 300 ms após um mês.
- Após um ano, pode estar atrasado em 3,6 segundos ou mais.
- Em um cluster de 50 servidores desviando independentemente, você pode ter nós discordando em vários segundos em qualquer momento dado.
O NTP resolve isso medindo periodicamente a diferença entre o relógio local e uma fonte de tempo de referência, depois ajustando gradualmente a taxa do relógio para fechar essa diferença sem causar um salto repentino. Um salto repentino para trás no tempo pode confundir processos em execução, então o NTP quase sempre ajusta o relógio lentamente em vez de reiniciá-lo abruptamente.
Como o NTP Realmente Sincroniza um Relógio
O protocolo funciona através de uma troca de solicitação-resposta sobre a porta UDP 123. Aqui está o que acontece em um único ciclo de sincronização:
- Seu cliente NTP envia um pacote de solicitação para um servidor de tempo. O pacote inclui um timestamp de quando foi enviado (T1).
- O servidor recebe o pacote e registra a hora de chegada (T2).
- O servidor envia uma resposta que inclui T1, T2 e a hora em que enviou a resposta (T3).
- Seu cliente registra quando a resposta chegou (T4).
Com esses quatro timestamps, o NTP calcula dois valores:
- Atraso de ida e volta: (T4 - T1) - (T3 - T2)
- Desvio de relógio: ((T2 - T1) + (T3 - T4)) / 2
O desvio informa ao cliente o quanto seu relógio está diferente do relógio do servidor. O NTP então ajusta o relógio local por esse desvio, levando em conta a latência da rede. Em vários ciclos de sondagem (geralmente a cada 64 a 1024 segundos), o NTP constrói um modelo estatístico do atraso da rede e desvio do relógio, ficando progressivamente mais preciso.
Níveis de Stratum Explicados
O NTP organiza fontes de tempo em uma hierarquia chamada níveis de stratum, numerados de 0 a 15. O número de stratum indica quantos saltos de distância um dispositivo está de um relógio de referência primária.
| Stratum | O que é | Precisão Típica |
|---|---|---|
| 0 | Dispositivo de referência primária (receptor GPS, relógio atômico, sinal de rádio). Não está diretamente na rede. | Nanossegundos |
| 1 | Servidor conectado diretamente a um dispositivo Stratum 0. Este é o topo da rede NTP. | Microssegundos |
| 2 | Servidor sincronizado com um servidor Stratum 1. A maioria dos servidores NTP públicos está aqui. | 1-10 ms |
| 3 | Servidor sincronizado com um servidor Stratum 2. Comum para servidores NTP internos corporativos. | 10-50 ms |
| 4-15 | Clientes e servidores adicionais a jusante. | Piora a cada salto |
| 16 | Não sincronizado. Um dispositivo anunciando Stratum 16 não tem fonte de tempo válida. | Desconhecido / não confiável |
Uma regra fundamental: um servidor sempre se anuncia um stratum acima de sua fonte a montante. Se seu servidor NTP interno sincroniza com um servidor público Stratum 2, ele se torna um servidor Stratum 3 para seus clientes. Isso evita referências circulares e mantém a hierarquia limpa.
Servidores de Tempo: De Onde Vem a Hora Precisa
A infraestrutura NTP pública mais amplamente usada é o Projeto NTP Pool, um pool operado por voluntários com milhares de servidores em todo o mundo. Quando você configura um dispositivo para usar
pool.ntp.org
, ele é roteado automaticamente para um servidor próximo geograficamente.
Outros servidores de tempo públicos bem conhecidos:
-
time.cloudflare.com(Cloudflare, usa GPS e relógios atômicos) -
time.google.com(Google, usa receptores GPS em seus data centers) -
time.windows.com(Microsoft, usado por padrão no Windows) -
time.apple.com(Apple, usado por macOS e iOS) -
ntp.ubuntu.com(Ubuntu/Canonical)
Para ambientes corporativos, a configuração recomendada é ter um ou dois servidores NTP internos sincronizados com fontes públicas Stratum 1 ou Stratum 2, depois ter todos os dispositivos internos sincronizados com esses servidores internos. Isso reduz a carga nos pools públicos e mantém todas as suas máquinas em uma referência interna consistente.
NTP vs SNTP vs PTP: Qual é a Diferença
Você ocasionalmente verá esses três termos usados de forma intercambiável, mas não são a mesma coisa:
- NTP (Network Time Protocol): O protocolo completo. Usa um algoritmo sofisticado com filtragem, ponderação e sondagem de múltiplos servidores. Consegue precisão de 1-10 ms pela internet.
- SNTP (Simple NTP): Um subconjunto simplificado e sem estado do NTP. Usa o mesmo formato de pacote mas pula os algoritmos avançados de disciplina de relógio. Bom o suficiente para dispositivos de usuário final que só precisam de tempo "aproximado". A maioria dos dispositivos IoT usa SNTP.
- PTP (Precision Time Protocol, IEEE 1588): Projetado para redes locais onde precisão sub-micrônica é necessária, como sistemas de negociação financeira, automação industrial e redes de telecomunicações. O PTP usa timestamp de hardware no nível da interface de rede, algo que o NTP não consegue fazer.
Para a maioria dos desenvolvedores e administradores de sistema, NTP é a escolha certa. PTP é necessário apenas quando você precisa de precisão maior do que o NTP consegue fornecer em uma rede local.
Exemplos Práticos para Desenvolvedores e Administradores de Sistema
Verificando o status do NTP no Linux
Em sistemas usando
systemd-timesyncd
(Ubuntu 16.04+, Debian 8+):
timedatectl show-timesync --all
Em sistemas executando o daemon completo
ntpd
:
ntpq -p
A saída mostra cada servidor configurado, seu stratum, o atraso de ida e volta e o desvio atual. Um asterisco (*) ao lado de um servidor significa que é a fonte selecionada atualmente.
Configurando servidores NTP no Linux (chrony)
chrony
é o cliente NTP recomendado em RHEL/CentOS/Fedora modernos e também está disponível em Debian/Ubuntu. Edite
/etc/chrony.conf
:
# Use the NTP Pool for your region
pool 2.pool.ntp.org iburst
# Or use a specific provider
server time.cloudflare.com iburst
server time.google.com iburst
# Allow clients on your local network to sync from this machine
allow 192.168.0.0/24
Verificando sincronização de hora no Windows
w32tm /query /status
Por Que Isso Importa para Desenvolvedores Especificamente
Se você trabalha com tokens de autenticação, quase certamente já encontrou falhas relacionadas a hora. Tokens JWT usam as reivindicações
iat
(emitido em) e
exp
(expiração) que são timestamps Unix. Se o relógio no servidor que emite o token e o servidor que valida estão mais de alguns segundos separados, tokens perfeitamente válidos são rejeitados. Você pode ler mais sobre como essas reivindicações de timestamp funcionam em nosso artigo sobre reivindicações de expiração e emissão de JWT.
Similarmente, bancos de dados distribuídos como Cassandra, CockroachDB e Spanner dependem de precisão de relógio para resolução de conflitos e ordenação de transações. O Spanner do Google, por exemplo, usa GPS e relógios atômicos em cada data center especificamente porque o NTP sozinho não é preciso o suficiente para suas garantias de consistência.
A correlação de logs é outro ponto de dor comum. Se dois servidores estão 5 segundos separados, rastrear uma solicitação através de ambos os sistemas se torna um quebra-cabeça porque os timestamps não se alinham. Relógios sincronizados com NTP tornam o rastreamento distribuído e agregação de logs dramaticamente mais fáceis.
Por Que a Precisão de Tempo Importa Mais do Que Você Pensa
A sincronização de tempo NTP não é apenas uma tarefa de manutenção em segundo plano. É uma dependência fundamental para um número surpreendente de sistemas:
- Certificados TLS/SSL: A validade do certificado é verificada contra a hora atual. Um relógio que está fora pela janela de validade do certificado causa falhas em conexões HTTPS.
- Autenticação Kerberos: Por padrão, o Kerberos rejeita tickets se o desvio de relógio entre cliente e servidor exceder 5 minutos. Ambientes do Active Directory são especialmente sensíveis a isso.
- Replicação de banco de dados: Muitos sistemas de replicação usam timestamps para determinar qual escrita é mais recente. O desvio de relógio pode fazer com que dados sejam sobrescritos com valores mais antigos.
- Sistemas financeiros: Requisitos regulatórios (MiFID II na UE, por exemplo) determinam que sistemas de negociação mantenham precisão de relógio dentro de 1 ms de UTC.
- Timestamps Unix: Todo timestamp Unix que sua aplicação gera é tão preciso quanto o relógio do sistema. Se você quer entender a base em que esses timestamps são construídos, nosso guia sobre epoch time e timestamps Unix cobre o básico em detalhes.
Para a maioria das aplicações, NTP pela internet pública oferece precisão de 10-50 ms, o que é mais que suficiente. Para requisitos mais rigorosos, executar seu próprio servidor Stratum 1 com um receptor GPS (um Raspberry Pi com um chapéu GPS custa menos de 50 dólares) pode obter precisão sub-milissegundo em sua rede local. E para qualquer coisa que exija precisão de microssegundo, PTP com timestamp de hardware é o caminho a seguir.
O resumo: NTP é infraestrutura silenciosa que você só percebe quando quebra. Uma configuração NTP bem feita significa que seus logs fazem sentido, seus tokens funcionam, seus certificados validam e seus sistemas distribuídos concordam sobre o que "agora" significa.
Converta timestamps Unix sincronizados com NTP instantaneamente
Quando a sincronização de tempo NTP produz um timestamp Unix e você precisa saber o que significa em forma legível por humanos, nosso conversor gratuito lida com isso instantaneamente. Cole qualquer timestamp de 10 dígitos ou 13 dígitos e obtenha a data completa, hora, formato ISO 8601 e tempo relativo em um clique.
Experimente o Conversor de Timestamp Gratuito →
Em uma conexão de banda larga típica, o NTP consegue precisão de 10 a 50 milissegundos em relação a UTC. Em uma rede local bem ajustada sincronizando com um servidor Stratum 1 ou Stratum 2 próximo, você consegue chegar a 1 a 5 ms. O fator limitante principal é a latência variável da rede, que o algoritmo do NTP leva em conta estatisticamente em vários ciclos de sondagem.
Sem o NTP, o relógio do servidor se desvia livremente com base em seu oscilador de hardware. Dependendo do hardware, isso pode significar perder ou ganhar vários segundos por dia. Ao longo de semanas ou meses, o desvio pode ficar grande o suficiente para quebrar validação de certificado TLS, causar falhas de autenticação Kerberos, corromper timestamps de logs e disparar erros de expiração de token em aplicações que dependem de timestamps Unix.
ntpd
é o daemon NTP original da implementação de referência NTP.
chronyd
(do projeto chrony) é uma implementação mais nova que lida melhor com conexões de rede intermitentes, sincroniza mais rapidamente após uma reinicialização e é mais preciso em ambientes com latência variável. A maioria das distribuições Linux modernas (RHEL 7+, Ubuntu 18.04+) usa chrony por padrão. Ambos implementam o mesmo protocolo NTPv4 e são interoperáveis.
Sim, mas requer cuidado. Servidores NTP anunciam segundos bissextos próximos através de uma flag no pacote do protocolo. Clientes podem então lidar com o segundo extra inserindo-o diretamente (o que pode causar um salto de um segundo para trás) ou usando "leap smearing", onde o segundo extra é espalhado ao longo de uma janela de 24 horas. Google e Cloudflare ambos usam leap smearing em seus servidores NTP públicos para evitar o salto completamente.
Configure pelo menos quatro servidores. O NTP usa um algoritmo de votação chamado "algoritmo de interseção" para detectar e descartar outliers. Com apenas um ou dois servidores, o NTP não consegue determinar qual está errado se discordarem. Com quatro ou mais, pode identificar e ignorar um servidor que se comporta mal enquanto ainda mantém precisão. O Projeto NTP Pool torna isso fácil fornecendo endereços de pool regionais como
0.pool.ntp.org
até
3.pool.ntp.org
.
O NTP sempre sincroniza relógios para UTC. Fusos horários são uma preocupação de exibição tratada pelo sistema operacional separadamente do NTP. Um servidor em Tóquio e um servidor em Nova York ambos sincronizam para UTC, e cada um aplica seu próprio deslocamento de fuso horário local para fins de exibição. É exatamente por isso que timestamps Unix são armazenados em UTC e convertidos para hora local apenas quando mostrados aos usuários. Nosso guia sobre timestamps Unix e UTC explica a relação em mais detalhes.