Inhaltsverzeichnis
Eine häufig gestellte Frage beim technischen Vorstellungsgespräch oder anderswo lautet: Was passiert, wenn Sie eine URL in den Browser eingeben? Was passiert hinter den Kulissen, wenn Sie auf einer Website surfen? Was beinhaltet ein typischer HTTP-Verbindungslebenszyklus? Ich werde diese Fragen nach bestem Wissen und Gewissen beantworten.
Bevor wir uns mit dem Verbindungsprozess befassen, werfen wir einen Blick auf das grundlegende OSI-Modell (Open Systems Interconnection Model). Das OSI-Modell ist ein konzeptionelles Modell, das die Kommunikation zwischen zwei Systemen standardisiert – einem System, von dem die Anfrage stammt (dem Client), und einem, das die Anfrage bearbeitet und eine Antwort zurücksendet (der Server). Die folgende Tabelle zeigt einige der wichtigen Eigenschaften jeder Schicht.
NEIN | Schicht | Hardware | Funktion | Protokolle/Apps | Ergänzungen |
---|---|---|---|---|---|
7 | Anwendung | Server/PC | Anwendungen, Benutzeroberfläche | HTTP, SMTP, DNS | L7-Header |
6 | Präsentation | Server/PC | Behandelt Verschlüsselungs- und Syntaxänderungen | JPEG, MP3 | L6-Header |
5 | Sitzung | Server/PC | Authentifizierung, Berechtigungen, Sitzungen | SCP, Betriebssystemplanung | L5-Header |
4 | Transport | Firewall | End-to-End-Lieferung, Fehlerkontrolle | TCP, UDP | L4-Header |
3 | Netzwerk | Router | Netzwerkadressierung, Routing, Switching | IP | L3-Header |
2 | Datenverbindung | Schalter | Physikalische Adresse, Fehlererkennung, Fluss | Ethernet, Frame Relay | L2-Header/Trailer |
1 | Körperlich | Kabel | Bit über physisches Netzwerk übertragen | UVP/TIA | L1-Header |
Sobald Sie die URL in den Browser eingeben und die Eingabe-/Eingabetaste drücken, analysiert der Browser (oder ein beliebiger Client) die URL [1], um wichtige Komponenten daraus zu extrahieren. Nachfolgend finden Sie eine Beispiel-URL:
https://www.google.com/search?q=cats
Hier suchen wir nur nach Katzen auf Google. Aus der obigen URL ist https://
das Protokoll, google.com
der Host im www
(Internet), /search
der Pfadparameter und ?q=cats
ein Abfragezeichenfolgenparameter, der angibt, dass wir Google nach Katzen abfragen [ 2].
Da der Browser nun den Host kennt, den er erreichen möchte, in diesem Fall google.com
, versucht er, die entsprechenden IP-Adressen abzurufen. Domains wie „ .com“ oder „ .org“ wurden erstellt, damit wir sie uns leicht merken können. Damit der Browser die eigentliche Anfrage jedoch beispielsweise an google.com senden kann, benötigt er die IP-Adresse des Hosts. Die DNS-Auflösung hilft uns, die IP-Adressinformationen für einen bestimmten Domänennamen zu erhalten. DNS befindet sich auf der Anwendungsschicht (L7) aus der obigen Tabelle.
Schritte zur DNS-Auflösung:
$ ipconfig /displaydns
unter Windows oder $ log stream --predicate 'process == "mDNSResponder"' --info
unter Mac/Linux überprüft werden..com
, .org
usw. Top-Level-Domainnamen. Der TLD-Name würde dann die IP-Adresse des/der autorisierenden Nameserver(s) zurückgeben.$ dig google.com
; << >> DiG 9.10.6 <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14345
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 9
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;google.com. IN A
;; ANSWER SECTION:
google.com. 180 IN A 172.217.164.174
;; AUTHORITY SECTION:
google.com. 60552 IN NS ns1.google.com.
google.com. 60552 IN NS ns2.google.com.
google.com. 60552 IN NS ns3.google.com.
google.com. 60552 IN NS ns4.google.com.
;; ADDITIONAL SECTION:
ns1.google.com. 60438 IN A 216.239.32.10
ns1.google.com. 58273 IN AAAA 2001:4860:4802:32::a
ns2.google.com. 60438 IN A 216.239.34.10
ns2.google.com. 131763 IN AAAA 2001:4860:4802:34::a
ns3.google.com. 163770 IN A 216.239.36.10
ns3.google.com. 60541 IN AAAA 2001:4860:4802:36::a
ns4.google.com. 75597 IN A 216.239.38.10
ns4.google.com. 60541 IN AAAA 2001:4860:4802:38::a
;; Query time: 13 msec
;; SERVER: 10.4.4.10#53(10.4.4.10)
;; WHEN: Mon Jun 24 12:20:50 PDT 2019
;; MSG SIZE rcvd: 303
Auf jeder Ebene des OSI-Modells werden Informationen als PDU (Packet Data Unit) bezeichnet. Daher werden Informationen auf der Anwendungsebene als L7-PDU bezeichnet, während Informationen auf der Netzwerkebene als L3-PDU bezeichnet werden. Auf jeder Ebene wird ein entsprechender Ebenenkopf hinzugefügt. Der Header geht seinem Hauptteil voran und enthält Adressierungs- und andere Daten, die erforderlich sind, damit er sein beabsichtigtes Ziel erreicht. Daten hingegen werden von der obersten Ebene nach unten weitergegeben. Die Header L4, L3 und L2 werden unten angezeigt:
Bevor das Paket ins Internet geschickt wird, um schließlich den Google-Domainserver zu erreichen, muss es zunächst über den Router geleitet werden. Immer wenn ein Gerät eine physische Verbindung zu einem anderen Gerät (in diesem Fall dem lokalen Router) herstellen muss, benötigt es die MAC-Adresse (Hardware-Adresse) dieses Geräts. Aber woher weiß der lokale Computer, dass der Router die Standardroute ist? Diese Informationen werden über die Standardroute erfasst, die auf Schnittstellenbasis auf dem lokalen Computer eingerichtet wird. Sie können die Standardroute überprüfen, indem Sie den Befehl $ ifconfig
verwenden.
Die IP-Adresse wird verwendet, um ein Gerät im Netzwerk zu lokalisieren, während die MAC-Adresse zur Identifizierung des tatsächlichen Geräts verwendet wird. Das ARP-Protokoll wird verwendet, um die MAC-Adresse des Geräts zu ermitteln, sofern die IP-Adresse bekannt ist. Hier gehen wir davon aus, dass der anfragende Computer bereits eine IP-Adresse erhalten hat (entweder statisch oder über das DHCP-Protokoll).
ARP befindet sich auf der Datenverbindungsschicht des OSI-Modells. In diesem Fall stellt der auf dem lokalen Computer ausgeführte Webbrowser eine Verbindung zum Router her, der als Gateway zum Internet fungiert.
arp -a
überprüft werden.Die Pakete werden dann an die Standardroute weitergeleitet. Wenn Sie keine Standardroute festgelegt haben, werden sie an den Router weitergeleitet. Sie können die Standardroute überprüfen, indem Sie den Befehl verwenden
route get default | grep gateway
oder netstat -rn
unter Mac/Linux oder ipconfig
unter Windows.
Wenn Sie sich beispielsweise in einem 192.168.10.0/24-Netzwerk befinden und versuchen, das Google-Netzwerk unter 172.217.164.174/24 zu erreichen, wenn das Paket beispielsweise beim Router eintrifft, überprüft der Router die Routing-Tabelle und entscheidet, wie der Datenverkehr weitergeleitet wird das Zielnetz erreichen. Daher wird das Paket an das angegebene Gateway gesendet, um das Ziel 172.217.164.174/24 zu erreichen
Verbindung zwischen Client und Server; In diesem Fall benötigt Ihr lokaler Computer viele Sprünge zum Google-Server. Jeder Hop ist im Wesentlichen ein Router auf dem Weg zum Ziel. Der Router hilft hier bei der Anforderung, von einem Netzwerk zum anderen zu wechseln. Jedes Gerät verfügt auf seinem Weg über eine weltweit eindeutige MAC-Adresse (Hardware-Adresse).
Jetzt erstellt der lokale Computer eine Anfrage mit L7-Header (HTTP), L4-Header (TCP), L3-Header (IP), L2-Header (ARP, MAC-Adressen), L2-Trailer (Frame-Check-Sequenz) und den tatsächlichen Daten. Wenn der Router das Paket erhält, entkapselt er, ändert den L2-Header/Trailer und kapselt das Paket erneut.
Der Router empfängt es nun und beginnt mit der Entkapselung. Es untersucht den L2-Header und stellt fest, dass der Ziel-Mac für sich selbst bestimmt ist. Jetzt wird der L2-Header entfernt, der L3-Header wird untersucht und es wird erkannt, dass die Anfrage nicht für sich selbst, sondern für den Google-Server bestimmt ist. Der Router verringert dann den TTL-Wert, der sich im L3-Header befindet. Der Router sucht nun in seiner Routing-Tabelle nach allen möglichen Routen, die die anderen Router diesem Router (über RIP oder IGP) zur Erreichung des Ziels angekündigt hätten. Ein Router führt dann ARP aus, um die MAC-Adresse des nächsten Hop-Routers abzurufen, wenn dieser die MAC-Adresse nicht in seinem Cache hat.
Der Router fügt dann auch CRC hinzu, der an den L2-Trailer weitergegeben wird. Dadurch weiß der nächste Router, dass keine Probleme auf den Routen aufgetreten sind, die dazu geführt haben, dass das Paket über die Leitung beschädigt wurde. Wenn es beschädigt ist, wird der Frame gelöscht.
In diesem Fall hat der Router den L2-Header und den L2-Trailer geändert, den L3-Header jedoch nicht berührt und daher keinen Header darüber.
Quellport-Nr. ist eine ephimere Portnummer und die Zielportnummer ist 80.
TCP – Zuverlässiger und gleichbleibender Bestellservice. Das erste, was der lokale Computer nun tun wird, ist, einen Drei-Wege-Handshake mit dem Google-Server herzustellen, da er nun die Route zum Server kennt. Der Verbindungsaufbau hilft bei der Festlegung einiger Statusvariablen wie MSS-Größe, anfängliche Sequenznummer, ACK-Typ, Puffergröße usw.
In diesem Fall beträgt der Quell- und Zielport im TCP-Header 16 Bit, also ist 2^16 65535. Der Quellport wird zur Identifizierung der Clientanwendung verwendet, während der Zielport zur Identifizierung des Dienstes oder Dämons verwendet wird, der auf dem Webserver ausgeführt wird.
Der Client (Webbrowser) nimmt einen beliebigen Port von 49152 bis 65535 auf. Dadurch wird sichergestellt, dass keine zwei Anwendungen denselben Port verwenden. Die Portadresse wird zusammen mit der IP-Adresse als TCP-Socket bezeichnet. Zielport ist der Port 80 im IP-Paket.
Beginnen Sie mit der Kommunikation:
Mit den drei oben genannten Schritten ist der TCP-Handshake zwischen Client und Server erfolgreich und beide haben sich nun auf die gemeinsamen Regeln für die Datenübertragung geeinigt.
Nach dem TCP-Handshake erfolgt der TLS-Handshake, wenn Sie eine Verbindung zu einer sicheren Website herstellen. Beim TLS-Handshake stimmen Client und Server den gemeinsamen Bedingungen der sicheren Kommunikation zu.
Von nun an überträgt die TLS-Sitzung die Anwendungsdaten (HTTP) verschlüsselt mit dem vereinbarten symmetrischen Schlüssel.
Der Server verarbeitet die Anfragen und sendet eine entsprechende Antwort zurück. Wenn die Anfrage über Port 80 (HTTP) oder Port 443 (HTTPS) beim Server eintrifft, lauscht ein Webserver wie Apache oder Nginx auf Port 443, kümmert sich um die Verbindung der Anfrage und leitet sie an einen anderen flüchtigen Port weiter, auf dem sich der Webdienst befindet läuft.
Jeder HTTP-Client, Server oder Proxy kann jederzeit eine TCP-Transportverbindung schließen. Wenn der Client beispielsweise erkennt, dass die Datenübertragung beendet ist und der offene Verbindungskanal nicht mehr benötigt wird, sendet er eine Anfrage zum Schließen der Verbindung an den Server. Wenn der Client das nächste Mal mit dem Server kommunizieren möchte, muss eine neue Verbindung zwischen den beiden Computern hergestellt werden.
[1] | Der URL-Standard |
[2] | Komponenten oder URL |