La seconde intercalaire (en anglais leap second) est l'un des mécanismes les plus subtils et les plus redoutés du protocole NTP. Depuis 1972, elle compense le lent ralentissement de la rotation terrestre pour maintenir UTC en phase avec le temps astronomique UT1. Pour un opérateur de serveurs NTP, chaque événement a été une répétition de crise : 24 heures d'alerte, un plan de bascule, et des logs à scruter pendant les 48 heures suivantes.
Cette page couvre ce que tout opérateur ou administrateur NTP doit comprendre : l'origine du mécanisme, l'historique des 27 secondes intercalaires ajoutées depuis 1972, la façon dont NTP les signale, les deux approches concurrentes (step et smear), le comportement de chrony et ntpd, et l'échéance d'abolition votée en 2022.
UTC (Temps Universel Coordonné) est défini depuis 1972 comme le compte des secondes SI émises par un ensemble d'horloges atomiques. UT1, lui, est le temps défini par la rotation réelle de la Terre, mesuré par interférométrie VLBI sur des quasars lointains. Les deux divergent parce que la Terre ralentit : frottement des marées, redistribution des masses internes, interactions noyau-manteau. Sur le long terme, UT1 prend du retard sur UTC d'environ 1 à 2 ms par jour en moyenne — une seconde accumulée tous les 12 à 24 mois.
L'IERS (International Earth Rotation Service) surveille cette dérive et, quand elle approche 0,9 seconde,
publie un « Bulletin C » annonçant une seconde intercalaire six mois à l'avance. L'événement prend place
au choix le 30 juin ou le 31 décembre à 23:59:59 UTC : la seconde 23:59:60 est insérée (très
rare cas d'une minute à 61 secondes), puis 00:00:00 du jour suivant.
10
signale ce cas.
De 1972 à fin 2016, 27 secondes intercalaires ont été ajoutées. Toutes positives. Les cinq dernières, qui sont aussi celles vécues par l'infrastructure RDEM :
| Date UTC | Jour local France | Nombre total depuis 1972 |
|---|---|---|
| 2005-12-31 23:59:60 | 1er janvier 2006 à 00:59:60 | 23 |
| 2008-12-31 23:59:60 | 1er janvier 2009 à 00:59:60 | 24 |
| 2012-06-30 23:59:60 | 1er juillet 2012 à 01:59:60 | 25 |
| 2015-06-30 23:59:60 | 1er juillet 2015 à 01:59:60 | 26 |
| 2016-12-31 23:59:60 | 1er janvier 2017 à 00:59:60 | 27 |
Depuis le 1er janvier 2017, la différence TAI − UTC est restée fixée à 37 secondes. Aucune seconde intercalaire n'a été ajoutée sur les huit années suivantes — un record historique dû à l'accélération inattendue de la rotation terrestre.
Le protocole NTP (RFC 5905) réserve les deux bits de poids fort du premier octet du paquet au champ Leap Indicator (LI). Quatre valeurs possibles :
| Valeur LI | Signification | Usage |
|---|---|---|
| 00 | Aucun avertissement | Fonctionnement normal (99,9 % du temps) |
| 01 | La dernière minute du jour aura 61 secondes | Annoncé 24 h avant l'ajout d'une seconde |
| 10 | La dernière minute du jour aura 59 secondes | Annoncé pour un retrait (jamais utilisé à ce jour) |
| 11 | Horloge non synchronisée (alarme) | Équivalent de stratum 16 |
Quand un serveur Stratum 1 reçoit l'information (via son refclock GPS/DCF77, ou par fichier leap-seconds.list signé par le NIST), il commence à propager LI=01 dans ses réponses 24 heures avant l'échéance. Les clients chrony et ntpd lisent ce bit à chaque poll, et planifient l'insertion locale.
Quand 23:59:60 arrive, il faut choisir ce qui se passe côté système :
Conforme à la norme : le noyau insère une vraie minute à 61 secondes. C'est le comportement par défaut
de chrony et ntpd avec leapsecmode=system/step sur Linux. Avantage : l'horloge reste strictement alignée
sur UTC. Inconvénient : deux timestamps identiques consécutifs, et toute application qui fait
timespec.tv_sec - previous peut obtenir 0, ce qui casse les timers à base de secondes.
Popularisée par Google en 2011 : plutôt qu'un saut d'une seconde, on ralentit l'horloge de quelques
ppm sur une fenêtre de 20 à 24 heures autour de l'événement. Chaque tick dure
1.000011574 s au lieu de 1.0 s exactement — la seconde est absorbée
progressivement. Avantage : aucun timestamp non monotone, aucun timer cassé. Inconvénient : pendant
la fenêtre de smear, l'horloge est jusqu'à 0,5 seconde décalée d'UTC, ce qui peut
être visible depuis une source externe non-smearée.
chrony.conf.
| Opérateur | Approche | Fenêtre |
|---|---|---|
| Google (time.google.com) | Smear | 24 h autour de minuit UTC |
| AWS (time.aws.com) | Smear | 24 h autour de minuit UTC |
| Facebook / Meta | Smear (linéaire 18 h) | 18 h centré sur l'événement |
| Cloudflare (time.cloudflare.com) | Step (conforme) | — |
| NIST / time.nist.gov | Step | — |
| NTP Pool (pool.ntp.org) | Variable selon l'opérateur | — |
| RDEM Systems (ntp.rdem-systems.com) | Step (conforme RFC) | — |
chrony 4.x propose quatre modes, configurables via leapsecmode dans chrony.conf :
# /etc/chrony/chrony.conf
# Mode recommandé pour un serveur Stratum 2+ en production :
# déléguer au noyau Linux l'insertion de la seconde
leapsecmode system
# Alternative 1 : step d'une seconde appliqué immédiatement
# leapsecmode step
# Alternative 2 : correction progressive par slew (taux par défaut 400 ppm)
# leapsecmode slew
# Alternative 3 : smearing, avec smoothtime
# leapsecmode ignore
# smoothtime 400 0.001 leaponly
# Pour tester sans attendre le prochain événement : fichier de liste leap
leapsectz right/UTC
leapseclist /usr/share/zoneinfo/leap-seconds.list
La directive smoothtime 400 0.001 leaponly active un smear limité aux événements leap.
L'offset maximal appliqué est 0,5 s, étalé sur ~1000 secondes, ce qui reste compatible avec la plupart
des applications sensibles aux sauts.
ntpd (référence ou ntpsec) lit le fichier leap-seconds.list maintenu par le NIST :
# /etc/ntp.conf
# Fichier de référence signé, mis à jour par l'IERS/NIST
leapfile /usr/share/zoneinfo/leap-seconds.list
# Comportement par défaut : step d'une seconde conforme
# Désactiver si besoin avec :
# tinker step 0
# Pour bénéficier du mode noyau Linux sur sync :
# enable kernel
Le fichier leap-seconds.list doit être mis à jour régulièrement — il expire
6 mois après son émission. Automatisez via cron :
0 3 * * 1 wget -q -O /usr/share/zoneinfo/leap-seconds.list https://data.iana.org/time-zones/tzdb-leap-seconds.list
chronyc tracking et ntpq -c rv restent
les seules commandes indispensables pendant l'événement. Guardez un terminal ouvert dessus entre
23:59:00 et 00:02:00 UTC.L'événement 2016-12-31 est celui qui nous a le plus marqué : c'est le dernier à date et celui où les outils grand public (smartphones, box internet) avaient le mieux convergé vers un comportement correct. L'écosystème est plus mûr qu'en 2005 ou 2008, où nous devions encore expliquer à des clients ce qu'était LI=01 dans leurs logs.
Même sans annonce à l'horizon, maintenir la capacité à gérer un leap second fait partie de l'hygiène NTP :
leap-seconds.list sur chaque serveur :
head /usr/share/zoneinfo/leap-seconds.list doit montrer une date d'expiration
dans le futur.if (new_ts == old_ts) ou assert ts_diff > 0 doit être revue.En novembre 2022, la 27e Conférence Générale des Poids et Mesures (CGPM) a voté la résolution qui abolit la seconde intercalaire d'ici 2035. Le texte prévoit :
Pour NTP, cela ne change rien au protocole — le champ Leap Indicator reste en place pour les archives et les systèmes legacy. Simplement, son activation deviendra exceptionnelle puis nulle. Les implémentations chrony et ntpd continueront à supporter le mécanisme pour des raisons de compatibilité pendant plusieurs décennies.