¿Cómo se notifica a un servidor sobre la solicitud HTTP?

8

Tengo una comprensión básica de cómo funciona HTTP . Entiendo que el cliente (navegador web) hace una solicitud y el servidor responde a la solicitud. Sin embargo, lo que no entiendo es cómo sabe un servidor web cuando el cliente realiza una solicitud.

Si alguien me llama, suena mi teléfono y me notifican. Del mismo modo, ¿cómo se notifica a un servidor web sobre la solicitud?

raj curioso
fuente
2
¿Cómo es que esto no es un duplicado 5 años después del lanzamiento de Super User?
Peter Mortensen el

Respuestas:

28

Hay muchas capas en esto. Y lo más importante, muchos de ellos son intercambiables.

Por ejemplo, puede tener una red de cable coaxial, un ethernet o un Wi-Fi inactivo en el nivel físico. HTTP funciona además de todos ellos, pero cada uno de ellos tiene un manejo ligeramente diferente de la carga útil que se envía.

HTTP funciona sobre otro protocolo, llamado TCP, que a su vez se ejecuta más o menos sobre otro protocolo, llamado IP (hoy en día principalmente en dos variantes: IPv4 e IPv6).

Por lo que el servidor HTTP registra una dirección IP (como 184.38.45.1, o más a menudo "cualquiera"), junto con un puerto TCP ( 80siendo el valor por defecto para HTTP, pero en general todo de 1a 65535), con el sistema operativo. Ahora, el servidor HTTP le dice al sistema operativo que haga ping cuando lleguen datos (u otro mensaje). El sistema operativo sabe cuándo sucede eso, porque el controlador de la tarjeta de interfaz de red lo dice. Y el controlador de la NIC es informado por la propia NIC, que en realidad tiene su propio software para interpretar las señales eléctricas en el cable de red (o las señales inalámbricas en el aire, etc., se entiende).

Nota al margen :

Si desea saber más acerca de cómo la NIC puede iniciar la comunicación con el controlador / sistema operativo, es posible que desee buscar información básica sobre las interrupciones de hardware, básicamente, se detiene todo lo que la CPU está haciendo actualmente y el flujo del programa cambia a una interrupción rutina de controlador: un código extremadamente simple que se encarga de notificar al sistema y luego devuelve inmediatamente el control a lo que estaba haciendo la CPU. De hecho, podría responder muchas preguntas sobre el funcionamiento interno del sistema operativo y la computadora en sí, como cómo un sistema operativo puede "robar" la CPU de las aplicaciones en ejecución y mezclar los recursos de la CPU entre diferentes aplicaciones que se ejecutan al mismo tiempo, incluso si no cooperan.

De vuelta a los negocios:

En la analogía de su teléfono manual, imagine que su teléfono no suena realmente. Para saber si está intentando realizar una llamada telefónica, deberá mirar la pantalla periódicamente y verificar. Para que sea más fácil de administrar para el servidor HTTP (dado que ya hay bastantes capas que realizan esa verificación periódica), puede bloquear el intento de verificación.

Entonces, en lugar de verificar, ver que no hay nada allí y volver a verificar, básicamente sigue mirando la pantalla todo el tiempo. Sin embargo, básicamente tiene un sistema completamente separado para manejar esto (en su caso, el centro de audición, que verifica las vibraciones del aire para obtener información útil, el anillo), por lo que en realidad no requiere su atención (tiempo de CPU).

Esto se mejora aún más mediante técnicas que le permiten monitorear muchas conexiones a la vez (IOCP). Esto se acerca cada vez más al sistema de timbre del teléfono: tiene una habitación con diez mil teléfonos, pero solo le importan los que están sonando en este momento, los otros no le están prestando atención.

Luaan
fuente
Cuidado, "ping" tiene un significado totalmente diferente en la red. Además, ¿por qué nadie ha mencionado las "interrupciones de hardware"?
Lie Ryan
1
@LieRyan Bueno, sí, eso es en la parte donde la NIC le dice al conductor de la NIC. Simplemente se siente como una pequeña mota en la enorme lista de abstracciones involucradas, y realmente, fuera de las personas que juegan con arquitecturas de la vieja escuela, dispositivos integrados o desarrolladores de controladores, es un conocimiento bastante oscuro, lamentablemente. Pero bueno, supongo que agregaré una mención rápida.
Luaan
1
¿Los puertos son solo números? o son pines físicos en la tarjeta NIC? Me resulta difícil imaginar que podría haber 65536 puertos
Dhiwakar Ravikumar
2
@DhiwakarRavikumar: Sí, los puertos son solo números. Están formados por un programa o el sistema operativo, no corresponden a nada en el hardware.
sleske 01 de
1
@DhiwakarRavikumar Los puertos son solo números, pero las interrupciones de hardware en realidad solían ser pines de hardware en la CPU (por lo que tenía un pin diferente para "¡se dividió por cero!" Y otro para "el despertador está sonando"). Así que solo tuvo tres o siete interrupciones diferentes o algo así la mayor parte del tiempo. Es comparable a las antiguas estaciones telefónicas: solían tener pines físicos que tenía que conectar para hacer la llamada, pero hoy en día están conectados al software al igual que los puertos TCP.
Luaan
9

Las computadoras usan un concepto llamado "puertos", análogo a "extensiones" para una centralita telefónica: el cliente no solo "llama" a la dirección IP del servidor, sino que también envía la solicitud a un puerto específico en ese servidor.

Hay miles de puertos ( lista de wikipedia ), por ejemplo, el puerto 80 es el predeterminado para HTTP.

El truco es que un programa, por ejemplo, un servidor web, puede registrarse para escuchar en un puerto en particular. Luego, el sistema operativo pasará cualquier solicitud que ingrese en ese puerto a ese programa.

El punto de tener varios puertos es que puede tener múltiples servicios ejecutándose en el mismo servidor al mismo tiempo, al usar diferentes puertos no interferirán entre sí.

jg-faustus
fuente
65,535 puertos para ser exactos
ub3rst4r
3

Servidor web notificado con el siguiente proceso

Accept ()
Liseten()
bind()
socket()

Digamos que el servidor web escucha en el puerto 80, cuando la solicitud del cliente llega al puerto 80, aceptará una conexión con la llamada del sistema accept (). Esta llamada generalmente se bloquea hasta que un cliente se conecta con el servidor.

Luego escuche las conexiones con la llamada al sistema listen () y vincule el zócalo a una dirección utilizando la llamada al sistema bind ().

Atlast crea un socket con la llamada al sistema socket ().

¡Espero que esto ayude!

vembutech
fuente
0

Tiene el directorio / var / log / apache2 con el siguiente directorio:

access.log
error.log
other_vhosts_access.log

Está relacionado con lo que desea del cliente y cómo notificar, sms, correo electrónico, etc.

Mi sugerencia:

Puede crear un servidor de registro y enviar todos sus registros, como el servidor de correo, el servidor dns, el servidor web, etc., luego puede analizarlo, incluso el mismo servidor usa db y puede ejecutar la consulta.

Golfo pérsico
fuente
Gracias por la respuesta, pero creo que entendiste mal mi pregunta. Me refiero a cuando recibo una llamada telefónica, suena mi teléfono. Entonces sé que recibí una llamada telefónica porque sonó mi teléfono. Del mismo modo, cuando el cliente realiza una solicitud, ¿cómo se notifica al servidor web?
Raj curioso
0

Supongo que el servidor web registra las funciones de devolución de llamada con el puerto.

De modo que cada vez que se recibe algo en ese puerto en particular, el sistema llama a esa función de devolución de llamada registrada anteriormente. Dentro de esa devolución de llamada, puede establecer un evento o algo así y luego el servidor web tendría un hilo dedicado esperando ese evento. Este hilo se ejecutará y pondrá en cola esta solicitud en la lista principal de solicitudes que el servidor web ya está procesando.

Lo que di aquí es una visión muy superficial y macro de las cosas que suceden. Para obtener respuestas más precisas, esperemos hasta que entren los expertos.

Zar yo soy zar
fuente