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
- Instalación y Configuración de iperf3
- Pruebas de Red Básicas
- Medición de Rendimiento de TCP
- Pruebas de UDP y Análisis de Pérdida
- Configuración Avanzada
- Pruebas Bidireccionales y Concurrentes
- Salida JSON y Análisis
- Solución de Problemas de Red
- 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.


