Método abierto

Cómo llegamos al veredicto

Todo corre en tu navegador. Nada sale del dispositivo hasta que pulses Compartir informe. La lógica abajo es completa — nada oculto.

¿Por qué es distinto?

Speedtest mide un servidor cercano. Este test comprueba rutas cercanas, rutas lejanas y las apps que usas, y muestra qué funciona y qué no.

Speedtest

My ISP Sucks

Un test cubre

Un servidor cercano

Un test cubre

Rutas cercanas, lejanas y tus apps

Descarga, subida, ping

Sí

Descarga, subida, ping

Sí

Streaming, juegos, nube

Estimado a partir del número

Streaming, juegos, nube

Comprobado en esos servicios

Qué funciona y qué no

No se muestra

Qué funciona y qué no

Se muestra

Quién es responsable

No lo dice

Quién es responsable

Wi‑Fi, tu ISP o un servicio

Puedes enviar

El número

Puedes enviar

Una queja

Sin relación con Ookla ni con Speedtest.

Hacer este test

1 · Qué medimos

Cuatro capas, del dispositivo hacia fuera:

Puerta local (preflight)

10 HEAD al PoP Cloudflare más cercano (600 ms). Mide pérdida y jitter. ≥ 2 timeouts o σ > 30 ms → ruta inestable.

Nodos del país (near)

AWS S3 en tu país (por código de país del IP). Score bajo = ISP doméstico o enrutado.

Nodos internacionales (far)

16 regiones AWS S3 en el mundo. Score alto con near bien = puerta internacional.

Servicios del perfil (profile)

15–25 HEAD a streaming/juegos/tech. Detecta peering y bloqueos que el ping no ve.

2 · Salud del nodo

Score de 0 (perfecto) a 1 (roto). Medias near y far separadas.

score = 0.7 × (packetLoss / 100)
      + 0.3 × clamp((actualMs − expectedMs) / (expectedMs × 3), 0, 1)

expectedMs = max(10, distanceKm / 50)   ← speed-of-light RTT baseline

Ejemplo — Tel Aviv → N. Virginia (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 → sano

nearScore < 0.25

Near: sano

farScore > 0.35

Far: activa regla 6

farScore > 0.45

Far: degradado (5b)

3 · Servicio atípico

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 outlier

Ejemplo

Netflix 95 ms ✓ YouTube 88 ms ✓ Twitch 1 240 ms

cohortMedian = 88 ms → 1 240 ≥ 88 × 2.5 (220) → Twitch es atípico

4 · Cadena de reglas

Gana la primera coincidencia. DevTools → Console muestra cada regla.

1

Sin conexión

connectivity = fail, and no other check reached the internet

→ down / local_issue

2

Ruta local inestable

Wi-Fi or cellular AND (preflight unstable OR jitter > 40 ms) AND farScore < 0.40

→ local_issue

3

DNS roto

device is online AND dns = fail

→ isp_issue

4

Servicio atípico concreto

core healthy AND 1 ≤ outliers ≤ 40 % of services

→ service_issue

5

La mayoría de servicios mal

core healthy AND badServiceFraction ≥ 50 %

→ isp_issue (peering)

5b

Tráfico intl. bloqueado

preflight loss = 0 AND nearScore < 0.25 AND farScore > 0.45 AND ≥ 3 far nodes

→ isp_issue (gateway)

6

Núcleo / far degradado

any test = fail OR farScore > 0.35

→ isp_issue

6b

Degradación suave

any test = warn (no harder rule fired)

→ local_issue or isp_issue (medium)

✓

Todo bien

→ healthy

5 · Cumplimiento del plan

ratio = measuredDown / promisedDown

≥ 0.80  →  "As advertised"    ✓
≥ 0.50  →  "Underdelivering"  ~
 < 0.50  →  "Far below plan"   ✗

Solo anota el informe — no cambia al culpable.

6 · Privacidad

Todas las sondas en el navegador. Nada va al servidor hasta que pulses Compartir informe.

Al compartir: veredicto, scores, ISP, país, medio. No se guardan IPs.