17 votos

Puertos de comprensión: ¿Cómo múltiples pestañas del navegador se comunican al mismo tiempo?

Me di cuenta hoy que me fundamentalmente que no entiendo es cómo el puerto de comunicación funciona.

Si yo lanzo una instancia de un servidor web escuchando en el puerto 80, que puede responder a las numerosas peticiones de muchos diferentes pestañas del navegador, todos se comunican a través del puerto 80.

Sin embargo, no puedo poner en marcha dos instancias del servidor escuchando en el puerto 80, ya que los resultados en un conflicto en el puerto.

Siempre me he tomado esto como un hecho dado, (sólo un proceso puede enlazar a un puerto específico en un momento dado) sin realmente pensarlo -- no hay de varios procesos de comunicación en el puerto 80? (ie., cada una de las fichas se ejecuta en el navegador?)

23voto

EightBitTony Puntos 6942

Básicamente, sólo un proceso puede ESCUCHAR en un puerto al mismo tiempo (técnicamente, un socket es dedicada a la escucha). Pero, un puerto puede manejar muchos sockets de transferencia de datos, un socket es una combinación de IP / puerto y dirección IP remoto / mando a distancia del puerto. De esa manera, una vez que el servidor acepta la conexión entrante mientras Escucha se abre un nuevo socket dedicado a la conversación y las manos el procesamiento de off a algo más, a continuación, vuelve a Escuchar.

Más detalles aquí.

14voto

Paweł Brodacki Puntos 4635

Navegador se conecta desde un alto al azar (es decir, 1024 >) Puerto del ordenador al puerto de un servidor remoto 80. Por lo tanto no hay Puerto conflicto en su máquina.

Si utilizas muchas fichas para conectarse al mismo servidor remoto (o hay muchos usuarios conectarse al servidor) van todos al mismo puerto y son atendidos por el mismo proceso (es decir, el servidor web del sitio).

7voto

sysadmin1138 Puntos 86362

El servidor escucha en el puerto 80 no TIENE que manejar varios procesos. Simples de TCP de los demonios del anciano años sólo podía manejar una conexión en un momento. Usted puede emular este comportamiento por tener un programa como netcat escuche en un puerto específico y tratar de conectar dos máquinas. Uno se pondrá en, el otro le rebotan sin una conexión. Estos demonios son en su mayoría inútiles, así que nunca vemos.

Algo así como un servidor web, es la escucha en el puerto directamente. La cosa a tener en cuenta es que es sentarse en la parte superior del sistema operativo del zócalo de la biblioteca. Cuando una nueva conexión se establece, el zócalo de la biblioteca pasa el nuevo socket para el software de servidor web. En ese momento, el software de servidor web tiene algunas opciones.

Una posibilidad es que se pasa el socket-objeto a un nuevo hilo en el mismo proceso. Cada vez que ocurre la comunicación a través de este socket, este hilo va a manejar. El padre del proceso que media la que los hilos están activos en un momento dado, que puede ser mucho.

Otra posibilidad es que se gira hacia arriba de un nuevo proceso y se pasa el socket-objeto en el proceso. Como yo lo entiendo, ahora es el sistema operativo del sistema de encaje mediar la comunicación entre estos procesos hijo y sus objetivos. El proceso padre todavía tiene cierto control sobre los procesos, como la matanza colgado unos y otras comunicaciones entre procesos.

Cuál de estos enfoques es más eficiente depende del sistema operativo. Si mal no recuerdo, Apache se puede ejecutar en cualquiera de los modos.

En esencia, el zócalo de la biblioteca proporciona un nivel de procesamiento en paralelo para el servidor web. Puede manejar múltiples conexiones simultáneas activamente la transferencia de datos, mientras aceptar nuevas conexiones.

Para un navegador que puede girar hasta varios intentos de conexión a un servidor web a fin de mejorar los tiempos de carga, el paralelismo se aplica en el navegador terminar así, este es un buen y maravilloso. El navegador realiza un seguimiento del estado de la página es de carga, y los múltiples intentos de conexión se gira hacia arriba, son parte del proceso.

2voto

rrichter Puntos 2273

Hay, efectivamente, dos "tipos" de flujo de sockets. Uno tiene un wild-card "otro extremo", uno tiene un determinado host:puerto por el otro extremo.

No hay dos sockets pueden (o, más bien, debe siempre) tienen el mismo "ello" y el "otro extremo" identificadores. El socket que es "escuchado" (aceptar conexiones entrantes) es el que tiene un wild-card "otro extremo", por lo que sólo puede existir. Como conexiones de llegar, accept es de hecho, la devolución de un socket con un host:puerto tupla para el otro extremo.

1voto

Paul Puntos 85

Tu pregunta me recuerda a mí mismo un par de años atrás antes de Cisco CCNA - tenido las mismas dudas :)

En primer lugar, el establecimiento de múltiples conexiones HTTP no está necesariamente ligado a la cantidad de pestañas que tienes abiertas en tu navegador. Cuando visite un sitio web con anuncios o código de google analytics por ejemplo, se va a conectar a varios sitios a pesar de sólo estar en una pestaña.

De todos modos, cuando su navegador se comunica con el servidor web, el puerto de destino del tráfico enviado al servidor web, es el puerto 80, mientras que el puerto de origen es un número aleatorio. El puerto de origen es dejar el webserver saber qué puerto debe comunicarse de nuevo a usted. Cada http conexión establecida tendrá su propio puerto abierto en su ordenador. Intente ejecutar netstat con un par de sitios web abiertos y podrá ver inmediatamente lo que quiero decir.

Ustedes se ríen, pero este libro es una gran y rápida manera de obtener los conocimientos básicos de TCP/IP. Me ayudó mucho.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: