Network Time Protocol
O NTP é um protocolo para sincronização dos relógios dos computadores baseado no protocolo UDP sob a porta 123. É utilizado para sincronização do relógio de um conjunto de computadores e dispositivos em redes de dados com latência variável. O NTP permite manter o relógio de um computador sincronizado com a hora sempre certa e com precisão de milisegundos.[1]:3 Foi originalmente idealizado por David L. Mills da Universidade do Delaware e ainda hoje é mantido por ele e por uma equipe de voluntários. O NTP foi utilizado pela primeira vez antes de 1985, sendo ainda hoje muito popular e um dos mais antigos protocolos da Internet. Importância do NTPUma característica básica e ao mesmo tempo importante do tempo é que ele sempre avança. O tempo não para e não volta atrás. Vários programas de computador fazem uso dessa característica e podem ter seu funcionamento comprometido se o relógio do computador inesperadamente passar a indicar um horário errado, especialmente se for um horário no passado. Isso se complica ainda mais na Internet, com vários computadores trocando informações entre si! Diferentes softwares e aplicações podem ser sensíveis a problemas relativos à sincronização do tempo de formas diversas. Como exemplos de aplicações afetadas pelo tempo pode-se citar: Sistemas de distribuição de conteúdo (www, usenet news, etc); Sistemas de arquivos (filesystems); Agendadores de eventos como o cron e o at dos sistemas unix; Criptografia; Protocolos de comunicação e aplicações de tempo real; Sistemas transacionais e bancos de dados distribuídos. É importante também do ponto de vista de segurança de redes que os relógios dos computadores estejam sincronizados. Investigações relacionadas a incidentes de segurança tornam-se impossíveis caso os servidores envolvidos e os diversos arquivos de log discordem entre si em relação às estampas de tempo dos eventos. Para algumas aplicações exatidão da ordem de segundos pode ser suficiente. Para outras, é necessário manter os relógios com diferenças na ordem dos milisegundos entre si e em relação à hora certa. O NTP, se corretamente utilizado, é capaz de garantir as propriedades necessárias ao relógio do computador para o bom funcionamento das aplicações. Num primeiro momento isso pode parecer algo muito simples: "consultar o tempo em um servidor" e "ajustar o relógio local" de tempos em tempos. Mas na verdade o NTP faz muito mais do que isso. Diversos componentes do sistema colaboram para:
Os relógios de computadorOs relógios de computadores, como quaisquer outros relógios, são baseados em 3 dispositivos:
O oscilador é um dispositivo que gera eventos cíclicos a uma taxa constante, chamada de freqüência. Normalmente os osciladores dos computadores são baseados em cristais de quartzo. O contador acumula os ciclos gerados pelo oscilador, geralmente utilizando-se de interrupções de hardware, convertendo-os em unidades de medida conhecidas, como segundos, minutos, horas. Cada valor do contador é chamado de estampa de tempo. A "visualização" ou leitura é feita através de rotinas de software. Algumas propriedades importantes dos relógios
Funcionamento do NTPA topologia do NTPOs servidores NTP formam uma topologia hierárquica, dividida em camadas ou estratos (em inglês: strata) numerados de 0 (zero) a 16 (dezesseis). O estrato 0 (stratum 0) na verdade não faz parte da rede de servidores NTP, mas representa a referência primária de tempo, que é geralmente um receptor do Sistema de Posicionamento Global (GPS) ou um relógio atômico. O estrato 16 indica que um determinado servidor está inoperante. O estrato 0, ou relógio de referência, fornece o tempo correto para o estrato 1, que por sua vez fornece o tempo para o estrato 2 e assim por diante. O NTP é então, simultaneamente, servidor (fornece o tempo) e cliente (consulta o tempo), formando uma topologia em árvore. Os tipos de associação possíveisAs relações entre os diferentes dispositivos NTP são normalmente chamadas de Associações. Elas podem ser:
São possíveis as seguintes Associações:
A Troca de Mensagens e o cálculo do DeslocamentoAs mensagens do NTP são baseadas no protocolo UDP. A troca de mensagens entre cliente e servidor permite que o cliente descubra qual seu deslocamento (offset) em relação ao servidor, ou seja, o quanto seu relógio local difere do relógio do servidor. Consideremos servidor e cliente com relógios não sincronizados. A troca de mensagens dá-se da seguinte forma:
Ao receber a Mensagem 2, o Cliente passa a conhecer os instantes a, x, y e b. Mas a e b estão numa escala de tempo, enquanto x e y em outra. O valor do incremento dessas escalas é o mesmo, mas os relógios não estão sincronizados. Não é possível, então, calcular o tempo que a Mensagem 1 levou para ser transmitida (T-ida), nem o tempo que a Mensagem 2 gastou na rede (T-volta). Contudo, o tempo total de ida e volta, ou atraso (também conhecido por Round Trip Time ou RTT) que é a soma T-ida + T-volta pode ser calculado como:
Considerando-se que o tempo de ida é igual ao tempo de volta, pode-se calcular o deslocamento entre o servidor e o relógio local como:
O Algoritmo de Filtro de RelógioAtravés da troca de mensagens, o NTP consegue as informações de atraso e deslocamento de um servidor. Essa troca de mensagens não é realizada uma única vez. Ela se repete periodicamente, com o período dinamicamente controlado pelo NTP. É importante notar então, que não há apenas um valor de atraso e um de deslocamento para cada servidor, mas um conjunto deles, provenientes das diversas trocas de mensagem! A partir dessa lista de valores, o Algoritmo de Filtro de Relógio calcula então um valor de atraso (delay), de deslocamento (offset) e de variação (jitter). Na verdade, cada amostra é composta de 4 valores: atraso, deslocamento, dispersão e estampa de tempo. A estampa de tempo indica quando a amostra chegou. A dispersão é o erro estimado do relógio de servidor remoto, informada pelo servidor na mensagem NTP. A lista com os valores é ordenada em função do atraso. Considera-se que as amostras com menor atraso são melhores porque provavelmente não se sujeitaram a filas nos switches e roteadores, de forma que parte das variações estocásticas de tempo no envio e recebimento das mensagens é evitada com essa escolha. Os valores mais antigos são descartados, porque o valor de deslocamento pode não mais corresponder à realidade, já que a exatidão do relógio local varia ao longo do tempo. Após descartar as amostras antigas, resta uma lista com as amostras mais recentes e ordenadas em função do atraso. Da primeira entrada dessa lista são retiradas as variáveis atraso e deslocamento para o par cliente servidor (note-se que para cada par cliente - servidor há uma variável de cada tipo). A dispersão e a variação são calculadas levando em conta todos os valores da lista. O Algoritmo de Seleção dos RelógiosUma vez que o Algoritmo de Filtro de Relógios tenha calculado os principais parâmetros referentes a cada servidor, faz-se importante descobrir quais deles são confiáveis e quais não. Os servidores que têm algum erro no tempo fornecido são chamados de relógios falsos (falsetickers, na literatura em inglês, a tradução é aproximada). Os servidores que fornecem a hora corretamente são chamados de relógios verdadeiros (truechimmers, em inglês, uma tradução mais literal seria algo como "badaladores verdadeiros"). Para a seleção dos relógios, o NTP considera como verdadeiro o deslocamento que se encontra dentro de um determinado intervalo de confiança. Esse intervalo é calculado, para cada associação com um servidor, como:
A Seleção de relógios busca um intervalo de intersecção para os valores de deslocamento de cada servidor, considerados os intervalos de confiança. Os servidores cujos deslocamentos ficam fora da intersecção são relógios falsos. O Algoritmo de AgrupamentoO algoritmo de Agrupamento trabalha com os servidores que são relógios verdadeiros, utilizando técnicas estatísticas, com o objetivo de selecionar os melhores dentre eles. Os critérios de seleção utilizados são:
No processo alguns servidores são descartados, sendo chamados de relógios afastados (outlyers). Os que permanecem são chamados de relógios sobreviventes (survivors), algumas vezes na literatura em inglês utiliza-se candidatos (candidates) no mesmo sentido que sobreviventes, por conta do algoritmo utilizado onde, a princípio, todos os relógios verdadeiros são candidatos, mas apenas alguns sobrevivem. O melhor dos relógios sobreviventes é considerado como par do sistema (system peer). O Algoritmo de Combinação de RelógiosSe o algoritmo de Agrupamento encontrar apenas um sobrevivente, ele será o par do sistema e será utilizado como referência para ajustar o relógio local. Se um servidor for configurado como tendo preferência sobre os demais e estiver dentre os sobreviventes, ele será considerado como par do sistema e, mesmo que existam outros sobreviventes, estes serão ignorados. Nesses casos, o algoritmo de Combinação de Relógios não é utilizado. Para os demais casos, quando há mais do que um sobrevivente e nenhum deles foi configurado com a palavra chave prefer, o algoritmo de Combinação de Relógios calcula uma média ponderada dos deslocamentos dos relógios, com o objetivo de aumentar a exatidão. Disciplina do Relógio LocalO processo de disciplina do Relógio Local controla a fase e a freqüência do relógio do sistema. Ele é baseado na combinação de duas filosofias de controle bastante diferentes entre si: Phase Locked Loop (PLL) e Frequency Locked Loop (FLL) (traduções desses termos são incomuns, mas poderiam ser Laço Controlado por Fase e Laço Controlado por Freqüência). Ambas as filosofias implementam controles onde há realimentação, ou seja, onde a informação de saída é usada novamente na entrada. O NTP disciplina o relógio local de forma contínua, mesmo em períodos onde não é possível consultar servidores de tempo. As características do relógio local são medidas e se tornam conhecidas do NTP, o que torna possível que ele funcione dessa forma. O arquivo indicado pela chave driftfile (geralmente /var/lib/ntp/ntp.drift) na configuração armazena o erro esperado de freqüência para o relógio. Algumas características importantes desse algoritmo:
Segurança no NTPPor segurança no contexto da Tecnologia da Informação entende-se basicamente garantir quatro propriedades da informação: integridade, disponibilidade, autenticidade e confidencialidade. Os algoritmos vistos anteriormente, aliados à correta configuração do sistema, com um número suficiente de fontes de tempo com referências primárias independentes, garantem de forma satisfatória a integridade e disponibilidade do serviço de tempo. Os algoritmos de criptografia do NTP visam garantir a autenticidade da informação. Ou seja, têm o objetivo de assegurar ao cliente que o servidor é quem ele diz ser. A confidencialidade não é considerada um problema no contexto do NTP. Ou seja, a informação de tempo sempre trafega na rede de forma aberta, sem criptografia, mesmo quando uma assinatura cifrada é utilizada para garantir a autenticidade da informação. Isso é dessa forma porque o tempo é uma informação pública, não há razão para esconder essa informação e trabalhar com a informação de tempo cifrada demandaria tempo tanto do servidor quando do cliente e degradaria o desempenho do sistema, fazendo-o menos exato. Existem basicamente dois métodos no NTP para realizar a autenticação, chave simétrica (symmetric key) e chave pública (autokey). Servidores de NTP públicosServidores públicos de NTP podem ser encontrados em:
Referências
Ligações externasServiço NTP e informações (em português)
Hora Legal Brasileira
Hora Legal Portuguesa
Pesquisa sobre o uso do NTP na Internet (em português)
Projeto NTP (em inglês)
Projeto NTP - normas (inglês)
Pesquisas sobre o NTP (inglês)
Informações sobre padrões de tempo (inglês)
Outros (inglês)
|