When testing VPN speed, the conclusion depends not on the speed-test site's interface but on which segment of the path you measured, at what hour, and how many runs you did. On the same device with the same subscription, changing the test server or the hour can shift results several-fold — the route isn't lying; the two measurements simply answer different questions. Below we split measurement into three layers, four metrics and a repeatable process, so comparisons between routes actually mean something.
First, define the method: what each of the four metrics covers
What people call “slow internet” maps to at least four different quantities. Latency, jitter and packet loss describe link quality; throughput describes the transfer result. If any one of the four degrades, you may feel it as “lag”, but the fix is completely different: packet loss means changing routes, jitter means avoiding peak hours, and low throughput may just be a single-thread limit that has nothing to do with route quality.
| Metric | What it measures | How it feels when it degrades | Common test method |
|---|---|---|---|
| Latency (RTT) | Time for one packet to make a round trip | Slow first byte on web pages, laggy game input | ping, mtr, built-in client latency |
| Jitter | How much latency swings across consecutive samples | Choppy voice calls, video stalling out of nowhere | Run 20+ pings and compare the maximum with the minimum |
| Packet loss | Share of sent packets that never arrive | TCP retransmits and throughput drops a tier; UDP just stutters | Loss rate from ping and mtr, cross-checked against TCP behavior |
| Throughput | Data actually transferred per unit of time | Slow downloads, HD video buffering over and over | Multi-threaded speed tests, single-threaded downloads, iperf3 |
Bandwidth and throughput are not the same thing. Bandwidth is the nominal ceiling of the link; throughput is what you actually get on your device, with protocol overhead, server-side throttling, per-connection window limits and other users on the same route in between. So when you see Mbps, check whether it refers to bandwidth or throughput before you treat it as a basis for comparison.
Tools: measure in three layers, don't settle it with one browser score
Split measurement into three layers and use the right tool for each; only then do conclusions hold. Mix the layers and the numbers will contradict each other.
| Layer | Tool | What it answers | Limitations |
|---|---|---|---|
| Link layer | ping, pathping (Windows), mtr (Linux and macOS) | Latency, packet loss, and which hop starts to degrade | ICMP may be rate-limited or blocked; cross-check loss against TCP behavior |
| Throughput layer | Speed-test sites, iperf3 | Real multi-threaded or point-to-point throughput | Speed-test sites default to a nearby server, so numbers skew optimistic |
| Application layer | Actually opening the target site, video or game | Real-world feel and time to first byte | Caching skews results; a second playback doesn't reflect link capacity |
Most browser speed-test sites run multi-threaded HTTP, which is good for seeing a route's ceiling. They pick a nearby server by default, so the number answers “how fast is it to the closest test server”, not “how fast is it to the service you actually use”. Both numbers can be true at once — one high, one low — and neither is wrong.
iperf3 is good for point-to-point verification: you can set the number of concurrent connections and the test duration, and rule out browser and speed-test-site interference — at the cost of needing a controllable node at both ends. For everyday self-testing, the more practical approach is: a multi-threaded speed-test site for the ceiling, a single-threaded download for the floor, and write down both numbers.
Where the test server sits decides the conclusion
When comparing two routes, the test server, the test file and the concurrency must be identical. Change any one of them and the numbers can no longer be compared.
Timing and run count: making two measurements comparable
A single measurement is just one sample. Load on international routes follows a clear daily pattern, and the gap between evening peak and the small hours is often bigger than the gap between two routes. So compare trends across time slots, and only compare side by side within the same slot if you want a ranking.
- Test once at peak and once off-peak, and record the median for each slot.
- Run the same route three times and take the median, not the maximum.
- Record every time: date, route name, protocol, client version, single- or multi-threaded.
- When switching routes, change only one variable — device, client and test server stay the same.
- Update the subscription before testing and confirm the node list hasn't changed.
Concluding from the maximum is the most common mistake
Peaks usually come from caching, short bursts, or simply nobody else using the route at that moment. The median is what your experience looks like most of the day.
Reading the metrics: from numbers to conclusions
Once you have a set of numbers, reading them in a fixed order is far more reliable than going by feel.
- Check packet loss first. If loss stays above zero, change routes — don't fiddle with client settings; adjusting MTU won't save it.
- Then look at jitter. If jitter approaches the latency itself, the link is queueing — usually congestion in the transit segment or shared bandwidth being maxed out.
- Then throughput. Normal latency and low jitter but throughput that won't rise usually means a single-thread limit, server-side throttling or protocol overhead.
- Finally, the real-world feel. Time to first byte, video start-up and in-game responsiveness are the combined result of the first three — and the only metric worth tracking long term.
High-latency links have another easily overlooked mechanism: the throughput of a single TCP connection is limited by the bandwidth-delay product. The higher the latency, the harder it is for one connection to fill a high-bandwidth link; you need several concurrent connections to saturate it. So “multi-thread saturates it, single-thread doesn't” is normal and doesn't necessarily mean the route is broken.
Order of judgment: packet loss → jitter → throughput → real-world feel. Until the previous item is ruled out, the next number has no reference value.
Protocols and route types change the result
Protocol differences come down to two things
First, the transport layer. Shadowsocks, VMess, VLESS and Trojan mostly run over TCP and can also forward UDP; Hysteria2 and TUIC are built on QUIC and run over UDP. On links with obvious packet loss, the QUIC family uses more aggressive congestion control and recovers faster — but if the network rate-limits or blocks UDP, they perform worse instead, which is easily misread in a self-test as “the protocol is bad”.
Second, handshakes and overhead. VMess carries a timestamp check, so a large clock skew on the device makes handshakes fail outright; VLESS is stateless and, combined with XTLS, saves one TLS encrypt/decrypt pass, using less CPU at high bandwidth; Trojan relies on standard TLS, so its traffic looks closer to ordinary HTTPS. These differences are almost unmeasurable at low bandwidth and only show up on long fat pipes.
Route types: direct, relay, IEPL dedicated line
- Direct. The client connects straight to the exit; latency depends on how congested the international exit is, and swings most at evening peak.
- Relay. Traffic enters a relay node first and is forwarded to the exit; whether the relay segment's bandwidth is dedicated directly determines peak-hour performance.
- IEPL dedicated line. A point-to-point dedicated link that doesn't use the public international exit — the most stable latency and loss, and the highest cost.
So nodes in the same “region” can produce completely different curves depending on route type. Write the route type into your records when comparing; otherwise the data can't be reused and you'll have to start over next week.
When switching routes by region, here are the facts to check against: 100+ countries and 250+ routes; the subscription doesn't limit simultaneous devices, so re-testing on another device needs no reconfiguration; a 30-day refund, no questions asked, so if testing shows it isn't right for you, you can simply refund.
Ruling out false readings: a few common culprits
Distorted speed-test results are usually not the route's fault, but a few of the following not being cleaned up.
- ✅ Update the subscription before testing and confirm you're testing the same route; once a node is renamed or its IP changes, earlier conclusions are void.
- ❌ Testing with split-tunneling rules on. Some traffic goes direct, so the result mixes the behavior of two paths and you can't tell which is which.
- ✅ Check the domain resolution path: if lookups go through your local ISP, you may get a nearby CDN node — nice numbers that say nothing about exit quality.
- ❌ Judging throughput from one video playback. Once it hits cache, smooth playback has nothing to do with link capacity.
- ✅ Compare within the same client. Different clients have different default MTU, UDP forwarding switches and split-tunneling policies, so cross-client number comparisons are meaningless.
- ❌ Treating “speedup ratio” or “X% faster” as a metric. Converted numbers have no baseline and can't be reproduced.
DNS leaks distort speed-test results
The check is simple: open any DNS leak test page and see whether the resolving server's location matches the exit region. If it doesn't, domain lookups aren't going through the proxy, and when you reach the target site you'll be routed to a nearby node — so what you measured is actually a different path. Check how DNS is handled in your split-tunneling rules, send resolution through the proxy, and test again.
A repeatable self-test process
Run the following in order; the results can be compared side by side, and re-run a week later to check stability.
- Fix the variables. Same device, same client, same test server — settle these before you start.
- Update the subscription. Note the route name and protocol; every later record refers back to this line.
- Test the link layer. Send 20 packets in a row to see latency and loss, then look at the hop-by-hop path to locate which segment is the problem.
- Test the throughput layer. One multi-threaded speed test, one single-threaded download, record the two numbers separately.
- Test the application layer. Open the service you actually use and note time to first byte and whether it buffers.
- Switch to the next route and repeat steps 3 to 5, keeping the variables fixed.
- Summarize into one line of records, then decide which route to keep and which to use at which hours.
Two command-line tools are enough; on Windows, swap ping for ping -n 20 and mtr for pathping. Here a public resolver is used as the reference point — its nodes are usually nearby, so latency is low. To judge the path to a real target, replace the address with the domain you actually visit; the target must be identical within one set of comparisons.
# Latency and packet loss: send 20 packets, check average latency and loss rate
ping -c 20 1.1.1.1
# Hop-by-hop path: 50 packets per hop to locate where loss starts
mtr -rwc 50 1.1.1.1
Conclusion: fix the variables and a single measurement means something; write the records down and switching routes has a basis. Numbers are for ranking, not for absolute judgments.
FAQ
The numbers I get are far below the advertised figures — is that a route problem?
First confirm three things: the same test server, single-threaded or not, and whether you tested at evening peak. Compare only once all three line up. Multi-threaded tests skew toward the ceiling, single-threaded downloads toward the floor; they were never going to match.
Why do my phone and laptop get different results on the same route?
The client implementations differ at each end — default MTU, UDP forwarding switches and split-tunneling rules can all vary; the wireless network itself adds jitter too. If you want to compare, compare on the same device with the same client.
Do I need to test before every use?
No. Test intensively once when choosing routes and keep the records; afterwards, re-test only when the experience clearly changes — a new network, a new client version, or a regular peak-hour slot.
Should I turn off other devices at home while testing?
Yes. Downloads, backups and video streaming on the same exit all take bandwidth, especially on shared routes. To measure the link's own quality, make sure no other traffic is running during the test.