TCP vs UDP: ¿cuál es la diferencia?
TCP es fiable y ordenado; UDP es rápido y sin conexión. Así se diferencian realmente los dos protocolos de transporte, cuándo se usa cada uno y cómo saber cuál usa un puerto.
Cada puerto abierto en tu Mac habla uno de dos protocolos de transporte: TCP o UDP. Ambos mueven datos entre puertos, pero toman decisiones opuestas. TCP prioriza que cada byte llegue, y en orden. UDP prioriza que llegue rápido y no le importa si se pierde algo por el camino.
Veamos qué significa eso en la práctica y cómo saber qué protocolo usa un puerto concreto.
La versión de una frase
- TCP (Transmission Control Protocol): primero se establece una conexión, cada paquete se confirma y los perdidos se reenvían. Fiable, ordenado, más lento.
- UDP (User Datagram Protocol): los paquetes se envían sin saludo previo y sin garantía de entrega. Rápido, ligero, con pérdidas.
Cómo funciona TCP
TCP abre una conexión con un saludo de tres pasos antes de mover datos reales:
- El cliente envía
SYN(“hablemos”). - El servidor responde
SYN-ACK(“claro, aquí estoy”). - El cliente envía
ACK(“perfecto, aquí van mis datos”).
Una vez establecida la conexión, TCP numera cada segmento, espera a que el otro extremo confirme cada uno y retransmite lo que se pierda. También gestiona el control de flujo (no saturar a un receptor lento) y el control de congestión (ceder cuando la red está ocupada). El resultado es un flujo en el que los bytes llegan completos y en el orden en que se enviaron.
Esa fiabilidad cuesta idas y vueltas y sobrecarga, y por eso TCP resulta más “pesado”.
Cómo funciona UDP
UDP se salta todo eso. No hay saludo, ni confirmación, ni retransmisión, ni orden. Cada datagrama es independiente: el emisor lo envía y sigue adelante. Si llega, bien. Si no llega, a UDP ni le consta ni le importa: ese problema lo resuelve (o lo ignora) la aplicación.
Esto hace que UDP tenga muchísima menos latencia y sobrecarga. En una videollamada, un paquete que llega 300 ms tarde ya no sirve, así que no tiene sentido esperar una retransmisión. Descartarlo y seguir es lo correcto.
Cara a cara
Qué usa TCP
Todo aquello en lo que un dato perdido o desordenado rompe el resultado:
- HTTP y HTTPS (web): puertos 80 y 443
- SSH (shell remoto): puerto 22
- SMTP, IMAP, POP3 (correo)
- Conexiones a bases de datos: PostgreSQL (5432), MySQL (3306), Redis (6379)
- FTP (transferencia de archivos): puertos 20 y 21
Una página web descargada a medias o una fila de base de datos con bytes faltantes no sirven, así que todo esto usa TCP.
Qué usa UDP
Todo aquello en lo que la velocidad importa más que la perfección, o donde la propia app gestiona la fiabilidad:
- Consultas DNS: puerto 53 (consultas pequeñas, rápidas, de una sola vez)
- DHCP: puertos 67 y 68
- VoIP y videollamadas: audio y vídeo en tiempo real
- Juegos en línea: actualizaciones de posición con baja latencia
- Streaming y QUIC: HTTP/3 funciona sobre UDP, reconstruyendo la fiabilidad en el espacio de usuario para lograr menos latencia que TCP
Un mito común: “UDP es solo un TCP poco fiable”
No exactamente. UDP no es una versión rota de TCP: es una herramienta distinta. Protocolos modernos como QUIC (la base de HTTP/3) eligieron UDP precisamente porque se quita de en medio, y luego le añadieron su propia capa de fiabilidad, más rápida y flexible. Que sea “poco fiable” en la capa de transporte no significa que lo sea para el usuario.
Cómo saber qué protocolo usa un puerto
En un Mac, lsof muestra el protocolo en la columna NODE:
sudo lsof -i -n -P | grep LISTEN
node 1421 aaron 23u IPv6 TCP *:3000 (LISTEN)
launchd 142 root 8u IPv4 UDP *:5353
TCP y UDP aparecen escritos de forma explícita. También puedes filtrar por un solo protocolo:
# Solo escuchas TCP
sudo lsof -iTCP -sTCP:LISTEN -n -P
# Solo UDP
sudo lsof -iUDP -n -P
Ten en cuenta que los sockets UDP no tienen un estado LISTEN como los TCP: UDP no tiene conexión, así que no hay nada a la “escucha” en el sentido de TCP. Por eso el filtro -sTCP:LISTEN solo aplica a TCP.
Ve los puertos TCP y UDP de un vistazo
Recordar los flags de lsof para separar ambos protocolos cansa. Portie muestra todos los puertos TCP y UDP abiertos en tu Mac en una sola tabla en vivo, con el protocolo indicado en cada fila, actualizada automáticamente cada 3 segundos. Ordena por protocolo, puerto o proceso, y haz clic en cualquier fila para ver los detalles completos de la conexión.
El monitoreo local es gratuito. El desbloqueo de $8.99 (pago único) agrega la terminación de procesos con un clic y el escaneo remoto de puertos. Descarga Portie y deja de adivinar qué protocolo habla un puerto.