Ya vimos en su día el uso de Iperf para medir el ancho de banda entre dos host. En este artículo avanzaremos un poco más y estudiaremo la versión gráfica basada en Java de Iperf: Jperf.
Jperf es una interface gráfica para Iperf. Está basado en Java y tiene las mismas funcionalidadesque Iperf. Lo podemos descargar desde aquí: (http://code.google.com/p/xjperf/).
Para su instalación, tan solo tenemos que descargar el archivo comprimido, descimprimir y ejecutar el archivo jperf.bat
La filosofia de uso es la misma que Iperf. Al tratarse de una herramienta cliente-servidor, ejecutaremos Iperf en dos máquinas, una hará de Servidor y otra de Cliente. Tanto en una como en otra podemos ejecutar indistintamente Jperf o Iperf. Es decir, podemos usar en un extremo y en otro Jperf como cliente y servidor o, como lo haremos aquí, Iperf como servidor y jperf como cliente y herramienta de análisis.
IPerf como servidor.
La forma más básica de ejecución como servidor es:
>iperf -s
————————————————————
Server listening on TCP port 5001
TCP window size: 8.00 KByte (default)
————————————————————
En este momento IPerf se encuentra a la «escucha» en le puerto 5001.
JPerf como cliente.
Como ya hemos comentado, tan solo tenemos que ejecutar jperf.bat, archivo contenido en la carpeta descomprimida del paquete descargado de Jperf. Una vez ejecutado el fichero por lotes mecionado, se nos abrirá el interface gráfico:
Tenemos en la interface los siguientes campos u opciones importantes:
- iperf command: se rellenará automáticamente al introducir la IP del host remoto en el campo server address
- Choose iPerf Mode: Indicamos si estamos usando jperf en modo cliente o servidor. En este caso lo haremos como client.
- Server address: dirección del host remoto. Aquí introducimos la IP del host remoto. Automáticamente se rellenará el campo iperf command con unas opciones por defecto que irán cambiando a medida que rellenemos los cuadros Aplication layer options y Transport layer options.
Transport layer options.
Aquí indicaremos el protocolo TCP o UDP. Podemos ajustar valores como el Tamaño de la ventana, Longitud de buffer y el MSS (Maximum Segment Size) o cantidad de datos enviados en cada paquete. Ajustanto estos valores en nuestras mediciones podemos encontrar los valores óptimos para el mejor rendimiento de la red. La opción de ajuste más importante es el tamaño de ventana o Window Size. Lo común es que aumentando el Tamaño de Ventana, aumente el rendimiento, pero no siempre es así.
Pasa lo mismo con la Longitud de Buffer o Buffer Length. En valores pequeños podemos tener una red con un rendimiento bajo y subir demasiado este valore puede desencadenar retardos.
Respecto al Max Segment Size o Tamaño máximo de Segmento, cantidad de datos enviados en cada paquete sin fragmentar (expresado en bytes). Extraigo de la Wikipedia esta explicación bastante buena sobre Max Segment Size (MSS).:
«Para una comunicación óptima la suma del número de bytes del segmento de datos y la cabecera debe ser menor que el número de bytes de la unidad máxima de transferencia (MTU) de la red.
El MSS tiene gran importancia en las conexiones en Internet, particularmente en la navegación web. Cuando se usa el protocolo TCPMTU que ambos puedan aceptar. El valor típico de MTU en una red puede ser, por ejemplo, 576 ó 1500 bytes. Tanto la cabecera IP como la cabecera TCP tienen una longitud variable de al menos 20 bytes. En cualquier caso, el MSS es igual a la diferencia MTU – cabecera TCP – cabecera IP. para efectuar una conexión, los ordenadores que se conectan deben acordar y establecer el tamaño de la
A medida que los datos son encaminados por la red deben pasar a través de múltiples routers. Idealmente, cada segmento de datos debería pasar por todos los routers sin ser fragmentado. Si el tamaño del segmento de datos es demasiado grande para cualquiera de los routers intermedios, los segmentos son fragmentados. Esto aminora la velocidad de conexión, y en algunos casos esta bajada de velocidad puede ser muy apreciable. La posibilidad de que ocurra esa fragmentación puede ser minimizada manteniendo el MSS tan pequeño como sea razonablemente posible. En la mayoría de los casos, el MSS es establecido automáticamente por el sistema operativo.«
Application layer options.
De esta ventana destacar las opciones para cantidad de transmisión en Bytes o segundos de muestreo. Formato de Salida , el valor de intervalos de tiempo y el puerto al que se dirigirá y en el que escucha el host remoto (por defecto 5001).
Ejecutando Jperf
Una vez tenemo los valores en los campos correspondientes, tan solo nos resta pulsar el botón Run Iperf!:
Una vez realizada las pruebas, podemos ir modificando en el registro de Windows los valores más óptimos de rendimiento.
Vamos a realizar una prueba. Ajustaremos el valor de tiempo de transmisión (Transmit) en 30 segundos. En Transport layer option > TCP window Size ponemos 6 KBytes y Run Iperf!:
Vemos que el rendimiento con un tamaño de ventana de 6 Kbyes es de unos 75 Mbits / sec. apreciamos también las oscilaciones del rendimiento en el Bandwidth.
Cambiemos ahora el valor del tamaño de ventana (TCP windows Size) a 56 Kbytes.Vea mos que ocurre ahora:
Vemos ahora como el rendimiento y la estabilidad son mejores. Tanto en el host remoto como en la ventana de Bandwidth de este captura vemos que nos da unos valores de 93,7 Mbits / sec.
Podeis probar, por ejemplo, cambiando los valores de Buffer Length. Vereis como a distintos valores y forma la gráfica va cambiando en función del rendimiento obtenido.
————————————————————————
NOTA: Atualizaré periódicamente este artículo con nuevas pruebas, resolución de problemas, etc.
————————————————————————-
Muchas gracias por mantener este blog. Estoy empeando con wireshark y me viene muy bien como guía. Gracias
Estimado Alfonn.
He utilizado iperf y es una excelente herramienta. Proximamente voy a realizar pruebas con herramienta JPERF y su interface grafica en una plataforma Wimax y te informare los resultados.
Saludos Cordiales
Gracias Mario, será de gran ayuda.
Alfonn
Muy clara la explicación, me queda una duda, si cambio el tamaño de ventana y/o el Buffer Length en el Client debo cambiarlo al mismo valor tambien en el Server?
Ale, yo por defecto siempre lo dejo igual, lo que no quiere decir que sea necesario. Habrá que hacer la prueba.
Estimados, si entiendo bien, Buffer Length se refiere al tamaño de MTU (¿O no?), el rendimiento debiera bajar si tengo MTU de 80 bytes y mejorar si tengo MTU de 1500 bytes. ¿Es asi?
Muchas gracias
El rendimiento dependerá de los routers conectados a las red, es decir . Si el equipo de tu hogar envia una MTU de 1500 bytes y el segundo Router por el cual serán enviados tus datos tiene definida una MTU de 500 bytes este descartara el paquete y le dira a tu router que divida los paquetes en más pequeños (500 bytes) entonces los 1500 se enviaran en 3 paquetes. El tiempo que descarto el paquete y le dijo a tu router que los volviera a fragmentar se perdio, por eso todo depende como este configurada la Red.
Hola, puedo usar esta herramienta para saturar la red?
como?
gracias
Hola jclyon,
Te puedo comentar que no, ya que saturar la red significa saturar el Swich que tienes instalado, en su defecto lo que estarías haciendo es llevar al máximo la capacidad de tus tarjetas de red y de tu cableado entre los dos puntos que están haciendo las pruebas, además, si tienes un buen Switch una tercer PC no verá nada con WireShark de dicho tráfico, porque la comunicacíón es unicast entre los involucrados solamente.
@jfunez, puede que, si el switch lo permite, se pueda espiar el tráfico usando port mirroring (del puerto interesado hasta el puerto donde está conectado el pc de gestión) desde un tercer pc. De esta forma puedes espiar tráfico unicast destinado a otros puertos mediante wireshark.
Hola, estoy haciendo unas pruebas entre dos equipos separados a 150 metros y he querido utilizar el Jperf para medir el rendimiento entre estos equipos, pero no se ha podido efectuar ya que cada vez que iniciio el programa me marca un error de conexión, se deberá esto a la distancia a la cual se encuentran los equipos?? Gracias por su atención.
Ese error q bota es debido a q el puerto q va a explorar (ej:5001), no puede ser usado mientras se corre el iperf.
saludos
Eso es porq estas usando el mismo puerto de pruebas con otra aplicación!!!
Hola! espero que todavía revisen la preguntas en este blog… tengo un problema con la compañía que me provee internet, ellos quieres utilizar jperf para mostrarme que la velocidad que contraté si es la que tengo (40 x 40) y en jperf según los valores que aparecen me dicen que el servicio está perfecto. Pero yo estoy revisando la velocidad en 7 servidores diferentes (por ejemplo speedtest, y otros muchos) y en todos me marcan velocidades que son muy bajas en comparación de lo que tengo contratado.. el caso es que tengo otro servicio de otra compañía que al hacer las mismas pruebas online las velocidades son las reales (vs lo que contrate) por lo que los servicios online me parecen, si no lo más confiables, al menos si se acercan a la realidad… bueno el punto de mi pregunta es, puede Jperf medir la velocidad que me entregan o únicamente mide hasta cuánto pueden entregarme? Espero haberme explicado. Gracias!