Los puertos TCP identifican procesos dentro de un host y permiten que decenas de aplicaciones compartan una única dirección IP sin confundirse.
Cada conexión se reconoce por la combinación IP_origen:puerto_origen y IP_destino:puerto_destino, lo que abre la puerta a la multiplexación masiva.
La IANA mantiene el registro oficial de asignaciones y evita que dos servicios populares reclamen el mismo número. Comprender cómo se dividen los rangos, qué puertos debe escuchar un servidor y cómo se asignan los valores efímeros en el cliente resulta clave para diagnosticar redes y diseñar arquitecturas seguras.
Sin puertos, un equipo sólo podría atender a una aplicación a la vez. TCP los usa como una etiqueta lógica que representa a cada proceso capaz de enviar o recibir datos. Así, un servidor web, una base de datos y un servicio de correo pueden convivir en la misma máquina aun cuando comparten la interfaz física de red.
Los puertos TCP se agrupan en tres grandes bloques, cada uno con políticas distintas de asignación:
| Rango | Números | Uso típico |
|---|---|---|
| Bien conocidos | 0-1023 | Servicios del sistema y protocolos universales. Requieren privilegios elevados para escuchar. |
| Registrados | 1024-49151 | Asignados a aplicaciones de terceros previa solicitud a la IANA. |
| Dinámicos o efímeros | 49152-65535 | Usados temporalmente por clientes para iniciar conexiones salientes. |
Algunos sistemas operativos ajustan los límites de puertos efímeros para repartir mejor las conexiones.
En Windows, por ejemplo, el rango dinámico predeterminado va de 49152 a 65535, mientras que en Linux suele comenzar en 32768 pero puede personalizarse en /proc/sys/net/ipv4/ip_local_port_range.
La siguiente tabla resume servicios emblemáticos y el motivo por el cual se ubican en los primeros 1024 números:
| Puerto | Servicio | Descripción |
|---|---|---|
| 80 | HTTP | Entrega páginas web sin cifrar y sirve como base para proxies y balanceadores. |
| 443 | HTTPS | Versión cifrada sobre TLS, imprescindible para proteger credenciales y sesiones. |
| 22 | SSH | Conexiones remotas seguras para administración y túneles cifrados. |
| 25 | SMTP | Transporte de correo saliente entre servidores. |
| 53 | DNS | Traducción de nombres de dominio a direcciones IP; puede usar TCP para transferencias de zona. |
| 1433 | MS SQL Server | Puerto registrado ampliamente adoptado para conexiones de bases de datos corporativas. |
Aunque estos números son convencionales, muchos servicios permiten cambiarlos para fines de seguridad por obscuridad o para consolidar varios entornos en un mismo host.
Los desarrolladores solicitan puertos registrados cuando sus aplicaciones requieren un número estable para escuchar conexiones entrantes. Sin embargo, la mayoría de los clientes generan puertos efímeros automáticamente cada vez que abren un socket saliente para evitar colisiones.
Conocer el rango efímero de cada plataforma permite dimensionar cuántos clientes simultáneos puede mantener un servidor antes de agotar recursos.
Un socket TCP se define por cuatro valores: IP origen, puerto origen, IP destino y puerto destino. Esta tupla única distingue conversaciones incluso cuando los mismos hosts hablan entre sí múltiples veces.
Cuando un cliente inicia la conexión, su sistema operativo escoge un puerto efímero libre. El servidor escucha en un puerto predecible y delega cada sesión aceptada a un nuevo socket antes de volver al estado LISTEN. Este comportamiento permite que miles de clientes compartan el puerto 443 sin bloquearse mutuamente.
Los routers con traducción de direcciones (NAT) aprovechan los puertos para distinguir flujos provenientes de distintas máquinas internas. En una red doméstica, varios equipos pueden navegar simultáneamente gracias a que el router crea tablas donde asocia cada puerto público con un host privado.
Del lado del servidor, técnicas como el balanceo de carga por puerto o las reglas de DNAT permiten redirigir tráfico entrante a distintos servicios según el número solicitado. Por eso, documentar qué puertos están abiertos es vital para operaciones y seguridad.
Cada puerto abierto es una superficie de ataque potencial. Auditar periódicamente qué servicios escuchan ayuda a detectar software olvidado o malware que instaló backdoors.
Windows ofrece cmdlets que enumeran puertos y revelan qué procesos los utilizan sin instalar utilidades externas.
Get-NetTCPConnection -State Listen |
Select-Object -First 10 -Property LocalPort, OwningProcess, CreationTime
Get-Process -Id (Get-NetTCPConnection -LocalPort 443).OwningProcess |
Select-Object Name, Id, Path
El primer comando muestra los primeros diez sockets en estado LISTEN junto con el identificador del proceso. El segundo cruza la información para saber qué ejecutable controla un puerto específico, ideal para auditorías de seguridad.
Python permite consultar asignaciones oficiales y probar si un puerto responde mediante sockets básicos.
import socket
from contextlib import closing
def descripcion_puerto(puerto):
try:
return socket.getservbyport(puerto, 'tcp')
except OSError:
return 'desconocido'
def probar_puerto(host, puerto, timeout=1):
with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as sock:
sock.settimeout(timeout)
resultado = sock.connect_ex((host, puerto))
return resultado == 0
puertos = [22, 80, 443, 3306]
for numero in puertos:
servicio = descripcion_puerto(numero)
estado = 'abierto' if probar_puerto('example.com', numero) else 'cerrado'
print(f'Puerto {numero}: {servicio} -> {estado}')
socket.getservbyport usa la tabla local de puertos para traducir números a servicios, mientras que connect_ex verifica si el destino acepta conexiones.
Es un punto de partida útil para crear inventarios automatizados de puertos en redes internas.
Dominar los puertos TCP implica entender cómo se asignan, cómo intervienen en la creación de sockets y qué herramientas permiten vigilarlos. Con esta base resulta más sencillo interpretar los mecanismos de control de flujo y congestión que se estudiarán en los próximos temas del tutorial.
Mantener una documentación actualizada de los puertos abiertos y automatizar su supervisión reduce riesgos y acelera la resolución de incidentes.