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