Nous pouvons maintenant évoquer l'heure juste, en sachant à peu près de quoi l'on parle. Grâce aux propriétés du césium 133, nous savons fabriquer des horloges de très grande précision : les horloges atomiques. Sauf cas particulier (GPS), nous ne ferons pas intervenir ce que notre bon Albert Einstein a découvert et nommé « principe de la relativité ».
Si grande soit la précision, elle n'est pas parfaite et il faudra donc de temps en temps réajuster. En réalité nous utilisons une moyenne calculée sur un peu plus de 300 horloges atomiques réparties dans le monde. La précision obtenue sera suffisante pour nos besoins. Il nous faut maintenant rendre cette information accessible à qui en a l'utilité sans l'altérer dans le transport. Le transport, ça introduit des parasites et ça prend du temps. Les parasites rendent l'information inutilisable à l'arrivée, le temps de transport introduit un retard qu'il faut savoir évaluer exactement.
Nous ne pouvons pas nous permettre de ne disposer que de l'accès aux horloges de référence pour avoir l'heure. D'abord ces dernières seraient submergées de requêtes, ensuite il faut prévoir le cas où elle seraient injoignables pendant « un certain temps ». Nos machines disposent donc d'une horloge locale à quartz, dont la fonction est de compter le temps qui passe lorsque la machine est éteinte. Lorsqu'elle est en service, c'est un autre dispositif qui prend le relai, piloté par le système d'exploitation. Le système peut bien entendu lire l'heure sur l'horloge à quartz sauvegardée par pile et même la réajuster.
NTP est donc un protocole dont le but est de permettre non seulement d'obtenir l'heure à peu près exacte à un instant T, mais aussi et surtout de permettre au système d'exploitation de calculer le temps qui passe en se basant sur l'horloge locale de la machine, mais en tenant compte de sa dérive pour la corriger le plus finement possible.
Dans le principe général, au réveil du système, il va lire l'horloge matérielle de la machine, puis va, s'il est configuré pour, interroger un serveur sur l'internet qui lui donnera l'heure avec une précision de quelques centaines de millisecondes.
S'il s'agit d'une station de travail classique, qui reste rarement en service plus de 12 heures sans interruptions, il est probable que ceci suffira, la dérive de l'horloge système n'introduisant pas d'erreur significative sur un temps aussi court.
Si l'on a besoin de plus de précision ou si l'on a affaire à un serveur qui peut rester en service plusieurs mois sans interruptions, il faudra mettre en œuvre un système plus sophistiqué capable de piloter l'horloge locale du système en corrigeant sa dérive au fil du temps. La dérive peut varier en fonction de la température, des champs électromagnétiques etc. C'est ici que NTP prendra toute sa dimension.
Avant de passer à la pratique et d'installer ce qu'il faut sur notre machine, voyons un peu comment l'heure « juste » est distribuée sur l'internet.
Quelques centaines de serveurs répartis dans le monde disposent des informations directement issues des horloges atomiques. Ils constituent la référence mondiale du temps. Ces serveurs ne sont pas accessibles au commun des mortels. Ils n'acceptent de distribuer l'information qu'à d'autres serveurs qui effectueront en quelque sorte le relai.
Ces serveurs ne disposent pas d'horloge atomique, mais se synchronisent avec une grande précision sur les serveurs de strate 0 et servent à leur tour de référence pour des serveurs subalternes.
Fonctionnent comme les serveurs de strate 1 à part qu'ils se synchronisent sur la strate 1 et non sur la strate 0. Ce niveau de précision peut être accessible au commun des mortels.
NTP Prévoit 15 strates. Bien entendu, plus on s'éloigne de la strate 0 plus on perd en précision. Nous verrons plus loin que sur la strate 2 il est possible de disposer d'une précision très acceptable pour la plupart des besoins.
Debian fournit un paquetage qui concerne directement le protocole NTP. Il propose un service qui non seulement peut synchroniser l'horloge système à partir d'autres serveurs de temps, mais fournit lui-même un serveur de temps. Autrement dit, sur notre réseau, nous allons pouvoir monter un ou deux serveurs NTP qui serviront à leur tour à synchroniser tous les nœuds de notre réseau.
Il s'agit du paquet ntp
qui nous servira ici pour expérimenter plus en détail le fonctionnement.
Monter un serveur NTP implique que l'on a besoin en permanence d'une horloge précise. Un serveur NTP va générer du trafic vers ses serveurs de référence, ce qui va contribuer à leur charge. A chaque démarrage du serveur, ce trafic est augmenté par le fait que le système doit reprendre ses repaires. A monter donc sur une machine qui reste en service 24/7 et uniquement si c'est bien utile.
Pour mettre à l'heure un poste de travail, ntpdate
, une commande spécifique distribuée dans un paquet du même nom, suffira largement dans la plupart des cas. Elle se contente de mettre ponctuellement l'horloge système à l'heure, par exemple lorsque l'interface réseau est activée.
Sur un réseau comportant une cinquantaine d'hôtes, il sera pertinent d'installer un ou deux serveurs de temps et de synchroniser les postes de travail sur ces serveurs en utilisant ntpdate