Aller au contenu

Tâche NTP Sync

Résumé

  • Nom interne : SyncNtp
  • Catégorie : Temps
  • But : Synchroniser l'appareil avec un serveur NTP pour obtenir le décalage horaire réseau et le temps d'aller-retour (RTT).
  • Type de tâche : Normale

Compatibilité

  • Version AndroMate minimale : 1.1.0
  • Version AndroMate maximale : 1.1.0
  • Android minimum : Android 13 (API 33)
  • Android maximum testé : Android 16 (API 36)

  • Constructeurs supportés :

  • ✅ Tous les constructeurs (testé sur Samsung One UI 6.x / 7.x / 8.x et Google Pixel Android Stock)

  • Permissions nécessaires :

  • INTERNET

Description détaillée

La tâche NTP Sync synchronise l'appareil avec un serveur NTP (Network Time Protocol) pour récupérer des informations horaires précises.

Elle est utilisée pour :

  • Obtenir le décalage horaire réseau précis
  • Mesurer le temps d'aller-retour réseau (RTT)
  • Synchroniser l'heure de l'appareil avec des serveurs autoritaires
  • Valider la précision de l'horloge système

Détails d'implémentation

  • Conforme RFC 5905 : Implémentation SNTP (Simple Network Time Protocol) complète
  • Sécurisé de façon monotone : Utilise SystemClock.elapsedRealtime() pour un timing précis
  • Filtrage RTT : Rejette les réponses avec RTT invalide (> 1000 ms)
  • Validation des timestamps : Valide le timestamp d'origine pour assurer l'authenticité de la réponse
  • Gestion du timeout : Timeout configurable pour la requête NTP

Paramètres d'entrée

Paramètre Type Obligatoire Valeurs possibles Compatibilité Android Compatibilité AndroMate Défaut
ntp_server String Non Nom d'hôte serveur NTP valide Android 13 (API 33) → Android 16 (API 36) 1.1.0 → 1.1.0 time.google.com

Paramètres de sortie

Champ Type Condition de déclenchement Compatibilité Android Compatibilité AndroMate Défaut
offset_ms_output Long Quand la synchronisation NTP réussit Android 13 (API 33) → Android 16 (API 36) 1.1.0 → 1.1.0 <ANDROMATE_NULL_VALUE>
rtt_ms_output Long Quand la synchronisation NTP réussit Android 13 (API 33) → Android 16 (API 36) 1.1.0 → 1.1.0 <ANDROMATE_NULL_VALUE>

Exceptions

Code Nom de l'exception Description
SYNC-NTP-TASK-001 Erreur Client NTP Impossible de communiquer avec le serveur NTP (IOException) ou réponse invalide reçue.

Diagramme d'exécution

flowchart TD
    Start([Démarrer NTP Sync]) --> ResolveParams[🔄 Résoudre paramètres<br/>Serveur NTP]

    ResolveParams --> SendRequest[📡 Envoyer requête NTP<br/>Timeout: 5000ms]

    SendRequest -->|Succès| Validate[✓ Valider réponse<br/>Vérifications RFC 5905]
    SendRequest -->|Timeout/Erreur| E1[❌ SYNC-NTP-TASK-001]

    Validate -->|Valide| CalcMetrics[🔢 Calculer Offset & RTT<br/>Valider RTT &lt;= 1000ms]
    Validate -->|Invalide| E1

    CalcMetrics -->|RTT Invalide| E1
    CalcMetrics -->|Succès| StoreResult[💾 Stocker résultat<br/>NtpTaskResult]

    StoreResult --> LogReport[📋 Logger rapport<br/>Offset + RTT]

    LogReport --> Success([✅ Succès])

    E1 --> Error([❌ Exception])

    style Start fill:#e3f2fd
    style Success fill:#c8e6c9
    style Error fill:#ffcdd2
    style SendRequest fill:#f3e5f5
    style Validate fill:#fff9c4
    style CalcMetrics fill:#fff9c4
    style StoreResult fill:#c8e6c9

Comment ça fonctionne :

  1. Résoudre paramètres : Résout le nom d'hôte du serveur NTP
  2. Envoyer requête NTP : Envoie une requête SNTP avec timeout de 5 secondes
  3. Valider réponse : Vérifie la conformité RFC 5905 (LI, version, mode, stratum, timestamps)
  4. Calculer métriques : Calcule le décalage horaire et RTT, valide RTT <= 1000ms
  5. Stocker résultat : Sauvegarde les valeurs de décalage et RTT
  6. Logger rapport : Enregistre les détails d'exécution
  7. Résultat : Retourne NtpTaskResult ou exception

Détails des paramètres d'entrée

1. Paramètre d'entrée : ntp_server

Nom d'hôte du serveur NTP avec lequel synchroniser.

Valeur par défaut

time.google.com (Serveur NTP public Google)

Valeurs possibles

  • time.google.com (Google)
  • pool.ntp.org (Projet Pool NTP)
  • time.nist.gov (NIST)
  • Nom d'hôte serveur NTP personnalisé

Exemple

"ntp_server": "pool.ntp.org"

Détails des paramètres de sortie

1. Variable résultat : offset_ms_output

Décalage horaire entre l'appareil et le serveur NTP en millisecondes.

Exemple

"offset_ms_output": "$NTP_OFFSET"

Notes

  • Valeur positive : L'heure de l'appareil est en avance sur le serveur NTP
  • Valeur négative : L'heure de l'appareil est en retard sur le serveur NTP
  • La valeur représente des millisecondes

2. Variable résultat : rtt_ms_output

Temps d'aller-retour (RTT) pour la requête NTP en millisecondes.

Exemple

"rtt_ms_output": "$NTP_RTT"

Notes

  • Les valeurs plus basses indiquent une connexion réseau plus rapide
  • Valeur maximale acceptée : 1000 ms
  • Les requêtes avec RTT > 1000 ms sont rejetées

Exemple JSON complet

{
  "SyncNtp": [
    {
      "id": "-1",
      "title": "NTP Sync",
      "ntp_server": "time.google.com",
      "offset_ms_output": "$OFFSET_MS",
      "rtt_ms_output": "$RTT_MS"
    }
  ]
}

Schéma NTP et Formules

Diagramme des timestamps

         t'₂         t'₃
          ↑           ↑
    ------|-----------|------  SERVER
          |           |
         δ₁          δ₂
         ↙            ↘
    ----•----•-----------•---- CLIENT
       t₁   δ₁          δ₂   t₄

Explication du schéma : - t₁ : Heure d'envoi de la requête (client) - t'₂ : Heure de réception de la requête (serveur) - t'₃ : Heure d'envoi de la réponse (serveur) - t₄ : Heure de réception de la réponse (client) - δ₁ : Délai client → serveur - δ₂ : Délai serveur → client

Timestamps

Timestamp Description Source
t₁ Heure d'envoi de la requête Client (wall-clock)
t'₂ Heure de réception de la requête Serveur (NTP)
t'₃ Heure d'envoi de la réponse Serveur (NTP)
t₄ Heure de réception de la réponse Client (wall-clock)
δ₁ Délai (client → serveur) Délai réseau
δ₂ Délai (serveur → client) Délai réseau

Formules de calcul

Délai d'aller-retour (RTT)

RTT = (t₄ - t₁) - (t'₃ - t'₂)
    = δ₁ + δ₂

Explication : - (t₄ - t₁) : Temps total écoulé côté client - (t'₃ - t'₂) : Temps de traitement serveur - Résultat : Temps de latence réseau pur (somme des deux délais)

Décalage horaire (Offset)

Offset = ((t'₂ - t₁) + (t'₃ - t₄)) / 2
       = (δ₁ - δ₂) / 2

Explication : - (t'₂ - t₁) : Décalage à la réception - (t'₃ - t₄) : Décalage à l'envoi - Division par 2 : Moyenne des deux mesures - Résultat : Différence entre l'heure serveur et l'heure client

Exemple concret

Délais réseau : δ₁ = 50 ms, δ₂ = 50 ms
Décalage horaire : -100 ms

t₁ = 1000 ms (client envoie)
t'₂ = 1050 ms (serveur reçoit) = t₁ + δ₁
t'₃ = 1100 ms (serveur envoie) = t'₂ + 50 ms (traitement)
t₄ = 1150 ms (client reçoit) = t'₃ + δ₂

RTT = (1150 - 1000) - (1100 - 1050)
    = 150 - 50
    = 100 ms ✓ (δ₁ + δ₂ = 50 + 50 = 100)

Offset = ((1050 - 1000) + (1100 - 1150)) / 2
       = (50 + (-50)) / 2
       = 0 / 2
       = 0 ms

Validations effectuées

Vérification Condition Description
RTT valide 0 < RTT ≤ 1000 ms Rejette les réponses avec latence invalide
Timestamp originate originate - t1
Timestamp transmit t3 ≠ 0 Vérifie que le serveur a envoyé une réponse
Mode serveur mode = 4 ou 5 Accepte les réponses du serveur ou broadcast
Stratum 0 < stratum ≤ 15 Valide la qualité de la source de temps
Leap Indicator LI ≠ 3 Rejette si serveur non synchronisé
Version NTP 3 ≤ version ≤ 4 Accepte NTP v3 et v4

  • Client SNTP : Implémentation conforme RFC 5905
  • Timeout : Timeout fixe de 5 secondes pour la requête NTP
  • Filtre RTT : Les réponses avec RTT > 1000 ms sont rejetées pour la sécurité mobile
  • Validation des timestamps : Le timestamp d'origine doit correspondre dans une tolérance de 5 ms
  • Timing monotone : Utilise SystemClock.elapsedRealtime() pour des calculs de timing précis
  • Cache de permissions : La permission Internet est requise pour la communication NTP