Skip to main content

Network Time Protocol

Descriptif

Le protocole NTP permet la synchronisation de la date et l’heure entre un serveur et un client. L’exactitude de la date est importante pour différentes raisons donc la géolocalisation, la validation des certificats SSL (surtout pour le bon fonctionnement de HTTPS mais aussi pour toute application utilisant SSL à des fins d’encryption et d’authentification), l’exécution de tâches planifiées pour assurer le bon fonctionnement de vos appareils (surtout les appareils donc la batterie de CMOS est épuisée), votre alarme de réveil-matin, vos rappels de calendrier.

Fonctionnement

Ports et protocole IP

NTP est généralement utilisé en UDP au port 123. Quoi qu’il soit aussi possible de synchroniser une horloge en TCP, UDP est priorisé pour sa plus faible latence ainsi que le fait qu’il s’agisse d’un petit échange de données.

Déroulement

Le fonctionnement de ce protocole est simple. Le client envoie une demande à un serveur en lui mentionnant son heure actuelle. Le serveur nous répond ensuite avec sa propre source d’horloge. Il peut s’agir d’un autre serveur, d’un appareil tel qu’une horloge atomique ou l’heure récupérée de satellites GPS à titre d’exemples. Il indique aussi dans sa réponse l’heure à laquelle la requête a été reçue et l’heure à laquelle il a émis sa réponse. À la lumière de toutes ces informations, le client calcule le temps total de la communication et la différence entre son heure et celle du serveur pour ajuster la sienne en conséquence.

Voici un exemple du contenu important de la réponse d'une requête NTP envoyée au serveur de temps time.apple.com le 11 novembre 2024 à 19h05 tel qu'affiché par Wireshark :

[Delta Time : 0.0214448321 secondes]
Peer Clock Stratum: primary reference (1)
Reference ID : Unidentified Reference source 'GPSs'
Reference Timestamp: Nov 11, 2024 19:05:53.605522459 UTC
Origin Timestamp: Nov 11, 2024 19:05:53.8893806650 UTC
Receive Timestamp: Nov 11, 2024 19:05:53.897116184 UTC
Transmit Timestamp: Nov 11, 2024 19:05:53.897129943 UTC

Hiérarchie

En NTP, chaque serveur annonce son “stratum” qui correspond généralement à son niveau hiérarchique entre une source de temps fiable et lui-même. Chaque saut entre un serveur de stratum 1 et le serveur consulté augmente le stratum annoncé de 1. Par exemple, un serveur se fiant à un serveur de stratum 2 annoncerait un stratum 3. Notez bien que l’on peut configurer le stratum que l’on veut mais il est bonne pratique de laisser le calcul s’effectuer automatiquement. Le stratum le plus élevé qui sera accepté par un client NTP est stratum 15. La réponse de tout serveur annonçant un stratum supérieur à 15 sera rejetée/ignorée.