Les ordinateurs utilisent des horloges au quartz et elles ont la fâcheuse tendance à dériver au bout d'un certain 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 nécessaire. Certains domaines ont absolument besoin d'avoir un temps de référence, on peut citer notamment :
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).
Le message de demande d'heure envoyé par un client vers un serveur et celui pour la réponse ont la même structure. Celle-ci est schématisée ci-dessous, elle correspond à la version 3 de NTP, mais le principe général décrit ci-dessous est conservé au fil des versions; les informations principales utilisées dans ce message pour calculer les écarts d'heure entre client et serveur sont les suivantes :
Les autres informations contenues dans ce message sont utilisées à des fins de gestion; leur usage n'est pas détaillé dans cet article, on pourra se reporter à la RFC 1305 pour plus de détails.
La façon dont client et serveur gèrent ces informations est illustrée sur le schéma ci-dessous :
Le client peut alors calculer le délai aller/retour δ de ces 2 messages ainsi que l'écart θ entre son horloge locale et celle du serveur :
délai δ aller/retour | écart θ entre les horloges | |
---|---|---|
Client |
![]() |
![]() |
Serveur | aucun calcul | aucun calcul |
Plus court est le délai δ, meilleure est la précision avec laquelle est connu l'écart θ entre les deux horloges.
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, c'est ce que montre l'image ci-dessous.
Chacun des nœuds « Actif » et « Passif » peut alors calculer le délai aller/retour des messages et l'écart entre son horloge locale et celle du nœud opposé :
délai δ aller/retour | écart θ entre les horloges | |
---|---|---|
Actif |
![]() |
![]() |
Passif |
![]() |
![]() |
Et de la même façon que précédemment, de façon symétrique pour chacun des deux nœuds, plus court est le délai δ et meilleure est la précision avec laquelle est connue l'écart <θ entre les deux horloges.
Le nœud émetteur du message renseigne le champ TT avec l'heure courante T1 indiquée par son horloge locale. Le récepteur de ce message utilise cette heure comme heure locale en retranchant au préalable le délai estimé de transmission du message.