A diferencia de la mayoría de los números de puerto, el puerto 0 es un puerto reservado en redes TCP/IP, lo que significa que no debe utilizarse en mensajes TCP o UDP.
El puerto 0 tiene un significado especial en la programación de redes, particularmente en el sistema operativo Unix cuando se trata de la programación de sockets donde el puerto se utiliza para solicitar puertos dinámicos asignados por el sistema. El puerto 0 es como un puerto comodín que le indica al sistema que busque un número de puerto adecuado.
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 de sistema o puertos conocidos. La Autoridad de Asignación de Números 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 utilizarse.
Cómo funciona el puerto 0 en la programación de red
La configuración de una nueva conexión de zócalo 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 creador (fuente) contienen ambos números de puerto para que el destinatario del mensaje (destino) pueda emitir mensajes de respuesta al punto final 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 comienzan a ejecutarse.
Para asignar su número de puerto de origen, las aplicaciones llaman a funciones de red TCP/IP como bind() para solicitarlo. La aplicación puede proporcionar un número fijo (hard-coded) para bind() si prefieren solicitar un número específico, pero tal solicitud puede fallar porque alguna otra aplicación que se esté ejecutando en el sistema puede estar usándolo actualmente.
Alternativamente, puede proporcionar el puerto 0 para bind() como parámetro de conexión. Esto desencadena que el sistema operativo busque y devuelva automáticamente un puerto disponible adecuado en el rango de números de puerto dinámico TCP/IP.
Tenga en cuenta que a la aplicación no se le concederá 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 tenga que implementar y ejecutar código para probar varios puertos hasta obtener uno válido, las aplicaciones pueden confiar en que el sistema operativo lo haga.
Unix, Windows y otros sistemas operativos varían ligeramente en su 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 los hosts generan en respuesta al tráfico del puerto 0 pueden ayudar a los atacantes a obtener más información sobre 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 salientes- para ayudar a protegerse de estos ataques.