Le Protocole d'Heure Réseau (Network Time Protocol ou NTP) est un protocole qui permet de synchroniser, via un réseau informatique, l'horloge locale d'ordinateurs sur une référence d'heure.
NTP est un protocole assez ancien. La première version v0, formalisée dans la RFC 958, date de septembre 1985. Dès le début, ce protocole fut conçu pour offrir une précision de synchronisation inférieure à la seconde. Par rapport au service « Time Protocol » qui offre un service d'heure sans proposer une infrastructure, le projet NTP propose une solution globale et universelle de synchronisation qui est utilisable dans le monde entier.
La version 3 de NTP est la plus répandue à ce jour. Elle est formalisée par la RFC 1305 et a le statut « Draft Standard(en) » c'est-à-dire « spécification finale », elle spécifie plusieurs aspects :
la description du protocole réseau ;
les modes de fonctionnement ;
les algorithmes à mettre en place dans les machines.
La mise au point de ce protocole et des algorithmes a été menée de pair avec le développement d'un logiciel conforme à ces spécifications. De ce fait, cette réalisation fait office de référence dans le domaine et est appelée « logiciel NTP » même si d'autres solutions existent. Ces travaux ont été réalisés en grande partie à l'Université du Delaware grâce au professeur David L. Mills et à une importante équipe de bénévoles.
La version 4 de NTP est une révision importante publiée dans la RFC 5905 en juin 2010.
Aussitôt après la parution de la version 3 de NTP, une version simplifiée est apparue, appelée « Simple Network Time Protocol » (SNTP) qui a également fait l'objet de plusieurs RFC. Par rapport à NTP, cette version est simplifiée dans le sens qu'elle ne spécifie pas les algorithmes à mettre en place dans les machines.
Présentation générale de NTP
Le NTP est un protocole permettant de synchroniser l'horloge d'un ordinateur avec celle d'un serveur de référence. NTP est un protocole basé sur UDP et utilise le port 123.
Schéma de l'architecture d'un réseau maître NTP (Network Time Protocol) typique.
Les flèches jaunes indiquent une connexion directe dédiée entre des horloges de hautes précisions (confère la page dédiée aux horloges atomiques) et entre des serveurs informatiques de diffusions maîtres ; les flèches rouges indiquent une connexion via un réseau informatique.
Ce schéma doit être compris de façon très large et très souple : par exemple un nœud de stratum 2 peut très bien être à son tour le serveur d'une université pour synchroniser les PC (ou ordinateurs personnels) de plusieurs milliers d'étudiants. Dans ce cas, il est peu probable que les étudiants veuillent synchroniser deux à deux leurs PC (ou ordinateurs personnels), sauf peut-être dans des cas particuliers où les étudiants souhaitent pouvoir continuer à échanger des données datées, même si le serveur de l'université vient à tomber en panne, est désactivé ou est inaccessible à l'instant voulu.
la diffusionverticale arborescente de proche en proche d'une heure de référence à partir d'une ou plusieurs machines racines garantes d'une grande précision. Dans cette arborescence, chaque nœud choisit parmi ses nœuds parents, celui qui présente les meilleures garanties de qualité et hérite au passage d'un attribut nommé stratum qu'il transmet à ses descendants. Les machines de stratum 1 sont les machines racines, et à chaque traversée d'un nœud ce nombre augmente d'une unité. Ce stratum est une mesure de la distance d'un nœud aux machines racines, il est considéré comme un indicateur de la qualité de synchronisation qu'une machine donnée peut offrir à ses descendants.
la diffusion latérale à des machines paires d'une heure commune. Cette diffusion vient en complément de la précédente; elle permet à ces machines de partager une référence de temps qui leur sont commune. Cette diffusion améliore la résilience de cette architecture NTP dans le sens où elle permet de suppléer une déficience locale/temporaire de connectivité vers les machines racines, voire de permettre à un groupe de machines de conserver entre elles une même référence relative en l'absence de machines racines.
Dans la terminologie NTP, les serveurs de stratum 1 sont appelés serveurs primaires, et les autres sont appelés serveurs secondaires.
Chaque nœud de cette architecture doit être configuré en lui indiquant au minimum quels sont ses serveurs parents et/ou collatéraux. C'est à la charge de chaque utilisateur de réaliser localement cette configuration. C'est cette agrégation de configurations qui, de proche en proche, crée le réseau NTP, il n'est pas pré-existant ni même configuré de façon centralisée. Cette architecture est flexible, extensible et robuste, mais c’est à la charge des utilisateurs d’y contribuer.
Méthodes pour la diffusion de l'heure
La diffusion de l'heure est basée :
sur un paradigme du type « client/serveur » pour la diffusion verticale :
un nœud « serveur » répond aux demandes d'heure émises par un nœud « client » ;
les parents sont les serveurs, les enfants sont les clients ;
en opérant dans le mode « serveur », un nœud annonce son désir de synchroniser ;
en opérant dans le mode « client », un nœud annonce son désir d’être synchronisé ;
le mode d'adressage « unicast » est utilisé pour transférer les messages de demande et de réponse ;
sur un paradigme du type « symétrique actif/passif » pour la diffusion latérale :
un nœud « symétrique passif » répond aux demandes d'heure émises par un nœud « symétrique actif » ;
ce paradigme est proche du précédent avec la différence suivante : une fois la demande initiale émise, « serveur » et « client » échangent leur rôle tour à tour, la réponse de l'un devient une demande pour l'autre ;
en opérant dans le mode « symétrique », aussi bien passif qu’actif, un nœud annonce son désir de synchroniser et d’être synchronisé ;
comme précédemment le mode d'adressage « unicast » est utilisé pour transférer les messages de demande et de réponse ;
sur un paradigme du type « broadcast » pour la diffusion locale :
un nœud émet spontanément et périodiquement des messages de l'heure courante à destination de voisins d'opportunité proches, un peu à la manière d’une horloge parlante sans se préoccuper de savoir si son information d'heure sera utilisée ;
en opérant dans ce mode, un nœud annonce son désir de synchroniser ses voisins ;
le mode d'adressage « broadcast » est utilisé pour transférer ces messages horaires ; de par ce fait, et également parce que par défaut les routeurs ne routent pas les messages « broadcast », cette méthode de diffusion de l'heure ne concerne que les machines d'un même réseau local.
Partie messagerie
La messagerie NTP prévoit :
des messages pour qu'un client interroge un serveur et que celui-ci lui retourne l'heure courante ;
des messages de service pour interroger un client donné sur son état interne.
Lors de la parution de nouvelles versions de NTP, la structure des nouveaux messages est formée en agrégeant les informations nouvelles à la suite de celle des messages de version précédente. Cette façon de procéder permet l'interopérabilité des différentes versions ce qui facilite la migration globale du parc de machines d'une version ancienne vers une nouvelle.
Partie algorithmie
L'algorithmie NTP prévoit pour chaque client des méthodes :
pour calculer la période d'interrogation du ou des serveurs ;
pour calculer l'écart de son heure locale avec celle d'un serveur donné ;
pour calculer la durée de transit des messages sur le réseau ;
pour choisir le serveur qui présente les meilleures garanties de qualité, et calculer ainsi son stratum local ;
pour filtrer les écarts et calculer les corrections temps/fréquence à appliquer sur son horloge locale ;