How the test works
We measure three things, in order:
- Latency. Eight tiny round-trips to Cloudflare's edge, timed individually. We report the median (immune to one slow outlier) plus the mean absolute deviation as jitter (how variable each round-trip is).
- Download. A 25 MB download from
speed.cloudflare.com/__down, streamed and timed in your browser. We divide bytes by seconds, multiply by 8 to convert to bits, divide by a million to get Mbps. - Upload. A 5 MB POST to
speed.cloudflare.com/__up. Same math.
Cloudflare runs an anycast network with hundreds of points-of-presence, so the edge that answers you is almost always within a few network hops of your ISP. The test measures your connection to that edge, not to any single distant datacenter, which is a reasonable proxy for "how fast does the modern web feel."
What good numbers look like
- Wired gigabit fiber, close to a city: 800-940 Mbps down, 500-940 Mbps up, 3-8 ms latency, <2 ms jitter.
- Cable broadband (Comcast / Spectrum / Cox): 200-900 Mbps down, 20-50 Mbps up (asymmetric), 10-25 ms latency.
- 5G mobile: 100-400 Mbps down, 20-80 Mbps up, 20-60 ms latency, higher jitter (cellular).
- LTE mobile: 10-80 Mbps down, 5-30 Mbps up, 30-80 ms latency.
- Starlink LEO satellite: 50-200 Mbps down, 10-30 Mbps up, 30-50 ms latency, jitter higher than wired.
- Geostationary satellite: 10-30 Mbps down, 1-5 Mbps up, 500-700 ms latency.
Why your number might be lower than the ISP's spec sheet
- You're on Wi-Fi. The single most common cause. Even Wi-Fi 6 in ideal conditions caps out below gigabit; under contention, you lose another 50-80%. Plug into Ethernet and re-test. See our Wi-Fi vs Ethernet explainer.
- Your modem / router is the bottleneck. Older routers can't push 1 Gbps through their CPU. The "1.2 Gbps Wi-Fi 6" sticker on the box doesn't mean the device can route that much.
- Single TCP stream limits. Browser-based tests use a single connection per direction. On very fast links (1 Gbps+) the single-stream TCP throughput is limited by per-RTT congestion-window growth. Multi-stream tests (the speedtest.net native app, iperf3 with -P) measure higher numbers on the same line.
- You're competing with someone else in the house. Kids streaming 4K, the doorbell uploading footage, the cloud backup running. Run the test again with everyone else paused.
- Your ISP is congested. Peak hours (7-11 PM local time) often cut effective speeds 20-40%. Test at 3 AM to see your line's unloaded capacity.
Latency > speed for most things
For most modern internet workloads, latency matters more than raw bandwidth. Video calls, gaming, interactive websites, voice chat — all sensitive to round-trip time, mostly insensitive to whether the link is 50 or 500 Mbps. If your speed test shows good download but high latency or jitter, that's usually a worse outcome than the reverse. The fix is often Wi-Fi-related (move closer to the AP, switch to 5 GHz or 6 GHz, switch to wired) or ISP-related (a different upstream peering path).
Privacy
The test makes three classes of request: cdn-cgi/trace (to identify the Cloudflare edge), __down (download), and __up (upload). All three go to speed.cloudflare.com, which is operated by Cloudflare. IPFerret never sees the bytes or the result — the measurement lives in your browser's JavaScript. The only thing the IPFerret server knows is that you loaded the /speed-test HTML page; the rest is browser ↔ Cloudflare.
What does Cloudflare learn? Your IP (because they have to send you the bytes), the User-Agent string of your browser, and (statistically) the speed of the connection. Cloudflare's public speed-test endpoint is documented as a free service; their privacy posture is published at cloudflare.com/privacypolicy.
Adjacent tools
- Wi-Fi vs Ethernet — the #1 reason browser speed tests show lower than the ISP spec sheet.
- How traceroute works — diagnose where the latency in your speed test comes from.
- IPv6 reachability test — verify your connection actually supports v6.
- CGNAT — many mobile and FTTH connections sit behind shared NAT that affects upload performance.
