My ISP Sucks
Reportar

Método aberto

Como chegamos ao veredito

Tudo roda no navegador. Nada sai do aparelho até você apertar Compartilhar relatório. A lógica abaixo é completa — nada oculto.

Por que isto é diferente?

O Speedtest mede um servidor próximo. Este teste verifica rotas próximas, rotas distantes e seus apps — e mostra o que funciona e o que não.

Speedtest

My ISP Sucks

Um teste cobre

Um servidor próximo

Um teste cobre

Rotas próximas, distantes e seus apps

Download, upload, ping

Sim

Download, upload, ping

Sim

Streaming, jogos, nuvem

Estimado a partir do número

Streaming, jogos, nuvem

Verificado nesses serviços

O que funciona e o que não

Não mostra

O que funciona e o que não

Mostra

Quem é o responsável

Não diz

Quem é o responsável

Wi‑Fi, operadora ou um serviço

Você pode enviar

O número

Você pode enviar

Uma reclamação

Sem ligação com a Ookla ou com o Speedtest.

Fazer este teste

1 · O que medimos

Quatro camadas, do aparelho para fora:

Gateway local (preflight)

10 HEAD ao PoP Cloudflare mais perto (600 ms). Mede perda e jitter. ≥ 2 timeouts ou σ > 30 ms → caminho instável.

Nós do país (near)

AWS S3 no seu país (código do IP). Score baixo = ISP doméstico ou roteamento.

Nós internacionais (far)

16 regiões AWS S3 no mundo. Score alto com near ok = gateway internacional.

Serviços do perfil (profile)

15–25 HEAD a streaming/jogos/tech. Detecta peering e bloqueios que o ping não vê.

2 · Saúde do nó

Score de 0 (perfeito) a 1 (quebrado). Médias near e 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

Exemplo — 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 → saudável

nearScore < 0.25

Near: saudável

farScore > 0.35

Far: dispara regra 6

farScore > 0.45

Far: degradado (5b)

3 · Serviço fora da curva

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

Exemplo

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

cohortMedian = 88 ms → 1 240 ≥ 88 × 2.5 (220) → Twitch é outlier

4 · Cadeia de regras

Primeiro match vence. DevTools → Console mostra cada regra.

1

Offline

connectivity = fail, and no other check reached the internet

→ down / local_issue

2

Caminho local instável

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

→ local_issue

3

DNS quebrado

device is online AND dns = fail

→ isp_issue

4

Serviço outlier específico

core healthy AND 1 ≤ outliers ≤ 40 % of services

→ service_issue

5

Maioria dos serviços ruim

core healthy AND badServiceFraction ≥ 50 %

→ isp_issue (peering)

5b

Tráfego 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

Degradação leve

any test = warn (no harder rule fired)

→ local_issue or isp_issue (medium)

✓

Tudo certo

→ healthy

5 · Entrega do plano

ratio = measuredDown / promisedDown

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

Só anota o relatório — não muda o culpado.

6 · Privacidade

Todas as sondas no navegador. Nada vai ao servidor até você apertar Compartilhar relatório.

Ao compartilhar: veredito, scores, ISP, país, meio. Nenhum IP é guardado.