El puerto 0 tiene un significado especial en la programación de redes, particularmente en el sistema operativo Unix cuando se trata de programación de sockets donde el puerto se usa para solicitar puertos dinámicos asignados por el sistema. El puerto 0 es un puerto comodín que le indica al sistema que busque un número de puerto adecuado.
A diferencia de la mayoría de los números de puerto, el puerto 0 es un puerto reservado en las redes TCP/IP, lo que significa que no debe usarse en mensajes TCP o UDP. Los puertos de red en TCP y UDP van desde el número cero hasta el 65535. Los números de puerto en el rango entre cero y 1023 se definen como puertos no efímeros, puertos del sistema o puertos conocidos. La Autoridad de Números Asignados de Internet (IANA) mantiene una lista oficial del uso previsto de estos números de puerto en Internet, y el puerto 0 del sistema no debe usarse.
Cómo funciona el puerto 0 TCP/UDP en la programación de red
La configuración de una nueva conexión de socket de red requiere que se asigne un número de puerto tanto en el lado de origen como en el de destino. Los mensajes TCP o UDP enviados por el originador (fuente) contienen ambos números de puerto para que el destinatario del mensaje (destino) pueda enviar mensajes de respuesta al extremo del protocolo correcto.
IANA ha preasignado puertos de sistema designados para aplicaciones básicas de Internet como servidores web (puerto 80), pero muchas aplicaciones de red TCP y UDP no tienen su propio puerto de sistema y deben obtener uno del sistema operativo de su dispositivo cada vez que se ejecutan..
Para asignar su número de puerto de origen, las aplicaciones llaman a funciones de red TCP/IP como bind() para solicitar uno. La aplicación puede proporcionar un número fijo (codificado) a bind() si prefieren solicitar un número específico, pero dicha solicitud puede fallar porque otra aplicación que se ejecuta en el sistema puede estar usándola actualmente.
Alternativamente, puede proporcionar el puerto 0 a bind() como su parámetro de conexión. Eso hace que el sistema operativo busque y devuelva automáticamente un puerto disponible adecuado en el rango de número de puerto dinámico TCP/IP.
A la aplicación no se le otorga el puerto 0 sino algún otro puerto dinámico. La ventaja de esta convención de programación es la eficiencia. En lugar de que cada aplicación implemente y ejecute código para probar varios puertos hasta que obtenga uno válido, las aplicaciones dependen del sistema operativo.
Unix, Windows y otros sistemas operativos varían en el manejo del puerto 0, pero se aplica la misma convención general.
Puerto 0 y seguridad de red
El tráfico de red enviado a través de Internet a hosts que escuchan en el puerto 0 puede ser generado por atacantes de red o accidentalmente por aplicaciones programadas incorrectamente. Los mensajes de respuesta que generan los hosts en respuesta al tráfico del puerto 0 ayudan a los atacantes a conocer el comportamiento y las posibles vulnerabilidades de red de esos dispositivos.
Muchos proveedores de servicios de Internet (ISP) bloquean el tráfico en el puerto 0, tanto los mensajes entrantes como los salientes, para protegerse contra estas vulnerabilidades.
Preguntas Frecuentes
¿Qué son los números de puerto?
Los números de puerto utilizados para las conexiones de red TCP/IP actúan como información de dirección, identificando a los remitentes y destinatarios de un mensaje. Los números de puerto permiten que varias aplicaciones en la misma red compartan recursos al mismo tiempo.
¿Cómo encuentro los números de puerto?
Para encontrar el número de puerto de una dirección IP específica, vaya al símbolo del sistema, escriba netstat -a, luego presione Enter. Verá una lista de conexiones TCP activas junto con direcciones IP y números de puerto separados por dos puntos.
¿Puedo conectarme al puerto 0?
No. Oficialmente, el puerto 0 no existe y no puedes conectarte a él, ya que es un número de puerto no válido. Sin embargo, puede enviar un paquete de Internet hacia y desde el puerto 0 de la misma manera que lo haría con otro número de puerto.