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:

HerramientaMideMejor Para
iperf3Throughput (ancho de banda)Velocidad máxima entre dos puntos
pingLatencia (RTT)Conectividad básica, tiempo de respuesta
mtrLatencia por saltoAnálisis de ruta, encontrar saltos lentos
tcpdumpCaptura de paquetesAnálisis profundo de protocolos
netperfThroughput + latenciaBenchmarks de solicitud-respuesta
ethtoolVelocidad/configuración del enlaceVerificació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

ColumnaSignificado
TransferDatos totales transferidos por intervalo
BitrateThroughput en Mbits/sec o Gbits/sec
RetrRetransmisiones TCP (indicador de pérdida de paquetes)
CwndTamañ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étricaRango AceptableUmbral 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 100K para 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 -s en uno y -c en 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 4 para saturar enlaces de alto ancho de banda y -R para 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 -b son 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 ethtool y 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