Network Time Protocol (NTP) : définition et fonctionnement
Les horloges des systèmes informatiques constituent un outil précieux pour ceux qui souhaitent connaître l’heure mais n’ont ni montre ni smartphone à portée de main. L’utilité de l’heure du système pour l’utilisateur est de notoriété publique, mais le fait que l’ordinateur en ait lui-même besoin est relativement peu connu. Les horodatages jouent en effet un rôle central pour tout ce qui a trait à la communication entre deux systèmes ou plus, mais aussi et surtout pour assurer le bon déroulement des processus ou des services multi-réseaux. Le Network Time Protocol (NTP) a été édité en 1985 afin d’éviter les complications dans le système avec les heures non synchronisées.
Qu’est-ce que le NTP (Network Time Protocol) ?
Le Network Time Protocol (NTP) est le résultat des travaux de développement de David L. Mills, Professeur à l’Université du Delaware. La première spécification officielle du protocole, qui fait partie de la suite des protocoles Internet, a été publiée en septembre 1985 dans la RFC 958. Le NTP y est défini comme un protocole de synchronisation de plusieurs horloges d’un réseau à l’aide d’un ensemble de clients et de serveurs distribués. Le Time Protocol ainsi que l’ICMP Timestamp message, dont les fonctionnalités ont été réunies dans le Network Time Protocol, sont considérés comme ses précurseurs. Le NTP est basé sur le User Datagram Protocol UDP qui permet un transport des données sans connexion. Le numéro de port UDP prévu à cet effet est 123.
Le NTP met à disposition des mécanismes de protocole fondamentaux et nécessaires à la synchronisation de l’heure de différents systèmes jusqu’à une précision de l’ordre de la nanoseconde. D’autre part, il contient des dispositions visant à spécifier la précision et les sources d’erreur possibles de l’horloge système locale ainsi que les propriétés de l’heure de référence. Le protocole fixe toutefois uniquement le type de présentation des données et les formats de messages, sans fournir personnellement d’algorithmes de synchronisation et de filtrage.
Le NTP (Network Time Protocol) est un protocole décrit dans la RFC 958 visant à synchroniser les horloges des systèmes informatiques. Il repose sur le protocole UDP sans connexion (port 123) et fait partie de la suite des protocoles Internet. Pour le processus de synchronisation, NTP s’appuie sur le Coordinated Universal Time (UTC) que les différents clients et serveurs obtiennent au sein d’un système hiérarchique.
Comment fonctionne le NTP ?
Afin de synchroniser les horloges des ordinateurs à la nanoseconde près, le Network Time Protocol utilise le Coordinated Universal Time, appelé temps universel coordonné (UTC), applicable uniformément depuis 1972. Ce dernier peut être déterminé par diverses méthodes, notamment à l’aide de systèmes radio et satellite. Les services importants tels que le Global Positioning System (GPS ; « système mondial de positionnement ») sont équipés de récepteurs spécifiques permettant de capter les signaux correspondants. Étant donné qu’il ne serait ni rentable ni réalisable d’équiper chaque ordinateur de tels récepteurs, il existe par ailleurs des serveurs primaires (Primary Time Servers) disposant également d’un récepteur UTC. À travers des protocoles comme le NTP, ces serveurs procèdent alors à la synchronisation des horloges des ordinateurs dans leur réseau.
Ce processus de synchronisation dispose de différents niveaux hiérarchiques symbolisant la distance par rapport à la source UTC, que l’on appelle également stratum (lat. pour « couches ») ou strate. L’ensemble des appareils techniques obtenant l’heure à partir d’un serveur primaire ou d’un système de navigation par satellite sont classés dans la catégorie stratum 0. Les horloges atomiques ou radiopilotées en font notamment partie. Un ordinateur obtenant l’UTC à partir d’une telle horloge atomique ou radiopilotée entre dans la catégorie stratum 1 et ainsi de suite. Chaque système est ainsi à la fois client du stratum précédent et serveur des systèmes du stratum suivant (tout du moins en théorie).
Lors de la synchronisation NTP, les fluctuations de temps à court terme qui sont liées à des facteurs locaux sont résolues par différents algorithmes : les écarts locaux sont par exemple compensés par des procédures de mesure du Round Trip Time (temps nécessaire à un paquet de données pour effectuer un aller-retour entre la source et la destination) sur la base de l’algorithme de Berkeley. Pour corriger les erreurs dans l’environnement processeur, on utilise notamment l’algorithme de Marzullo.
Aperçu des principales caractéristiques du NTP
Les caractéristiques de base du Network Time Protocol, qui en est à sa quatrième version (NTPv4), peuvent être résumées comme suit :
- Le NTP prévoit une heure de référence qui sert de repère pour l’ensemble des processus de synchronisation. Toutes les horloges sont donc alignées sur cette horloge/heure. Dès le départ, il a été décidé de baser le protocole sur le temps universel coordonné (UTC), reconnu comme base de temps universelle.
- Le NTP est un protocole tolérant les défauts et recherchant automatiquement les meilleures sources de temps pour la synchronisation. Afin de diminuer les erreurs accumulées, il est également possible de combiner plusieurs sources pour atteindre ce but. Dans la mesure du possible, le Network Time Protocol identifie et ignore les sources de temps fournissant des valeurs nettement différentes, que ce soit de façon temporaire ou durable.
- Le NTP est hautement évolutif : chaque réseau de synchronisation peut comporter plusieurs heures de référence. D’autre part, chaque nœud de réseau est en mesure de diffuser les informations temporelles dans une structure hiérarchique de façon bidirectionnelle (de point à point) ou unidirectionnelle (dans une seule direction).
- Le NTP est extrêmement précis. La possibilité de sélectionner le meilleur candidat pour la synchronisation permet une résolution de l’ordre de la nanoseconde (env. 2-32 secondes).
- Le NTP peut combler les problèmes de connexion temporaires du réseau : pour ce faire, le protocole utilise des valeurs de mesure antérieures afin de déterminer l’heure actuelle ou les écarts.
Quels systèmes d’exploitation supportent le protocole NTP ?
Initialement, le Network Time Protocol a été développé spécifiquement pour les systèmes UNIX dans lesquels ce protocole est toujours implémenté sous la forme du processus d’arrière-plan (Daemons) NTPd. Ce dernier sert aussi bien de client pouvant synchroniser le système local que de serveur NTP pour d’autres systèmes. Pendant longtemps, ce service a par ailleurs été le premier choix parmi les distributions Linux pour l’implémentation du NTP. Pour la synchronisation, les versions plus récentes se basent néanmoins de plus en plus sur l’application client timesyncd qui fait partie du gestionnaire de système. Aujourd’hui, les systèmes d’exploitation macOS et Windows ont également recours au Network Time Protocol afin d’obtenir l’UTC via Internet avec des processus système simples sans logiciel supplémentaire.
Quelles sont les alternatives au Network Time Protocol ?
Bien que le NTP soit considéré comme le standard en matière de synchronisation de l’heure dans le monde, il n’est pas infaillible, notamment en ce qui concerne la sécurité. Étant basé sur un protocole UDP sans connexion, un hacker peut par exemple envoyer à un serveur NTP des paquets avec une fausse adresse d’expéditeur (en usurpant une adresse IP. Ce faisant, l’adresse du système attaqué est choisie comme adresse d’expéditeur. Le serveur renvoie sa réponse – nettement plus conséquente que la demande envoyée par le hacker – à l’expéditeur supposé, à savoir le système de la victime. Si le hacker procède de cette façon à grande échelle, en envoyant un nombre important de fausses requêtes de ce type, il peut surcharger le système ciblé - voir également notre article DoS et DDoS : Présentation des types d’attaques.
En conséquence, différents projets ont été consacrés au développement de solutions alternatives plus sûres susceptibles d’être utilisées en remplacement des habituelles solutions client/serveur NTP :
- tlsdate : tlsdate a été édité en 2012 par Jacob Appelbaum et publié sur GitHub. Pour le transport des données, tlsdate utilise le protocole TCP plutôt que UDP. Ce service procède au cryptage de la structure de connexion via TLS afin d’empêcher toute manipulation des paquets de données. Par ailleurs, tlsdate utilise les fonctionnalités de TLS, « ServerHello » et « ClientHello », afin de synchroniser l’heure. Cette alternative au NTP fonctionne toutefois uniquement avec TLS 1.1 et 1.2.
- Ntimed : Ntimed est une implémentation du NTP qui se concentre spécifiquement sur la sécurité et la performance. À cette fin, le code de programme de ntpd a été intégré à Ntimed dans une version épurée et optimisée. Le pack logiciel, composé des fichiers client, serveur et maître, est en libre accès dans le registre officiel Ntimed de GitHub.
- NTPsec : NTPsec est également une variante du service NTPd classique. Plus de 175 000 lignes de code ont toutefois été économisées par rapport à l’original. L’équipe de développeurs a remplacé un grand nombre de fonctions string telles que « strcpy », « sprintf » ou « gets » par des équivalents plus sûrs. Cette différence et d’autres sont détaillées sur le site Internet officiel du projet open source.
En plus des alternatives logicielles, on trouve également le Precision Time Protocol (PTP). Contrairement au Network Time Protocol, ce protocole réseau pour les systèmes Linux se concentre explicitement sur une précision particulièrement élevée de la synchronisation. Dans le cas de PTP, cette précision est de l’ordre de la microseconde, dépassant même ainsi la précision de NTP. Ce protocole pose de plus des exigences minimales en termes de performance du processeur et de bande passante du réseau, ce qui explique pourquoi il est des mieux adaptés aux appareils simples et peu coûteux.
Même si l’on dispose d’une certaine liberté dans le choix des protocoles ou des services de synchronisation, la synchronisation est en soi impérativement nécessaire à la fonctionnalité de différentes applications réseau (notamment sur Internet). À titre d’exemple, les transactions de base de données ou la communication par email peuvent rapidement se solder par un échec lorsque le client et le serveur ne sont pas sur la même longueur d’onde du point de vue de la technologie de synchronisation du temps. Dans le contrôle aérien, l’exactitude de l’heure du système est encore plus importante, puisque les valeurs déterminées à la microseconde près sont garantes d’un fonctionnement sans heurts.
pool.NTP.org : le cluster Internet de milliers de serveurs NTP
Le projet pool.NTP.org initié par Adrian von Bidder et dirigé depuis juillet 2005 par Ask Bjørn Hansen porte sur un immense cluster virtuel composé de plus de 4 000 serveurs d'horloge NTP. La majeure partie des serveurs distribués dans le monde et utilisés par plusieurs millions de systèmes se trouve en Europe. La croissance constante du pool de NTP au fil du temps est due aux efforts de la communauté de ce projet réussi : toute personne disposant d’un serveur avec une adresse IP statique et connecté en permanence à Internet peut faire enregistrer ce serveur dans le cluster. Malgré une demande grandissante, le service peut donc être utilisé gratuitement et sans restrictions jusqu’à aujourd’hui.
Les utilisateurs UNIX/Linux peuvent ainsi utiliser le pool NTP
Les personnes souhaitant utiliser le pool de serveurs NTP afin de synchroniser l’heure de leurs appareils personnels peuvent le faire sous UNIX ou Linux avec le service NTPd. Pour ce faire, il suffit de procéder aux réglages suivants dans le fichier de dérive NTP :
driftfile /var/lib/NTP/NTP.drift
server 0.pool.NTP.org
server 1.pool.NTP.org
server 2.pool.NTP.org
server 3.pool.NTP.org
Le seul prérequis est que l’heure du système soit paramétrée au moins approximativement. Afin de consulter le statut du service NTPd, vous devrez saisir la commande suivante après quelques minutes :
NTPq -pn
Le client NTP affiche une liste des adresses IP de serveurs aléatoires tirés du pool. Si l’un de ces serveurs est marqué d’une étoile (*), l’heure du système est à présent synchronisée de la façon désirée.
Paramétrer pool.NTP.org comme source de serveurs de temps sous Windows
Le Network Time Protocol est aujourd’hui supporté automatiquement par Windows et les utilisateurs de systèmes Microsoft peuvent donc accéder à tout moment au pool NTP. Il suffit d’inscrire une plage d’adresse de pool.NTP.org adaptée dans les paramètres de l’heure Internet (par exemple pour la France « fr.pool.NTP.org »). Pour ce faire, ouvrez le panneau de configuration et sélectionnez la rubrique « Date et heure » :
En passant par l’onglet « Heure Internet », vous accédez alors au menu du serveur de temps dans lequel vous pouvez insérer l’adresse du serveur NTP choisi dans le pool de pool.NTP.org :
Une fois les modifications effectuées avec succès, Windows adapte l’horloge du système à la prochaine synchronisation :