¿Cómo se prueba la velocidad de la red entre dos cuadros?

168

Tengo una red gigabit configurada en mi casa y algunas cajas basadas en Ubuntu. Por curiosidad, me gustaría comprobar la velocidad entre las dos casillas. No tengo ningún problema con la velocidad ni nada, realmente es solo el geek en mí lo que es curioso. Además, tal vez los resultados me permitan saber si hay margen de mejora o si tengo algo mal configurado.

Entonces, ¿cómo se prueba correctamente la velocidad de la red entre las cajas de Ubuntu?

Jacob Schoen
fuente

Respuestas:

272

Yo uso iperf. Es un arreglo de servidor cliente en el que lo ejecuta en modo servidor en un extremo y se conecta a él desde otra computadora en el otro lado de la red.

Una de las dos máquinas funciona:

sudo apt-get install iperf

Iniciaremos un iperfservidor en una de las máquinas:

iperf -s

Y luego, en la otra computadora, diga iperfque se conecte como cliente:

iperf -c <address of other computer>

En la máquina del cliente, verá algo como esto:

oli@bert:~$ iperf -c tim
------------------------------------------------------------
Client connecting to tim, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[  3] local 192.168.0.4 port 37248 connected with 192.168.0.5 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  1.04 GBytes    893 Mbits/sec

Por supuesto, si está ejecutando un firewall en la máquina del servidor, deberá permitir conexiones en el puerto 5001 o cambiar el puerto con el -pindicador.


Puede hacer casi lo mismo con el viejo nc(netcat) si está inclinado de esa manera. En la máquina del servidor:

nc -vvlnp 12345 >/dev/null

Y el cliente puede canalizar un gigabyte de ceros a través dddel nctúnel.

dd if=/dev/zero bs=1M count=1K | nc -vvn 10.10.0.2 12345

Como demod:

$ dd if=/dev/zero bs=1M count=1K | nc -vvn 10.10.0.2 12345
Connection to 10.10.0.2 12345 port [tcp/*] succeeded!
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 9.11995 s, 118 MB/s

El tiempo allí viene dado, ddpero debe ser lo suficientemente preciso, ya que solo puede salir tan rápido como lo tomará la tubería. Si no está satisfecho con eso, puede terminar todo en una timellamada.

Recuerde que el resultado está en las mega bytes por lo que se multiplica por 8 para obtener un mega bits de velocidad -por segundos. La demostración anterior se ejecuta a 944mbps.

Oli
fuente
¡Hombre, tienes todas las respuestas a mis preguntas! Aparentemente, mi red no está configurada y la suya solo se transfiere a 714 MBytes y un ancho de banda de 598 Mbits / seg. Dunno puede investigar eso en el futuro. Gracias.
Jacob Schoen
Para ser justos, la otra caja está a solo un interruptor (y 20 metros de cat5e) y no hay congestión. 600mbps sigue siendo bastante rápido.
Oli
Esto es genial, pero no tengo acceso de root al servidor.
Geoff
Pruebe -P 10. Mi resultado con una sola conexión es similar a jschoens, pero con más de 3 conexiones paralelas, empuja constantemente 920Mbps.
wujj123456
1
@CMCDragonkai Probablemente no deberías probar recursos que no son tuyos. Las pruebas pesadas de ancho de banda pueden tener un impacto en la estabilidad a corto plazo.
Oli
22

Igual que la recomendación de Oli para iperf. Solo quiero agregar varios puntos:

  1. También hay clientes de Windows que permiten realizar pruebas en todas las plataformas.
  2. -t <seconds>cambia la duración de la prueba. cambia el número de conexiones simultáneas. Por ejemplo, prueba 10 conexiones juntas durante 30 segundos y proporciona resultados agregados junto con 10 velocidades de conexión separadas.-P <n>iperf -c [target IP] -P 10 -t 30
  3. No necesitas sudo. Simplemente puede descargar el binario en http://iperf.fr/ . Deberia de funcionar. Descárguelo con wget, hágalo ejecutable chmody puede ejecutar directamente el binario. Funciona perfectamente

Descubrí que, usando la configuración predeterminada, la velocidad de conexión única fluctúa bastante. Sin embargo, con más de 3 conexiones paralelas, los resultados son más consistentes en mi conmutador de gigabytes. (consistentemente @ 910-920Mbps)

wujj123456
fuente
8

Con este script , puede probar fácilmente la velocidad de conexión entre su máquina y algún host remoto. Ejemplo de uso:

$ scp-speed-test.sh user@remote_host 80000
  • user@remote_host es su host de destino (debe tener acceso ssh a este host)
  • 80000es el tamaño aproximado del archivo de prueba (en kbs), que se recibirá en el host remoto. No es un argumento obligatorio.
VeLKerr
fuente
44
Esto parece probar la velocidad de la aplicación SCP, que será más baja que una prueba en una capa más baja. Por ejemplo, nc usa L4. Por supuesto, esto es genial si te importa más la velocidad de SCP.
sudo
1
Tiene problemas: este script escribe y lee un archivo en el disco; es más lento que el RAM, por lo que puede ser una desaceleración artificial. También solo envía ceros, en caso de que estén comprimidos, es una gran aceleración artificial. Si desea datos pseudoaleatorios, no use /dev/random(se puede bloquear) ourandom (los comentarios de enlace sugieren que) también pueden ser muy lentos, en su lugar use una dm-crypt (consulte la pregunta frecuente 2.19 de cryptsetup ¿Cómo puedo borrar un dispositivo con crypto- ¿Aleatoriedad de grado? ) tal vez con un archivo en ram.
Xen2050
4

Si desea probar su LAN Ethernet en un nivel inferior, puede usar Etherate, que es una herramienta gratuita de prueba de Linux CLI Ethernet:

https://github.com/jwbensley/Etherate

Lanzándolo en la mezcla ya que herramientas como iPerf (¡que son muy buenas!) Operan sobre IP y TCP o UDP. Etherate prueba directamente sobre Ethernet / OSI capa 2.

jwbensley
fuente
2

El siguiente comando no requiere paquetes adicionales, sino acceso SSH:

ssh [email protected] 'dd if=/dev/zero bs=1GB count=3 2>/dev/null' | dd of=/dev/null status=progress

Salida de ejemplo:

2992238080 bytes (3.0 GB) copied, 27.010250 s, 111 MB/s
5859375+0 records in
5859375+0 records out
3000000000 bytes (3.0 GB) copied, 27.1943 s, 110 MB/s

El comando imprime un archivo ficticio de 3 GB (1000 ^ 3 bytes) lleno de ceros en stdout en el servidor remoto, que se imprime (transfiere) a través de SSH a stdout del servidor local y luego se canaliza localmente /dev/null(es decir, se ignora). Incluso puede ver el progreso de la prueba mientras la ejecuta.

Ciertamente no es tan preciso como otras herramientas, pero mi caso de uso fue depurar un proceso de copia de seguridad donde quería probar si la velocidad de la red era el problema sin instalar paquetes adicionales.

bm-bergmotte
fuente
1

También hay algunas otras buenas herramientas de línea de comandos para el benchmarking de ancho de banda entre dos hosts:

nuttcp

server$ nuttcp -S
client$ nuttcp -v -v -i1 1.1.1.1 ;# 1.1.1.1 is server's address

nepim

 server$ nepim
 client$ nepim -d -c 1.1.1.1 ;# 1.1.1.1 is server's address

goben

 server$ goben
 client$ goben -hosts 1.1.1.1 ;# 1.1.1.1 is server's address
Everton
fuente
2
¿En qué se diferencian entre sí y de iperf? ¿Funcionan igual, qué hacen? nuttcp está en Debian y aparentemente "nuttcp se basa en nttcp, que a su vez fue una mejora de alguien en Silicon Graphics (SGI) en el ttcp original, que fue escrito por Mike Muuss en BRL en algún momento antes de diciembre de 1984, para comparar el rendimiento de Las pilas TCP de UC Berkeley y BBN ayudan a DARPA a decidir qué versión colocar en la primera versión de BSD Unix ".
Xen2050
0

Como señalé en mi comentario en la mejor respuesta, esa solución no es lo suficientemente buena porque el cliente / servidor no está optimizado para ... exprimir cada bit de velocidad

mi solución:

haga un ramdisk en ambos lados (por lo tanto, no está limitado por la velocidad de almacenamiento y sugiero que los haya hecho con ramfs no tmpfs, para que no se intercambien ... solo tenga cuidado de no dejar al menos 512M de memoria libre para el sistema, esto es NECESARIO si tiene giga ethernet, a esa velocidad, incluso los SSD pueden ralentizar las cosas) instale apache en el servidor, luego cree un enlace a ramdisk, cree algunos archivos grandes en ramdisk (100M-1G, puede crearlos con dd desde / dev / random o copie si tiene algo a mano) luego vaya al lado del cliente y descárguelos (también en el disco de ese lado) con un programa de descarga avanzado, utilicé lftp

bueno, la diferencia fue importante, de 75mbps reportados por iperf y netcat de 9.5M / s

a 11.18M / s con mi solución:

1591129421 bytes transferred in 136 seconds (11.18M/s)
El hechicero
fuente
1
9.5M * 8 = 76 mbps; está bastante cerca de 75 mbps
Fusca Software
-4

Es fácil conectar su computadora a la primera caja, conecte la otra caja a la primera caja. Luego, desde su computadora, haga ping al primer cuadro, guarde el resultado, haga ping al otro cuadro y reste.

Nyamiou The Galeanthrope
fuente
10
Eso muestra la latencia de la red, que es solo una parte de la velocidad. Por ejemplo, la conexión 3G de mi teléfono tiene una latencia enorme (100-300 ms) pero aún puede administrar un rendimiento de 5 mbps.
Oli
No es mi culpa si él pidió velocidad pero quería rendimiento.
Nyamiou The Galeanthrope
2
La latencia es tiempo de reacción, no velocidad.
wullxz