Wie wird ein Server über die HTTP-Anforderung benachrichtigt?


8

Ich habe ein grundlegendes Verständnis dafür, wie HTTP funktioniert. Ich verstehe, dass der Client (Webbrowser) eine Anfrage stellt und der Server auf die Anfrage antwortet. Was ich jedoch nicht verstehe, ist, woher weiß ein Webserver, wann der Client eine Anfrage stellt?

Wenn mich jemand anruft, klingelt mein Telefon und ich werde benachrichtigt. Wie wird ein Webserver über die Anfrage benachrichtigt?


2
Wie ist dies kein Duplikat 5 Jahre nach dem Start von Super User?
Peter Mortensen

Antworten:


28

Das hat viele Ebenen. Und vor allem sind viele von ihnen austauschbar.

Beispielsweise können Sie ein Koaxialkabelnetzwerk, ein Ethernet oder ein WLAN auf physischer Ebene haben. HTTP funktioniert zusätzlich zu all diesen, aber jeder von ihnen hat eine etwas andere Handhabung der herumgeschickten Nutzdaten.

HTTP funktioniert auf einem anderen Protokoll namens TCP, das wiederum mehr oder weniger auf einem anderen Protokoll namens IP ausgeführt wird (heutzutage meist in zwei Varianten - IPv4 und IPv6).

Daher registriert der HTTP-Server eine IP-Adresse (wie 184.38.45.1oder meistens "any") zusammen mit einem TCP-Port ( 80der Standard für HTTP, aber im Allgemeinen alles von 1bis 65535) beim Betriebssystem. Jetzt weist der HTTP-Server das Betriebssystem an, einen Ping-Befehl zu senden, wenn Daten (oder eine andere Nachricht) eingehen. Das Betriebssystem weiß, wann dies geschieht, da der Treiber der Netzwerkschnittstellenkarte dies mitteilt. Und der NIC-Treiber wird von der NIC selbst informiert, die tatsächlich über eine eigene Software verfügt, um die elektrischen Signale auf dem Netzwerkkabel (oder die drahtlosen Signale in der Luft usw. zu interpretieren, Sie haben die Idee).

Randnotiz :

Wenn Sie mehr darüber erfahren möchten, wie die Netzwerkkarte die Kommunikation mit dem Treiber / Betriebssystem initiieren kann, sollten Sie einige grundlegende Informationen zu Hardware-Interrupts nachschlagen. Grundsätzlich wird alles, was die CPU gerade tut, gestoppt und der Programmablauf wechselt zu einem Interrupt Handler-Routine - ein äußerst einfacher Code, der sich um die Benachrichtigung des Systems kümmert und die Kontrolle sofort wieder auf die ursprüngliche Funktion der CPU zurückführt. Tatsächlich kann es Ihnen viele Fragen zum Innenleben des Betriebssystems und des Computers selbst beantworten - beispielsweise, wie ein Betriebssystem die CPU aus laufenden Anwendungen "stehlen" und die CPU-Ressourcen zwischen verschiedenen gleichzeitig ausgeführten Anwendungen mischen kann. auch wenn sie nicht zusammenarbeiten.

Zurück zum Geschäftlichen:

Stellen Sie sich in Ihrer manuellen Telefonanalogie vor, dass Ihr Telefon nicht wirklich klingelt. Um zu wissen, ob Sie einen Anruf versuchen, müssen Sie regelmäßig auf den Bildschirm schauen und überprüfen. Um die Verwaltung für den HTTP-Server zu vereinfachen (da bereits einige Schichten diese regelmäßige Überprüfung durchführen), können Sie den Überprüfungsversuch tatsächlich blockieren .

Anstatt zu überprüfen, zu sehen, dass dort nichts ist, und erneut zu überprüfen, schauen Sie im Grunde die ganze Zeit auf den Bildschirm. Grundsätzlich haben Sie jedoch ein separates System, um dies zu handhaben (in Ihrem Fall das Hörzentrum, das die Luftvibrationen auf nützliche Informationen überprüft, den Ring), sodass Ihre Aufmerksamkeit (CPU-Zeit) nicht erforderlich ist.

Dies wird durch Techniken weiter verbessert, mit denen Sie viele Verbindungen gleichzeitig überwachen können (IOCP). Dies kommt dem Telefonklingelsystem immer näher - Sie haben einen Raum mit zehntausend Telefonen, aber Sie kümmern sich nur um diejenigen, die gerade klingeln, die anderen nehmen Ihre Aufmerksamkeit nicht auf sich.


Vorsicht, "Ping" hat beim Networking eine andere, völlig unabhängige Bedeutung. Warum hat niemand "Hardware-Interrupts" erwähnt?
Lie Ryan

1
@LieRyan Nun ja, das ist der Teil, in dem die Netzwerkkarte dem Netzwerkkarten-Treiber Bescheid gibt. Es fühlt sich einfach wie ein kleiner Fleck in der riesigen Liste der beteiligten Abstraktionen an, und abgesehen von Leuten, die mit Architekturen der alten Schule, eingebetteten Geräten oder Treiberentwicklern herumspielen, ist es leider ziemlich obskures Wissen. Aber gut, ich denke, ich werde eine kurze Erwähnung hinzufügen.
Luaan

1
Sind Ports nur Zahlen? oder sind es physische Pins auf der NIC-Karte? Ich kann mir kaum vorstellen, dass es 65536 Häfen geben könnte
Dhiwakar Ravikumar

2
@DhiwakarRavikumar: Ja, Ports sind nur Zahlen. Sie bestehen aus einem Programm oder dem Betriebssystem und entsprechen nichts in der Hardware.
Sleske

1
@DhiwakarRavikumar Ports sind nur Zahlen, aber Hardware-Interrupts waren früher Hardware-Pins auf der CPU (Sie hatten also einen anderen Pin für "Division durch Null!" Und einen anderen für "Der Wecker klingelt"). Sie hatten also die meiste Zeit nur drei oder sieben verschiedene Interrupts oder ähnliches. Es ist vergleichbar mit den alten Telefonstationen - früher hatten sie tatsächlich physische Pins, die man verbinden musste, um den Anruf zu tätigen, aber heutzutage sind sie wie TCP-Ports in Software umgeschaltet.
Luaan

9

Computer verwenden ein Konzept namens "Ports", analog zu "Nebenstellen" für eine Telefonzentrale: Der Client "ruft" nicht nur die Server-IP-Adresse an, sondern sendet die Anforderung auch an einen bestimmten Port auf diesem Server.

Es gibt Tausende von Ports ( Wikipedia-Liste ), z. B. Port 80 ist die Standardeinstellung für HTTP.

Der Trick besteht darin, dass sich ein Programm, z. B. ein Webserver, registrieren kann, um einen bestimmten Port abzuhören. Dann leitet das Betriebssystem alle an diesem Port eingehenden Anforderungen an dieses Programm weiter.

Der Vorteil mehrerer Ports besteht darin, dass mehrere Dienste gleichzeitig auf demselben Server ausgeführt werden können, indem unterschiedliche Ports verwendet werden, die sich nicht gegenseitig stören.


65.535 Ports um genau zu sein
ub3rst4r

3

Der Webserver wurde mit dem folgenden Vorgang benachrichtigt

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

Angenommen, der Webserver überwacht Port 80, wenn die Anforderung vom Client an Port 80 eingeht, akzeptiert er eine Verbindung mit dem Systemaufruf accept (). Dieser Aufruf wird normalerweise blockiert, bis ein Client eine Verbindung zum Server herstellt.

Suchen Sie dann nach Verbindungen mit dem Systemaufruf listen () und binden Sie den Socket mithilfe des Systemaufrufs bind () an eine Adresse.

Atlast erstellt einen Socket mit dem Systemaufruf socket ().

Hoffe das hilft!


0

Sie haben das Verzeichnis / var / log / apache2 mit dem folgenden Verzeichnis:

access.log
error.log
other_vhosts_access.log

Es hängt damit zusammen, was Sie vom Kunden erwarten und wie Sie Benachrichtigungen, SMS, E-Mails usw. erhalten.

Mein Vorschlag:

Sie können einen Protokollserver erstellen und jedes Protokoll wie Mailserver, DNS-Server, Webserver usw. senden. Anschließend können Sie es analysieren. Selbst derselbe Server verwendet DB und Sie können eine Abfrage ausführen.


Vielen Dank für die Antwort, aber ich denke, Sie haben meine Frage falsch verstanden. Ich meinte, wenn ich einen Anruf bekomme, klingelt mein Telefon. Ich weiß also, dass ich einen Anruf erhalten habe, weil mein Telefon klingelte. Wie wird der Webserver benachrichtigt, wenn der Client eine Anfrage stellt?
Raj neugierig

0

Ich denke, der Webserver registriert Rückruffunktionen mit dem Port.

Wenn also an diesem bestimmten Port etwas empfangen wird, ruft das System diese zuvor registrierte Rückruffunktion auf. Innerhalb dieses Rückrufs kann ein Ereignis oder ähnliches festgelegt werden, und dann wartet auf dem Webserver ein dedizierter Thread auf dieses Ereignis. Dieser Thread wird ausgeführt und stellt diese Anforderung in die Hauptliste der Anforderungen, die der Webserver bereits verarbeitet.

Was ich hier gegeben habe, ist eine sehr oberflächliche und makroökonomische Ansicht der Dinge, die passieren. Für genauere Antworten warten wir, bis die Experten eintreten.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.