IPERF - The Easy Tutorial

Networking Iperf
Last Update: Aug 04 2011


Spanish translation by Bernardo B, Mejia Huerta.



⚠️⚠️⚠️
Please check our website about
attractions in Western Switzerland !! (Please use english translation).

⚠️⚠️⚠️
Merci de consulter notre site sur les
activités à faire en Suisse romande !!


Iperf es una herramienta para medir el ancho de banda y la calidad de un enlace de red. Jperf puede ser asociado con Iperf para tener una interfaz gráfica escrita en Java.

El enlace a examinar está delimitado por dos clientes ejecutando Iperf.

La calidad de un enlace puede ser examinado bajo las siguientes métricas:
- Latencia (tiempo de respuesta o RTT): puede medirse usando en comando Ping.
- Jitter (variación en la latencia): puede medirse con Iperf ejecutando una prueba con UDP.
- Perdida de datagramas: puede medirse con Iperf ejecutando una prueba con UDP.

El ancho de banda es medido mediante pruebas con TCP.

La diferencia entre TCP (Protocolo de Control de Transmisión) y UDP (Protocolo de Datagramas de Usuario) es que TCP utiliza procesos para verificar que los paquetes sean enviados correctamente al receptor mientras que con UDP los paquetes son enviados sin realizar verificaciones pero con la ventaja de ser más veloz que TCP.
Iperf utiliza las diferentes capacidades de TCP y UDP para proveer datos estadísticos acerca de los enlaces de red.

Finalmente, Iperf puede ser instalado muy fácilmente en cualquier sistema basado en UNIX/Linux o Microsoft Windows. Un cliente debe tener la función de cliente y otro la de servidor.




A continuación se muestra un diagrama donde Iperf está instalado en dos computadoras, una ejecutando Linux y la otra Microsoft Windows.
La computadora con Linux es usada como cliente en Iperf y la que ejecuta Windows es el servidor, también es posible usar dos computadoras con Windows o dos con Linux.

screenshot Iperf bandwidth measure client server


Iperf tests:

no arg.
-b
-r
-d
-w
 
Configuración por default
Formato de los datos
Ancho de banda bidireccional
Ancho de banda bidireccional simultaneo
Tamaño de la ventana de TCP
 
-p, -t, -i
-u, -b

-m

-M

-P
-h
Puerto, temporización e intervalo
Análisis UDP, configuración de ancho de banda
Visualización del máximo tamaño de segmento
Ajustes al máximo tamaño de segmento
Análisis en paralelo
Ayuda

Jperf:

no arg.
-d
-u, -b
Configuración por Default
Ancho de banda bidireccional simultaneo
Análisis por UDP, ajustes de ancho de bandas


Configuración por Default en Iperf:
Ver también la sección de "Jperf" section.

Por default, en Iperf el cliente se conecta al servidor en el Puerto TCP 5001 y el ancho de banda mostrado por Iperf es el ancho de banda del cliente al servidor.
Si se desea utilizar análisis basado en UDP, es necesario especificar el argumento –u.
Los argumentos –d y –r miden los anchos de banda bidireccionales.

Cliente:

#iperf -c 10.1.1.1
------------------------------------------------------------
Client connecting to 10.1.1.1, TCP port 5001
TCP window size: 16384 Byte (default)
------------------------------------------------------------
[ 3] local 10.6.2.5 port 33453 connected with 10.1.1.1 port 5001
[ 3]   0.0-10.2 sec   1.26 MBytes   1.05 Mbits/sec


Servidor:

#iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 8.00 KByte (default)
------------------------------------------------------------
[852] local 10.1.1.1 port 5001 connected with 10.6.2.5 port 33453
[ ID]   Interval          Transfer       Bandwidth
[852]   0.0-10.6 sec   1.26 MBytes   1.03 Mbits/sec




Formato de datos: (argumento -f)

El argumento –f sirve para mostrar los resultados en el format deseado: bits(b), bytes(B), kilobits(k), kilobytes(K), megabits(m), megabytes(M), gigabits(g) or gigabytes(G).
Generalmente las mediciones del ancho de banda son mostradas en bits (o Kilobits, etc…) y la cantidad de datos se muestra en bytes (o Kilobytes, etc…).
Como recordatorio, 1 byte es igual a 8 bits y en las ciencias de la computación, 1 kilo es igual a 1024 (2^10).
Por ejemplo: 100,000,000 bytes no son lo mismo que 100 Mbytes, en realidad son 100,000,000/1024 = 95.37 Mbytes.

Cliente:

#iperf -c 10.1.1.1 -f b
------------------------------------------------------------
Client connecting to 10.1.1.1, TCP port 5001
TCP window size: 16384 Byte (default)
------------------------------------------------------------
[ 3] local 10.6.2.5 port 54953 connected with 10.1.1.1 port 5001
[ 3]   0.0-10.2 sec   1359872 Bytes   1064272 bits/sec


Servidor:

#iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 8.00 KByte (default)
------------------------------------------------------------
[852] local 10.1.1.1 port 5001 connected with 10.6.2.5 port 33453
[ ID]   Interval          Transfer       Bandwidth
[852]   0.0-10.6 sec   920 KBytes   711 Kbits/sec


Inicio de la página



Medición del ancho de banda bidireccional (argumento –r)

En un análisis por default solo se mide el ancho de banda en la dirección del cliente al servidor. En la medición bidireccional, el servidor se conecta de vuelta con el cliente permitiendo la medición bidireccional del ancho de banda.
Si se desea realizar la medición del ancho de banda en ambas direcciones simultáneamente, se utiliza el argumento –d.

Cliente:

#iperf -c 10.1.1.1 -r
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
------------------------------------------------------------
Client connecting to 10.1.1.1, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[ 5] local 10.6.2.5 port 35726 connected with 10.1.1.1 port 5001
[ 5]   0.0-10.0 sec   1.12 MBytes   936 Kbits/sec
[ 4] local 10.6.2.5 port 5001 connected with 10.1.1.1 port 1640
[ 4]   0.0-10.1 sec   74.2 MBytes   61.7 Mbits/sec


Servidor:

#iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 8.00 KByte (default)
------------------------------------------------------------
[852] local 10.1.1.1 port 5001 connected with 10.6.2.5 port 54355
[ ID]   Interval          Transfer        Bandwidth
[852]   0.0-10.1 sec   1.15 MBytes   956 Kbits/sec
------------------------------------------------------------
Client connecting to 10.6.2.5, TCP port 5001
TCP window size: 8.00 KByte (default)
------------------------------------------------------------
[824] local 10.1.1.1 port 1646 connected with 10.6.2.5 port 5001
[ ID]   Interval          Transfer        Bandwidth
[824]   0.0-10.0 sec   73.3 MBytes   61.4 Mbits/sec


Inicio de la página



Medición simultanea del ancho de banda en ambas direcciones (argumento -d)
Revisar también la sección de "Jperf".

Para medir el ancho de banda en ambas direcciones, se utiliza el argumento –d. Si se desea analizar el ancho de banda en forma secuencial, se usa el argumento –r (ver análisis previo).
Por default, i.e., sin los argumentos –r o –d, solo se mide el ancho de banda del cliente al servidor.

Cliente:

#iperf -c 10.1.1.1 -d
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
------------------------------------------------------------
Client connecting to 10.1.1.1, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[ 5] local 10.6.2.5 port 60270 connected with 10.1.1.1 port 5001
[ 4] local 10.6.2.5 port 5001 connected with 10.1.1.1 port 2643
[ 4] 0.0-10.0 sec 76.3 MBytes 63.9 Mbits/sec
[ 5] 0.0-10.1 sec 1.55 MBytes 1.29 Mbits/sec


Servidor:

#iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 8.00 KByte (default)
------------------------------------------------------------
[852] local 10.1.1.1 port 5001 connected with 10.6.2.5 port 60270
------------------------------------------------------------
Client connecting to 10.6.2.5, TCP port 5001
TCP window size: 8.00 KByte (default)
------------------------------------------------------------
[800] local 10.1.1.1 port 2643 connected with 10.6.2.5 port 5001
[ ID]   Interval          Transfer       Bandwidth
[800]   0.0-10.0 sec   76.3 MBytes   63.9 Mbits/sec
[852]   0.0-10.1 sec   1.55 MBytes   1.29 Mbits/sec


Inicio de la página



Tamaño de la ventana TCP: (argumento -w)

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 sitemas Linux, cuando se especifica un tamaño de ventana con el argumento –w, el kernel reserva el doble de lo indicado.

Cliente:

#iperf -c 10.1.1.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.1.1.1, TCP port 5001
TCP window size: 3.91 KByte (WARNING: requested 1.95 KByte)
------------------------------------------------------------
[ 3] local 10.6.2.5 port 51400 connected with 10.1.1.1 port 5001
[ 3]   0.0-10.1 sec   704 KBytes   572 Kbits/sec


Servidor:

#iperf -s -w 4000
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 3.91 KByte
------------------------------------------------------------
[852] local 10.1.1.1 port 5001 connected with 10.6.2.5 port 51400
[ ID]   Interval          Transfer       Bandwidth
[852]   0.0-10.1 sec   704 KBytes   570 Kbits/sec


Inicio de la página




Puerto de comunicación (-p), temporización (-t) e intervaloCommunication (-i):

El puerto de comunicación puede ser cambiado con el argumento –p, este debe estar configurado tanto en el cliente como en el servidor y debe ser el mismo valor, el puerto TCP por default es el 5001.
El argumento –t especifica la duración del análisis en segundos, el default es 10 segundos.
El argumento –i indica el intervalo entre reportes de ancho de banda en segundos.

Cliente:

#iperf -c 10.1.1.1 -p 12000 -t 20 -i 2
------------------------------------------------------------
Client connecting to 10.1.1.1, TCP port 12000
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[ 3] local 10.6.2.5 port 58316 connected with 10.1.1.1 port 12000
[ 3]    0.0- 2.0 sec    224 KBytes    918 Kbits/sec
[ 3]    2.0- 4.0 sec    368 KBytes    1.51 Mbits/sec
[ 3]    4.0- 6.0 sec    704 KBytes    2.88 Mbits/sec
[ 3]    6.0- 8.0 sec    280 KBytes    1.15 Mbits/sec
[ 3]    8.0-10.0 sec    208 KBytes    852 Kbits/sec
[ 3]   10.0-12.0 sec   344 KBytes    1.41 Mbits/sec
[ 3]   12.0-14.0 sec   208 KBytes    852 Kbits/sec
[ 3]   14.0-16.0 sec   232 KBytes    950 Kbits/sec
[ 3]   16.0-18.0 sec   232 KBytes    950 Kbits/sec
[ 3]   18.0-20.0 sec   264 KBytes    1.08 Mbits/sec
[ 3]    0.0-20.1 sec   3.00 MBytes   1.25 Mbits/sec


Servidor:

#iperf -s -p 12000
------------------------------------------------------------
Server listening on TCP port 12000
TCP window size: 8.00 KByte (default)
------------------------------------------------------------
[852] local 10.1.1.1 port 12000 connected with 10.6.2.5 port 58316
[ ID] Interval Transfer Bandwidth
[852]   0.0-20.1 sec   3.00 MBytes   1.25 Mbits/sec


Inicio de la página



Pruebas con UDP: (-u), ajustes de ancho de banda (-b)
Revisar también la sección de "Jperf".

Las pruebas utilizando UDP se realizan con el argumento –u, estas pruebas proporcionan información importante sobre el jitter y pérdida de paquetes. Si no se especifica el argumento –u, Iperf utiliza TCP.
Para mantener una buena calidad en el enlace, la pérdida de paquetes no debe ser mayor a 1%. Una taza de pérdida de paquetes alta generará muchas retransmisiones de segmentos TCP, lo cual afectará el ancho de banda.

El jitter es básicamente la variación de la latencia y no depende de la latencia. Se puede tener un tiempo de respuesta grande y un jitter muy bajo. El valor del jitter es particularmente importante en enlaces que son usados para voz sobre IP (VoIP) debido a que un jitter alto puede cortar la llamada.
El argumento –b permite utilizar el ancho de banda deseado.

Cliente:

#iperf -c 10.1.1.1 -u -b 10m
------------------------------------------------------------
Client connecting to 10.1.1.1, UDP port 5001
Sending 1470 byte datagrams
UDP buffer size: 108 KByte (default)
------------------------------------------------------------
[ 3] local 10.6.2.5 port 32781 connected with 10.1.1.1 port 5001
[ 3]   0.0-10.0 sec   11.8 MBytes   9.89 Mbits/sec
[ 3] Sent 8409 datagrams
[ 3] Server Report:
[ 3]   0.0-10.0 sec   11.8 MBytes   9.86 Mbits/sec   2.617 ms   9/ 8409   (0.11%)


Servidor:

#iperf -s -u -i 1
------------------------------------------------------------
Server listening on UDP port 5001
Receiving 1470 byte datagrams
UDP buffer size: 8.00 KByte (default)
------------------------------------------------------------
[904] local 10.1.1.1 port 5001 connected with 10.6.2.5 port 32781
[ ID]   Interval         Transfer        Bandwidth         Jitter        Lost/Total Datagrams
[904]   0.0- 1.0 sec   1.17 MBytes   9.84 Mbits/sec   1.830 ms   0/ 837   (0%)
[904]   1.0- 2.0 sec   1.18 MBytes   9.94 Mbits/sec   1.846 ms   5/ 850   (0.59%)
[904]   2.0- 3.0 sec   1.19 MBytes   9.98 Mbits/sec   1.802 ms   2/ 851   (0.24%)
[904]   3.0- 4.0 sec   1.19 MBytes   10.0 Mbits/sec   1.830 ms   0/ 850   (0%)
[904]   4.0- 5.0 sec   1.19 MBytes   9.98 Mbits/sec   1.846 ms   1/ 850   (0.12%)
[904]   5.0- 6.0 sec   1.19 MBytes   10.0 Mbits/sec   1.806 ms   0/ 851   (0%)
[904]   6.0- 7.0 sec   1.06 MBytes   8.87 Mbits/sec   1.803 ms   1/ 755   (0.13%)
[904]   7.0- 8.0 sec   1.19 MBytes   10.0 Mbits/sec   1.831 ms   0/ 850   (0%)
[904]   8.0- 9.0 sec   1.19 MBytes   10.0 Mbits/sec   1.841 ms   0/ 850   (0%)
[904]   9.0-10.0 sec   1.19 MBytes   10.0 Mbits/sec   1.801 ms   0/ 851   (0%)
[904]   0.0-10.0 sec   11.8 MBytes   9.86 Mbits/sec   2.618 ms   9/ 8409  (0.11%)


Inicio de la página



Tamaño máximo del segmento (argumento -m):

El tamaño máximo del segmento(MSS) es la mayor cantidad de datos, en bytes, que soporta una computadora 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.
El MTU o unidad máxima de transferencia es la mayor cantidad de datos que puede ser tranferida en una trama.
A continuación se muestra una lista de unidades máximas de transferencia por default en diferentes topologías de red:
Ethernet – 1500 bytes: usado en redes de área local
PPPoE – 1492 bytes: usado en enlaces ADSL
Token Ring (16 Mb/sec) – 17914 bytes: tecnología antigua desarrollada por IBM
Dial-up – 576 bytes

Generalmente, una MTU (y MSS) proporciona mayor eficiencia del ancho de banda

Cliente:

#iperf -c 10.1.1.1 -m
------------------------------------------------------------
Client connecting to 10.1.1.1, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[ 3] local 10.6.2.5 port 41532 connected with 10.1.1.1 port 5001
[ 3]   0.0-10.2 sec   1.27 MBytes   1.04 Mbits/sec
[ 3] MSS size 1448 bytes (MTU 1500 bytes, ethernet)

Aqui el MSS no es igual a 1500 – 40 si no a 1500 - 40 - 12 (Usando la opción de Timestamps) = 1448

Servidor:

#iperf -s
Inicio de la página



Ajustes al maximo tamaño de segmento (argumento -M):

Se utiliza el argumento –M para cambiar el MSS. (Ver la prueba anterior para mayor información acerca del MSS)

#iperf -c 10.1.1.1 -M 1300 -m
WARNING: attempt to set TCP maximum segment size to 1300, but got 536
------------------------------------------------------------
Client connecting to 10.1.1.1, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[ 3] local 10.6.2.5 port 41533 connected with 10.1.1.1 port 5001
[ 3]   0.0-10.1 sec   4.29 MBytes   3.58 Mbits/sec
[ 3] MSS size 1288 bytes (MTU 1328 bytes, unknown interface)


Servidor:

#iperf -s
Inicio de la página



Análisis en paralelo (argumento -P):

El argumento –P se utiliza para correr pruebas en paralelo.

Cliente:

#iperf -c 10.1.1.1 -P 2
------------------------------------------------------------
Client connecting to 10.1.1.1, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[ 3] local 10.6.2.5 port 41534 connected with 10.1.1.1 port 5001
[ 4] local 10.6.2.5 port 41535 connected with 10.1.1.1 port 5001
[ 4]     0.0-10.1 sec   1.35 MBytes   1.12 Mbits/sec
[ 3]     0.0-10.1 sec   1.35 MBytes   1.12 Mbits/sec
[SUM]  0.0-10.1 sec   2.70 MBytes   2.24 Mbits/sec


Servidor:

#iperf -s
Inicio de la página




Ayuda de Iperf:

#iperf -h
Uso: iperf [-s|-c cliente] [opciones]
iperf [-h|--ayuda] [-v|--versión]

Cliente/Servidor:
-f
-i
-l
-m
-p
-u
-w
-B
-C
-M
-N
-V
--format
--interval
--len
--print_mss
--port
--udp
--window
--bind
--compatibility
--mss
--nodelay
--IPv6Version
[kmKM]
#
#[KM]
 
#
 
#[KM]
"host"
 
#
 
 
Formato del reporte: Kbits, Mbits, KBytes, MBytes
segundos entre reportes de ancho de banda periódicos
longitud del buffer para leer o escribir ( 8 KB por default)
imprimir el máximo tamaño de segmento en TCP (MTU - TCP/IP header)
puerto para conectarse/escuchar
usar UDP en vez de TCP
Tamaño de la ventana de TCP (tamaño de buffer del socket)
amarrar a cliente, interfaz o dirección de multicast
para usarse con versiones anteriores, no envía mensajes extras
fija el máximo tamaño de segmento de TCP (MTU - 40 bytes)
fija TCP sin retardo, deshabilitando el algoritmo de Nagle
fija el dominio a IPv6
Especificos del servidor
-s
-U
-D
--server
--single_udp
--daemon
             
 
 
Ejecutar en modo servidor
Ejecutar en modo de un solo hilo en UDP
ejecutar el servidor como demonio
Especificos del cliente:
-b
-c
-d
-n
-r
-t
-F
-I
-L
-P
-T
--bandwidth    
--client
--dualtest
--num
--tradeoff
--time
--fileinput
--stdin
--listenport
--parallel
--ttl
#[KM] 
"host"
 
#[KM]
 
#
"name"
 
#
#
#
Para UDP, ancho de banda a utilizer en bits/sec (por default 1 Mbit/sec, implica -u)
ejecutar en modo de cliente, conectandose a "host"
Realizar una prueba bidireccional simultaneamente
numero de bytes a transmitir (en vez de -t)
Realizar una prueba bidireccional individualmente
tiempo en segundos para transmitir (10 segundos por default)
introducir los datos a transmitir desde un archivo
introducir los datos a ser transmitidos desde stdin
puerto en que se recibiran pruebas bidireccionales de vuelta
numero de de hilos paralelos a ejecutar
time-to-live, paramulticast (por default 1)
Miscelaneos:
-h
-v
--help
--version
                  
 
Imprime este mensaje de ayuda y sale
Imprime la información de versión y sale
Inicio de la página





JPERF

Jperf es una interfaz gráfica para Iperf escrita en Java.


1. Instalación:

Descargar Jperf.

Linux

Descomprimir el archivo descargado.

#tar -xvf jperf2.0.0.zip
Ejecutar iperf.

#cd jperf2.0.0
#./jperf.sh
Si se obtiene el siguientemensaje, significaqueesnecesarioinstalariperf con “apt-get install iperf.

Iperf is probably not in your Path!
Please download it here 'http://dast.nlanr.net/Projects/Iperf/'
and put the executable in your PATH environment variable.


jperf default settings

Microsoft Windows

Descomprimir el archivo descargado.
Accesar al folder descomprimido denominado “jperf2.0.0” por default y dar doble click en “jperf.bat”.
Es importante notar que iperf ya se encuentre presente en el folder /bin.


2. Ejemplos:

Configuración por default, medición del ancho de banda
Also check "Iperf" section for more details.

Revisar la sección "Iperf" para más detalles. - Cliente Linux:

jperf default settings

- Servidor Windows:

jperf default settings

Inicio de la página     Jperf


Medición del ancho de banda bidireccional
Revisar la sección "Iperf" para más detalles.

- Cliente Linux:

jperf bidirectionnal bandwidth measurement

- Servidor Windows:

jperf bidirectionnal bandwidth measurement

Inicio de la página     Jperf

Medicón del Jitter


Revisar la sección "Iperf" para más detalles. - Cliente Linux:

jperf jitter measurement

- Servidor Windows:

jperf jitter measurement


Inicio de la página     Jperf