iPerf es una herramienta diseñada para medir el ancho de banda (bandwidth) entre dos hosts a través de la red. Se trata de una herramienta muy sencilla y a la vez potente que permite generar tráfico / carga TCP o UDP entre dos nodos. Podrías usarla para medir el ancho de banda máximo de la red entre un cliente y un servidor. Puede utilizarse para hacer pruebas de estrés de la red Ethernet, Wi-Fi, o de tu ISP.

iPerf2 vs iPerf3, ¿Cuál es la diferencia?

Ha habido diferentes versiones de esta herramienta en los últimos años. Empezó con ttcp del National Laboratory for Applied Network Research (NLANR), y después fue desarrollado iPerf (iPerf 2). iPerf3 is una nueva implementación hecha desde cero con el objetivo de tener una versión con código más simple, más pequeño y una librería de la funcionalidad para que pueda ser usada por otros programas. La funcionalidad entre iPerf2 y IPerf3 es principalmente compatible, sin embargo, deberías saber que usan puertos distintos por defecto. En Iperf2, el puerto por defecto es el 5001, y en iPerf3, el 5201.

iPerf3 añade funcionalidades adicionales, como informes de retransmisiones TCP, y el modo verbose da mucha información de uso de CPU… etc. Además, tiene una mejor implementación para realizar pruebas UDP. Finalmente, el código de Iperf3 es más pequeño y está optimizado.

En las pruebas hechas en este post, vamos a utilizar iPerf3.

Midiendo el ancho de banda de la red con TCP

Para ejecutar una prueba rápida de ancho de banda, primero debes de identificar la máquina servidor, y la máquina cliente.

Máquina Servidor

El servidor estará escuchando nuevas conexiones. En nuestro caso, utilizando iPerf3, el puerto que escucha es el 5201.

Para dejar el servidor de iPerf corriendo:

iperf3 -s

Máquina cliente

Ahora puedes iniciar un cliente que realizará la prueba de rendimiento de subida (upload) desde el cliente al servidor (Cliente -> Servidor).

iperf3 -c <SERVER IP> -i 1 -t 20

En este caso, he añadido la opción -i para tener un informe cada segundo, y el parámetro -t para establecer la duración del test, en nuestro caso, 20 segundos.

root|lavrea:~$ iperf3 -c 159.65.5.190 -i 1 -t 20
Connecting to host 159.65.5.190, port 5201
[  5] local 167.172.3.43 port 49756 connected to 159.65.5.190 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec   214 MBytes  1.80 Gbits/sec  13018   55.1 KBytes       
[  5]   1.00-2.00   sec   196 MBytes  1.65 Gbits/sec  13665    250 KBytes       
[  5]   2.00-3.00   sec   254 MBytes  2.13 Gbits/sec  19770   42.4 KBytes       
[  5]   3.00-4.00   sec   184 MBytes  1.54 Gbits/sec  11308    188 KBytes       
[  5]   4.00-5.00   sec   241 MBytes  2.02 Gbits/sec  18500   48.1 KBytes       
[  5]   5.00-6.00   sec   188 MBytes  1.57 Gbits/sec  13761   56.6 KBytes       
[  5]   6.00-7.00   sec   235 MBytes  1.97 Gbits/sec  12436    245 KBytes       
[  5]   7.00-8.00   sec   205 MBytes  1.72 Gbits/sec  13587    318 KBytes       
[  5]   8.00-9.00   sec   229 MBytes  1.92 Gbits/sec  14720    191 KBytes       
[  5]   9.00-10.00  sec   229 MBytes  1.92 Gbits/sec  12992    188 KBytes       
[  5]  10.00-11.00  sec   241 MBytes  2.02 Gbits/sec  15559   19.8 KBytes       
[  5]  11.00-12.00  sec   238 MBytes  1.99 Gbits/sec  13002   69.3 KBytes       
[  5]  12.00-13.00  sec   211 MBytes  1.77 Gbits/sec  18426   31.1 KBytes       
[  5]  13.00-14.00  sec   212 MBytes  1.78 Gbits/sec  12496   33.9 KBytes       
[  5]  14.00-15.00  sec   200 MBytes  1.68 Gbits/sec  16435    191 KBytes       
[  5]  15.00-16.00  sec   225 MBytes  1.89 Gbits/sec  12645   35.4 KBytes       
[  5]  16.00-17.00  sec   212 MBytes  1.78 Gbits/sec  17291   53.7 KBytes       
[  5]  17.00-18.00  sec   212 MBytes  1.78 Gbits/sec  13723   48.1 KBytes       
[  5]  18.00-19.00  sec   238 MBytes  1.99 Gbits/sec  11413   70.7 KBytes       
[  5]  19.00-20.00  sec   212 MBytes  1.78 Gbits/sec  13865   46.7 KBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-20.00  sec  4.27 GBytes  1.84 Gbits/sec  288612             sender
[  5]   0.00-20.01  sec  4.27 GBytes  1.83 Gbits/sec                  receiver

iperf Done.

En el informe del cliente, podemos ver que en este caso nuestro ancho de banda TCP es de 1.84 Gbits/sec.

Midiendo el ancho de banda de la red con UDP

TCP es un protocolo que automáticamente hace limitación de velocidad para adaptarse al ancho de banda disponible que la conexión puede manejar, así que es difícil estresar de verdad una conexión usando TCP. Para hacer una prueba que estrese más la red, en su lugar puedes utilizar el protocolo UDP.

Máquina Servidor

Con iPerf3, no es necesario cambiar nada en el lado del servidor con respecto a la prueba TCP.

iperf3 -s

Máquina Cliente

En el lado del cliente, es necesario añadir el parámetro -u para utilizar UDP. Además, es necesario definir el ancho de banda con el parámetro -b (por defecto es 1 Mbps). En nuestro caso, voy a establecer 10G (10 Gbps).

iperf3 -c <SERVER IP> -u -i 1 -t 20 -b 10G

Y aquí está el resultado del test:

root|lavrea:~$ iperf3 -c 159.65.5.190 -u -i 1 -t 20 -b 10G
Connecting to host 159.65.5.190, port 5201
[  5] local 167.172.3.43 port 47554 connected to 159.65.5.190 port 5201
[ ID] Interval           Transfer     Bitrate         Total Datagrams
[  5]   0.00-1.00   sec   198 MBytes  1.66 Gbits/sec  143338  
[  5]   1.00-2.00   sec   175 MBytes  1.47 Gbits/sec  126975  
[  5]   2.00-3.00   sec   189 MBytes  1.59 Gbits/sec  137109  
[  5]   3.00-4.00   sec   147 MBytes  1.24 Gbits/sec  106805  
[  5]   4.00-5.00   sec   170 MBytes  1.43 Gbits/sec  123358  
[  5]   5.00-6.00   sec   218 MBytes  1.83 Gbits/sec  158036  
[  5]   6.00-7.00   sec   150 MBytes  1.26 Gbits/sec  108566  
[  5]   7.00-8.00   sec   190 MBytes  1.60 Gbits/sec  137854  
[  5]   8.00-9.00   sec   185 MBytes  1.55 Gbits/sec  133897  
[  5]   9.00-10.00  sec   203 MBytes  1.70 Gbits/sec  146706  
[  5]  10.00-11.00  sec   223 MBytes  1.87 Gbits/sec  161391  
[  5]  11.00-12.00  sec   203 MBytes  1.70 Gbits/sec  146963  
[  5]  12.00-13.00  sec   201 MBytes  1.69 Gbits/sec  145463  
[  5]  13.00-14.00  sec   188 MBytes  1.57 Gbits/sec  135785  
[  5]  14.00-15.00  sec   218 MBytes  1.83 Gbits/sec  158091  
[  5]  15.00-16.00  sec   195 MBytes  1.64 Gbits/sec  141318  
[  5]  16.00-17.00  sec   192 MBytes  1.61 Gbits/sec  139124  
[  5]  17.00-18.00  sec   199 MBytes  1.67 Gbits/sec  144444  
[  5]  18.00-19.00  sec   192 MBytes  1.61 Gbits/sec  139256  
[  5]  19.00-20.00  sec   203 MBytes  1.71 Gbits/sec  147310  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Jitter    Lost/Total Datagrams
[  5]   0.00-20.00  sec  3.75 GBytes  1.61 Gbits/sec  0.000 ms  0/2781789 (0%)  sender
[  5]   0.00-20.00  sec  3.74 GBytes  1.61 Gbits/sec  0.003 ms  4889/2781789 (0.18%)  receiver

iperf Done.

En este caso, el ancho de banda con UDP tiene una tasa de 1.61 Gbits/sec.

Midiendo el ancho de banda con servidor públicos de iPerf

Para comprobar una conexión a Internet, podrías utilizar un servidor público de iPerf. En la web oficial de iPerf, hay una lista de servidores disponibles.

Comandos básicos que deberías saber

Máquina Servidor

Iniciar el servidor en modo demonio

iperf3 -s -D

Definir un puerto diferente

iperf3 -s -p 5003

Añadir un fichero de log con timestamps

iperf3 -s -D --logfile /var/log/iperf.log --timestamps

Añadir la opción verbose

iperf3 -s -V

Máquina Cliente

Establecer frecuencia de informes por intervalos

Inicia una prueba de 30 segundos, dando resultados cada 2 segundos.

iperf3 -c <SERVER IP> -i 2 -t 30

Dirección inversa

Inicia un servidor en la dirección SERVIDOR -> CLIENTE. Por defecto, iPerf envía el tráfico en la otra dirección (CLIENTE -> SERVIDOR). Es especialmente interesante para comparar Uplink vs Downlink.

iperf3 -c <SERVER IP> -r -i 1 -t 30

Flujos paralelos y cambio de ventana TCP

Inicia un test con 4 flujos paralelos, y con una ventana TCP de 32768K.

iperf3 -c <SERVER IP> -i 1 -t 20 -w 32768 -P 4

Conclusión

iPerf3 es una herramienta muy interesante con un montón de diferentes ociones de configuración que puede ayudarnos a medir el ancho de banda de nuestras máquinas.