En esta entrada del blog voy a explicar de forma breve cómo medir la velocidad de conexión entre dos equipos. Aunque en redes locales no suele ser un problema, en algunos cosas, especialmente en equipos virtualizados, la red puede ser un cuello de botella importante en los servidores, así que para comprobar y garantizar que esto no es así, qué mejor que asegurarse, pero con números. Para realizar estas comprobaciones vamos a emplear iperf, un sencillo programa que sirve para medir el ancho de banda entre dos nodos. Aunque esta es la funcionalidad básica, es capaz de hacer más cosas, así que no dudéis en leer la ayuda.
Lo primero es instalar el software, tanto en el servidor como en un par de clientes, ya que para comprobar las velocidades, lo mejor es hacer varias pruebas.
shell> apt-get install iperf
Luego, arrancamos el servidor en el equipo que queramos medir su ancho de banda, tal que así.
shell> iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
Y desde cualquier de los clientes, lanzamos una conexión contra el servidor. Por cada conexión nos ofrecerá un report, ya que no hemos indicado nada de que nos lo deje en un fichero.
shell> iperf -c 192.168.1.101
------------------------------------------------------------
Client connecting to 192.168.1.1.1, TCP port 5001
TCP window size: 22.9 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.1.33 port 44888 connected with 192.168.1.101 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 1.04 GBytes 892 Mbits/sec
Por defecto, el tiempo de conexión es de 10 segundos. Si lo queremos ampliar para ver cómo se comporta el equipo con más carga de red durante más tiempo,
shell> iperf -t40 -c 192.168.1.101
------------------------------------------------------------
Client connecting to 192.168.1.101, TCP port 5001
TCP window size: 22.9 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.1.33 port 45317 connected with 192.168.1.101 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-40.0 sec 4.22 GBytes 906 Mbits/sec
Por supuesto, si os interesa saber todas las opciones que están disponibles, aquí os dejo la ayuda.
shell> iperf --help
Usage: iperf [-s|-c host] [options]
iperf [-h|--help] [-v|--version]
Client/Server:
-f, --format [kmKM] format to report: Kbits, Mbits, KBytes, MBytes
-i, --interval # seconds between periodic bandwidth reports
-l, --len #[KM] length of buffer to read or write (default 8 KB)
-m, --print_mss print TCP maximum segment size (MTU - TCP/IP header)
-o, --output file output the report or error message to this specified file
-p, --port # server port to listen on/connect to
-u, --udp use UDP rather than TCP
-w, --window #[KM] TCP window size (socket buffer size)
-B, --bind host bind to host, an interface or multicast address
-C, --compatibility for use with older versions does not sent extra msgs
-M, --mss # set TCP maximum segment size (MTU - 40 bytes)
-N, --nodelay set TCP no delay, disabling Nagle's Algorithm
-V, --IPv6Version Set the domain to IPv6
Server specific:
-s, --server run in server mode
-U, --single_udp run in single threaded UDP mode
-D, --daemon run the server as a daemon
Client specific:
-b, --bandwidth #[KM] for UDP, bandwidth to send at in bits/sec
-c, --client host run in client mode, connecting to host
-d, --dualtest Do a bidirectional test simultaneously
-n, --num #[KM] number of bytes to transmit (instead of -t)
-r, --tradeoff Do a bidirectional test individually
-t, --time # time in seconds to transmit for (default 10 secs)
-F, --fileinput name input the data to be transmitted from a file
-I, --stdin input the data to be transmitted from stdin
-L, --listenport # port to receive bidirectional tests back on
-P, --parallel # number of parallel client threads to run
-T, --ttl # time-to-live, for multicast (default 1)
-Z, --linux-congestion set TCP congestion control algorithm (Linux only)
Miscellaneous:
-x, --reportexclude [CDMSV] exclude Connec, Data, Multicast, Settings, Vserver
-y, --reportstyle C report as a Comma-Separated Values
-h, --help print this message and quit
-v, --version print version information and quit
Espero que si os hace falta comprobar vuestra conexión de red, esta entrada os haya ayudado.