4. Puertos TCP

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.

4.1 ¿Por qué existen los puertos?

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.

  • Identificación: cada puerto es un entero de 16 bits (0-65535) que diferencia servicios.
  • Multiplexación: el sistema operativo conserva tablas donde asocia sockets activos con pares IP/puerto.
  • Seguridad: los firewalls y sistemas de monitoreo aplican políticas filtrando por número de puerto.

4.2 Rangos principales

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.

4.3 Puertos bien conocidos

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.

4.4 Puertos registrados y dinámicos

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.

  • Asignación registrada: evita conflictos cuando múltiples soluciones conviven en una misma empresa.
  • Puertos efímeros: se entregan en ronda circular; si se agotan, el sistema operativo puede rechazar nuevas conexiones hasta liberar sockets.
  • Reutilización de sockets: la opción SO_REUSEADDR permite volver a usar puertos rápidamente después de TIME-WAIT.

Conocer el rango efímero de cada plataforma permite dimensionar cuántos clientes simultáneos puede mantener un servidor antes de agotar recursos.

4.5 Puertos y sockets

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.

4.6 Multiplexación y NAT

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.

4.7 Buenas prácticas de 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.

  • Limitar el acceso a puertos administrativos mediante VPN o listas blancas en el firewall.
  • Usar TLS o túneles seguros cuando el protocolo original no cifra datos.
  • Deshabilitar servicios innecesarios para reducir el número de puertos activos.
  • Registrar qué aplicaciones solicitaron puertos registrados para facilitar auditorías.

4.8 Diagnóstico con PowerShell

Windows ofrece cmdlets que enumeran puertos y revelan qué procesos los utilizan sin instalar utilidades externas.

Puertos activos y procesos

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.

4.9 Exploración rápida con Python

Python permite consultar asignaciones oficiales y probar si un puerto responde mediante sockets básicos.

Consulta y verificación de puertos

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.

consulta puertos

4.10 Cierre

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.