Contacto:
Edificio CEI Parque Tecnológico de Galicia 32900 San Cibrao das V,
info@rcg-comunicaciones.com
Tel.: +34 988 011 33556

Mi herramienta preferida para medir el rendimiento de una red

Hoy quiero hablarte de una herramienta para medir el rendimiento de un enlace y como nos puede ayudar a optimizar nuestra red, ya que es habitual que me pregunten: ¿Cómo puedo medir la “velocidad de mi red”? ó ¿por qué me va tan lento el acceso al NAS desde mi equipo?

Para la evaluación de rendimientos en las comunicaciones en nuestras redes locales y posterior optimización de los parámetros, existen multitud de herramientas, pero voy a centrarme en la me he aficionado a utilizar.

Pero antes de nada, toca un poco de teoría…

¿Cómo cuantificar la calidad de un enlace de red?

Para medir la calidad de una red o de un enlace, deberemos determinar cada una de las siguientes métricas:

  • Latencia: Es el tiempo que tarda en transmitirse un paquete dentro de la red. Los retardos temporales dentro de una red, pueden estar producidos por el tamaño de los paquetes y/o el tamaño de los buffers.
  • Jitter: Término inglés para fluctuación, en redes se define como la variación en la latencia.
  • Ancho de banda: En redes, se conoce como ancho de banda a la cantidad de datos que pueden enviarse y recibirse en el marco de una comunicación en un tiempo determinado.
  • Pérdida de datagramas: Comúnmente denominado pérdida de paquetes, es cuando la información se pierde en el camino desde la fuente hacia el destinatario. Dicha información será reenviada después de un retraso o será descartada al recibir nueva información.

Para realizarlo, podemos realizar pruebas mediante los protocolos TCP (Protocolo de Control de Transmisión) y UDP (Protocolo de Datagramas de Usuario).

Mediante pruebas con el protocolo TCP, el cual, tiene un mecanismo que verifica la correcta recepción de los paquetes en el otro extremo de la comunicación, podremos:

  • Medir el ancho de banda.
  • Calcular el MTU

Utilizando el protocolo UDP, el cual, tiene mayor velocidad de transmisión ya que no realiza ningún tipo de verificación en la recepción de los paquetes, obtendremos datos sobre:

  • La variación de latencia.
  • La pérdida de datagramas

Iperf: La herramienta indispensable para medir el rendimiento de tus redes

Iperf es un software de código abierto cliente-servidor multiplaforma muy sencillo cuyo funcionamiento habitual es crear flujos de datos TCP y UDP y medir el rendimiento de la red.

Como ya he comentado, el programa es multiplataforma, pero los usuarios de Windows, dispondrán la opción de utilizar Jperf, que no es más que una opción gráfica de Iperf escrita en Java.

Incluso existe una versión para Android

Actualmente existen dos versiones, la 2 y la 3, pero debo avisaros que la versión 3 no mantienen la compatibilidad con la 2, yo personalmente sigo utilizando la versión 2.

Pruebas con Iperf

El el equipo que hará de servidor, bastará con ejecutar: iperf -s y se pondrá la escucha para conexiones entrantes.

En el equipo que usaremos como cliente,  si queremos ejecutarlo con las opciones por defecto, bastará con ejecutar: iperf -s “IP_Servidor”

Veamos un ejemplo en una red gigabyte:

  • En el Servidor (IP 10.0.0.1):

iperf -s
————————————————————
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
————————————————————
[  4] local 10.0.0.1 port 5001 connected with 10.0.0.2 port 58181
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.0 sec  1.09 GBytes   930 Mbits/sec

  • En el cliente (IP 10.0.0.2):

iperf -c 10.0.0.1
————————————————————
Client connecting to 172.30.0.203, TCP port 5001
TCP window size: 85.0 KByte (default)
————————————————————
[  3] local 10.0.0.2 port 58181 connected with 10.0.0.1 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  1.09 GBytes   931 Mbits/sec

Opciones adicionales

Dependiendo de la versión que utilicemos, tendremos un amplio abanico de parámetros que pasar al programa, podemos consultar las disponibles usando “iperf -h”, pero yo te voy a mostrar sólo alguna de ellas.

Formato de datos

El argumento –f sirve para mostrar los resultados en el formato deseado: bits(b), bytes(B), kilobits(k), kilobytes(K), megabits(m), megabytes(M), gigabits(g) or gigabytes(G).
Recordar que 1 byte es igual a 8 bits y que iperf usa 1024*1024 para medidas en megabytes y 1000*1000 para megabits.

iperf -c 10.0.0.1 -f MB
————————————————————
Client connecting to 10.0.0.1, TCP port 5001
TCP window size: 0.08 MByte (default)
————————————————————
[  3] local 10.0.0.2 port 58210 connected with 10.0.0.1 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  1124 MBytes   112 MBytes/sec


Medición del ancho de banda bidireccional

En un análisis por defecto solo se mide el ancho de banda en la dirección del cliente al servidor.

Con el argumento -r, realizaremos una medición bidireccional del ancho de banda y con argumento -d, realizaremos una medición bidireccional simultáneamente.

iperf -c 10.0.0.1 -d
————————————————————
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
————————————————————
————————————————————
Client connecting to 10.0.0.1, TCP port 5001
TCP window size:  510 KByte (default)
————————————————————
[  5] local 10.0.0.2 port 58211 connected with 10.0.0.1 port 5001
[  4] local 10.0.0.2 port 5001 connected with 10.0.0.1 port 40991
[ ID] Interval       Transfer     Bandwidth
[  5]  0.0-10.0 sec   607 MBytes   509 Mbits/sec
[  4]  0.0-10.0 sec  1.08 GBytes   930 Mbits/sec

Temporización

El argumento –t especifica la duración del análisis en segundos, por defecto 10 segundos.
El argumento –i indica el intervalo entre reportes de ancho de banda en segundos.

iperf -c10.0.0.1 -i2 -t6
————————————————————
Client connecting to 10.0.0.1, TCP port 5001
TCP window size: 85.0 KByte (default)
————————————————————
[  3] local 10.0.0.2 port 58213 connected with 10.0.0.1 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0- 2.0 sec   227 MBytes   954 Mbits/sec
[  3]  2.0- 4.0 sec   224 MBytes   937 Mbits/sec
[  3]  4.0- 6.0 sec   225 MBytes   943 Mbits/sec
[  3]  0.0- 6.0 sec   676 MBytes   944 Mbits/sec

Tamaño de la ventana TCP

Mediante el argumento -w podremos fijar el tamaño de la ventana TCP dentro de un rango de 2 a 65,535 bytes, es decir, la cantidad de datos que pueden almacenarse en el buffer de la tarjeta de red.

iperf -c 10.0.0.1 -w 2000
WARNING: TCP window size set to 2000 bytes. A small window size
will give poor performance. See the Iperf documentation.
————————————————————
Client connecting to 10.0.0.1, TCP port 5001
TCP window size: 4.50 KByte (WARNING: requested 1.95 KByte)
————————————————————
[  3] local 10.0.0.2 port 58230 connected with 10.0.0.1 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec   740 MBytes   621 Mbits/sec

Tamaño máximo del segmento

El argumento -m nos dará el MMS (tamaño máximo del segmento) y la MTU (unidad máxima de transferencia)
Mediante el argumento -M podremos fijar el MMS.

iperf -c 10.0.0.1 -m
————————————————————
Client connecting to 10.0.0.1, TCP port 5001
TCP window size: 85.0 KByte (default)
————————————————————
[  3] local 10.0.0.2 port 58200 connected with 10.0.0.1 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  1.10 GBytes   944 Mbits/sec
[  3] MSS size 1448 bytes (MTU 1500 bytes, ethernet)

 

Pruebas con UDP

Con el argumento –u en el cliente y el servidor, realizaremos pruebas mediante el protocolo UDP.
El argumento –b permite utilizar el ancho de banda deseado en bits/sec ó n[KM], por defecto 1 Mbit/sec.

iperf -c 10.0.0.1 -u -b 5M
————————————————————
Client connecting to 10.0.0.1, UDP port 5001
Sending 1470 byte datagrams
UDP buffer size:  208 KByte (default)
————————————————————
[  3] local 10.0.0.2 port 50549 connected with 10.0.0.1 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  5.96 MBytes  5.00 Mbits/sec
[  3] Sent 4253 datagrams
[  3] Server Report:
[  3]  0.0-10.0 sec  5.96 MBytes  5.00 Mbits/sec   0.022 ms    0/ 4253 (0%)

¿Como podemos optimizar nuestra red?

Recuerda, mediante este sencillo programa, podremos conocer las siguientes métricas de nuestra red:

  • Ancho de banda: Nos ayuda a identificar si el problema está en nuestra red o enlace (Wifi, VPN, configuración red, etc…)
  • MTU: Como os comenté en el artículo de Jumbo Frames, el ajuste del MTU puede mejorar el rendimiento de tu red o conseguir el efecto contrario.
  • Pérdida de datagramas: Si supera un 1%, se generarán las suficientes retransmisiones como para afectar al ancho de banda.
  • Jitter: Un dato muy a tener en cuenta en VoIP y videoconferencia ya que puede llegar a cortar la llamada.

Solo nos quedaría una métrica por determinar la calidad de un enlace: la latencia, pero para ello podremos utilizar un simple ping.

Medir dichas métricas nos ayudará a diagnosticar un posible problema en nuestra red y es esencial para lidiar con sus parámetros y configuraciones hasta conseguir optimizarla.

Si te ha parecido práctico este artículo y crees que le puede ser útil a alguien más, siéntete libre para enviárselo a un amigo por correo o compartirlo en las redes sociales, te lo agradeceré. ¡Muchas gracias!

Aprovecha para aplicarlo en tu red ahora mismo.

Luego vuelve por aquí y cuéntame cómo te ha ido en los comentarios o comentarme si tu utilizas otra herramienta.