Arbre de dépendance NTP : qui suit qui, et sur quelle horloge

Par Richard DEMONGEOT · Campagne du 2026-09-11 · Reconstitution mesurée, depuis six réseaux autonomes · Données CC BY 4.0

Chaque serveur NTP publie, dans chacune de ses réponses, un champ de quatre octets appelé refid. Un stratum 1 y met le nom de son horloge ; un stratum 2 ou plus y met l'adresse de l'amont qu'il suit. C'est la seule façon publique de reconstituer qui dépend de qui — et donc de voir si la diversité affichée d'un pays est réelle ou si tout le monde suit la même pendule.

Cette page reconstitue une photo, pas une architecture. Elle ne dit pas comment un serveur est configuré : elle dit quel amont il suivait à l'instant précis où il nous a répondu. Pour les décomptes par pays et la concentration des opérateurs, voir la carte du NTP et du NTS.

4647
serveurs joignables
910
à horloge locale
3531
dont l'amont est visible
107
dépendants du plus suivi

Ces nombres sont des ordres de grandeur : le refid ne révèle qu'un amont par serveur, et le décompte est reconstitué depuis la base — à une ou deux unités près du jeu de données publié.

Cette page ne détaille que les dix amonts les plus suivis, et il faut lire ce qu'elle ne montre pas : sur 1 096 amonts distincts observés, 51,1 % (560) n'ont qu'un seul serveur NTP qui les suit.

Autrement dit : la concentration n'est pas là. Les dix plus gros ne portent que 13,5 % des 3 532 dépendances visibles — le reste est une poussière d'amonts à un ou deux suiveurs. Le risque systémique, s'il existe, ne se lit pas ici : il se lirait dans les horloges, où quelques étiquettes couvrent la majorité des stratum 1.

Les amonts les plus suivis

C'est ici que se lit une concentration que la carte ne montre pas : un pays peut afficher quarante opérateurs distincts dont trente-huit suivent la même horloge. Le premier de cette liste concentre 3 % des dépendances visibles.

Ce pourcentage est une proportion des sources ÉLUES — pas des sources configurées, et pas une part de marché. Le refid ne dit pas sur quoi un serveur est configuré : il dit laquelle de ses sources il avait élue à l'instant de sa réponse. Un serveur qui en déclare quatre n'en montre qu'une, et le dénominateur de ce tableau ne compte que des élections, une par serveur.

Tout y est sous-estimé, et des deux côtés à la fois. La part de l'amont de tête minore sa participation réelle dans le temps : il sert aussi l'heure aux instants où nous ne l'avons pas surpris élu. Et la part des autres amonts minore la leur encore davantage : ceux qui n'étaient pas élus à cet instant n'apparaissent pas du tout. Aucun chiffre de cette page ne peut donc être lu comme un maximum.

Si l'amont de tête tombait, ses suiveurs basculeraient sur des machines qui n'apparaissent nulle part sur cette page — et un serveur de repli peut d'ailleurs faire remonter directement le stratum 1 dans son refid, changeant la forme de l'arbre sans qu'aucune dépendance nouvelle soit née. Une mesure unique ne voit qu'une élection ; c'est l'accumulation de campagnes qui verra les basculements et approchera le vivier plutôt que l'élu. La question « qui suit qui aujourd'hui » n'est pas encore « qui peut suivre qui », qui est celle du risque.

Amontstratedépendantspartadresse suivieson horloge
ntp.ix.ru stratum 1 107 3 % 194.190.168.1 GLN
ptbtime1.ptb.de stratum 1 77 2.2 % 2001:638:610:be01::108
suivi en IPv6, condensé cassé
PTB
ntp2.rrze.uni-erlangen.de stratum 1 53 1.5 % 131.188.3.222 MBGh
ntp-p1.obspm.fr stratum 1 43 1.2 % 145.238.80.80 MRS
ntp1.rrze.uni-erlangen.de stratum 1 36 1 % 131.188.3.221 DCFp
ntp0.rrze.uni-erlangen.de stratum 1 34 1 % 131.188.3.220 GPS
anon-c2f8f574 stratum 1 33 0.9 % 80.192.165.246 PPS
ntp.your.org stratum 1 32 0.9 % 204.9.54.119 GPS
ntp1.nl.uu.net stratum 1 31 0.9 % 193.79.237.14 GPS
ptbtime1.ptb.de stratum 1 30 0.8 % 192.53.103.108 PTB

Les 10 amonts les plus suivis, sur 1096 distincts. Ils portent 476 des 3532 dépendances visibles. Le reste n'est pas une queue négligeable : plus de la moitié des amonts n'ont qu'un seul dépendant. Le jeu complet est dans le JSON de cette campagne.

Cette page et le fichier de la campagne ne comptent pas tout à fait pareil. Ici : 3531 serveurs à amont visible, 1096 amonts distincts, 910 à horloge locale. Dans dependency-tree-2026-09-11.json : 3535, 1087 et 913. Ce n'est pas un écart de mesure : les deux lisent la même campagne, ligne pour ligne. Cette page écarte les mêmes 205 refid que le fichier — ceux qui ne désignent aucune adresse joignable, et ceux qui n'en sont pas une du tout. Un refid fait quatre octets : 80.72.67.48 se lit PHC0 en ASCII, c'est une horloge matérielle PTP et non un serveur, même quand la machine qui la porte annonce un stratum 2. Le reliquat joue dans les deux sens : cette page écarte en plus les lignes qui sont l'alias d'une machine déjà comptée, que le fichier garde ; et elle ne sait pas reproduire ses deux derniers tris (pairs potentiels, zones de pool). Pour citer un chiffre, citez le fichier : il est daté, signé et horodaté. Cette page est faite pour être lue.

Ce qui n'est pas nommé ici ne l'est pas par accident. Un serveur que notre inventaire marque comme non publié paraît sous un pseudonyme stable et sans son adresse ; un amont découvert par le seul refid d'un tiers n'est nommé que si son nom porte un mot de service et qu'une liste publique le cite déjà. Sinon, seule l'adresse paraît — elle est ce que le refid contient, et quiconque interroge le même serveur la lit aussi.

Les horloges déclarées

Un stratum 1 ne suit personne : il met dans son refid une étiquette de quatre caractères qui nomme sa référence physique. Il la déclare — rien dans le protocole ne l'atteste, et un serveur mal configuré affichera GPS avec la même assurance qu'un serveur relié à un récepteur.

Étiquetteserveurspartce que c'estobservée chez
PPS 266 29.3 % Impulsion par seconde — un signal électrique, sans indication de la date —
GPS 226 24.9 % Récepteur GPS, avec ou sans PPS —
PHC0 62 6.8 % Étiquette propre à l'opérateur ou à son matériel — le protocole ne la normalise pas —
GNSS 47 5.2 % Récepteur multi-constellations (GPS, Galileo, GLONASS, BeiDou) —
MRS 44 4.8 % Source multi-références — gamme Meinberg « Multi Reference Source », qui combine plusieurs signaux —
GPSs 21 2.3 % Étiquette propre à l'opérateur ou à son matériel — le protocole ne la normalise pas —
MBGh 20 2.2 % Matériel Meinberg —
PPS0 20 2.2 % Impulsion par seconde, entrée 0 —
NIST 15 1.7 % National Institute of Standards and Technology, métrologie américaine —
ATOM 10 1.1 % Horloge atomique locale, ou signal PPS qualifié comme tel —
SHM 10 1.1 % Étiquette propre à l'opérateur ou à son matériel — le protocole ne la normalise pas —
PTP0 9 1 % Étiquette propre à l'opérateur ou à son matériel — le protocole ne la normalise pas —
PZF 9 1 % Récepteur Meinberg DCF77 à phase —
DCF 8 0.9 % DCF77, l'émetteur allemand en ondes longues —
TMNL 7 0.8 % Étiquette propre à l'opérateur ou à son matériel — le protocole ne la normalise pas —
IRIG 6 0.7 % Étiquette propre à l'opérateur ou à son matériel — le protocole ne la normalise pas —

Les amonts IPv6, et pourquoi ils faillirent nous tromper

Le champ refid fait quatre octets. Une adresse IPv6 en fait seize. Quand un serveur suit un amont en IPv6, la RFC 5905 lui fait donc publier les quatre premiers octets du condensé MD5 de l'adresse. Le résultat ressemble à une adresse IPv4 et n'en est pas une.

Notre campagne en contient : huit serveurs semblaient dépendre de 29.88.99.4, une adresse du ministère de la défense américain qui n'a jamais servi l'heure à personne. Compter ça comme une dépendance aurait fabriqué un point de concentration inexistant.

On les résout, et sans force brute. Chercher l'adresse derrière un condensé demanderait de balayer l'espace IPv6 ; calculer le condensé des adresses que nous connaissons déjà ne coûte qu'une résolution DNS par nom. Vérification indépendante : chronyc tracking affiche lui-même la correspondance, sous la forme Reference ID : ED11CC5F (2001:638:610:be01::108).

Le piège n'est pas là où on l'attendait. Un condensé n'est pas tenu de tomber dans une plage réservée : 84.138.115.198 est une adresse Deutsche Telekom qui porte un nom inverse d'abonné, et c'est le condensé de 2001:2035:0:1a34::3 — l'un de nos propres serveurs. Tant que le dictionnaire n'était consulté que pour les adresses invraisemblables, ces refids-là passaient pour de vraies dépendances et fabriquaient des points de concentration qui n'existaient pas. Il est désormais consulté pour tout refid, et chaque résolution est confrontée à un second témoin indépendant : un suiveur se tient exactement un cran au-dessus de son amont.

Tout ce qui n'est pas adressable n'est pas un condensé. Certains serveurs publient une adresse privée parce qu'ils suivent réellement un amont interne — 169.254.169.123 chez AWS, 10.219.8.4 chez Cloudflare, 192.168.33.131 au LAAS. Ce n'est pas une énigme à résoudre, c'est un renseignement : ces opérateurs tiennent leur propre référence et ne dépendent publiquement de personne.

Ce que cet arbre ne dit pas

  • Ce n'est pas une configuration. Le refid donne l'amont suivi à l'instant de la réponse. Un serveur configuré avec quatre sources n'en montre qu'une, et il en changera à la prochaine resélection. L'arbre est un minorant des dépendances réelles.
  • Une horloge déclarée n'est pas une horloge vérifiée. GPS dans un refid est une affirmation de l'opérateur, pas une preuve.
  • Un amont hors de notre inventaire reste sans nom. Et cela n'a rien de propre aux stratum 2 : nous ne mesurons pas tous les stratum 1 du monde non plus. Un amont que nous n'avons jamais sondé paraît donc par son adresse, sans strate ni horloge — ce qui ne dit rien contre lui.
  • Le pair mutuel restera hors d'atteinte. En association symétrique (peer, et non server), deux machines de même strate se citent l'une l'autre. Nous ne pouvons pas vérifier la réciprocité depuis l'extérieur : quand un condensé désigne une machine de MÊME strate, nous ne créons pas de lien et nous inscrivons une anomalie. C'est un angle mort assumé, pas une limite qu'une mesure supplémentaire lèverait.
  • Ce qui ne tient que par le condensé, et combien. 0 liens sur 3531 viennent d'un condensé cassé ; parmi eux 0 sont corroborés par la strate, et 0 reposent sur le seul condensé. Le risque de collision sur quatre octets ne se juge pas dans l'absolu mais par rapport à notre corpus : c'est là qu'il faudrait deux accidents simultanés pour tromper le premier groupe, et un seul pour tromper le second.
  • Une zone du pool n'est pas une machine. hu.pool.ntp.org rend un membre au hasard à chaque résolution : la strate relevée et le refid lu peuvent venir de deux machines différentes. Ces noms sont écartés de l'arbre — 0 pour cette campagne — parce que leur dépendance n'est attribuable à aucun serveur nommable.
  • Le périmètre est le nôtre. Nous mesurons l'Europe en priorité ; un arbre construit sur un autre inventaire aurait d'autres racines. Voir la méthode de la carte.

Les données

Tout ce qui est affiché ici se recalcule depuis ce fichier, publié sous CC BY 4.0 :

Votre serveur manque ? Déclarez-le dans notre dépôt ouvert : plus l'inventaire est large, moins il reste d'amonts anonymes dans cet arbre.

Outils NTP gratuits

Trois outils indépendants pour diagnostiquer votre synchronisation de temps :

Ce que ces chaînes impliquent

Cet arbre dit qui suit qui. Il ne dit pas si ce lien est authentifié — le refid nomme une source, jamais un transport. Ce que cette limite change pour l'audit et la traçabilité est traité à part : le NTS doit-il se prouver de bout en bout ?