Comment un serveur est-il informé de la demande HTTP?

8

J'ai une compréhension de base du fonctionnement de HTTP . Je comprends que le client (navigateur Web) fait une demande et que le serveur répond à la demande. Cependant, ce que je ne comprends pas, c'est comment un serveur Web sait-il quand le client fait une demande?

Si quelqu'un m'appelle, mon téléphone sonne et j'en suis informé. De même, comment un serveur Web est-il informé de la demande?

Raj curieux
la source
2
Comment est-ce que ce n'est pas un doublon 5 ans après le lancement de Super User?
Peter Mortensen

Réponses:

28

Il y a beaucoup de couches à cela. Et surtout, beaucoup d'entre eux sont interchangeables.

Par exemple, vous pouvez avoir un réseau à câble coaxial, un Ethernet ou un Wi-Fi au niveau physique. HTTP fonctionne en plus de tous ceux-ci, mais chacun d'eux a une gestion légèrement différente de la charge utile envoyée.

HTTP fonctionne au-dessus d'un autre protocole, appelé TCP, qui à son tour tourne plus ou moins au-dessus d'un autre protocole, appelé IP (de nos jours principalement en deux variantes - IPv4 et IPv6).

Ainsi, le serveur HTTP enregistre une adresse IP (comme 184.38.45.1, ou le plus souvent "n'importe laquelle"), ainsi qu'un port TCP (qui 80est la valeur par défaut pour HTTP, mais en général n'importe quoi de 1à 65535), avec le système d'exploitation. À présent, le serveur HTTP indique au système d'exploitation de lui envoyer une requête ping lorsque des données (ou un autre message) arrivent. Le système d'exploitation sait quand cela se produit, car le pilote de la carte d'interface réseau le lui dit. Et le pilote NIC est informé par le NIC lui-même, qui a en fait son propre logiciel pour interpréter les signaux électriques sur le câble réseau (ou les signaux sans fil dans l'air, etc., vous avez l'idée).

Note latérale :

Si vous souhaitez en savoir plus sur la façon dont la carte réseau peut initier la communication avec le pilote / système d'exploitation, vous pouvez rechercher des informations de base sur les interruptions matérielles - en gros, tout ce que le processeur fait actuellement est arrêté et le flux du programme passe à une interruption routine de gestionnaire - un morceau de code extrêmement simple qui s'occupe de notifier le système, puis renvoie immédiatement le contrôle à la chose d'origine que le CPU faisait. En fait, cela pourrait vous répondre à de nombreuses questions sur le fonctionnement interne du système d'exploitation et de l'ordinateur lui-même - comme la façon dont un système d'exploitation peut "voler" le processeur des applications en cours d'exécution et mélanger les ressources du processeur entre les différentes applications exécutées en même temps, même s'ils ne coopèrent pas.

De retour aux affaires:

Dans votre analogie téléphonique manuelle, imaginez que votre téléphone ne sonne pas réellement. Pour savoir si vous avez une tentative d'appel téléphonique, vous devrez regarder l'écran régulièrement et vérifier. Pour rendre cela plus facile à gérer pour le serveur HTTP (car il y a déjà pas mal de couches qui font cette vérification périodique), vous pouvez réellement bloquer la tentative de vérification.

Donc, au lieu de vérifier, de voir qu'il n'y a rien et de vérifier à nouveau, vous continuez à regarder l'écran tout le temps. Cependant, vous avez essentiellement un système complètement séparé pour gérer cela (dans votre cas, le centre auditif, qui vérifie les vibrations de l'air pour des informations utiles, l'anneau), donc il ne nécessite pas réellement votre attention (temps CPU).

Ceci est encore amélioré par des techniques qui vous permettent de surveiller de nombreuses connexions à la fois (IOCP). Cela se rapproche de plus en plus du système de sonnerie téléphonique - vous avez une salle avec dix mille téléphones, mais vous ne vous souciez que de ceux qui sonnent en ce moment, les autres ne retiennent pas votre attention.

Luaan
la source
Attention, "ping" a une signification totalement indépendante dans le réseautage. Aussi, pourquoi personne n'a-t-il mentionné des «interruptions matérielles»?
Lie Ryan
1
@LieRyan Eh bien, oui, c'est dans la partie où la carte réseau indique le pilote de la carte réseau. Cela ressemble à une toute petite tache dans l'énorme liste d'abstractions impliquées, et vraiment, en dehors des gens qui jouent avec des architectures à l'ancienne, des périphériques intégrés ou des développeurs de pilotes, c'est malheureusement une connaissance assez obscure. Mais bon, je suppose que je vais ajouter une brève mention.
Luaan
1
Les ports ne sont-ils que des numéros? ou s'agit-il de broches physiques sur la carte NIC? J'ai du mal à imaginer qu'il pourrait y avoir 65536 ports
Dhiwakar Ravikumar
2
@DhiwakarRavikumar: Oui, les ports ne sont que des chiffres. Ils sont constitués par un programme ou le système d'exploitation, ils ne correspondent à rien en matériel.
sleske
1
@DhiwakarRavikumar Les ports ne sont que des chiffres, mais les interruptions matérielles étaient en fait des broches matérielles sur le processeur (vous aviez donc une broche différente pour "obtenu une division par zéro!" Et une autre pour "le réveil sonne"). Vous n'avez donc eu que trois ou sept interruptions différentes ou la plupart du temps. C'est comparable aux anciennes stations téléphoniques - elles avaient en fait des broches physiques que vous deviez connecter pour passer l'appel, mais elles sont commutées dans le logiciel de nos jours tout comme les ports TCP.
Luaan
9

Les ordinateurs utilisent un concept appelé "ports", analogue aux "extensions" pour un standard téléphonique: le client "appelle" non seulement l'adresse IP du serveur, mais envoie également la demande à un port spécifique sur ce serveur.

Il y a des milliers de ports ( liste wikipedia ), par exemple le port 80 est le port par défaut pour HTTP.

L'astuce est qu'un programme, par exemple un serveur Web, peut s'enregistrer pour écouter sur un port particulier. Ensuite, le système d'exploitation transmettra toutes les demandes provenant de ce port à ce programme.

Le fait d'avoir plusieurs ports est que vous pouvez avoir plusieurs services en cours d'exécution sur le même serveur en même temps, en utilisant des ports différents, ils n'interféreront pas les uns avec les autres.

jg-faustus
la source
65 535 ports pour être exact
ub3rst4r
3

Serveur Web notifié avec le processus suivant

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

Supposons que le serveur Web écoute sur le port 80, lorsque la demande du client arrive sur le port 80, il accepte une connexion avec l'appel système accept (). Cet appel se bloque généralement jusqu'à ce qu'un client se connecte au serveur.

Ensuite, écoutez les connexions avec l'appel système listen () et liez le socket à une adresse à l'aide de l'appel système bind ().

Atlast crée un socket avec l'appel système socket ().

J'espère que cela t'aides!

vembutech
la source
0

Vous avez le répertoire / var / log / apache2 avec le répertoire suivant:

access.log
error.log
other_vhosts_access.log

C'est lié à ce que vous voulez du client et à la façon de notifier, SMS, e-mail, etc.

Ma suggestion:

Vous pouvez créer un serveur de journaux et envoyer tous vos journaux tels que le serveur de messagerie, le serveur DNS, le serveur Web, etc. Vous pouvez ensuite l'analyser. Même le même serveur utilise DB et vous pouvez exécuter une requête.

Golfe Persique
la source
Merci pour la réponse, mais je pense que vous avez mal compris ma question. Je voulais dire quand je reçois un appel téléphonique, mon téléphone sonne. Je sais donc que j'ai reçu un appel parce que mon téléphone a sonné. De même, lorsque le client fait une demande, comment le serveur Web est-il informé?
raj curieux
0

Je suppose que le serveur Web enregistre les fonctions de rappel avec le port.

De sorte que chaque fois que quelque chose est reçu sur ce port particulier, le système appelle cette fonction de rappel enregistrée plus tôt. À l'intérieur de ce rappel, il peut définir un événement ou quelque chose comme ça, puis le serveur Web aurait un thread dédié en attente de cet événement. Ce thread s'exécutera et mettra cette requête en file d'attente dans la liste principale des requêtes que le serveur Web traite déjà.

Ce que j'ai donné ici est une vue très superficielle et macro des choses qui se passent. Pour des réponses plus précises, attendons que les experts arrivent.

Tsar je suis tsar
la source