Bien, déjenme responder esta pregunta a nivel de socket, lo cual es bastante interesante:
0) Entonces, en un nivel muy básico, cada nueva solicitud a un servidor (www.facebook.com) desde un cliente (su navegador), inicia una conexión TCP. Esta conexión es entre dos puntos finales, llamados sockets. Ahora cada socket no es más que una combinación de IP y puerto. En cuanto al servidor, está escuchando en una IP y un puerto fijos (de forma predeterminada, HTTP usa el puerto 80). El cliente ahora necesita crear un nuevo socket para iniciar una conexión y esto se delega al SO subyacente.
1) Lo primero que sucede es que la biblioteca Sockets del sistema operativo crea un socket identificado por la tupla {SRC-IP, SRC-PORT, DEST-IP, DEST-PORT}
- ¿Cuáles son los fundamentos básicos de las redes?
- Cómo aprender a usar Wireshark
- ¿Qué es la fibra oscura?
- ¿No es posible portar de una red móvil a otra antes de 3 meses?
- ¿Dell se centrará en el hardware de red?
SRC-PORT es un número aleatorio, generado por el sistema operativo generalmente en el rango más alto (mayormente mayor que 40000, por lo que no hay conflictos con algunos números de puerto reservados)
2) Ahora que tenemos un zócalo de cliente, necesitamos saber cuál es exactamente la IP del servidor, ya que www.facebook.com es un nombre legible por humanos. El sistema operativo puede hacer esto de varias maneras; puede mirar un caché en memoria, un archivo, una base de datos, un servidor LDAP, varias cosas, antes de salir a un servidor DNS, lo que puede hacer a través de TCP o UDP. Ahora DNS no es más que el Servidor de nombres de dominio que en inglés simple devuelve la IP para el nombre www.facebook.com
Ahora que tenemos toda la tupla con nosotros, se establece una conexión TCP a través de un mecanismo de enlace de tres vías (SYN-SYN / ACK-ACK).
3) En el extremo del servidor, Facebook tendrá un número N de equilibradores de carga cada uno apuntando a una IP virtual o puede usar un mecanismo DNS Round Robin, que redirigirá su solicitud de conexión a uno de los servidores de miles de servidores en un granja de servidores. Este servidor está escuchando en un bucle infinito en el puerto 80, utilizando un socket de escucha en ese puerto.
El zócalo de escucha ahora “acepta” su conexión y se crea un nuevo zócalo con el mismo número de puerto, que será el zócalo del servidor dedicado para el zócalo de su cliente y recibirá los datos que envíe y le enviará la respuesta.
Entonces, ¿si miles de clientes llegan al servidor al mismo tiempo? Un servidor TCP tiene un socket separado por conexión aceptada, y cualquier servidor TCP racionalmente construido los maneja de manera completamente independiente, ya sea a través de E / S multiproceso, multiplexado / sin bloqueo o E / S asíncrona. No se bloquean entre sí.
4) Bien, ahora que la conexión TCP está establecida, ya está listo para intercambiar datos con el servidor de Facebook. Si no hay cookies disponibles, entonces, para su solicitud, el servidor enviará la respuesta HTML como la página de inicio de sesión a través de HTTP, y el navegador (cliente) mostrará el marcado y el estilo aplicados y mostrará la página web de inicio de sesión en su computadora. En caso de que ya haya iniciado sesión, sucederá lo mismo, pero ahora recibirá su página de inicio como la respuesta HTML del servidor.
Tenga en cuenta que una vez que se agota el tiempo de espera de HTTP Keep Alive o que el servidor (en su mayoría) o el cliente cierra la conexión, el servidor descartará / reciclará el socket que creó para “aceptar” su conexión.
5) También es imprescindible afirmar que HTTP es esencialmente un protocolo sin estado, lo que significa que cada solicitud de un cliente a un servidor se trata de forma independiente de la otra. Ahí es donde entra en juego el concepto de Administración de sesión HTTP. Entonces, una vez que inicie sesión en Facebook, se creará una nueva sesión para usted y el servidor o cliente (que usa cookies) mantiene esa sesión durante todo el tiempo que está conectado, y la sesión se destruye una vez que cierra sesión.
Sé que me sentí abrumado al escribir esta respuesta. Lo siento por eso. Espero que esto ayude. Siéntase libre de agregar más detalles en los comentarios, en caso de que me haya perdido algo.
Referencia: Página en stackoverflow.com