Internet à besoin d'être à l'heure, comme vous, ou plus précisément vos ordinateurs et smartphones. Mais aussi beaucoup d'autres ordinateurs :
- Ceux des banques, parce que le cours d'une devise doit être le même partout dans le monde à un instant donné.
- Ceux des péages d'autoroute, pour vous facturer !
- Ceux des centres de diffusion radio et télévision
- La poste, pour prouver que vous avez envoyer votre courrier avant une certaine heure.
- etc.
L'horodatage est le processus qui assigne une heure à un événement (impression d'un ticket de caisse, passage d'un péage, décollage d'un avion, etc.).
La "norme" concernant la synchronisation horaire entre ordinateurs, le protocol NTP, pour Network Time Protocol (RFC 958), est proposée en septembre 1985, pour sa version 1. Il sera amélioré au cours du temps (RFC1059, RFC1119, RFC1305) pour arriver à la version 4 (RFC5905, juin 2010), ce qui montre bien les préoccupations de la communauté informatique à son égard.
C'est un protocole qui s'est raffiné et compliqué avec le temps (sic), on peut le deviner en regardant le dessin fait à la main représentant les prémisses du réseau Internet en 1985.
L'état de "l'internet" en 1985
L'étalon "temps"
Il n'est pas possible de calculer le temps qui passe, on peut juste établir une succession d’événements, comme par exemple le déplacement de l'aiguille des secondes sur une montre, puis les compter, et considérer cela comme le temps qui passe.
Les horloges les plus précises sont atomiques car elles génèrent des impulsions à partir de la désintégration de noyaux d'atomes, le plus souvent de Cesium 133, car la définition de la seconde est basée dessus :
La seconde est la durée de 9 192 631 770 périodes de la radiation correspondant à la transition entre les deux niveaux hyperfins de l’état fondamental de l’atome de césium 133
On connait d'autres types d'horloges, moins précises, mais souvent beaucoup plus économiques, comme celle à Rubidium ou à quartz (comme dans nos montres ou smartphones).
La référence UTC
Sans rentrer dans les détails, plusieurs centaines d'horloges atomiques à travers le monde contribuent à en garder une "à la bonne heure" et on va la considérer comme l'horloge maître de toutes les autres. C'est le travail du laboratoire temps-fréquence du Bureau International des Poids et Mesures (BIPM, à Sèvres) de maintenir cette horloge étalon pour le reste du monde.
Cette horloge fourni l'heure UTC : Temps Universel Coordonné.
Les différentes façon d'accéder au temps atomique
Il existe plusieurs manières, dont :
- en écoutant les satellites (GPS, Glonass, Galileo, etc.)
- en se connectant au réseau de téléphonie mobile CDMA (en Amériques, Asie).
- en écoutant la radio (WWV aux USA, DCF77 en Europe, BPM en Chine, etc.)
Le CDMA est bien parce qu'une antenne intérieure suffit là où la téléphonie 3G passe. Par contre il est peu probable que le protocole survive au delà de 2020 (remplacement par la 4G et la 5G).
La radio existe depuis des décennie, ce service risque lui aussi de cesser un jour, mais pour l'instant, il est toujours bel et bien utilisé.
Seul le satellite est fiable, à condition d'avoir une visibilité vers le ciel, ce qui peut être un problème en milieu urbain dense.
NTP : définition des strates
Pour le protocole NTP les serveurs de temps sont divisés en strates :
- Strate 0 : regroupent les équipement capables de capter les signaux émis par les émetteurs listés au chapitre précédent. Ce ne sont donc pas des serveurs en eux-même, car ils sont toujours reliés à un serveur de strate 1.
- Strate 1 : se sont des serveurs de temps reliés à un équipement de strate 0.
- Strate 2 : les serveurs se synchronisant sur un serveur de strate 1
- Strate 3 : les serveurs se synchronisant sur un serveur de strate 2 etc.
Plus la strate du serveur de temps est élevée, moins il est précis vis à vis du temps de référence. On peut espérer 10 microsecondes d'écart avec le temps UTC pour un strate 1, et rajouter 0,5 à 100 ms par strate supplémentaire, jusqu'à la seizième.
NTP : calcul du décalage délais d'aller-retour
Puisque chaque équipement sait (par rapport à sa propre échelle de temps) quand il à envoyé une requête et reçu la réponse, on peut estimer le décalage entre les deux horloges et le temps mis pour les informations à faire l'aller-retour entre le client (qui demande l'heure) et le serveur NTP (qui est censé être à l'heure).
Ces données sont sujets à des analyses statistiques et filtrées avant de modifier la cadence de l'horloge dans le but de réduire le décalage au minimum.
NTP : contrôle de l'horloge
Le décalage peut être positif ou négatif : l'heure indiquée par l'horloge du client est soit en avance soit en retard par rapport à l'étalon.
- si le client retard, il faut donc avancer son horloge.
- si l'horloge du client avance, il faut la retarder.
Le premier cas ne pose pas de problème : il suffit d’accélérer légèrement l'horloge, jusqu'à ce qu'elle rattrape son décalage.
Le second cas est plus délicat, car on a pas le droit de reculer dans le temps, sinon plus rien ne marcherait (par exemple on pourrait avoir la date de modification d'un fichier antérieure à sa date de création !).
Donc on utilise une ruse : on ralenti l'horloge...jusqu'à ce retrouver dans le cas 1 !
Le temps reste donc une fonction continue positive.
Comment installer NTP sur PC ou Linux
Sur Windows 10 je recommande le client de Meinberg : il suffit de cliquer sur l'le programme d' installation automatique. Celui ci va installer NTP comme un service Windows qui sera chargé au démarrage du PC. Le client (du client, sic) ntpdq
vous permet de l'interroger :
ntpq> lpeer
remote refid st t when poll reach delay offset jitter
==============================================================================
*pi 84.16.73.33 2 u 45 128 377 0.435 -0.894 0.246
+ntp0.dillydally 193.190.230.65 2 u 53 128 377 5.956 -1.341 0.417
+mail.fangfufu.c 193.190.230.66 2 u 112 128 377 5.476 -1.180 0.149
-78.194.78.49 (m 91.121.88.161 3 u 107 128 377 1.696 -4.133 0.241
-ns1.do.steersne 195.66.241.2 2 u 70 128 377 9.642 0.488 0.195
-mail.redwebonli 17.253.52.125 2 u 41 128 377 20.449 3.998 0.536
ntpq>
ntpq> assoc
ind assid status conf reach auth condition last_event cnt
===========================================================
1 11853 961a yes yes none sys.peer sys_peer 1
2 11854 942a yes yes none candidate sys_peer 2
3 11855 943a yes yes none candidate sys_peer 3
4 11856 931a yes yes none outlier sys_peer 1
5 11857 9324 yes yes none outlier reachable 2
6 11858 9324 yes yes none outlier reachable 2
ntpq>
ntpq> rl
associd=0 status=0618 leap_none, sync_ntp, 1 event, no_sys_peer,
version="ntpd [email protected] Mar 07 16:52:54 (UTC+01:00) 2019 (1)",
processor="x86", system="Windows", leap=00, stratum=3, precision=-22,
rootdelay=11.300, rootdisp=46.991, refid=192.168.0.8,
reftime=e132297c.b14a7741 Sun, Sep 22 2019 19:10:20.692,
clock=e1322c1f.248110f6 Sun, Sep 22 2019 19:21:35.142, peer=11853, tc=7,
mintc=3, offset=-0.802530, frequency=8.140, sys_jitter=0.289849,
clk_jitter=1.369, clk_wander=0.009
ntpq>
ntpq> rl 11853
associd=11853 status=961a conf, reach, sel_sys.peer, 1 event, sys_peer,
srcadr=pi, srcport=123, dstadr=192.168.0.7, dstport=123, leap=00,
stratum=2, precision=-21, rootdelay=10.864, rootdisp=43.152,
refid=84.16.73.33,
reftime=e13224a8.290943aa Sun, Sep 22 2019 18:49:44.160,
rec=e1322bd3.b2a8489d Sun, Sep 22 2019 19:20:19.697, reach=377,
unreach=0, hmode=3, pmode=4, hpoll=7, ppoll=7, headway=0, flash=00 ok,
keyid=0, offset=-0.894, delay=0.435, dispersion=8.255, jitter=0.246,
xleave=0.180,
filtdelay= 0.61 0.54 0.58 0.57 0.63 0.44 0.58 0.47,
filtoffset= -1.35 -1.27 -1.14 -0.99 -0.97 -0.89 -0.89 -0.84,
filtdisp= 0.00 1.95 3.95 5.97 8.00 8.99 9.96 10.97
ntpq>
Lien de téléchargement : https://www.meinbergglobal.com/english/sw/ntp.htm
Pour Linux, il existe un packet, qu'il suffit d'installer en utilisant votre méthode préférée (apt-get install, etc.).
$ apt-cache search ^ntp
ntp - Network Time Protocol daemon and utility programs
ntp-doc - Network Time Protocol documentation
ntpdate - client for setting system time from NTP servers
ntpstat - show network time protocol (ntp) status
Liste des serveurs NTP
Le plus simple c'est d'utiliser des pools existants, par exemple Raspbian NTP utilise la commande dans ntp.conf :
pool 0.debian.pool.ntp.org iburst
pool 1.debian.pool.ntp.org iburst
pool 2.debian.pool.ntp.org iburst
pool 3.debian.pool.ntp.org iburst
Mais peut être que le mieux c'est de choisir un serveur près de chez soit via https://www.pool.ntp.org/zone/europe. Pour la France, ce sera donc :
server 0.fr.pool.ntp.org
server 1.fr.pool.ntp.org
server 2.fr.pool.ntp.org
server 3.fr.pool.ntp.org
Quelques serveurs NTP matériel
Dans le passé, avant 2000, un des problèmes des serveurs NTP était leur capacité à gérer la charge, c'est à dire de répondre à des milliers de clients simultanément. Aujourd'hui, grâce à des processeurs à la fois puissants et peu chers, ainsi qu'une multiplication par 10 voire 100 de la vitesse de l'interface réseau (de 100 Mbits/s à 1 Gbit/s puis 10 Gbit/s) ces problèmes n'existent plus.
Les serveurs NTP ont une durée de vie assez longue, surtout qu'on peut les mettre à jour en remplaçant le type de leur horloge interne, par exemple en passant du quartz au quartz en enceinte thermostatée ou au Rubidium.
Truetime, racheté par Symmetricon racheté par Microsemi racheté par Microchip
EndRun Technologies
Marque USA que je ne connais pas, mais qui à l'aire de proposer de jolis équipements.
Meinberg, des Allemands sérieux
Achetez Européen, ces produits sont d’excellente facture. De plus ils peuvent se synchroniser avec beaucoup de sources différentes, WWV, GPS, GLONASS, DCF77, etc.
Et sans doute plein d'autres. Mais parmi eux, cette page, dédiée aux serveurs NTP sur Raspberry Pi.