Network Time Protocol

Un article de Wikipédia, l'encyclopédie libre.

Network Time Protocol (NTP, protocole horaire en réseau), est un protocole permettant de synchroniser les horloges des systèmes informatiques à travers un réseau de paquets, dont la latence est variable. Un serveur NTP accepte par défaut les connexions sur le port UDP 123.

Sommaire

[modifier] Synchronisation des horloges

Les ordinateurs utilisent des horloges au quartz et elles ont la fâcheuse tendance à dériver au bout d'un certains temps, pour certaines de plusieurs secondes par jour et cela de façon totalement aléatoire.

Avec le développement des réseaux informatiques, la synchronisation des horloges des systèmes informatiques communicants entre eux est devenue obligatoire. Certains domaines ont absolument besoin d'avoir un temps de référence, on peut citer notamment :

  • le contrôle aérien
  • les échanges commerciaux
  • les transactions journalisées des bases de données
  • la diffusion de contenu multimédia en temps-réel, comme pour des vidéoconférences
  • etc.

Sans une bonne synchronisation des horloges de tous les systèmes communicants entre eux, certains services ne sont pas utilisables correctement. C'est ainsi que rapidement, il a été nécessaire de définir des méthodes permettant de synchroniser les horloges sur une heure de référence. Dans le cas de NTP, ce dernier utilise le temps universel coordonné (UTC).

[modifier] Histoire

NTP est un des plus anciens protocoles d'Internet encore en service. Il fut conçu pour offrir une précision inférieure à la seconde dans la synchronisation des horloges et remplace à ce titre le Time protocol (TP) (RFC 868), datant de mai 1983.

C'est le professeur David L. Mills de l'Université du Delaware, qui en septembre 1985 proposa NTP (RFC 958), cette version est une version de développement, elle est à ce titre considérée comme une version 0. Mais le développement de NTP remonte à quelques années auparavant, avec une démonstration en 1979 à la National computer conference (NCC) et sa mise en application quelques années plus tard dans le routeur logiciel Fuzzball, via le protocole de routage HELLO (RFC 891).

NTP a atteint la version 1 en juillet 1988 (RFC 1059). Dans cette première version stable, des filtres et des algorithmes de sélections sont ajoutés (RFC 956), ce qui offre une nette amélioration de la précision.

En octobre 1989, NTP passa en version 2 (RFC 1119), avec notamment l'ajout d'une authentification par clé symétrique (utilisant DES-CBC).

En 1989, Digital Equipment Corporation (DEC) présenta un protocole de synchronisation concurrent, le Digital time synchronization service (DTSS). Selon la communauté développant NTP, le gros défaut de DTSS était que le protocole pouvait dans certains cas avoir une importante perte de précision, car il ne prenait pas en compte la fréquence des horloges. Alors que la communauté autour de DTSS pointait du doigt la mauvaise architecture des algorithmes de correction. C'est ainsi qu'après discussion, il fut décidé que NTP utiliserait l'algorithme de Marzullo, utilisé par DTSS. Cela aboutit au passage à la version 3 de NTP (RFC 1305), en mars 1992. Cette version ajoute également le mode broadcast, aux deux modes déjà existant (client-serveur et symétrique).

Depuis 1994, une nouvelle révision du protocole est en cours. Cette version 4 est très utilisée, mais n'a fait pour l'instant pas l'objet d'une standardisation par une RFC. Les améliorations portent notamment sur :

  • la calibration et la stabilisation des modèles d'horloges du noyau des systèmes d'exploitation
  • la fiabilité
  • la mise en place d'une configuration automatisée
  • la réduction de la taille des échanges
  • l'authentification (avec l'utilisation de la cryptographie à clé publique)

Parallèlement à cela, des travaux sur un nouveau modèle d'horloge pour les noyaux des systèmes d'exploitation, ayant une précision de l'ordre de la nanoseconde, sont également en cours.

[modifier] SNTP

Parallèlement à NTP, une version simplifiée de NTP, Simple network time protocol (SNTP), fut mise au point et fit l'objet de plusieurs RFC : août 1992 (RFC 1361), mars 1995 (RFC 1769), octobre 1996 (RFC 2030) et janvier 2006 (RFC 4330). Moins précis, SNTP n'est destiné à être utilisé que dans des environnements où une précision de l'ordre de la seconde est suffisante.

[modifier] Principe

En plus de définir le protocole réseau permettant de transmettre l'heure de référence, NTP définit une architecture, différentes méthodes et algorithmes visant à limiter au maximum la dérive par rapport à cette heure de référence, dû au temps de transmission.

[modifier] Ce que ne fait pas NTP

L'heure de référence fournie par NTP est UTC, à ce titre, il ne s'occupe pas :

Cela est du ressort du système d'exploitation, qui suivant l'endroit où l'administrateur a déclaré que l'ordinateur se trouvait, doit effectuer les corrections adéquates pour se caler sur l'heure légale.

Aucun mécanisme de chiffrement n'est fourni, les messages NTP circulent en clair sur le réseau.

[modifier] Architecture

Architecture des serveurs et clients NTP
Architecture des serveurs et clients NTP

Le réseau NTP est composé :

  • de récepteurs récupérant l'heure de référence par radios, câbles, satellites ou directement depuis une horloge atomique.
  • de serveurs de temps récupérant l'heure de référence auprès des récepteurs ou bien auprès d'autres serveurs de temps
  • de clients récupérant l'heure de référence auprès des serveurs de temps

Tous ces systèmes sont organisés de façon hiérarchique, dont chaque couche ou niveau est appelé une strate. Chacune contient des serveurs de temps se synchronisant, soit avec ceux de la strate supérieure (dans le cas de la strate 1 il s'agit des récepteurs), soit avec un serveur du même niveau. Les postes clients apparaissent à partir de la strate 4. Il peut y avoir jusqu'à 15 strates, mais dans la pratique, il n'y en a pas plus de 5. Ainsi, tous les systèmes sont clients et serveurs, à l'exception de ceux des strates 1 et 15. La redondance des serveurs et leur organisation permet une répartition de la charge et ainsi la fiabilité du réseau.

En 1999, on estime[1] le nombre :

  • de serveurs de strate 1 à environ 300
  • de serveurs de strate 2 à environ 20 000
  • de serveurs de strate 3 à environ 80 000
  • de clients connectés sur Internet à environ 175 000

En décembre 2006, le nombre de clients NTP est très certainement de plusieurs dizaines de millions, du fait que les systèmes d'exploitations actuels, que ce soit Windows XP, Mac OS X, ainsi que les interfaces graphiques des systèmes UNIX (KDE ou GNOME, notamment), permettent d'activer simplement, dans la boîte de dialogue de réglage de l'heure, le client NTP livré avec le système.

Il serait bon d'ailleurs d'éviter d'utiliser les configurations par défaut, c'est-à-dire pratiquement le même serveur NTP pour toute une classe de machines, afin d'éviter la surcharge de ces serveurs. Lire à ce sujet comment choisir un (ou des) serveur(s) NTP (cf. lien en bas de page).

[modifier] Implémentation

Le temps est défini comme un entier de 64 bits :

  • les 32 bits de poids forts correspondent au nombre de secondes écoulées depuis le 1er janvier 1900 à minuit
  • les 32 bits restant représentent la fraction d'une seconde

L'échelle de temps est donc de 232 secondes (soit un peu plus de 136 ans), avec une résolution théorique de 2-32 seconde (ce qui correspond à un peu moins de 0,233 nanosecondes).

NTP utilise l'algorithme de Marzullo et prend en charge l'ajout de secondes additionnelles. La version 4 du protocole permet de maintenir le temps d'une machine avec une précision de 10 ms à travers Internet et peut permettre une précision de 200 µs sur des réseaux locaux.

Bien que NTP soit le plus souvent utilisé avec UDP, il peut aussi l'être avec TCP.

[modifier] Référence

  1. (en) A Survey of the NTP Network

[modifier] Liens externes