Para probar el rendimiento de una red, no nos bastan las aplicaciones convencionales, las que pueden producir una serie de inconsistencias en las pruebas de velocidad de una red entre dos puntos, para eso hay herramientas especializadas que permite hacer estas pruebas.
Para realizar esto, disponemos de una herramienta especializada que permite probar protocolos TCP y UDP entre dos puntos.
Protocolo TCP:
Protocolo UDP:
Para realizar las pruebas con esta herramienta, sobre un enlace de red debemos ejecutar Iperf en ambos extremos del enlace a examinar. Un equipo se ejecutará en modo cliente y el otro en modo servidor.
Vamos a realizar varias pruebas alternando entre varias de las opciones disponibles, para conocer todas las opciones posibles podemos utilizar el modificador -h.
[mantra-multi][mantra-column width=”1/2″]
Configuración predeterminada:
[/mantra-column] [mantra-column width=”1/2″]
[/mantra-column] [/mantra-multi]
El cliente se conecta al servidor por el puerto tcp/5001, sin argumentos, iperf sólo mide el ancho de banda entre el cliente y el servidor.
Para ejecutar en modo Servidor, se debe ejecutar en un terminal, en el equipo de definamos como servidor, el comando siguiente:
# iperf -s
La salida en el lado del servidor es similar a esta:
+------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 85.3 KByte (default) +------------------------------------------------------------ [ 4] local 192.168.0.7 port 5001 connected with 192.168.0.10 port 42314 [ ID] Interval Transfer Bandwidth [ 4] 0.0-10.1 sec 114 MBytes 94.2 Mbits/sec [ 5] local 192.168.0.7 port 5001 connected with 192.168.0.10 port 42330 [ 5] 0.0-10.1 sec 113 MBytes 94.2 Mbits/sec [ 4] local 192.168.0.7 port 5001 connected with 192.168.0.10 port 42332 [ 4] 0.0-10.1 sec 113 MBytes 94.2 Mbits/sec
Para el otro equipo que probará la velicidad de conexión es el definido como el cliente de esta conexión, para ello deberemos ejecutar en el terminal, el comando siguiente:
$ iperf -c ip_destino
La salida en el lado del cliente, es similar a esta:
+------------------------------------------------------------ Client connecting to 192.168.0.7, TCP port 5001 TCP window size: 85.0 KByte (default) +------------------------------------------------------------ [ 3] local 192.168.0.10 port 42332 connected with 192.168.0.7 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 113 MBytes 95.0 Mbits/sec
La opción –f nos permite mostrar el resultado en el formato indicado: bits, Bytes, kilobits, Kilobytes, megabits, Megabytes, gigabits o Gigabytes. Habitualmente las mediciones del ancho de banda se indican en bits, kilobits, etc. y la cantidad de datos se muestra en Bytes, Kilobytes, etc.
# iperf -c ip_destino -f b # iperf -c 192.168.0.7 -f b
Esto nos entrega los datos en bits por segundo .
+------------------------------------------------------------ Client connecting to 192.168.0.7, TCP port 5001 TCP window size: 87040 Byte (default) +------------------------------------------------------------ [ 3] local 192.168.0.10 port 42856 connected with 192.168.0.7 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 118882304 Bytes 95014041 bits/sec
A continuación realizaremos diferentes pruebas de mediciones con diferentes puertos, protocolos y tamaños, variando los intervalos de tiempos y otros parámetros de la comunicación TCP/UDP.
El comando predeterminado sólo mide el ancho de banda, desde el cliente al servidor. En la medición bidireccional, el servidor se conecta de vuelta con el cliente permitiendo la medición en ambos sentidos del enlace de datos.
Si se desea realizar la medición del ancho de banda en ambas direcciones secuencialmente, se utiliza el argumento –r.
# iperf -c 192.168.0.7 -r
Para medir el ancho de banda en ambas direcciones simultáneamente, se utiliza el argumento en la línea de comandos –d.
# iperf -c 192.168.0.7 -d
El tamaño de la ventana TCP es la cantidad de datos que pueden ser almacenados en el buffer durante una conexión sin la validación por parte del receptor. El tamaño se encuentra dentro del rango de 2 a 65,535 bytes. En los sistemas Linux, cuando se especifica un tamaño de ventana con el argumento –w, el kernel reserva el doble de lo indicado.
# iperf -c 192.168.0.7 -w 2000 => Para el cliente # iperf -s -w 4000 => Para el Servidor
El puerto de comunicación puede ser cambiado con la opción –p, este debe estar configurado tanto en el cliente como en el servidor y debe ser el mismo valor, el puerto TCP predeterminado es el 5001.
La opción –t especifica la duración del análisis en segundos, el valor predeterminado es de 10 segundos.
La opción –i indica el intervalo entre reportes de ancho de banda en segundos.
# iperf -c 192.168.0.7 -p 12960 -t 20 -i 6 => Para el Cliente # iperf -s -p 12960 => Para el Servidor
Las pruebas utilizando UDP se realizan con la opción –u. Dichas pruebas proporcionan información importante sobre el jitter y pérdida de paquetes. Si no se indica de manera predeterminada se utiliza TCP.
Para mantener una buena calidad en el enlace, la pérdida de paquetes no debe ser mayor al 1%. Una tasa de pérdida de paquetes alta generará muchas retransmisiones de segmentos TCP, lo cual afectará el ancho de banda.
La opción -b permite usar el ancho de banda deseado en la prueba.
# iperf -c 192.168.0.7 -u -b 100m => Para el Cliente # iperf -s -u -i 1 => Para el Servidor
El Cliente envía al Server paquetes UDP con un ancho de banda seleccionado de 100Mbps y el Server recepciona esos paquetes UDP con intervalos de 1 segundo.
El tamaño máximo del segmento (MSS) es la mayor cantidad de datos, en bytes, que soporta un equipo en un solo segmento de TCP, sin fragmentar. Este tamaño puede ser calculado de la siguiente manera:
MSS = MTU – encabezados TCP e IP
Los encabezados TCP e IP tienen un tamaño igual a 40 bytes.
La unidad máxima de transferencia (MTU) es la mayor cantidad de datos que puede ser transferida en una trama.
Las diferentes topologías de red ya tienen establecido un valor predeterminado para el MTU:
# iperf -c 192.168.0.7 -m => Para el Cliente # iperf -s
Para cambiar el tamaño del segmento (MSS), se utiliza la opción -M en el comando:
# iperf -c 192.168.0.7 -M 1300 -m => Para el Cliente # iperf -s => Para el Servidor
En el ejemplo se visualiza que el segmento se ha definido de 1300, pero se debe considerar que el segmento proporciona menos de los 1300 byte como datos útiles debido a que utiliza dentro del segmento como parte del control del protocolo, que es diferente a los flags de los headers del protocolo.
Para realizar pruebas en paralelo se utiliza la opción -P, la que se usa de la siguiente manera:
# iperf -c 192.168.0.7 -P 2 => Para el Cliente # iperf -s => Para el Servidor
Estas pruebas simultáneas y en paralelo producen una división del ancho de banda disponible en a red y en las NIC en cada extremo de la comunicación y es utilizada para ver el rendimiento de los enlaces.