Méthode ouverte
Comment on tranche
Tout tourne dans le navigateur. Rien ne quitte l’appareil tant que vous n’appuyez pas sur Partager le rapport. La logique ci‑dessous est complète — rien n’est caché.
Pourquoi c'est différent ?
Speedtest mesure un serveur proche. Ce test vérifie les routes proches, les routes lointaines et vos applis, puis montre ce qui marche et ce qui ne marche pas.
Speedtest
My ISP Sucks
Un test couvre
Un serveur proche
Un test couvre
Routes proches, lointaines, vos applis
Débit descendant, montant, ping
Oui
Débit descendant, montant, ping
Oui
Streaming, jeux, cloud
Estimé à partir du chiffre
Streaming, jeux, cloud
Vérifié sur ces services
Ce qui marche et ce qui ne marche pas
Pas affiché
Ce qui marche et ce qui ne marche pas
Affiché
Qui est responsable
Non nommé
Qui est responsable
Wi‑Fi, FAI, ou un service
Vous pouvez envoyer
Le chiffre
Vous pouvez envoyer
Une réclamation
Sans lien avec Ookla ni Speedtest.
Lancer ce test1 · Ce qu’on sonde
Quatre couches, de l’appareil vers l’extérieur :
Passerelle locale (preflight)
10 HEAD vers le PoP Cloudflare le plus proche (600 ms). Perte et jitter. ≥ 2 timeouts ou σ > 30 ms → chemin instable.
Nœuds nationaux (near)
AWS S3 dans votre pays (code pays IP). Score bas = FAI local ou routage.
Nœuds internationaux (far)
16 régions AWS S3 mondiales. Score élevé avec near OK = passerelle internationale.
Services du profil (profile)
15–25 HEAD streaming/jeux/tech. Détecte peering et blocages invisibles au ping.
2 · Santé des nœuds
Score de 0 (parfait) à 1 (cassé). Moyennes near et far séparées.
score = 0.7 × (packetLoss / 100)
+ 0.3 × clamp((actualMs − expectedMs) / (expectedMs × 3), 0, 1)
expectedMs = max(10, distanceKm / 50) ← speed-of-light RTT baselineExemple — Tel‑Aviv → N. Virginie (9 500 km)
expectedMs = max(10, 9 500 ÷ 50) = 190 ms
actualMs = 219 ms, packetLoss = 0 %
score = 0 + 0.3 × clamp((219 − 190) / (190 × 3), 0, 1) = 0.015 → sain
nearScore < 0.25
Near : sain
farScore > 0.35
Far : déclenche règle 6
farScore > 0.45
Far : dégradé (5b)
3 · Service aberrant
outlier if: status = "fail"
OR status = "slow" AND latencyMs ≥ cohortMedian × 2.5
slow = probe latency above 1 000 ms
ok under that line is not an outlierExemple
Netflix 95 ms ✓ YouTube 88 ms ✓ Twitch 1 240 ms
cohortMedian = 88 ms → 1 240 ≥ 88 × 2.5 (220) → Twitch est aberrant
4 · Chaîne de règles
Premier match gagne. DevTools → Console montre chaque règle.
Hors ligne
connectivity = fail, and no other check reached the internet
→ down / local_issue
Chemin local instable
Wi-Fi or cellular AND (preflight unstable OR jitter > 40 ms) AND farScore < 0.40
→ local_issue
DNS cassé
device is online AND dns = fail
→ isp_issue
Service aberrant précis
core healthy AND 1 ≤ outliers ≤ 40 % of services
→ service_issue
Majorité de services mauvais
core healthy AND badServiceFraction ≥ 50 %
→ isp_issue (peering)
Trafic intl. bloqué
preflight loss = 0 AND nearScore < 0.25 AND farScore > 0.45 AND ≥ 3 far nodes
→ isp_issue (gateway)
Cœur / far dégradé
any test = fail OR farScore > 0.35
→ isp_issue
Dégradation douce
any test = warn (no harder rule fired)
→ local_issue or isp_issue (medium)
Tout va bien
→ healthy
5 · Tenue de l’offre
ratio = measuredDown / promisedDown ≥ 0.80 → "As advertised" ✓ ≥ 0.50 → "Underdelivering" ~ < 0.50 → "Far below plan" ✗
Annotation seule — ne change pas le coupable.
6 · Confidentialité
Toutes les sondes dans le navigateur. Rien n’est envoyé tant que vous n’appuyez pas sur Partager le rapport.
Partagé : verdict, scores, FAI, pays, médium. Aucune IP stockée.