Puertos, TCP y UDP: a qué puerta llamas
La IP te lleva hasta un equipo, pero en ese equipo puede haber una web, un servidor SSH, una base de datos y un servidor de correo a la vez. ¿Cómo sabe el equipo a cuál de ellos va cada paquete? Por el puerto.
Si la IP es la dirección del edificio, el puerto es el número de la puerta. Y la forma de llamar a esa puerta depende del protocolo: TCP o UDP.
Qué es un puerto
Sección titulada «Qué es un puerto»Un puerto es un número del 0 al 65535 que identifica a un servicio dentro de un equipo. Cuando un programa quiere recibir conexiones, se pone a escuchar en un puerto: el servidor web en el 443, el SSH en el 22…
La combinación completa que identifica a cada conexión es:
protocolo + IP origen + puerto origen + IP destino + puerto destinoTCP 192.168.1.20 51000 203.0.113.45 443A cada extremo (IP + puerto) se le llama socket. Gracias a esto puedes tener veinte pestañas abiertas contra la misma web: todas van al mismo destino, pero cada una sale de un puerto de origen distinto.
Los tres rangos
Sección titulada «Los tres rangos»| Rango | Nombre | Para qué |
|---|---|---|
| 0 – 1023 | Bien conocidos (well-known) | Servicios estándar: HTTP, SSH, DNS… En Linux hace falta ser root para escuchar en ellos |
| 1024 – 49151 | Registrados | Aplicaciones concretas: bases de datos, paneles, juegos… |
| 49152 – 65535 | Dinámicos o efímeros | Los que usa tu equipo como origen al conectarse a algo. En Linux, por defecto, del 32768 al 60999 |
TCP: la conexión con acuse de recibo
Sección titulada «TCP: la conexión con acuse de recibo»TCP (Transmission Control Protocol) es el protocolo fiable. Antes de mandar nada establece una conexión, numera cada segmento, espera confirmación de que ha llegado y, si se pierde algo, lo vuelve a enviar. Además, entrega los datos en orden.
La conexión se abre con el famoso saludo en tres pasos (three-way handshake):
Cliente Servidor (puerto 443) │ 1. SYN "¿Hablamos?" │ │ ────────────────────────────────────► │ │ 2. SYN-ACK "Vale, hablamos" │ │ ◄──────────────────────────────────── │ │ 3. ACK "Perfecto, empiezo" │ │ ────────────────────────────────────► │ │ ... datos con confirmaciones ...│ │ FIN / ACK "Cierro" │ │ ◄───────────────────────────────────► │Para qué se usa → todo lo que no puede perder ni un byte: webs (HTTP/HTTPS), SSH, correo, transferencias de archivos, bases de datos.
El precio → más cabeceras, más idas y venidas y algo más de latencia.
UDP: dispara y olvida
Sección titulada «UDP: dispara y olvida»UDP (User Datagram Protocol) es lo contrario: no establece conexión, no confirma nada y no reenvía nada. Manda el datagrama y ya está. Si se pierde, se pierde.
¿Y eso para qué sirve? Para todo lo que prefiere rapidez antes que perfección:
- DNS → una pregunta y una respuesta cortas. Si no llega, se vuelve a preguntar y listo.
- Voz y videollamadas → mejor perder un trocito de audio que oírlo con un segundo de retraso.
- Streaming en directo y juegos online → lo que importa es lo que pasa ahora, no lo que pasó hace medio segundo.
- VPN modernas como WireGuard → el control de errores ya lo hace el tráfico que va dentro del túnel.
- HTTP/3 (QUIC) → las webs modernas también van por UDP, en el 443, y la fiabilidad la implementan ellas mismas.
TCP contra UDP
Sección titulada «TCP contra UDP»| TCP | UDP | |
|---|---|---|
| Conexión | Sí (handshake) | No |
| Fiabilidad | Confirma y reenvía | Ninguna |
| Orden | Garantizado | No garantizado |
| Velocidad | Más lento | Más rápido |
| Ejemplos | HTTPS, SSH, SMTP, SMB | DNS, DHCP, VoIP, WireGuard, QUIC |
Los puertos que vas a ver siempre
Sección titulada «Los puertos que vas a ver siempre»| Puerto | Protocolo | Servicio |
|---|---|---|
| 22 | TCP | SSH |
| 25 / 587 | TCP | SMTP (envío de correo) |
| 53 | UDP y TCP | DNS |
| 67 / 68 | UDP | DHCP (servidor / cliente) |
| 80 | TCP | HTTP |
| 123 | UDP | NTP (hora) |
| 443 | TCP y UDP | HTTPS (y HTTP/3 por UDP) |
| 445 | TCP | SMB (carpetas compartidas de Windows) |
| 3306 | TCP | MySQL / MariaDB |
| 3389 | TCP | RDP (escritorio remoto de Windows) |
| 5432 | TCP | PostgreSQL |
| 8006 | TCP | Panel web de Proxmox |
| 8080 / 8443 | TCP | HTTP / HTTPS alternativos (paneles, proxies) |
| 51820 | UDP | WireGuard |
No hace falta aprendérselos de memoria. Con el tiempo, los que usas se quedan solos.
Abierto, cerrado y filtrado
Sección titulada «Abierto, cerrado y filtrado»Cuando compruebas un puerto desde fuera, hay tres respuestas posibles:
- Abierto → hay un servicio escuchando y responde. En TCP, contesta al SYN con un SYN-ACK.
- Cerrado → llega al equipo, pero no hay nada escuchando. En TCP responde con un RST, que viene a ser un “aquí no hay nadie”.
- Filtrado → no responde nada. Normalmente es que un firewall ha descartado el paquete por el camino.
Desde el punto de vista de la seguridad, filtrado es lo mejor: el atacante no sabe ni siquiera si hay un equipo ahí.
Ver qué puertos tienes abiertos
Sección titulada «Ver qué puertos tienes abiertos»Desde el propio equipo (lo que está escuchando):
ss -tulpn # Linux: TCP y UDP en escucha, con el procesonetstat -ano # WindowsGet-NetTCPConnection -State Listen # Windows, PowerShellDesde otro equipo (lo que se ve desde la red):
nc -zv 192.168.1.10 22 # ¿responde el 22?Test-NetConnection 192.168.1.10 -Port 22 # lo mismo en PowerShellnmap 192.168.1.10 # los 1000 puertos más comunesnmap -p- 192.168.1.10 # los 65535Las técnicas de escaneo (SYN, connect, UDP, NULL/FIN/Xmas…) tienen su propia página en la sección de Ciberseguridad.
En mi caso: lo que se ve desde internet
Sección titulada «En mi caso: lo que se ve desde internet»En mi red de casa hay muy pocos puertos abiertos, solo los imprescindibles: casi todo lo que publico sale por un túnel que se inicia desde dentro (como Cloudflare Tunnel), así que para publicar algo no hace falta abrir nada en el router. La regla es muy simple: cada puerto abierto tiene que tener un motivo, y si no lo tiene, se cierra.
Y lo de que te escanean no es una exageración. En mi caso particular, tengo montado un pequeño panel que registra lo que llega a mi servidor expuesto a internet, y en cuanto un servicio queda accesible empiezan a llegar escáneres probando puertos y rutas típicas. No es que alguien “vaya a por ti”: es que todo internet se escanea constantemente, de forma automática, las 24 horas.
Mi panel de tráfico hacia mi servidor expuesto durante 24 horas. Cada punto es un origen; los rojos, IPs marcadas como maliciosas.
Errores típicos
Sección titulada «Errores típicos»- “Si cambio SSH al puerto 2222 ya estoy seguro” → reduce el ruido de los bots en los registros, pero no es seguridad. Un escaneo de los 65535 puertos lo encuentra en segundos. Lo que protege es usar claves, desactivar el acceso por contraseña y filtrar en el firewall.
- Abrir un puerto TCP cuando el servicio es UDP (o al revés) → WireGuard es UDP. Si abres el 51820 en TCP, no va a funcionar nunca.
- Pensar que DNS es solo UDP → las respuestas grandes y las transferencias de zona van por TCP 53. Si lo bloqueas, algunas consultas fallarán.
- Conflictos de puerto → dos servicios no pueden escuchar en el mismo puerto y la misma IP. Es el clásico “address already in use” al levantar un contenedor que usa el 80 mientras ya hay otro servidor web en el host.
- Exponer paneles de administración (el 8006 de Proxmox, el 3389 de RDP, una base de datos…) directamente a internet → esos van siempre detrás de una VPN.
Resumen
Sección titulada «Resumen»- Puerto → número del 0 al 65535 que identifica el servicio dentro de un equipo. IP + puerto = socket.
- TCP → con conexión (SYN, SYN-ACK, ACK), fiable y ordenado. Para webs, SSH, correo…
- UDP → sin conexión, rápido y sin garantías. Para DNS, DHCP, voz, VPN y QUIC.
- Estado de un puerto → abierto, cerrado (RST) o filtrado (silencio, normalmente un firewall).
- Comprueba lo que escuchas con
ss -tulpny lo que se ve desde fuera connmaponc.
Siguiente: Equipos de red Relacionado: NAT y PAT, DHCP y DNS, Índice de Redes