Measuring Internet Speed via NDT

Measuring download and upload speed is a good way to find if the Internet bandwidth is causing network or application performance degradation issues. An Internet connection should have enough bandwidth to allow all users and applications to communicate with external hosts. A simple formula to calculate the Internet bandwidth is: 

Internet Bandwidth = ( Average Bandwidth Consumption per Host * Number of Hosts )

In this equation, a host can be an end-user’s desktop or a server. In the case of business connections, the bandwidth should also account for future growth, so in general it’s always good to add an extra 20-40% of bandwidth. This extra amount of bandwidth can also be used to cover bursts periods.

Let’s assume that you have selected an Internet connection that offers enough capacity to users and applications, yet experience applications slowness. In this case, it’s possible that the Internet Service Provider (ISP) is not honoring the Service Level Agreement (SLA).

The best way to find this out, is to run a download and upload throughput test, that is, run an Internet speed test.

Ookla speed test and NDT

I am sure that most of the readers are familiar with the Ookla speed test. This test runs a download and upload throughput test within a browser to see how much bandwidth the ISP is providing. However, if you search for “internet speed test”, you can see that Google has started to offer a speed test service that is competing with the traditional Ookla speed test:

Internet speed test on google

This test is well integrated with the google search engine, and the graphical user interface is pretty nice … as it’s shown in the below screenshots, it’s definitely time for me to upgrade my home connection 🙂

2020 Update to NDT Server Naming

On May 7 2020, M-Lab announced an update to the FQDN for Experiments. The new names will replace all non-subdomain-designating dots with dashes, and will also include a Google Cloud Project name. For example:

… will become:

You can read more on the M-Lab blog.If you click on the learn more link, you can find that the Internet speed test offered by Google is using the Network Diagnostic Tool (NDT) developed by the M-Lab consortium, whose goal is to create an “open, verifiable measurement platform for global network performance”. The mission of the M-Lab consortium is in line with NetBeez, because it wants to empower users with tools and resources that will help them to point out whether application slowness is caused by the connection, the application, or something else.

Installing NDT on Linux

If you want to test the NDT command, the installation is very simple. Download the source tarball on your Linux host, and then compile the source code following the below instructions:

tar xvzf ndt-3.7.0.tar.gz
cd ndt-3.7.0
make install

The NDT package contains many executables, including the web100clt command that is used to run the Internet speed test. Let’s see this command in action.

Running NDT via command line

Running the web100clt command is as simple as running the speed test-cli command, the open source version of the Ookla speed test. The only difference is that, while the speed test-cli automatically finds the server with the lowest latency, the web100clt requires a server to be specified. In this case, I have selected the server located in Washington, D.C.

root@ubuntu:~/ndt-3.7.0# web100clt -n

Testing network path for configuration and performance problems  --  Using IPv4 address

Checking for Middleboxes . . . . . . . . . . . . . . . . . .  Done

checking for firewalls . . . . . . . . . . . . . . . . . . .  Done

running 10s outbound test (client to server) . . . . .  79.69 Mb/s

running 10s inbound test (server to client) . . . . . . 39.85 Mb/s

sending meta information to server . . . . . Done

The slowest link in the end-to-end path is a 1.0 Gbps Gigabit Ethernet subnet

Information: Other network traffic is congesting the link

Information: The receive buffer should be 14204 kbytes to maximize throughput

Server '' is not behind a firewall. [Connection to the ephemeral port was successful]

Client is probably behind a firewall. [Connection to the ephemeral port failed]

Packet size is preserved End-to-End

Server IP addresses are preserved End-to-End

Information: Network Address Translation (NAT) box is modifying the Client's IP address

       Server says [ X.X.X.X] but Client says [ Y.Y.Y.Y]

You can see that, when compared to the speed test-cli command, the NDT’s web100ctl provides much more information about the host that is running the test, and the network in between the client and the server. Some useful information that you can obtain by running the web100ctl command is:

  • Identification of the slowest link between traversed by the packets
  • Identification of network firewalls between the client and the server
  • Packet size
  • Whether the client or the server are behind NAT

NDT worldwide servers

Since the web100ctl command doesn’t automatically select the destination server to use for the Internet speed test, A list of NDT servers is available on the M-Lab website at the URL: When you access this webpage, you’ll first see a map of the world with all the servers available.

M-LAB NDT servers deployment

If you click on one pin in the map, you can see the list of servers available at that location, along with their status information and the timestamp of the last check (encoded in UTC).

M-LAB server

The syntax to use one specific server is the following:


In the previous example, if you want to use the second server from the Miami (FL) location, you’ll type:


This hostname along with the fully qualified domain name will be passed to the web100ctl command after the -n flag. Unlike the speed test-cli command, which does first probe a group of servers before selecting the one with the lowest latency, it doesn’t appear that here the selection can be done automatically. Users may want to test different servers to run tests against, starting with the ones that are geographically closer to the client.

NetBeez users

If you are the proud owner of a NetBeez dashboard, you are probably aware that the speed test-cli is already available and integrated with the user interface.

Network speed test in NetBeez

If you want to run the NDT speed test command on one of your NetBeez agents, you can install and run the web100ctl command straight through the interactive console available under the agent’s detailed view.

I hope this blog post was useful to review yet another tool available to assess your network performance. I believe that the NDT command developed by the M-Lab consortium offer a great alternative to test your Internet speed.

2020 Update to FQDN Experiments

In May 2020 M-Lab announced new FQDNs for Experiments.

The new names will replace all non-subdomain-designating dots with dashes, and will also include a Google Cloud Project name. For example:

… will become:

decoration image

Get your free trial now

Monitor your network from the user perspective

You can share

Twitter Linkedin Facebook

Let's keep in touch

decoration image