Pruebas de Rendimiento de Red con iperf3

iperf3 es la herramienta estándar para medir el ancho de banda máximo de TCP y UDP, lo que la hace esencial para validar infraestructura de red, diagnosticar problemas de rendimiento y optimizar configuraciones de red. Con soporte para múltiples secuencias concurrentes, pruebas bidireccionales y métricas detalladas, iperf3 permite evaluación completa del rendimiento de red. Esta guía cubre instalación, operación e interpretación de resultados de rendimiento de red.

Tabla de Contenidos

  1. Instalación y Configuración de iperf3
  2. Pruebas de Red Básicas
  3. Medición de Rendimiento de TCP
  4. Pruebas de UDP y Análisis de Pérdida
  5. Configuración Avanzada
  6. Pruebas Bidireccionales y Concurrentes
  7. Salida JSON y Análisis
  8. Solución de Problemas de Red
  9. Conclusión

Instalación y Configuración de iperf3

Instalación de iperf3

# Instalación en Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y iperf3

# Instalación en CentOS/RHEL
sudo yum install -y iperf3

# Verificar instalación
iperf3 --version

# Mostrar opciones disponibles
iperf3 --help | head -50

Requisitos Previos de Conectividad de Red

# Probar conectividad entre cliente y servidor
ping -c 4 server-ip
ping -c 4 192.168.1.20

# Verificar enrutamiento
route -n
ip route show

# Verificar que el firewall permite puerto iperf3 (por defecto 5201)
# En servidor:
sudo ufw allow 5201/tcp
sudo ufw allow 5201/udp

# O firewalld:
sudo firewall-cmd --permanent --add-port=5201/tcp
sudo firewall-cmd --permanent --add-port=5201/udp
sudo firewall-cmd --reload

# Probar accesibilidad al puerto
nc -zv 192.168.1.20 5201

Pruebas de Red Básicas

Iniciar Servidor iperf3

# Ejecutar en modo servidor (escuchar conexiones de cliente)
iperf3 -s

# El servidor se ejecuta continuamente esperando clientes
# Salida muestra: Listening on port 5201

# Iniciar servidor en segundo plano
iperf3 -s &

# Iniciar con puerto personalizado
iperf3 -s -p 5210

# Servidor con salida verbosa
iperf3 -s -v

# Verificar procesos iperf3 en ejecución
ps aux | grep iperf3

Ejecutar Prueba de Cliente Básica

# Ejecutar prueba de 10 segundos de cliente a servidor
iperf3 -c 192.168.1.20

# Parámetros explicados:
# -c: Modo cliente (conectar a IP de servidor)
# Por defecto: duración de prueba de 10 segundos

# Salida típica:
# Interval           Transfer     Bitrate
# 0.00-1.00  sec   125 MBytes  1.05 Gbps
# 1.00-2.00  sec   132 MBytes  1.11 Gbps
# 2.00-10.00 sec  1.23 GBytes  1.05 Gbps
# - - - - - - - - - - - - - - - - - - - - - - - -
# Total           1.23 GBytes  1.05 Gbps

Duración Personalizada de Prueba y Tamaño de Ventana

# Prueba de 30 segundos
iperf3 -c 192.168.1.20 -t 30

# Prueba extendida de 1 minuto
iperf3 -c 192.168.1.20 -t 60

# Ajuste de tamaño de ventana TCP (por defecto: 128KB)
iperf3 -c 192.168.1.20 -w 512K

# Ventana muy grande para redes de alto ancho de banda
iperf3 -c 192.168.1.20 -w 2M -t 30

# Mostrar detalles de conexión
iperf3 -c 192.168.1.20 -v

Medición de Rendimiento de TCP

Prueba TCP de Secuencia Única

# Rendimiento de línea base de secuencia única
iperf3 -c 192.168.1.20 -t 30

# Resultados típicos de secuencia única:
# Ethernet Gigabit: ~940 Mbps (94% de velocidad de cable)
# 10 Gbps: ~9.4 Gbps
# Limitado por: un núcleo de CPU, gastos generales de protocolo TCP

# Prueba con diferentes tamaños de búfer TCP
iperf3 -c 192.168.1.20 -w 64K -t 30    # Búfer más pequeño
iperf3 -c 192.168.1.20 -w 1M -t 30     # Búfer grande
iperf3 -c 192.168.1.20 -w 4M -t 30     # Búfer muy grande

Pruebas de TCP Multi-secuencia

# Prueba con múltiples secuencias paralelas (4 secuencias)
iperf3 -c 192.168.1.20 -P 4 -t 30

# Parámetros:
# -P: Número de secuencias paralelas (núcleos)

# Resultados típicos con 4 secuencias:
# Combinado: ~2.5-3.8 Gbps (utiliza múltiples núcleos)
# Cada secuencia: ~625-950 Mbps

# Prueba con muchas secuencias (encontrar punto de saturación)
for streams in 1 2 4 8 16 32; do
  echo "=== $streams streams ==="
  iperf3 -c 192.168.1.20 -P $streams -t 20
done

# Análisis de escalabilidad de secuencia
iperf3 -c 192.168.1.20 -P $(nproc) -t 30 -v

Control de Flujo y Filtrado de ACK

# Deshabilitar filtrado de ACK (puede mejorar rendimiento bidireccional)
iperf3 -c 192.168.1.20 --no-delay -t 30

# Opción de socket TCP_NODELAY reduce latencia
# Útil para aplicaciones interactivas

# Probar afinidad (vincular a núcleos de CPU específicos)
iperf3 -c 192.168.1.20 -A 0 -t 30      # Vincular a núcleo 0

# Múltiples secuencias con afinidad de CPU
taskset -c 0-3 iperf3 -c 192.168.1.20 -P 4 -t 30

Pruebas de UDP y Análisis de Pérdida

Pruebas de Rendimiento de UDP

# Prueba de UDP con velocidad de bits objetivo por defecto de 1Mbps
iperf3 -c 192.168.1.20 -u -b 1G -t 30

# Parámetros:
# -u: Modo UDP
# -b: Velocidad de bits objetivo (1G = 1 Gbps)

# La salida típica de UDP muestra:
# Velocidad de bits, Jitter, Datagramas perdidos/total, Porcentaje de pérdida

# Prueba de UDP de alta velocidad
iperf3 -c 192.168.1.20 -u -b 10G -t 30

# Prueba de baja velocidad para alta precisión
iperf3 -c 192.168.1.20 -u -b 100M -t 30 -R

Análisis de Pérdida de UDP

# Probar pérdida de UDP a varias velocidades de bits
for bitrate in 100M 500M 1G 5G; do
  echo "=== Testing $bitrate UDP ==="
  iperf3 -c 192.168.1.20 -u -b $bitrate -t 10
done

# Análisis detallado de pérdida
iperf3 -c 192.168.1.20 -u -b 1G -t 30 -J > udp-results.json

# Analizar resultados
cat udp-results.json | jq '.end_summary'

# Monitorear pérdida de paquetes en tiempo real
iperf3 -c 192.168.1.20 -u -b 5G -t 60 -R | grep -E "sec|lost"

Efectos de Tamaño de Datagrama

# MTU estándar de 1500 bytes
iperf3 -c 192.168.1.20 -u -b 1G -t 30 -l 1500

# Datagramas más grandes (marcos jumbo)
iperf3 -c 192.168.1.20 -u -b 1G -t 30 -l 9000

# Datagramas pequeños (prueba de estrés)
iperf3 -c 192.168.1.20 -u -b 1G -t 30 -l 64

# Comparar impacto de tamaño de datagrama
for size in 64 256 1500 4096 9000; do
  echo "=== Datagram size: $size bytes ==="
  iperf3 -c 192.168.1.20 -u -b 2G -t 20 -l $size 2>&1 | grep -E "sec|lost"
done

Configuración Avanzada

Prueba Inversa (Servidor a Cliente)

# Dirección inversa (descargar desde perspectiva del servidor)
iperf3 -c 192.168.1.20 -R -t 30

# Útil para pruebas de enlace asimétrico
# Verifica ancho de banda ascendente del servidor

# Inversa con múltiples secuencias
iperf3 -c 192.168.1.20 -R -P 8 -t 30

Pruebas de Límite de Ancho de Banda

# Prueba de red con límite de ancho de banda específico
# Verificar que la red permite rendimiento mínimo requerido

# Prueba sustenta 1 Gbps mínimo
iperf3 -c 192.168.1.20 -b 1G -t 60

# Prueba de ancho de banda más bajo (enlaces WAN)
iperf3 -c 192.168.1.20 -b 100M -t 60

# Medir capacidad de ráfaga
iperf3 -c 192.168.1.20 -b 0 -t 10  # Sin límite (capacidad máxima)

Pruebas Bidireccionales y Concurrentes

Prueba Bidireccional Simultánea

# Probar ambas direcciones simultáneamente
iperf3 -c 192.168.1.20 --bidir -t 30

# Muestra rendimiento agregado e individual por dirección
# Importante para: VPN, replicación, escenarios de copia de seguridad
# A menudo más bajo que unidireccional debido a gastos generales de protocolo

# Bidireccional con múltiples secuencias
iperf3 -c 192.168.1.20 --bidir -P 4 -t 30

# UDP bidireccional
iperf3 -c 192.168.1.20 --bidir -u -b 1G -t 30

Prueba de Clientes Concurrentes

# Múltiples clientes conectándose simultáneamente
# Desde diferentes hosts:

# Terminal 1 (Cliente 1):
iperf3 -c 192.168.1.20 -t 60 &

# Terminal 2 (Cliente 2):
iperf3 -c 192.168.1.20 -t 60 &

# Terminal 3 (Cliente 3):
iperf3 -c 192.168.1.20 -t 60 &

# El servidor muestra carga agregada de todos los clientes

# Simular carga con script
cat > multi_client_test.sh <<'EOF'
#!/bin/bash
for i in {1..4}; do
  iperf3 -c 192.168.1.20 -t 60 -P 2 &
done
wait
EOF

chmod +x multi_client_test.sh
./multi_client_test.sh

Salida JSON y Análisis

Generar Resultados JSON

# Salida de resultados en formato JSON
iperf3 -c 192.168.1.20 -t 30 -J > test_result.json

# Imprimir JSON con formato
cat test_result.json | jq .

# Extraer métricas específicas
cat test_result.json | jq '.end_summary.sum_sent.bits_per_second'

# Extraer de múltiples pruebas
for i in {1..3}; do
  iperf3 -c 192.168.1.20 -t 30 -J >> results.json
  echo "," >> results.json
done

Análisis y Parseo

# Extraer rendimiento de resultados
jq '.end_summary.sum_received.bits_per_second / 1000000000' test_result.json

# Obtener jitter (UDP)
jq '.end_summary.mean_jitter' test_result.json

# Extraer porcentaje de pérdida
jq '.end_summary.lost_percent' test_result.json

# Crear script de resumen
cat > analyze_iperf.sh <<'EOF'
#!/bin/bash
for file in *.json; do
  echo "=== $file ==="
  echo "Throughput (Gbps): $(jq '.end_summary.sum_received.bits_per_second / 1000000000' $file)"
  echo "Jitter (ms): $(jq '.end_summary.mean_jitter' $file)"
  echo "Loss: $(jq '.end_summary.lost_percent' $file)%"
done
EOF

chmod +x analyze_iperf.sh
./analyze_iperf.sh

Solución de Problemas de Red

Identificar Problemas de Red

# La prueba revela problemas de red:
# 1. Rendimiento bajo: Verificar contención, errores
# 2. Jitter alto: Indica encolamiento o congestión
# 3. Pérdida de paquetes: Agotamiento de búfer o errores de línea

# Monitorear sistema durante prueba iperf
# Terminal 1 (servidor): iperf3 -s
# Terminal 2 (cliente): iperf3 -c 192.168.1.20 -t 60
# Terminal 3 (monitor):

# Verificar errores de red
watch -n 1 'ethtool -S eth0 | grep -E "error|drop|collision"'

# Monitorear CPU durante prueba
watch -n 1 'ps aux | grep iperf3'
top -p $(pgrep iperf3)

# Verificar colas TX/RX
watch -n 1 'ifconfig | grep -E "RX|TX"'

Diagnosticar Problemas de Rendimiento

# Prueba con trazado para identificar cuellos de botella
# 1. Línea base de secuencia única
iperf3 -c 192.168.1.20 -t 30

# 2. Múltiples secuencias (¿limitado por CPU?)
iperf3 -c 192.168.1.20 -P 8 -t 30

# 3. Tamaño de ventana grande (¿limitado por búfer?)
iperf3 -c 192.168.1.20 -w 4M -t 30

# 4. Selección de puerto específico
# Determinar si la red tiene límites por puerto
iperf3 -c 192.168.1.20 -p 5201 -t 30
iperf3 -c 192.168.1.20 -p 5202 -t 30

# 5. Prueba de ajuste de MTU
# Verificar si MTU afecta el rendimiento
iperf3 -c 192.168.1.20 -t 30
# Luego reducir MTU y probar de nuevo
# ip link set dev eth0 mtu 1200
iperf3 -c 192.168.1.20 -t 30

Conclusión

iperf3 sigue siendo el estándar de oro para validación de rendimiento de red, esencial para planificación de infraestructura y solución de problemas. Al entender características de TCP y UDP, escalabilidad de múltiples secuencias e implicaciones de rendimiento bidireccional, los ingenieros de red toman decisiones informadas sobre capacidad y optimización. El prueba de línea base regular establece puntos de referencia que detectan degradación de rendimiento por envejecimiento de hardware o problemas de configuración. Ya sea validando nueva infraestructura, solucionando problemas de rendimiento u optimizando configuraciones de red, iperf3 proporciona las métricas necesarias para decisiones de ingeniería de red impulsadas por datos.