Network Time Protocol - NTP


1. Conceito e Objetivo

O Network Time Protocol (NTP) é um protocolo de Internet usado para sincronizar os relógios de computadores em um sistema distribuído. Seu objetivo é alinhar o relógio de uma máquina cliente com o UTC (Tempo Universal Coordenado), consultando servidores de tempo que possuem relógios de alta precisão.

2. Mecânica de Sincronização

O NTP é significativamente mais robusto que algoritmos mais simples (como o de Cristian) porque utiliza quatro marcações de tempo (timestamps) para calcular tanto o atraso da rede quanto o deslocamento (offset) do relógio, sem assumir que o atraso da rede é simétrico.

2.1. Troca de Mensagens (Timestamps)

A sincronização básica envolve a troca de pacotes entre o cliente e o servidor:

  • (Cliente envia): O cliente marca seu tempo local e envia um pacote de requisição.
  • (Servidor recebe): O servidor marca seu tempo local ao receber o pacote.
  • (Servidor responde): O servidor marca seu tempo local ao enviar a resposta.
  • (Cliente recebe): O cliente marca seu tempo local ao receber a resposta.

O pacote de resposta do servidor contém , , e . Com todos os quatro valores, o cliente pode realizar os cálculos.

sequenceDiagram
    participant Cliente
    participant Servidor NTP

    activate Cliente
    Note over Cliente: Marca tempo local $t_1$
    Cliente->>Servidor NTP: 1. Pacote de Requisição (contém $t_1$)
    deactivate Cliente

    activate Servidor NTP
    Note over Servidor NTP: 2. Marca tempo de chegada $t_2$
    Note over Servidor NTP: 3. Marca tempo de saída $t_3$
    Servidor NTP-->>Cliente: 4. Pacote de Resposta (contém $t_1, t_2, t_3$)
    deactivate Servidor NTP

    activate Cliente
    Note over Cliente: 5. Marca tempo de chegada $t_4$
    deactivate Cliente

2.2. Fórmulas de Cálculo

O cliente usa duas fórmulas principais:

  1. Atraso (): Estima o tempo total de viagem de ida e volta, desconsiderando o tempo de processamento do servidor.

  2. Deslocamento (): Estima a diferença real (offset) entre o relógio do servidor e o do cliente.

3. Problemas Resolvidos pelo NTP

O NTP foi projetado para lidar com dois problemas complexos da sincronização:

  1. Atraso e Variação na Rede (Jitter):

    • Solução: O NTP não confia em uma única medição. Ele coleta múltiplas amostras ao longo do tempo, descarta estatisticamente outliers (medidas anômalas causadas por picos de latência) e utiliza médias ponderadas para calcular o offset mais estável e confiável.
  2. Retrocesso do Tempo:

    • Problema: Se o relógio do cliente estiver adiantado, simplesmente “voltar” o relógio para a hora correta pode causar inconsistências graves em sistemas (ex: logs, transações).
    • Solução (Slew Mode): O NTP ajusta o tempo gradualmente. Em vez de saltar, ele faz o relógio do cliente andar um pouco mais devagar (ou mais rápido, se estiver atrasado) até que ele se alinhe perfeitamente com o UTC.

4. Estrutura Hierárquica (Estratos)

Para garantir precisão e escalabilidade, o NTP opera em uma hierarquia de níveis chamada Estratos (Strata).

  • Estrato 0: A fonte de referência primária (ex: relógio atômico, GPS). Não está na rede.
  • Estrato 1: Servidores (raiz) diretamente conectados ao Estrato 0. Possuem a maior precisão.
  • Estrato 2: Servidores que sincronizam seus relógios com os servidores do Estrato 1.
  • Estrato k+1: Servidores que sincronizam com o Estrato k.

Regra: Um servidor ou cliente sempre tentará sincronizar com o servidor disponível que tiver o menor número de estrato (mais próximo da fonte de referência).

5. Vantagens (NTP vs. Algoritmo de Cristian)

O NTP é superior ao Algoritmo de Cristian pois:

  • Não assume atraso simétrico na rede.
  • Coleta múltiplas amostras e filtra outliers.
  • Usa médias ponderadas e mantém um histórico estatístico.
  • Ajusta não apenas o offset (deslocamento), mas também o drift (a frequência/deriva natural do relógio de quartzo do hardware).

Isso permite precisões de milissegundos na Internet e microssegundos em LANs.

6. Atualizações (NTPv4 e NTS)

  • NTPv4 (RFC 5905): A versão moderna do protocolo, com melhor gerenciamento de jitter, filtros de seleção aprimorados e disciplina de clock mais precisa.
  • NTS (Network Time Security, RFC 8915): Uma extensão crucial que adiciona segurança. Utiliza TLS + AEAD (porta 4460) para garantir a autenticidade e a integridade dos pacotes de tempo, protegendo contra ataques man-in-the-middle que tentam falsificar o horário.

Referências