iperf3 es la herramienta estándar para medir el throughput de red entre dos puntos finales en Linux. Cuando necesitas responder “¿qué tan rápido está funcionando realmente este enlace?” — ya sea que estés solucionando transferencias lentas, validando un nuevo segmento de red o evaluando después de una actualización de switch — iperf3 te proporciona números precisos de rendimiento TCP y UDP en segundos.
Esta guía cubre la instalación, escenarios de prueba comunes, pruebas UDP, flujos paralelos y cómo interpretar los resultados para identificar cuellos de botella en la red.
Requisitos Previos
- Dos máquinas Linux conectadas a través de la red que deseas probar
- iperf3 instalado en ambos extremos
- Puerto 5201/TCP abierto entre las máquinas (o puerto personalizado con
-p) - Acceso root o sudo para la instalación
Instalando iperf3
En Debian/Ubuntu:
sudo apt update && sudo apt install -y iperf3
En RHEL/Fedora/AlmaLinux:
sudo dnf install -y iperf3
En Alpine:
sudo apk add iperf3
Verifica la instalación:
iperf3 --version
iperf3 vs Otras Herramientas de Prueba de Red
Antes de ejecutar pruebas, comprende qué mide iperf3 y cuándo usar alternativas:
| Herramienta | Mide | Mejor Para |
|---|---|---|
| iperf3 | Throughput (ancho de banda) | Velocidad máxima entre dos puntos |
| ping | Latencia (RTT) | Conectividad básica, tiempo de respuesta |
| mtr | Latencia por salto | Análisis de ruta, encontrar saltos lentos |
| tcpdump | Captura de paquetes | Análisis profundo de protocolos |
| netperf | Throughput + latencia | Benchmarks de solicitud-respuesta |
| ethtool | Velocidad/configuración del enlace | Verificación de interfaz física |
iperf3 responde “¿cuántos datos puedo enviar a través de este enlace?” — no es una herramienta de latencia. Úsala junto con ping/mtr para obtener una imagen completa.
Ejecutando tu Primera Prueba de Ancho de Banda TCP
Cada prueba de iperf3 requiere dos máquinas: un servidor (escucha) y un cliente (emisor).
Iniciar el Servidor
En la Máquina A (por ejemplo, 10.0.0.10):
iperf3 -s
-----------------------------------------------------------
Server listening on 5201 (test #1)
-----------------------------------------------------------
El servidor escucha en el puerto 5201 de forma predeterminada y acepta un cliente a la vez.
Ejecutar el Cliente
En la Máquina B:
iperf3 -c 10.0.0.10
Connecting to host 10.0.0.10, port 5201
[ 5] local 10.0.0.20 port 43218 connected to 10.0.0.10 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 112 MBytes 941 Mbits/sec 0 378 KBytes
[ 5] 1.00-2.00 sec 112 MBytes 940 Mbits/sec 0 378 KBytes
[ 5] 2.00-3.00 sec 112 MBytes 940 Mbits/sec 0 378 KBytes
...
[ 5] 9.00-10.00 sec 112 MBytes 941 Mbits/sec 0 378 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 1.09 GBytes 940 Mbits/sec 0 sender
[ 5] 0.00-10.04 sec 1.09 GBytes 936 Mbits/sec receiver
Leyendo la Salida
| Columna | Significado |
|---|---|
| Transfer | Datos totales transferidos por intervalo |
| Bitrate | Throughput en Mbits/sec o Gbits/sec |
| Retr | Retransmisiones TCP (indicador de pérdida de paquetes) |
| Cwnd | Tamaño de ventana de congestión TCP |
En este ejemplo, un enlace de 1 Gbps muestra 940 Mbits/sec — eso es un 94% de eficiencia, lo cual es normal. Los encabezados TCP, el entramado Ethernet y la sobrecarga del protocolo consumen el 6% restante.
Advertencia: Si ves números significativamente más bajos (por ejemplo, 100 Mbits en un enlace de 1 Gbps), verifica la velocidad física del enlace con
ethtool eth0 | grep Speed— las fallas de autonegociación son un culpable común.
Probando el Rendimiento UDP
Las pruebas UDP revelan jitter y pérdida de paquetes — métricas críticas para VoIP, transmisión de video y aplicaciones en tiempo real.
iperf3 -c 10.0.0.10 -u -b 500M
La bandera -b es obligatoria para UDP porque a diferencia de TCP, UDP no tiene control de congestión integrado y enviará a la tasa que especifiques.
[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams
[ 5] 0.00-1.00 sec 59.6 MBytes 500 Mbits/sec 0.018 ms 0/43200 (0%)
[ 5] 1.00-2.00 sec 59.6 MBytes 500 Mbits/sec 0.021 ms 3/43198 (0.0069%)
...
[ 5] 0.00-10.00 sec 596 MBytes 500 Mbits/sec 0.019 ms 12/432000 (0.0028%) receiver
| Métrica | Rango Aceptable | Umbral de Problema |
|---|---|---|
| Jitter | < 1 ms | > 5 ms (VoIP se degrada) |
| Pérdida de paquetes | < 0.1% | > 1% (pérdida de calidad notable) |
Escenario del mundo real: Tienes un sistema VoIP con quejas de calidad de llamadas. Ejecuta una prueba UDP a la tasa de bits del códec (por ejemplo,
-b 100Kpara G.711) entre el servidor telefónico y el segmento de red. Si el jitter supera los 5 ms o la pérdida supera el 1%, el problema está del lado de la red, no de la aplicación.
Escenarios de Prueba Avanzados
Flujos Paralelos
Un solo flujo TCP puede no saturar un enlace de alto ancho de banda debido a los límites de la ventana de congestión. Usa flujos paralelos:
iperf3 -c 10.0.0.10 -P 4
Esto crea 4 conexiones TCP paralelas. El resumen muestra el ancho de banda por flujo y agregado. En enlaces de 10 Gbps, a menudo necesitarás 4-8 flujos paralelos para alcanzar el throughput completo.
Modo Inverso (El Servidor Envía al Cliente)
Prueba la dirección opuesta sin cambiar roles:
iperf3 -c 10.0.0.10 -R
La bandera -R le dice al servidor que envíe datos al cliente. Útil para probar enlaces asimétricos o cuando no puedes ejecutar el cliente en ambos extremos.
Duración e Intervalo de Prueba Personalizados
iperf3 -c 10.0.0.10 -t 60 -i 5
-t 60— ejecutar durante 60 segundos en lugar de los 10 predeterminados-i 5— reportar cada 5 segundos en lugar de cada 1
Las pruebas más largas son esenciales para detectar problemas intermitentes como microráfagas o congestión periódica.
Establecer el Tamaño de Ventana TCP
iperf3 -c 10.0.0.10 -w 256K
El tamaño de la ventana TCP limita cuántos datos pueden estar en tránsito antes de esperar confirmación. Para enlaces de alta latencia (WAN, VPN), aumentar el tamaño de la ventana puede mejorar dramáticamente el throughput:
Producto Ancho de Banda-Retardo (BDP): Ventana requerida = Ancho de banda × RTT
Para un enlace de 1 Gbps con 20 ms de RTT: 1,000,000,000 × 0.020 / 8 = 2.5 MB
iperf3 -c 10.0.0.10 -w 2500K
Salida JSON para Scripting
iperf3 -c 10.0.0.10 -J > result.json
Analiza con jq:
jq '.end.sum_sent.bits_per_second / 1000000' result.json
Esto produce el ancho de banda en Mbits/sec — perfecto para scripts de monitoreo y análisis de tendencias.
Puerto Personalizado
Si el puerto 5201 está bloqueado:
# Servidor
iperf3 -s -p 9999
# Cliente
iperf3 -c 10.0.0.10 -p 9999
Ejecutando iperf3 como Servicio Persistente
Para pruebas continuas, ejecuta el servidor como servicio de systemd:
sudo tee /etc/systemd/system/iperf3.service > /dev/null << 'EOF'
[Unit]
Description=iperf3 Network Performance Server
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/iperf3 -s
Restart=on-failure
User=nobody
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl enable --now iperf3.service
Nota de seguridad: iperf3 no tiene autenticación. Solo exponlo en redes confiables. Usa reglas de firewall para restringir el acceso por IP de origen.
Solución de Problemas en Pruebas de Rendimiento de Red con iperf3
“iperf3: error - unable to connect to server”: El servidor no está escuchando o un firewall está bloqueando el puerto 5201. Verifica con ss -tlnp | grep 5201 en el servidor y confirma que las reglas del firewall permiten el puerto.
“iperf3: error - the server is busy”: iperf3 maneja solo un cliente a la vez. Espera a que termine la prueba actual o ejecuta múltiples instancias de servidor en diferentes puertos: iperf3 -s -p 5202.
Resultados muy inconsistentes entre ejecuciones: Otro tráfico está compitiendo por ancho de banda. Ejecuta pruebas durante ventanas de mantenimiento o usa -t 60 para promedios más largos. También verifica la saturación de CPU — iperf3 es de un solo hilo y una CPU lenta puede ser un cuello de botella antes que la red.
El throughput cae después de unos segundos: Probablemente buffer bloat de TCP o desbordamiento del buffer del switch. Observa la columna Retr (retransmisión) — las retransmisiones crecientes significan que se están descartando paquetes. Reduce los flujos paralelos o verifica la configuración QoS del switch.
Throughput casi cero: Verifica discrepancias de MTU. Si un lado tiene MTU 9000 (tramas jumbo) y el otro tiene 1500, los paquetes se fragmentan o descartan. Verifica con ip link show eth0 | grep mtu.
Resumen
- iperf3 mide el throughput TCP y UDP entre dos extremos — instala en ambos lados, ejecuta
-sen uno y-cen el otro - Las pruebas TCP muestran ancho de banda, retransmisiones y ventana de congestión; las pruebas UDP agregan métricas de jitter y pérdida de paquetes
- Usa flujos paralelos
-P 4para saturar enlaces de alto ancho de banda y-Rpara pruebas en dirección inversa - Para enlaces de alta latencia (WAN/VPN), calcula el producto ancho de banda-retardo y establece el tamaño de ventana con
-w - Las pruebas UDP con
-u -bson esenciales para la evaluación de calidad de VoIP y streaming — observa el jitter y la pérdida - La salida JSON (
-J) permite monitoreo scriptado y análisis de tendencias - Ejecuta iperf3 como servicio de systemd para disponibilidad persistente en extremos de prueba
- Siempre verifica la velocidad física del enlace con
ethtooly las reglas del firewall antes de culpar a la red
tcpdump: Capture and Analyze Network Traffic on Linux | nftables: The Modern Linux Firewall Replacing iptables | Configure UFW Firewall on Ubuntu Server | Private Network Segments - Understanding RFC 1918