Al escribir un programa típico de servidor de hello world, ¿por qué evitamos escuchar en el puerto 80, a pesar de que ninguna otra aplicación podría estar escuchando en el mismo puerto?

El puerto 80 es el conocido puerto estándar utilizado por las solicitudes HTTP en su navegador web. En general, al escribir su propio programa de socket, debe evitar escuchar cualquiera de los puertos conocidos: Lista de números de puerto TCP y UDP

Los números de puerto pueden ser de 0 a 65535: debe usar uno que no esté reservado para otra cosa para evitar posibles conflictos. Por ejemplo, el puerto 25 está reservado para el protocolo SMTP que se utiliza para enviar correos electrónicos. Si lo usa en su propia aplicación para hacer algo más que enviar correos electrónicos, ¡otros clientes de correo electrónico (que están escuchando en el mismo puerto) se confundirán!

Una estrategia que utilizan muchas aplicaciones (generalmente un servidor que espera varios clientes) es escuchar en un puerto conocido, pero tan pronto como se conecte un cliente, continúe la conexión en un puerto efímero (en el rango 1024-65535) para liberar El conocido puerto para otros clientes.

Su servidor web necesitará acceso root (sudo) para usar puertos reservados (<1000) ... Diablos, incluso he usado el puerto 1. Es solo eso ya que el servidor web se ejecuta con poderes administrativos ahora, si supuestamente alguien inyecta código en el sistema a través de este servidor web, el supuesto "hacker" y el código también habrán obtenido acceso administrativo al sistema. Por lo tanto, generalmente no colocamos servidores de desarrollo en puertos que requieren root, hasta que se haya probado lo suficiente.

Querido dios, nunca pensé en eso.

Pero es cierto, evitamos el puerto 80 y, en general, cualquier puerto por debajo del rango 1000, ya que se considera reservado para servidores de nivel empresarial. Lo que quiero decir con esto es que están reservados para servidores que se utilizarían enormemente. Por lo tanto, se recomienda que cualquier servidor de prueba / desarrollo use cualquier puerto superior a 1000. En la práctica, podría usar el puerto 80, pero si también es un desarrollador web, chocará con su servidor web.