Testing network speed on Linux helps you verify that your link delivers the bandwidth and stability you expect. Whether you are tuning servers, troubleshooting latency, or validating cloud pipelines, command line tools give you precise, reproducible metrics.
Use these insights to compare configurations, detect bottlenecks, and document performance for audits or troubleshooting sessions.
| Tool | Transport | Best For | Installation Complexity |
|---|---|---|---|
| iperf3 | TCP/UDP | Throughput and raw bandwidth | Low, available in most repos |
| speedtest-cli | HTTP(S) | Real world ISP-like tests | Low, Python based |
| nmap nse scripts | TCP/UDP | Quick checks and discovery | Medium, part of nmap suite |
| nuttcp | TCP/UDP | Low level tuning and kernel parameter impact | Medium, requires package or compile |
| bwping | ICMP/UDP | Measuring available bandwidth without heavy load | Low to Medium |
Install and prepare Linux bandwidth test tools
Before you measure, install the utilities that match your environment and permissions. On Debian based systems, update packages and install iperf3, nuttcp, and speedtest-cli in one step to reduce friction.
On Red Hat based systems, use dnf or yum to pull the same set of tools, ensuring you have a consistent toolbox for different tests across machines.
For containerized environments, run the binaries inside the container or mount the network namespace so that measurements reflect the actual path rather than container overhead alone.
Run accurate iperf3 throughput tests
iperf3 is the go to choice for controlled throughput measurement between two endpoints. Start the listener on the target machine with a specific port, then run the client against it, forcing the direction and duration to match your real workload patterns.
Use UDP mode and explicit bitrate settings to probe packet loss and jitter, not just raw megabits per second, which helps you understand how the network behaves under congestion.
Record both MSS and window size parameters, and adjust TCP window scaling on the server side when you are testing over long distance links or high latency paths.
Measure real world speed with speedtest-cli
speedtest-cli leverages public CDN nodes to emulate typical user experiences, making it ideal for validating ISP service levels from the command line.
Schedule periodic runs with cron or a systemd timer to capture time based trends, and export results in CSV or JSON so you can graph performance over hours, days, or weeks.
Combine these measurements with traceroute and mtr to correlate latency spikes and packet loss with specific network hops, giving context to throughput changes.
Diagnose with nmap and nuttcp utilities
nmap scripts can perform basic network performance checks while you are already scanning for services, but keep the load light to avoid impacting production hosts.
nuttcp offers a range of options to manipulate socket buffers, set specific packet sizes, and validate kernel tuning, which is invaluable when you optimize high performance or long fat network paths.
Use bwping when you need a quick, low overhead estimate of available bandwidth, especially on links where you cannot or do not want sustained heavy traffic.
FAQ
Reader questions
How do I verify that my tests reflect real user experience and not just ideal lab conditions?
Run measurements from the actual client host over realistic protocols, mix TCP and UDP tests, vary window sizes, and compare against speedtest-cli results to mimic real user traffic patterns.
What should I monitor on the server side while iperf3 is running at high throughput?
Track CPU usage, interrupt rates, socket buffer exhaustion, and NIC ring drops to ensure the server itself is not the bottleneck during aggressive throughput testing.
How can I detect packet loss and jitter issues that only appear under load on Linux?
Use iperf3 in UDP mode, enable nmap scripts that generate background noise, and monitor with tools like nstat, sar, and mtr to capture transient loss and delay variation.
Can I automate bandwidth validation in a CI pipeline for cloud deployed services on Linux?
Yes, run speedtest-cli or iperf3 inside lightweight containers, capture structured JSON output, set thresholds, and fail the build when measured performance drops below agreed service levels.