TCP (Transmission Control Protocol) es un protocolo de transporte orientado a conexión que garantiza la entrega confiable y ordenada de datos entre aplicaciones. TCP establece conexiones antes de la transferencia de datos y confirma la entrega exitosa mediante confirmaciones.
Resumen rápido — TCP es el protocolo de transporte confiable de internet: establece una conexión mediante un handshake de tres vías (SYN, SYN-ACK, ACK) antes de enviar datos, numera cada byte para garantizar el orden, confirma la recepción con ACK, y retransmite automáticamente lo que se pierde. El control de flujo (sliding window) evita abrumar al receptor, y el control de congestión (slow start, evasión de congestión) evita saturar la red. Esta confiabilidad tiene un costo de latencia y overhead frente a UDP, por lo que TCP es la elección correcta para web, correo, y transferencia de archivos, pero no para streaming o gaming en tiempo real.
Última actualización: 2026-08-08
Cómo funciona TCP
TCP opera en la capa de transporte (Capa 4 de OSI) y brinda entrega confiable de datos mediante el establecimiento de conexión, la segmentación, la retransmisión, y el control de flujo.
Ciclo de vida de una conexión TCP:
1. Handshake de tres vías (establecimiento de conexión):
- SYN: El cliente envía un paquete SYNchronize con un número de secuencia
- SYN-ACK: El servidor confirma el SYN y envía su propio SYN
- ACK: El cliente confirma el SYN del servidor
- La conexión se establece, comienza la transferencia de datos
2. Transferencia de datos:
- Los datos se dividen en segmentos con números de secuencia
- Cada segmento se confirma (ACK) por el receptor
- Los segmentos faltantes se retransmiten automáticamente
- El control de flujo previene abrumar al receptor
3. Handshake de cuatro vías (terminación de conexión):
- FIN: El iniciador envía un paquete FINish
- ACK: El receptor confirma el FIN
- FIN: El receptor envía su propio FIN
- ACK: El iniciador confirma, la conexión se cierra
Estructura del segmento TCP:
- Puerto de origen: puerto de la aplicación emisora (16 bits)
- Puerto de destino: puerto de la aplicación receptora (16 bits)
- Número de secuencia: posición en el flujo de datos (32 bits)
- Número de confirmación: siguiente número de secuencia esperado (32 bits)
- Flags: bits de control (SYN, ACK, FIN, RST, PSH, URG)
- Tamaño de ventana: control de flujo (16 bits)
- Checksum: detección de errores (16 bits)
- Datos: payload de la aplicación (variable)
Cuándo usar TCP
Usa TCP cuando necesites:
- Entrega de datos confiable sin pérdida
- Transmisión de datos ordenada (los paquetes llegan en secuencia)
- Control de flujo para prevenir abrumar a los receptores
- Control de congestión para evitar la sobrecarga de red
- Aplicaciones que requieren entrega garantizada (web, correo, transferencia de archivos)
- Conexiones de larga duración con comunicación bidireccional
- Integridad de datos crítica (transacciones financieras, replicación de bases de datos)
No uses TCP cuando necesites:
- Velocidad en tiempo real por encima de la confiabilidad (usa UDP)
- Overhead de latencia mínimo (usa UDP)
- Broadcasting o multicasting (usa UDP)
- Request-response simple con payloads pequeños (usa UDP)
- Media en streaming donde la pérdida ocasional de paquetes es aceptable (usa UDP)
Señales de que necesitas TCP
- La aplicación requiere garantía de entrega del 100% de los datos
- Los datos deben llegar en el orden exacto en que se enviaron
- Las conexiones abarcan redes no confiables (internet)
- Transferencias de archivos donde la corrupción es inaceptable
- Autenticación de usuario y gestión de sesión
- Entrega de correo que requiere confirmación
- Sincronización de base de datos que requiere consistencia
Características de TCP
Entrega confiable de datos
Mecanismos:
Confirmaciones (ACK):
- El receptor envía un ACK por cada segmento recibido
- El ACK contiene el siguiente número de secuencia esperado
- Los ACK acumulativos confirman todos los datos hasta el número de secuencia
Retransmisión:
- El emisor inicia un timer cuando se transmite el segmento
- Si no se recibe el ACK antes del timeout, el segmento se retransmite
- Timeout adaptativo con base en las condiciones de red (estimación de RTT)
ACK duplicados:
- El receptor envía ACK duplicados por segmentos faltantes
- Tres ACK duplicados disparan el fast retransmit
- Recuperación más rápida que esperar el timeout
Secuenciación:
- Cada byte se numera con un número de secuencia
- Los segmentos portan los números de secuencia del primer byte
- El receptor reordena los segmentos si se reciben fuera de orden
Control de flujo
Propósito: Prevenir que el emisor abrume al receptor.
Mecanismo: Protocolo Sliding Window
- El receptor anuncia el espacio de buffer disponible (tamaño de ventana)
- El emisor transmite solo hasta la ventana anunciada
- El tamaño de ventana se actualiza dinámicamente a medida que se procesan los datos
- Ventana cero: el buffer del receptor está lleno, el emisor pausa
Tamaños de ventana:
- Inicial: 64KB (con la opción Window Scale)
- Máximo: 1GB (con escala de ventana de 14 bits)
- Anunciado en cada segmento TCP
Implementación:
- El emisor rastrea: último byte enviado, último byte confirmado, tamaño de ventana
- Ventana de envío = Tamaño de ventana - (Último byte enviado - Último byte confirmado)
- Cuando la ventana llega a cero, el emisor detiene la transmisión
Control de congestión
Propósito: Prevenir abrumar la capacidad de la red.
Algoritmos:
Slow Start:
- Comienza con la ventana de congestión (cwnd) = 1 segmento
- Duplica el cwnd en cada round-trip time (RTT)
- Crecimiento exponencial hasta el umbral o la pérdida de paquetes
- Transición a la evasión de congestión en el umbral
Evasión de congestión:
- Crecimiento lineal: agrega 1 segmento por RTT
- Continúa hasta que se detecta pérdida de paquetes
- Aumento conservador para sondear el ancho de banda disponible
Fast Retransmit:
- Disparado por 3 ACK duplicados
- Retransmisión inmediata sin esperar el timeout
- Asume pérdida de paquetes, no colapso de congestión
Fast Recovery:
- Después del fast retransmit, reduce el cwnd al 50%
- Realiza evasión de congestión (crecimiento lineal)
- Evita el slow start para mantener el throughput
Señales de congestión:
- Timeout: congestión severa, se reinicia a slow start
- 3 ACK duplicados: congestión moderada, fast recovery
- ECN (Explicit Congestion Notification): la red señala la congestión de forma proactiva
Gestión de conexión
Máquina de estados:
- LISTEN: el servidor espera una conexión
- SYN_SENT: el cliente envió SYN, esperando SYN-ACK
- SYN_RECEIVED: el servidor recibió SYN, envió SYN-ACK
- ESTABLISHED: conexión activa, transferencia de datos
- FIN_WAIT_1: el iniciador envió FIN
- FIN_WAIT_2: el iniciador espera el FIN
- CLOSE_WAIT: el receptor recibió FIN, esperando el cierre de la aplicación
- LAST_ACK: el receptor envió FIN, esperando el ACK final
- TIME_WAIT: el iniciador envió el ACK final, esperando antes de cerrar
Estado TIME_WAIT:
- Duración: 2 × Maximum Segment Lifetime (MSL)
- Típico: 60 segundos
- Propósito: asegurar que el ACK final llegue al peer, permitir que los segmentos antiguos expiren
Campos del header TCP
| Campo | Tamaño | Propósito |
|---|---|---|
| Puerto de origen | 16 bits | Aplicación emisora |
| Puerto de destino | 16 bits | Aplicación receptora |
| Número de secuencia | 32 bits | Posición del byte en el flujo |
| Número de confirmación | 32 bits | Siguiente byte esperado |
| Data Offset | 4 bits | Longitud del header (20-60 bytes) |
| Reservado | 6 bits | Sin usar (fijado en cero) |
| Flags | 6 bits | Bits de control |
| Window | 16 bits | Control de flujo |
| Checksum | 16 bits | Detección de errores |
| Urgent Pointer | 16 bits | Posición de dato urgente |
| Options | Variable | Extensiones |
Flags TCP:
- SYN: sincroniza números de secuencia (establecimiento de conexión)
- ACK: el campo de confirmación es válido
- FIN: finish (terminación de conexión)
- RST: reset (abortar conexión)
- PSH: función push (entregar inmediatamente)
- URG: urgent pointer válido (datos priorizados)
Opciones TCP
Maximum Segment Size (MSS):
- El mayor tamaño de payload de segmento
- Típico: 1460 bytes (MTU de Ethernet 1500 - 20 header IP - 20 header TCP)
- Se negocia durante el establecimiento de conexión
Window Scale:
- Extiende el campo de tamaño de ventana más allá de 16 bits
- Conteo de desplazamiento: 0-14
- Ventana máxima: 65,535 × 2^14 = 1GB
- Requerido para redes de alto ancho de banda y alta latencia
Selective Acknowledgments (SACK):
- Confirma bloques no contiguos de datos
- Reduce las retransmisiones cuando se pierden múltiples segmentos
- Opción SACK-permitted en el SYN
- Bloques SACK en los segmentos ACK
Timestamps:
- Incluye un timestamp en cada segmento
- Mejor estimación de RTT
- Protection Against Wrapped Sequence Numbers (PAWS)
- Requerido para redes de alta velocidad
Métricas y medición
Desempeño de conexión:
Round-Trip Time (RTT):
- Tiempo desde el envío del segmento hasta la recepción del ACK
- Internet típico: 20-100ms
- Mismo centro de datos: <1ms
- TCP usa el RTT para el cálculo del timeout de retransmisión
Throughput:
- Máximo: determinado por el tamaño de ventana y el RTT
- Fórmula: Throughput = Tamaño de ventana / RTT
- Ejemplo: ventana de 64KB, RTT de 50ms = 1.28 MB/s = 10.24 Mbps
- Con window scaling (ventana de 1GB): 160 Gbps teóricos
Establecimiento de conexión:
- Handshake de tres vías: 1.5 RTT mínimo
- El handshake TLS agrega: 1-2 RTT
- Total: 2.5-3.5 RTT para una conexión HTTPS
Métricas de confiabilidad:
- Tasa de retransmisión: porcentaje de segmentos retransmitidos
- Objetivo: <1% en condiciones normales
- Una tasa alta indica congestión o problemas de red
- Entrega fuera de orden: segmentos recibidos no en secuencia
- Manejado automáticamente por TCP
- Indica cambios de ruta de red o reordenamiento de paquetes
Control de flujo:
- Utilización de ventana: porcentaje de la ventana anunciada usada
- Objetivo: 80-95%
- Una utilización baja indica limitaciones del emisor o receptor
- Eventos de ventana cero: buffer del receptor lleno
- La frecuencia indica un receptor con aprovisionamiento insuficiente
Las conexiones TCP promedian entre 3-5 round trips para la carga completa de página en aplicaciones web modernas, según datos de la industria. HTTP/3 (QUIC) reduce esto a 0-1 round trips después de la conexión inicial.
Errores comunes y correcciones
Error: No ajustar los tamaños de buffer TCP para conexiones de alto ancho de banda Corrección: Aumenta los tamaños de buffer de socket. Usa la opción window scaling. Calcula el buffer óptimo: ancho de banda × RTT.
Error: Ignorar la acumulación del estado TIME_WAIT Corrección: Habilita el reciclaje o reuso de TCP. Reduce la duración de TIME_WAIT con cuidado. Implementa pooling de conexiones.
Error: Deshabilitar el algoritmo de Nagle indiscriminadamente Corrección: Mantén el algoritmo de Nagle habilitado para transferencias masivas. Deshabilítalo solo para mensajes pequeños sensibles a la latencia (aplicaciones interactivas).
Error: No manejar el backpressure de TCP Corrección: Implementa control de flujo a nivel de aplicación. Monitorea el buffer de envío del socket. Limita el flujo upstream cuando el buffer se llena.
Error: Usar valores de timeout cortos Corrección: Usa timeouts adaptativos. Deja que TCP calcule el timeout de retransmisión con base en las estimaciones de RTT. Evita la configuración manual de timeout.
Error: No habilitar TCP Fast Open Corrección: Habilita TCP Fast Open para servidores conocidos. Reduce el establecimiento de conexión en 1 RTT. Requiere soporte de la aplicación.
Error: Ignorar los keepalives de TCP para conexiones de larga inactividad Corrección: Configura el keepalive de TCP para conexiones que deben persistir. Detecta peers muertos. Por defecto: 2 horas de inactividad antes del sondeo.
Preguntas frecuentes
¿Cuál es la diferencia entre TCP y UDP? TCP brinda entrega confiable y ordenada con control de flujo y control de congestión. UDP brinda entrega de mejor esfuerzo sin garantías. TCP está orientado a conexión; UDP no tiene conexión. TCP tiene mayor overhead; UDP es ligero.
¿Por qué TCP usa un handshake de tres vías? El handshake de tres vías asegura que ambas partes puedan enviar y recibir, sincroniza los números de secuencia, y previene conexiones duplicadas por paquetes SYN retrasados. Ambos lados intercambian números de secuencia iniciales.
¿Qué pasa si se pierde un segmento TCP? El timer de retransmisión del emisor expira, el segmento se retransmite. El receptor puede enviar ACK duplicados por el segmento faltante. El fast retransmit puede dispararse después de 3 ACK duplicados. El segmento perdido se retransmite sin cerrar la conexión.
¿Cómo maneja TCP los paquetes fuera de orden? El receptor TCP hace buffer de los segmentos fuera de orden. Cuando llega el segmento faltante, el receptor reensambla el flujo de datos. La aplicación recibe los datos en orden. Los ACK duplicados le señalan al emisor los segmentos faltantes.
¿Cuál es el throughput máximo de TCP? Teórico: limitado por el tamaño de ventana y el RTT. Número de secuencia máximo: 4GB (32 bits). El window scaling extiende hasta una ventana de 1GB. Límites prácticos: ancho de banda de red, control de congestión, overhead de implementación. Se pueden lograr 10-100 Gbps con ajustes.
¿Cuántas conexiones TCP concurrentes puede manejar un servidor? Depende de los recursos: memoria por conexión (8-64KB típico), descriptores de archivo (límites por defecto: 1024), CPU para cambios de contexto. Servidores ajustados: 100K-1M+ conexiones concurrentes. Usa pooling de conexiones para eficiencia.
¿Qué es el algoritmo de Nagle? El algoritmo de Nagle une paquetes pequeños en segmentos más grandes. Reduce el overhead para aplicaciones interactivas. Retrasa los envíos pequeños hasta recibir el ACK o llenar el buffer. Deshabilítalo para aplicaciones sensibles a la latencia (gaming en tiempo real, Telnet).
¿En qué se diferencia TCP de TLS? TCP es el protocolo de transporte que asegura la entrega confiable. TLS es la capa de seguridad encima de TCP que brinda encriptación y autenticación. TLS usa TCP para el transporte. HTTPS = HTTP sobre TLS sobre TCP.
¿Qué causa los resets de conexión TCP (RST)? Enviar a un puerto cerrado, fallos de la aplicación, el firewall bloqueando la conexión, un lado que falla, segmentos TCP inválidos. RST termina la conexión inmediatamente sin un cierre ordenado.
¿Cómo funciona el fast retransmit de TCP? Cuando el receptor recibe un segmento fuera de orden, envía un ACK duplicado para la secuencia esperada. Después de 3 ACK duplicados, el emisor retransmite rápidamente el segmento faltante sin esperar el timeout. Recuperación más rápida que la retransmisión basada en timeout.
Cómo aplica esto en la práctica
TCP forma la base de la comunicación confiable de internet:
Aplicaciones web:
- HTTP/1.1 y HTTP/2 usan conexiones TCP
- Las conexiones persistentes reducen el overhead del handshake
- Keep-alive permite el reuso de conexión
- TLS agrega una capa de seguridad sobre TCP
Transferencia de archivos:
- FTP usa conexiones TCP separadas para control y datos
- Los archivos grandes se benefician de la confiabilidad de TCP
- Capacidad de reanudación mediante la numeración de secuencia de TCP
- El control de flujo previene abrumar a los receptores
Correo electrónico:
- SMTP usa TCP para la entrega confiable de correo
- POP3/IMAP usan TCP para la recuperación
- Se garantiza la integridad del mensaje
- Confirmación de entrega mediante confirmaciones de TCP
Replicación de bases de datos:
- Replicación master-slave sobre TCP
- La integridad de transacciones requiere entrega confiable
- Las conexiones de larga duración minimizan el overhead
- El control de flujo previene el rezago de las réplicas
Microservicios:
- Comunicación servicio-a-servicio sobre TCP
- gRPC usa HTTP/2 sobre TCP
- El pooling de conexiones reduce el overhead
- El balanceo de carga distribuye las conexiones TCP
TCP en Azion
Azion optimiza el desempeño de TCP en el edge:
- Optimización de TCP a través de tu aplicación
- TCP Fast Open soportado para latencia reducida
- Pooling de conexiones hacia los servidores de origen
- Balanceo de carga distribuye las conexiones TCP
- Terminación en el edge reduce el RTT de TCP para los usuarios
- Métricas en tiempo real monitorean el desempeño de TCP
La red distribuida de Azion reduce el RTT de TCP al servir contenido más cerca de los usuarios, mejorando el throughput y reduciendo la latencia.
Recursos relacionados
Fuentes:
- RFC 793. “Transmission Control Protocol.” https://tools.ietf.org/html/rfc793
- RFC 7323. “TCP Extensions for High Performance.” https://tools.ietf.org/html/rfc7323
- RFC 2018. “TCP Selective Acknowledgment Options.” https://tools.ietf.org/html/rfc2018
- Stevens, W. Richard. “TCP/IP Illustrated, Volume 1.” Addison-Wesley, 1994.