Iperf es una herramienta que nos permite realizar un test de velocidad de red.
Para ser mas exactos, iperf permite medir el ancho de banda entre dos hosts usándolo en modo cliente-servidor y con tcp o udp como protocolos de conexión.
Muchas veces a los administradores e ingenieros de red nos llegan tests de velocidad de clientes “expertos” que pretenden medir el ancho de banda entre dos hosts usando una c0pia de ficheros por scp…
Lo que no saben éstos es que scp incluye cabeceras ssh que ralentizan la transferencia precisamente por el cifrado que se realiza. SCP es un software para copiar ficheros usando un canal cifrado de ssh. Scp y ftp no son herramientas de medición de red. Además, añadir en la medición el acceso a disco ( por la copia ) significa incluir un cuello de botella en la “medición”. En los otros protocolos de transferencia de ficheros que no van cifrados, si pasan por un firewall, se puede estar inspeccionando los paquetes a nivel de aplicación, por lo que además, introducimos otros factores en la “medición”.
Iperf no cifra, por defecto no usa disco, simplemente se conecta a un socket y transfiere datos desde el sistema operativo.
- Descarga
Existe la versión para linux en http://sourceforge.net/projects/iperf/files/ y la versión para windows en http://sourceforge.net/projects/iperf/files/jperf/
La versión para windows, jperf, incluye un fichero .bat que ejecuta un frontend basado en java. Si nos descargamos jperf, veremos en el directorio “bin” donde hallamos descomprimido un fichero “iperf.exe”, que no es más que el iperf en modo comandos para windows.
Los comandos de iperf son comunes en linux y windows.
Iperf permite muchos flags para especificar si el transporte lo hacemos sobre udp, tcp, para fijar la frecuencia de muestreo de estadísticas, el buffer, el tiempo máximo de prueba, tamaño de ventana tcp y un largo etcétera.
- Consideraciones importantes:
iperf trabaja en modo cliente-servidor, un extremo es el cliente y el otro extremo es el servidor.
Entre los extremos no deben estar filtrados los puertos de testeo de iperf. El servidor, por defecto, escucha en el tcp/5001, así que si no funciona … hay que revisar firewalling y nats en el tránsito del tráfico.
El cliente iperf sube datos al servidor. Esto es, el cliente se conecta al puerto tcp/5001 del servidor ( configuración por defecto ) e inyecta datos en el canal de subida del cliente. Es muy importante porque, a veces, la característica cliente se asocia a descarga y en iperf no es así.
En algunas topologías, iperf puede saturar el ancho de banda entre dos redes si existe un cuello de botella… cuidado !
- Ejemplo sobre una vlan con accesos a 100 Mbps:
cliente windows ( sube datos ) = 192.168.5.226 servidor linux = 192.168.5.4 comando en servidor: [root@ratassa-vmware ~]# iperf -s -t 30 -i 5 comando en cliente windows : C:\>iperf -c 192.168.5.4 -t 30 -i 5
Explicación de los flags :
-s : modo servidor -t 30 : duración del test 30 segundos - i 5 : intervalo de muestra de estadísticas cada 5 segundos -c 192.168.5.4 : en el cliente ( que tiene ip 192.168.5.226 ) le decimos que se conecte al servidor con ip 192.168.5.4 puertos : por defecto el servidor escucha en el puerto tcp 5001 y el cliente usa un puerto dinámico > 1024 como puerto origen
Resultados vistos en servidor:
[root@ratassa-vmware ~]# iperf -s -t 30 -i 5 ------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 85.3 KByte (default) ------------------------------------------------------------ [ 4] local 192.168.5.4 port 5001 connected with 192.168.5.226 port 46181 [ ID] Interval Transfer Bandwidth [ 4] 0.0- 5.0 sec 56.3 MBytes 94.5 Mbits/sec [ 4] 5.0-10.0 sec 56.3 MBytes 94.5 Mbits/sec [ 4] 10.0-15.0 sec 56.3 MBytes 94.5 Mbits/sec [ 4] 15.0-20.0 sec 56.3 MBytes 94.5 Mbits/sec [ 4] 20.0-25.0 sec 56.3 MBytes 94.5 Mbits/sec [ 4] 0.0-29.8 sec 336 MBytes 94.5 Mbits/sec
Resultados vistos en cliente :
C:\>iperf -c 192.168.5.4 -t 30 -i 5 ------------------------------------------------------------ Client connecting to 192.168.5.4, TCP port 5001 TCP window size: 8.00 KByte (default) ------------------------------------------------------------ [1912] local 192.168.5.226 port 46181 connected with 192.168.5.4 port 5001 [ ID] Interval Transfer Bandwidth [1912] 0.0- 5.0 sec 56.1 MBytes 94.2 Mbits/sec [1912] 5.0-10.0 sec 55.9 MBytes 93.8 Mbits/sec [1912] 10.0-15.0 sec 56.2 MBytes 94.3 Mbits/sec [1912] 15.0-20.0 sec 56.0 MBytes 93.9 Mbits/sec [1912] 20.0-25.0 sec 55.9 MBytes 93.8 Mbits/sec [1912] 25.0-30.0 sec 56.0 MBytes 94.0 Mbits/sec [1912] 0.0-30.0 sec 336 MBytes 93.9 Mbits/sec
Veamos una gráfica de las conexiones de red del cliente windows para verificar lo que hemos visto en línea de comandos de iperf :
Hace un tiempo un cliente pretendía medir el ancho de banda entre dos firewalls conectados a 10 Gbps usando una transferencia de ficheros mediante scp y reclamaba que la red iba lenta porque sólo obtenía 700 Mbps.
Realizando la transferencia usando iperf sobre la red de 10Gbps, ejcutándolo varias veces para que fuera capturado por el polling de un servidor de gráficas cacti, este fue el resultado visualizado:
Sobran los comentarios 🙂
2 Comments
Hola, excelente post, veo que Iperf entrega sólo un valor de ancho de banda y tengo entendido que es el obtenido por un flujp de datos que va desde el cliente al servidor. ¿ Hay alguna opción para hacer el proceso inverso?, es decir, calcular el ancho de banda o tasa de transferencia creando un flujo de datos desde el servidor al cliente?.
Gracias. Saludos!
Hola Vicente,
gracias!
Si, en la versión 3 de iperf (iperf3) es posible realizar el flujo inverso pasándole la opción -R
-R, –reverse run in reverse mode (server sends, client receives)
https://code.google.com/p/iperf/wiki/ManPage
https://github.com/esnet/iperf
Si usas Centos, está en el repositorio EPEL.
Si usas la versión 2 de iperf, puedes hacer un dual test ( ambos sentidos a la vez ) con la opción -d.
Pero en realidad, es como crear una instancia de cliente y servidor a la vez en cada extremo, por lo que es posible que haya que abrir el firewall en algunos entornos para flujo inverso.
Es decir, que iperf2 como cliente no mide la descarga, sólo la subida.
Saludos!
Xavi