¿Cómo se realizan múltiples conexiones de cliente a un único servidor web?

16

En realidad, estoy aprendiendo Redes de computadoras y, mientras lo hago, ¿estoy confundido acerca de cómo un servidor web mantiene múltiples conexiones?

Simplemente para decir, aprendí a través de googlear que los sockets manejan una solicitud de cada cliente.

Digamos que hay un servidor web y digamos 2 clientes con IP

Client A: 5.5.5.5
Client B: 10.10.10.10 

Ambos intentan conectarse al servidor en el puerto 80.

Ahora, al buscar en Google lo que tengo, el servidor escucha en el puerto 80 las solicitudes entrantes. Entonces, digamos que un cliente A intenta conectarse al servidor (hacer una conexión TCP / IP). Durante el cual se crea un socket entre estos dos. Luego se ejecuta como un hilo separado para su comunicación posterior, lo que hace que el servidor escuche nuevamente las solicitudes de otros clientes en ese puerto en particular. Y el Cliente B se conecta de la misma manera.

Ahora mi primera pregunta es:

1. How does server communicate with these two clients simultaneously  
   after the connection has been established?

Ahora prácticamente no solo 2 clientes sino miles y millones de usuarios pueden conectarse a un servidor.

Entonces mi siguiente pregunta es:

2. Now, how do those thousands of clients get connected to a single server?

   If we assume every client is connected to the server through wire, it is not 
   practically possible to maintain that many sockets on a hardware for
   connection. How those thousands connections are made and handled?

Por último, mi tercera pregunta es:

3. Above I said (actually heard) how **client A** connected to the the server
   and similarly the client B.

   But I didn't get the part stating "after a TCP/IP connection is made they
   continue separately in a separate socket and making server to listen for 
   other client requests." What does that mean? If one client is communicating
   to the server, how come other can communicate at the same time to same server.

   Isn't it like while a student is asking question to a teacher, other can't
   ask at the same time since that particular student is busy or occupying the
   teacher at the moment so others should wait, which we compare than client B 
   should wait when client A is communicating.

Estas son mis preguntas básicas que no estoy recibiendo. Por favor corrígeme si me estoy equivocando. Puede sugerirme algunos libros / pdf para leer si las respuestas son detalladas o no están centradas en una parte específica. Gracias

Sagaryal
fuente
¿Alguna respuesta te ayudó? Si es así, debe aceptar la respuesta para que la pregunta no siga apareciendo para siempre, buscando una respuesta. Alternativamente, puede proporcionar y aceptar su propia respuesta.
Ron Maupin

Respuestas:

6

Ahora, al buscar en Google lo que tengo, el servidor escucha en el puerto 80 las solicitudes entrantes.

De hecho, más específicamente hay un tipo especial de socket llamado socket "escucha".

Normalmente, un socket está asociado con una combinación de IP local, puerto local, IP remota y puerto remoto.

Una toma de escucha es diferente. No está asociado con ninguna IP remota y puerto específicos. Está asociado con un puerto local específico. Puede o no estar asociado con una IP local específica.

Normalmente su servidor web tendrá un socket de escucha con un puerto local de 80

Luego, digamos que un cliente A intenta conectarse al servidor (hacer una conexión TCP / IP). Durante el cual se crea un socket entre estos dos.

Un par de sockets en realidad uno en el cliente, uno en el servidor.

La aplicación del cliente crea un socket y le pide al sistema operativo del cliente que lo conecte al servidor.

El sistema operativo del cliente asigna un puerto local aleatorio, elige una IP local (normalmente según la interfaz en la que se enviará el paquete) y completa la IP remota y el puerto solicitado por la aplicación del cliente. Luego comienza el proceso de conexión al servidor.

El sistema operativo del servidor notifica al titular del socket de escucha que está entrando una nueva conexión. La aplicación del servidor acepta la conexión y se crea un nuevo socket para manejarla.

Varios subprocesos o incluso procesos pueden monitorear el mismo socket de listado. El sistema operativo se asegurará de que exactamente uno de ellos acepte una conexión determinada.

Luego se ejecuta como hilo separado para su posterior comunicación

Eso depende del implementador de la aplicación del servidor. Pueden elegir usar múltiples hilos o pueden elegir usar una API como "select" o "poll" que permite que un solo hilo monitoree múltiples sockets para detectar actividad.

  1. ¿Cómo se comunica el servidor con estos dos clientes simultáneamente
    después de que se ha establecido la conexión?

El sistema operativo del servidor hará coincidir los paquetes con los sockets mediante la combinación de IP de origen, puerto de origen, IP de destino y puerto de destino y los entregará al socket apropiado.

  1. Ahora, ¿cómo se conectan esos miles de clientes a un solo servidor?

    Si suponemos que cada cliente está conectado al servidor a través de un cable, no es prácticamente posible mantener tantos enchufes en un hardware para la conexión. ¿Cómo se hacen y manejan esas miles de conexiones?

"Socket" en este contexto no se refiere a un socket físico, solo a una estructura de datos dentro del sistema operativo.

Todavía hay límites, miles se pueden hacer fácilmente en un servidor moderno, millones se vuelven difíciles.

¿No es así cuando un estudiante le hace una pregunta a un maestro, otro no puede preguntar al mismo tiempo ya que ese estudiante en particular está ocupado u ocupando al maestro en este momento, por lo que otros deberían esperar, lo que comparamos que el cliente B debería esperar? cuando el cliente A se está comunicando.

Las computadoras son mucho mejores dividiendo su atención que las personas. Obviamente, si el servidor tiene un solo núcleo de procesador, solo puede estar haciendo una cosa a la vez, pero si puede cambiar entre las cosas lo suficientemente rápido, los clientes no lo notarán.

Y, por supuesto, muchos servidores hoy en día tienen múltiples núcleos de procesador.


Se crea una nueva conexión, no socket. Creo que está extendiendo la confusión del OP sobre lo que es un socket.

Parece que el problema es que el rfc difiere de la práctica real en su definición de socket.

Acabo de ir y busqué la documentación para "aceptar" para tres sistemas operativos principales, todos hablan de aceptar crear un nuevo socket.

http://man7.org/linux/man-pages/man2/accept.2.html

https://www.freebsd.org/cgi/man.cgi?query=accept&sektion=2

https://msdn.microsoft.com/en-us/library/windows/desktop/ms737526%28v=vs.85%29.aspx

Peter Green
fuente
Para la respuesta de 1. Sé acerca de la singularidad del zócalo. Lo que quise preguntar es si hay 2 sockets únicos y el servidor sabe que son diferentes. Entonces, ¿el servidor le da a cada socket un intervalo de tiempo para ejecutarse al manejar la solicitud al mismo tiempo? Por ejemplo, si me conecto a Google y estoy procesando mi solicitud, ¿no significa que la solicitud de otros millones de usuarios está pendiente?
Sagaryal
También 2. Me refería a los puertos como el físico real cuando quieres conectarte a una red, como en LAN. Podría estar malinterpretando las palabras aquí. Digamos que me conecto a google nuevamente. Y como millones de otras personas se están conectando a ese único servidor de Google. Me conecto a Google de forma inalámbrica desde mi casa y de manera similar a esos millones de personas. Cómo son manejadas estas conexiones por el servidor. Al igual que para que mi computadora use Internet, necesito conectarme a un puerto de mi enrutador o de forma inalámbrica. ¿Tienen millones de esos puertos físicamente? Ahora creo que no se trata del servidor, sino de la conexión inalámbrica.
Sagaryal
" Normalmente, un socket está asociado con una combinación de IP local, puerto local, IP remoto y puerto remoto " . Un socket , por definición de RFC, es la dirección IP local y el puerto TCP, y no tiene nada que ver con las direcciones remotas. . Una conexión es la combinación de los sockets locales y remotos, de modo que la dirección IP local, el puerto TCP local, la dirección IP remota y el puerto TCP remoto. Has confundido el problema.
Ron Maupin
2
" El sistema operativo del servidor notifica al titular del socket de escucha que está entrando una nueva conexión. La aplicación del servidor acepta la conexión y se crea un nuevo socket para manejarla " . Se crea una nueva conexión , no un socket . Creo que está extendiendo la confusión del OP sobre lo que es un socket.
Ron Maupin
" El sistema operativo del servidor hará coincidir los paquetes con los sockets mediante la combinación de IP de origen, puerto de origen, IP de destino y puerto de destino y los entregará al socket apropiado " . De nuevo, está confundiendo el socket con la conexión .
Ron Maupin