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
Respuestas:
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
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.
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.
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.
"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.
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.
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
fuente