Ajuste TCP/IP para Alto Rendimiento
Introducción
El stack de red TCP/IP es fundamental para el rendimiento de aplicaciones de red modernas. Los parámetros predeterminados están diseñados para uso general, pero a menudo son inadecuados para servidores de alto tráfico, sitios web a gran escala o aplicaciones de baja latencia. El ajuste fino apropiado del stack TCP/IP puede aumentar el throughput en 2-10x, reducir la latencia en un 50-90% y mejorar drásticamente la capacidad de conexión simultánea.
Comprender y optimizar los parámetros TCP/IP es esencial para cualquiera que ejecute servicios web de alto rendimiento, servidores de API, balanceadores de carga o aplicaciones en tiempo real. Un ajuste incorrecto puede llevar a conexiones descartadas, alto uso de CPU, agotamiento de memoria o degradación del rendimiento. Esta guía proporciona configuraciones prácticas y comprobadas para lograr el máximo rendimiento de red.
Esta guía completa cubre los fundamentos de TCP/IP, benchmarking, técnicas de optimización y configuraciones específicas de escenarios con mejoras de rendimiento medibles y del mundo real.
Comprendiendo la Optimización de TCP/IP
El Stack de Red TCP/IP
El stack de red consiste en múltiples capas, cada una con parámetros ajustables:
- Interfaz de Red (NIC): Tamaños de ring buffer, offloading
- Capa IP: Enrutamiento, fragmentación, tablas de conexión
- Capa TCP: Control de congestión, buffers, timers, algoritmos
- Capa de Socket: Colas de backlog, tamaños de buffer, timeouts
Conceptos Clave de Rendimiento
Throughput: Cantidad de datos transferidos por segundo Latencia: Tiempo de ida y vuelta del paquete de red Concurrencia: Número de conexiones simultáneas soportadas Product Ancho de Banda-Retardo (BDP): Cantidad de datos en tránsito en la red
Por Qué Importa el Ajuste TCP
Los valores predeterminados del kernel de Linux están optimizados para conexiones de ancho de banda moderado y baja latencia. En ambientes de alto rendimiento:
- Los buffers predeterminados limitan el throughput en redes de alto ancho de banda
- Las colas de conexión predeterminadas son demasiado pequeñas para alto tráfico
- Los algoritmos de control de congestión predeterminados no aprovechan ancho de banda moderno
- Los timeouts predeterminados malgastan recursos en conexiones muertas
Benchmarking Antes de la Optimización
Establecer Métricas Base
# Instalar herramientas de benchmarking
apt-get install iperf3 netperf apache2-utils -y
# Prueba base de throughput de red con iperf3
# Servidor:
iperf3 -s
# Cliente:
iperf3 -c server_ip -t 30
# Resultado base típico: 500-700 Mbps en red de 1Gbps
# Prueba de latencia con ping
ping -c 100 server_ip | tail -2
# Latencia base típica: 0.5-2ms (LAN), 10-50ms (WAN)
# Prueba de concurrencia de servidor web
ab -n 10000 -c 100 http://localhost/
# Solicitudes/seg base típicas: 500-1000
Métricas Importantes a Registrar
# Registrar estadísticas de red actuales
ss -s > baseline-connections.txt
netstat -s > baseline-netstat.txt
cat /proc/net/sockstat > baseline-sockstat.txt
# Registrar configuración de sysctl actual
sysctl -a | grep net > baseline-sysctl.txt
Resultados Base Típicos (Configuración Predeterminada)
Throughput de Red: 500-700 Mbps (en red 1Gbps)
Latencia: 0.8ms promedio
Servidor Web: 800 solicitudes/segundo
Conexiones Concurrentes: 1000-2000 máximo
Errores de Conexión: 5-10% bajo alta carga
Parámetros Críticos de TCP para Rendimiento
Tamaños de Buffer TCP
Los buffers TCP determinan cuántos datos pueden estar en tránsito antes de requerir confirmación. Buffers más grandes = mayor throughput en redes de alta latencia.
# Ver configuración actual
sysctl net.ipv4.tcp_rmem
sysctl net.ipv4.tcp_wmem
# Valores predeterminados (a menudo muy pequeños):
# tcp_rmem: 4096 87380 6291456 (min default max)
# tcp_wmem: 4096 16384 4194304 (min default max)
# Configuración optimizada para redes de alto rendimiento
sysctl -w net.ipv4.tcp_rmem="4096 87380 134217728" # 128 MB máx
sysctl -w net.ipv4.tcp_wmem="4096 65536 134217728" # 128 MB máx
# Aumentar buffers máximos del núcleo
sysctl -w net.core.rmem_max=134217728 # 128 MB
sysctl -w net.core.wmem_max=134217728 # 128 MB
Impacto:
- Antes: 600 Mbps throughput
- Después: 940 Mbps throughput (mejora del 57%)
Gestión de Cola de Conexión
# Incrementar backlog de escucha del socket
# Predeterminado: 4096 (demasiado pequeño para alto tráfico)
sysctl -w net.core.somaxconn=65535
# Incrementar cola de backlog de dispositivo de red
sysctl -w net.core.netdev_max_backlog=65536
# Incrementar backlog de SYN (conexiones medio abiertas)
sysctl -w net.ipv4.tcp_max_syn_backlog=8192
Impacto:
- Antes: 5-10% solicitudes descartadas bajo carga
- Después: 0% solicitudes descartadas
Escalado de Ventana TCP y Timestamps
# Habilitar escalado de ventana (crucial para alto throughput)
sysctl -w net.ipv4.tcp_window_scaling=1
# Habilitar timestamps TCP (requerido para escalado de ventana)
sysctl -w net.ipv4.tcp_timestamps=1
# Habilitar reconocimientos selectivos (recuperación más rápida de pérdida de paquetes)
sysctl -w net.ipv4.tcp_sack=1
Impacto: Habilita transferencias de alto throughput sobre conexiones de larga distancia.
Reutilización y Reciclaje de Conexiones
# Reducir timeout TIME-WAIT (predeterminado: 60 segundos)
sysctl -w net.ipv4.tcp_fin_timeout=15
# Permitir reutilización de sockets TIME-WAIT para nuevas conexiones
sysctl -w net.ipv4.tcp_tw_reuse=1
# ADVERTENCIA: No habilitar tcp_tw_recycle (puede causar problemas NAT)
# sysctl -w net.ipv4.tcp_tw_recycle=0 # Mantener desactivado
# Limitar número de buckets TIME-WAIT
sysctl -w net.ipv4.tcp_max_tw_buckets=1440000
Impacto:
- Antes: Agotamiento de puertos bajo alta carga
- Después: Reutilización rápida de conexiones, sin agotamiento de puertos
Rango de Puertos Locales
# Expandir rango de puertos disponibles para conexiones salientes
# Predeterminado: 32768-60999 (28,232 puertos)
sysctl -w net.ipv4.ip_local_port_range="10000 65535"
# Nuevo: 55,536 puertos (incremento del 96%)
Impacto: Evita agotamiento de puertos en proxies y balanceadores de carga de alto tráfico.
TCP Fast Open (TFO)
# Habilitar TCP Fast Open (reduce latencia de establecimiento de conexión)
# 0: desactivado
# 1: habilitado como cliente
# 2: habilitado como servidor
# 3: habilitado tanto como cliente como servidor
sysctl -w net.ipv4.tcp_fastopen=3
Impacto:
- Antes: Handshake de 3 vías = 1 RTT de sobrecarga
- Después: Datos enviados en primer SYN = 0 RTT para conexiones repetidas
- Mejora de latencia: 20-40% para conexiones cortas
Algoritmos de Control de Congestión
Comprendiendo el Control de Congestión
Los algoritmos de control de congestión determinan qué tan rápido TCP envía datos:
- cubic (predeterminado): Buen propósito general, diseñado para redes de alta latencia
- bbr (recomendado): Control de congestión basado en Google, logra mayor throughput
- htcp: Optimizado para redes de alta latencia y alto ancho de banda
- reno: Algoritmo clásico, conservador
Cambiar a BBR (Mejor Rendimiento)
# Verificar algoritmos disponibles
sysctl net.ipv4.tcp_available_congestion_control
# Cargar módulo BBR
modprobe tcp_bbr
echo "tcp_bbr" >> /etc/modules-load.d/bbr.conf
# Establecer algoritmo de cola a FQ (Fair Queue)
sysctl -w net.core.default_qdisc=fq
# Cambiar control de congestión a BBR
sysctl -w net.ipv4.tcp_congestion_control=bbr
# Verificar
sysctl net.ipv4.tcp_congestion_control
Impacto de BBR:
Antes (cubic):
- Throughput: 600 Mbps
- Latencia: 45ms
- Pérdida de paquetes: 0.5%
Después (BBR):
- Throughput: 920 Mbps (mejora del 53%)
- Latencia: 28ms (mejora del 38%)
- Pérdida de paquetes: 0.1% (mejora del 80%)
Comparación de Algoritmos
#!/bin/bash
# Prueba de comparación de algoritmos de congestión
ALGORITHMS="cubic bbr htcp reno"
SERVER="192.168.1.100"
for algo in $ALGORITHMS; do
echo "Testing $algo..."
sysctl -w net.ipv4.tcp_congestion_control=$algo
result=$(iperf3 -c $SERVER -t 30 | grep "sender" | awk '{print $7, $8}')
echo "$algo: $result"
sleep 5
done
# Resultados típicos en enlace de 1Gbps con 20ms RTT:
# cubic: 720 Mbps
# bbr: 940 Mbps (mejor)
# htcp: 850 Mbps
# reno: 580 Mbps
Configuración Completa Optimizada
Configuración de Alto Rendimiento de Propósito General
# Crear /etc/sysctl.d/99-tcp-performance.conf
cat > /etc/sysctl.d/99-tcp-performance.conf << 'EOF'
# Optimización de Buffer TCP
net.core.rmem_max = 134217728
net.core.wmem_max = 134217728
net.core.rmem_default = 65536
net.core.wmem_default = 65536
net.ipv4.tcp_rmem = 4096 87380 134217728
net.ipv4.tcp_wmem = 4096 65536 134217728
# Optimización de Cola de Conexión
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65536
net.ipv4.tcp_max_syn_backlog = 8192
# Características TCP
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_sack = 1
net.ipv4.tcp_fastopen = 3
# Gestión de Conexión
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_tw_buckets = 1440000
net.ipv4.ip_local_port_range = 10000 65535
# Control de Congestión BBR
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
# Keepalive
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_keepalive_intvl = 15
# Descubrimiento MTU
net.ipv4.tcp_mtu_probing = 1
# Optimización de Rendimiento
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.tcp_no_metrics_save = 1
# Buffer de Memoria del Núcleo
net.core.optmem_max = 25165824
EOF
# Aplicar configuración
sysctl -p /etc/sysctl.d/99-tcp-performance.conf
# Verificar cambios clave
sysctl net.ipv4.tcp_congestion_control
sysctl net.core.somaxconn
Configuración Específica de Servidor Web
Para Nginx, Apache u otros servidores web de alto tráfico:
cat > /etc/sysctl.d/99-webserver-tcp.conf << 'EOF'
# Optimización de Servidor Web
# Manejo de Conexión HTTP
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 20480
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 10000 65535
# Buffers TCP para múltiples conexiones pequeñas
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
# Optimizaciones de rendimiento HTTP
net.ipv4.tcp_fastopen = 3
net.ipv4.tcp_slow_start_after_idle = 0
# Algoritmo de congestión
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
# Seguimiento de Conexión (si se usa iptables/firewall)
net.netfilter.nf_conntrack_max = 1048576
net.netfilter.nf_conntrack_tcp_timeout_established = 600
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 30
EOF
sysctl -p /etc/sysctl.d/99-webserver-tcp.conf
Mejora de Rendimiento de Servidor Web:
Antes:
- 800 req/s
- Latencia: 125ms
- Errores de conexión: 8%
Después:
- 3,200 req/s (mejora de 4x)
- Latencia: 31ms (mejora del 75%)
- Errores de conexión: 0%
Configuración de Proxy/Balanceador de Carga
Para HAProxy, Nginx como proxy reverso, balanceadores de carga:
cat > /etc/sysctl.d/99-loadbalancer-tcp.conf << 'EOF'
# Optimización de Balanceador de Carga
# Manejo Masivo de Conexión
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65536
net.ipv4.tcp_max_syn_backlog = 16384
# Rango de Puerto Ampliado (muchas conexiones salientes)
net.ipv4.ip_local_port_range = 1024 65535
# Reutilización Agresiva de Conexión
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_max_tw_buckets = 2000000
# Buffers para muchas conexiones simultáneas
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
# Características de Rendimiento
net.ipv4.tcp_fastopen = 3
net.ipv4.tcp_slow_start_after_idle = 0
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
# Prevenir SYN Flood
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 16384
EOF
sysctl -p /etc/sysctl.d/99-loadbalancer-tcp.conf
Configuración de Baja Latencia
Para aplicaciones en tiempo real, servidores de juegos, trading:
cat > /etc/sysctl.d/99-lowlatency-tcp.conf << 'EOF'
# Optimización de Latencia Ultra Baja
# Baja latencia TCP
net.ipv4.tcp_low_latency = 1
net.ipv4.tcp_slow_start_after_idle = 0
# Busy polling (polling activo para NICs modernas)
net.core.busy_poll = 50
net.core.busy_read = 50
# Fast Open
net.ipv4.tcp_fastopen = 3
# Algoritmo de congestión BBR (menor latencia que cubic)
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
# Buffers ajustados (no necesita buffers masivos)
net.ipv4.tcp_rmem = 4096 87380 33554432
net.ipv4.tcp_wmem = 4096 65536 33554432
# Keepalive más agresivo
net.ipv4.tcp_keepalive_time = 60
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 10
EOF
sysctl -p /etc/sysctl.d/99-lowlatency-tcp.conf
Mejora de Baja Latencia:
Antes (configuración predeterminada):
- Latencia P50: 8ms
- Latencia P99: 45ms
- Jitter: 12ms
Después (optimizada para latencia):
- Latencia P50: 2ms (mejora del 75%)
- Latencia P99: 8ms (mejora del 82%)
- Jitter: 3ms (mejora del 75%)
Optimizaciones de Hardware de Red
Configuración del Ring Buffer
# Verificar tamaño actual del ring buffer
ethtool -g eth0
# Establecer al máximo soportado
ethtool -G eth0 rx 4096 tx 4096
# Hacer persistente con systemd
cat > /etc/systemd/system/ethtool-ringbuffer.service << 'EOF'
[Unit]
Description=Configuración de Ring Buffer Ethtool
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/sbin/ethtool -G eth0 rx 4096 tx 4096
[Install]
WantedBy=multi-user.target
EOF
systemctl enable ethtool-ringbuffer.service
Características de TCP Offload
# Verificar características actuales
ethtool -k eth0
# Habilitar offloading de TCP (descarga trabajo de CPU)
ethtool -K eth0 tso on
ethtool -K eth0 gso on
ethtool -K eth0 gro on
ethtool -K eth0 lro on
# Generic receive offload
ethtool -K eth0 gro on
# Hacer persistente
cat > /etc/systemd/system/ethtool-offload.service << 'EOF'
[Unit]
Description=Configuración de Offload Ethtool
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/sbin/ethtool -K eth0 tso on
ExecStart=/usr/sbin/ethtool -K eth0 gso on
ExecStart=/usr/sbin/ethtool -K eth0 gro on
[Install]
WantedBy=multi-user.target
EOF
systemctl enable ethtool-offload.service
Interrupción de Coalescencia
# Reducir interrupciones (mejor throughput, latencia ligeramente mayor)
ethtool -C eth0 rx-usecs 100 tx-usecs 100
# Para latencia ultra baja (más interrupciones, menor throughput)
ethtool -C eth0 rx-usecs 10 tx-usecs 10
Afinidad de IRQ
# Encontrar IRQ de NIC
cat /proc/interrupts | grep eth0
# Establecer afinidad de CPU para IRQ de NIC
# Distribuir a través de múltiples CPUs para mejor rendimiento
echo "1" > /proc/irq/45/smp_affinity # CPU 0
echo "2" > /proc/irq/46/smp_affinity # CPU 1
echo "4" > /proc/irq/47/smp_affinity # CPU 2
echo "8" > /proc/irq/48/smp_affinity # CPU 3
Pruebas y Validación de Rendimiento
Benchmarks de Throughput
# Prueba de throughput con iperf3
# Servidor:
iperf3 -s
# Cliente (prueba TCP):
iperf3 -c server_ip -t 30 -P 4
# Resultados Antes de Optimización:
# [ ID] Interval Transfer Bandwidth
# [ 4] 0.00-30.00 sec 2.10 GBytes 600 Mbits/sec
# Resultados Después de Optimización:
# [ ID] Interval Transfer Bandwidth
# [ 4] 0.00-30.00 sec 3.32 GBytes 940 Mbits/sec
# Mejora: 57% aumento en throughput
Prueba de Latencia
# Latencia promedio con ping
ping -c 1000 server_ip | tail -2
# Antes: rtt min/avg/max/mdev = 0.423/0.856/2.145/0.234 ms
# Después: rtt min/avg/max/mdev = 0.312/0.445/0.892/0.098 ms
# Mejora: 48% mejora en latencia promedio
# Latencia bajo carga con sockperf
# Servidor:
sockperf sr --tcp -p 11111
# Cliente:
sockperf ping-pong --tcp -i server_ip -p 11111 -t 60
# Antes: avg-lat=125.234 usec
# Después: avg-lat=34.567 usec
# Mejora: 72% mejora en latencia
Prueba de Concurrencia
# Probar conexiones simultáneas con Apache Bench
ab -n 100000 -c 5000 -k http://server_ip/
# Antes de Optimización:
# Solicitudes por segundo: 1,250
# Solicitudes fallidas: 850 (17%)
# Tiempo por solicitud: 4000ms
# Después de Optimización:
# Solicitudes por segundo: 5,800 (mejora de 4.6x)
# Solicitudes fallidas: 0 (0%)
# Tiempo por solicitud: 862ms (mejora del 78%)
Prueba de Escenario del Mundo Real
#!/bin/bash
# Prueba de carga HTTP completa
# Calentar (llenar cachés)
ab -n 1000 -c 100 http://localhost/ > /dev/null
# Prueba real
ab -n 50000 -c 2000 -k http://localhost/ > results.txt
# Extraer métricas clave
echo "=== Resultados de Rendimiento ==="
grep "Requests per second" results.txt
grep "Time per request" results.txt
grep "Failed requests" results.txt
grep "50%" results.txt
grep "99%" results.txt
Monitoreo y Diagnóstico
Monitoreo en Tiempo Real
# Monitorear estadísticas de conexión TCP
watch -n 1 'ss -s'
# Salida:
# Total: 2450 (kernel 2500)
# TCP: 2340 (estab 2100, cerr 25, orfan 0, timewait 215)
# Rastrear retransmisiones y errores
watch -n 1 'netstat -s | grep -i retran'
# Ver buffers de socket
ss -tm
# Monitorear descartes de paquetes
watch -n 1 'netstat -s | grep -i drop'
Script de Monitoreo Automatizado
#!/bin/bash
# /usr/local/bin/monitor-tcp.sh
LOG_FILE="/var/log/tcp-performance.log"
while true; do
DATE=$(date '+%Y-%m-%d %H:%M:%S')
# Estadísticas de conexión
CONN_STATS=$(ss -s | grep TCP | awk '{print $2}')
# Retransmisiones
RETRANS=$(netstat -s | grep "segments retransmited" | awk '{print $1}')
# Descartes de SYN
SYN_DROP=$(netstat -s | grep "SYNs to LISTEN" | awk '{print $1}')
# Registrar
echo "$DATE | Conexiones: $CONN_STATS | Retrans: $RETRANS | SYN Drops: $SYN_DROP" >> $LOG_FILE
# Alertar si hay problemas
if [ $RETRANS -gt 10000 ]; then
echo "ALERTA: Alta tasa de retransmisión" | mail -s "Alerta TCP" [email protected]
fi
sleep 60
done
Métricas Clave a Rastrear
# 1. Retransmisiones TCP (debe ser < 1%)
netstat -s | grep retrans
# 2. Desbordamientos de escucha
netstat -s | grep "overflowed"
# 3. Reinicios de conexión
netstat -s | grep "reset"
# 4. Uso de buffer de socket
cat /proc/net/sockstat
# 5. Seguimiento de conexión (si se usa firewall)
cat /proc/net/nf_conntrack | wc -l
Resolución de Problemas Comunes
Problema 1: Bajo Throughput a Pesar de Alta Velocidad de Enlace
Síntomas: iperf3 muestra 300 Mbps en enlace de 1Gbps
Diagnóstico:
# Verificar tamaños de buffer
sysctl net.ipv4.tcp_rmem
sysctl net.ipv4.tcp_wmem
# Verificar escalado de ventana
sysctl net.ipv4.tcp_window_scaling
Solución:
# Aumentar buffers
sysctl -w net.ipv4.tcp_rmem="4096 87380 134217728"
sysctl -w net.ipv4.tcp_wmem="4096 65536 134217728"
sysctl -w net.core.rmem_max=134217728
sysctl -w net.core.wmem_max=134217728
# Habilitar escalado de ventana
sysctl -w net.ipv4.tcp_window_scaling=1
Problema 2: Conexiones Descartadas Bajo Carga
Síntomas: Errores de "connection refused" bajo alto tráfico
Diagnóstico:
# Verificar desbordamientos de cola de escucha
netstat -s | grep "overflowed"
# Verificar configuración de backlog
sysctl net.core.somaxconn
Solución:
# Aumentar colas
sysctl -w net.core.somaxconn=65535
sysctl -w net.ipv4.tcp_max_syn_backlog=8192
sysctl -w net.core.netdev_max_backlog=65536
# Actualizar configuración de aplicación (Nginx ejemplo)
# En nginx.conf: listen 80 backlog=65535;
Problema 3: Alta Latencia
Síntomas: Latencias de ping > 10ms en LAN
Diagnóstico:
# Verificar algoritmo de congestión
sysctl net.ipv4.tcp_congestion_control
# Verificar características de offload
ethtool -k eth0
# Verificar estadísticas de interfaz
ethtool -S eth0
Solución:
# Cambiar a BBR
sysctl -w net.core.default_qdisc=fq
sysctl -w net.ipv4.tcp_congestion_control=bbr
# Habilitar busy polling
sysctl -w net.core.busy_poll=50
sysctl -w net.core.busy_read=50
# Ajustar coalescencia de interrupción
ethtool -C eth0 rx-usecs 10 tx-usecs 10
Problema 4: Agotamiento de Puerto
Síntomas: "Cannot assign requested address" en cliente
Diagnóstico:
# Verificar rango de puerto
sysctl net.ipv4.ip_local_port_range
# Verificar conexiones TIME_WAIT
ss -s | grep TIME-WAIT
Solución:
# Expandir rango de puerto
sysctl -w net.ipv4.ip_local_port_range="10000 65535"
# Habilitar reutilización
sysctl -w net.ipv4.tcp_tw_reuse=1
# Reducir timeout FIN
sysctl -w net.ipv4.tcp_fin_timeout=15
Mejores Prácticas
1. Benchmarking y Monitoreo
- Siempre establecer rendimiento base antes de optimizar
- Hacer cambios incrementales y medir impacto
- Monitorear métricas clave continuamente
- Usar benchmarks realistas que coincidan con patrones de producción
2. Optimizaciones Específicas de Carga de Trabajo
- Servidores web: Priorizar manejo de conexión y reutilización
- Aplicaciones de streaming: Enfocar en tamaños de buffer y algoritmo de congestión
- Baja latencia: Optimizar para reducir jitter y latencia promedio
- Alto throughput: Maximizar tamaños de buffer y habilitar características de offload
3. Consideraciones de Seguridad
# Mantener protecciones de seguridad mientras se optimiza
# Siempre mantener habilitado:
sysctl -w net.ipv4.tcp_syncookies=1 # Protección SYN flood
sysctl -w net.ipv4.conf.all.accept_redirects=0 # Evitar ataques de redirección
sysctl -w net.ipv4.conf.all.send_redirects=0
sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1 # Evitar smurf
4. Probar en Staging Primero
- Nunca aplicar cambios directamente a producción
- Validar en ambiente de staging con carga similar
- Tener plan de rollback
- Documentar todos los cambios
Conclusión
El ajuste de TCP/IP puede proporcionar mejoras de rendimiento dramáticas:
Ganancias de Rendimiento Típicas:
- Throughput de red: mejora del 50-200%
- Latencia: reducción del 40-80%
- Concurrencia: mejora de 5-10x en manejo de conexión
- Confiabilidad: reducción del 90-100% en conexiones descartadas
Optimizaciones con Mayor Impacto:
- BBR control de congestión: mejora del 20-100% en throughput
- Tamaños de buffer aumentados: mejora del 50-150% en throughput de alto ancho de banda
- Parámetros de cola de conexión: reducción del 100% en descartes de conexión
- Reutilización de conexión: reducción del 80-95% en agotamiento de puerto
- TCP Fast Open: reducción del 20-40% en latencia de establecimiento de conexión
Conclusiones Clave:
- Comenzar con optimizaciones de propósito general
- Ajustar basado en características específicas de carga de trabajo
- Monitorear continuamente después de cambios
- Documentar configuración base y cambios
- Probar exhaustivamente antes del despliegue en producción
Al implementar sistemáticamente estas optimizaciones TCP/IP, puedes transformar un servidor de rendimiento promedio en uno de alto rendimiento capaz de manejar tráfico masivo con baja latencia y alta confiabilidad. Recuerda que el ajuste de red no es tarea única sino un proceso continuo de monitoreo, prueba y refinamiento.


