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.