Speedtest vs iPerf3: Why Your Wi-Fi Speed Test Is Probably Wrong

Speedtest measures your ISP. iPerf3 measures your actual Wi-Fi and LAN. Here is when to use which, and how to run iPerf3 on iPhone, iPad, Mac, or Android.

You run Speedtest. It says 940 Mbps. Then you switch to Wi-Fi in the back bedroom, run the same test, and get 320 Mbps. You blame the router. You move it. You buy a mesh system. You run Speedtest again. Same 320 Mbps. What’s going on?

The honest answer: Speedtest was never measuring your Wi-Fi to begin with. It was measuring your phone’s path all the way to a Speedtest server somewhere on the internet, and treating the slowest hop as the result. If your ISP gives you 940 Mbps and your Wi-Fi gives you 320 Mbps, Speedtest reports 320 Mbps — but it can’t tell you which link is the bottleneck. iPerf3 can.

What Speedtest actually measures

Speedtest by Ookla and similar tools (Fast.com, nPerf, Cloudflare Speed Test) all measure the end-to-end throughput between your device and a remote server. The path looks like this:

phone → Wi-Fi AP → router → modem → ISP → internet backbone → Speedtest server

The result is the throughput of the slowest link in that chain. For most consumer connections, that’s the ISP last-mile or the Wi-Fi link in the home. You can’t distinguish them with Speedtest. If your fiber line is 1 Gbps and your Wi-Fi tops out at 400 Mbps, Speedtest reports ~400 Mbps and you have no idea whether the cap is your AP, your phone’s Wi-Fi radio, or interference on channel 6.

That’s fine if you only care about “is my internet working?” — Speedtest answers that perfectly. It is not fine if you’re trying to diagnose Wi-Fi dead zones, validate a VPN, test a new mesh node, or confirm that your 2.5 GbE switch is actually negotiating 2.5 Gbps with your NAS.

What iPerf3 measures

iPerf3 is different. It measures the throughput between two endpoints that you control, on a network segment you choose:

iperf3 client (phone) → Wi-Fi AP → router → iperf3 server (laptop/NAS/Mac)

The internet is not in the picture. The ISP is not in the picture. You’re measuring the actual capacity of one specific link — usually the Wi-Fi or LAN segment — between two devices you own. That’s why iperf3 has been the standard tool for network engineers, homelab operators, and Wi-Fi installers for over twenty years.

The mental model

Speedtest answers “how fast is my ISP today?” iPerf3 answers “how fast is this specific link between these two devices right now?” They are not competing tools — they answer different questions.

When to use which

QuestionTool
Is my ISP throttling me?Speedtest
Did my ISP actually give me the 1 Gbps I’m paying for?Speedtest
How fast is my Wi-Fi in the back bedroom?iPerf3
Is my mesh node actually backhauling at full speed?iPerf3
Does my VPN cap throughput?iPerf3 (with one endpoint inside the VPN)
Is my 2.5 GbE link actually 2.5 Gbps?iPerf3
Does Wi-Fi 6E in this house deliver multi-gigabit?iPerf3
Is there packet loss or jitter on my Wi-Fi for video calls?iPerf3 (UDP mode)
Why is my Plex stream from the NAS choppy?iPerf3

The pattern: anything that happens inside your home or office network is an iPerf3 question. Anything that involves the outside world is a Speedtest question.

Running iPerf3 without the command line

iPerf3 has historically required a terminal: iperf3 -c 192.168.1.10 -p 5201 -P 4 -t 30. That’s fine for engineers, miserable for everyone else. The native iPerf3 Client & Server app for iOS, iPadOS, macOS, and Android lets you run the exact same protocol with a GUI — no SSH, no Termux, no Linux box required.

Here’s the minimum setup to compare Speedtest and iPerf3 results side by side:

  1. Pick one of your devices to be the iPerf3 server. A laptop on Ethernet works well. A Mac, a Linux box, a Raspberry Pi, or another phone running the app — any of them will do. On a Mac with the app, you literally tap “Server” and hit Start.

  2. Note the server’s local IP. On macOS: System Settings → Wi-Fi → Details. On Linux: ip addr or ifconfig. Something like 192.168.1.42.

  3. On your phone, open iPerf3 Client & Server. Choose Client mode. Enter the server IP and port 5201. Pick TCP. Tap Start.

  4. Compare to Speedtest. Run Speedtest in the same spot. The Speedtest number is your end-to-end internet path. The iPerf3 number is your phone-to-server path over Wi-Fi and Ethernet — entirely inside your house. If the iPerf3 number is lower, your Wi-Fi is the bottleneck. If it’s higher, your ISP is the bottleneck.

A real example

You’re standing in the kitchen. Speedtest says 880 Mbps. You walk to the back bedroom. Speedtest says 220 Mbps.

Now you run iPerf3 against a wired Mac in the office. Kitchen: 880 Mbps. Back bedroom: 220 Mbps. Same drop. That tells you the bottleneck is on the LAN side, not the ISP — almost certainly Wi-Fi attenuation through the walls. You can move the AP, add a mesh node, or change to the 5 GHz band, and re-run iPerf3 to confirm the fix. None of that would be visible with Speedtest alone, because Speedtest can’t tell you whether the cap is your Wi-Fi or your ISP.

In the opposite scenario — kitchen 880, bedroom 220 on Speedtest, but kitchen 940 / bedroom 940 on iPerf3 — the issue is upstream from your router. ISP problem, modem problem, or congestion on a specific Speedtest server. Same numbers from Speedtest, completely different interpretation once you have iPerf3 data.

TCP vs UDP — which iPerf3 mode to pick

Two protocols, two questions:

  • TCP answers “how much raw bandwidth can this link deliver to a single application?” Use it for throughput numbers — the kind you’d compare to your ISP plan or Wi-Fi spec.
  • UDP answers “how stable is this link?” — jitter, packet loss, and bufferbloat. Use it when you’re diagnosing video calls, gaming, or any real-time traffic.

For most “why is my Wi-Fi slow?” questions, TCP is the right starting point. If TCP looks fine but Zoom is choppy, switch to UDP and look at jitter and packet loss.

Multiple parallel streams

One TCP stream rarely saturates modern Wi-Fi. If you’re testing a Wi-Fi 6 or 6E link, run with 4 or 8 parallel streams to see the real ceiling. The app exposes this as a simple setting — no -P 4 flag to memorise.

Why a dedicated iPerf3 app on the phone

You can SSH into a Linux box, install the iperf3 binary, and run it from the command line. Most people don’t. Three practical reasons to use a native app on the device you’re actually holding:

  1. You’re testing the Wi-Fi link from the phone itself. If you SSH from a laptop, you’re testing the laptop’s Wi-Fi, not the phone’s. The phone is where most of your real-world traffic lives — streaming, calls, web — so the phone is where you want to measure.
  2. You can test anywhere. Walking through the house, room by room, with a phone in your hand is exactly the workflow for finding Wi-Fi dead zones. A laptop on AC power isn’t.
  3. No terminal required. Field techs, MSPs, and Wi-Fi installers benefit from a tappable UI they can hand to a client or a junior engineer. The wire-format results are identical to the CLI — it’s the same protocol — so technical users get nothing inferior.

Bottom line

Speedtest tells you how fast your internet is. iPerf3 tells you how fast anything you own is. They are not interchangeable, and the most common Wi-Fi troubleshooting mistake is using Speedtest for both. If you’ve ever blamed your ISP for a Wi-Fi problem, or blamed your router for an ISP problem, you needed iPerf3 to tell them apart.

Run the iPerf3 app once, on the phone you already carry, against any device on your LAN. You’ll know within thirty seconds whether the slow part of your network is the part you can fix.