Medir el ancho de banda de la red con iperf o jperf

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 :

iperf-windows

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:

iperf-10G

Sobran los comentarios  🙂

 

 

 

2 Comments

  • Vicente
    17/03/2015 - 8:32 pm | Permalink

    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!

    • 17/03/2015 - 9:40 pm | Permalink

      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

  • Leave a Reply

    Your email address will not be published. Required fields are marked *