2009-12-21 20 views
10

Cuando trato de unir el socket al puerto 80 del programa obtengo un error, pero ¿cómo dos navegadores pueden escuchar simultáneamente el mismo puerto 80?¿Cómo escuchan dos navegadores simultáneamente en el puerto 80?

+18

el servidor escucha, el navegador se conecta ... – miku

+1

Cuando hay una conexión con el puerto 80, ¿cuál de los dos programas debe responder? –

+1

@Alvaro Así no es como funcionan los enchufes. –

Respuesta

17

Los navegadores no escuchar en el puerto 80, HTTP servidores de tareas (aunque eso es sólo convención, que fácilmente podrían tener un servidor FTP o Telnet utilizando el puerto 80).

En TCP/IP, una "sesión" debe ser única y la sesión se define como la 5-tupla (protocol, sourceIP, sourcePort, destinationIP, destinationPort). Esto permite que los paquetes se enruten correctamente en Internet.

Normalmente, cuando un cliente intenta contactar un servidor, especifica 0 como su puerto de origen, lo que significa que el sistema operativo lo asigna como no utilizado. Eso significa que el cliente realmente escuchará en ese puerto en lugar del puerto 80.

Puede obtener una sesión con las propiedades (TCP, mybox.com, 1101, www.microsoft.com, 80) cuando su navegador salga para acceder a las páginas web de Microsoft.

Si no puede vincular su servidor al puerto 80, lo más probable es que ya tenga un servidor ejecutándose en ese puerto, o su programa no tiene los privilegios necesarios para enlazar a ese puerto (puertos menores que 1024 generalmente se consideran puertos privilegiados).

Correr netstat -a (en Linux o Windows) le indicará si el servidor está enlazado al puerto 80.Busque un agente de escucha en el puerto 80 (o http si se trata de resolver los puertos a los nombres de servicio), algo así como:

tcp 0 0 localhost:http *:* LISTEN 
+0

Enumera la sesión como si tuviera el 5-tuple '(protocolo, sourceIP, destinationIP, sourcePort, destinationPort)', pero luego da el ejemplo '(TCP, mybox.com, 1101, www.microsoft.com, 80)'. ¿No debería ser '(TCP, mybox.com, www.microsoft.com, 1101, 80)'? –

+1

@Jon, gracias por eso. La tupla no tenía la intención de ser ordenada de ninguna manera, solo era la información requerida para identificar la sesión. Lo arreglaré por coherencia, ya que tienes toda la razón de que puede causar confusión. – paxdiablo

18

No escuchan en el puerto 80 hablan con el puerto 80, o 443 si está utilizando SSL (o en cualquier otro puerto si el administrador viola la convención, es posible que haya visto URLs como http://www.site.com:8080 donde el sitio tiene sido configurado en el puerto 8080).

El navegador realizará la solicitud desde un puerto aleatorio de números altos, por lo que el navegador puede estar activo al mismo tiempo.

Como dice paxdiablo, puede utilizar netstat para ver qué programas están abiertos a conexiones (usando "netstat -b" mostrará qué ejecutable está obligado a qué puerto)

3

Los navegadores no son en realidad enlazado al puerto 80 en absoluto. Es probable que encuentre que también está ejecutando IIS u otro servidor web que es atado y que es la causa de sus problemas

8

Navegadores realidad no escucha en el puerto 80. Los servidores web hacen esto y el navegador abre una conexión con un puerto entre 49152 y 65535 creo (puertos dinámicos).

4

En una conexión de red, hay un par (generalmente llamado cliente) que se conecta a otro (generalmente llamado servidor). Se dice que el servidor está escuchando en un determinado puerto, mientras que se dice que el cliente se está conectando a ese puerto.

En este caso, el servidor web escucha en el puerto 80 mientras todos los clientes (navegadores) se conectan a él.

2

Cuando un navegador realiza una conexión a un servidor, se vincula a un puerto local no privilegiado, pero se conecta al puerto 80 del servidor web. Cuando el servidor envía de vuelta una respuesta, va al puerto no privilegiado en la computadora del navegador. Si hay dos navegadores en la misma computadora, se enlazan a diferentes puertos.

0

Si se refiere a "cómo es posible que dos servidores escuchar en el puerto 80", considere el uso de la API HTTP Server. Ambos servidores pueden registrar una función de devolución de llamada, junto con una URL. El cliente puede decidir a qué servidor llamar en función de la URL, es decir,

http://localhost/Service1 ir al servicio que ha especificado "http://localhost/Service1" como su URL.

Cuestiones relacionadas