In den frühen Jahren des Internets war das Internetprotokoll (IP) das einzige Protokoll, das verwendet wurde, um sich mit dem Internet zu verbinden. Das Problem mit IP bestand darin, dass Sie eine Nachricht senden konnten und sich nicht sicher waren, ob der Empfänger sie erhalten würde oder nicht. Aus diesem Grund wurde TCP/IP etabliert.

TCP/IP stellt sicher, dass alle von Ihnen gesendeten Daten ihren Empfänger erreichen. Dies geschieht, indem dem Client und dem Server vor dem Senden von Daten eine sichere Verbindung bereitgestellt wird. Diese sichere Verbindung wird durch einen als Drei-Wege-Handshake bezeichneten Prozess hergestellt, der auch als TCP/IP-Handshake bekannt ist.

Was ist ein Drei-Wege-Handshake?

Bildnachweis: Fleshgrinder/Wikipedia

Ein Drei-Wege-Handshake (TCP/IP-Handshake) sind die ersten drei Interaktionen zwischen einem Client und einem Server, die versuchen, eine TCP-Verbindung herzustellen. Diese anfänglichen Interaktionen sind für die Herstellung einer sicheren Verbindung unerlässlich. In dieser Phase einigen sich sowohl Client als auch Server auf Parameter, die sie verwenden, um ein- und ausgehende Datenpakete zu prüfen und zu verifizieren. Diese Parameter haben die Form von TCP-Segmenten.

instagram viewer

Was ist ein TCP-Segment?

Bei einer TCP/IP-Verbindung müssen alle zu sendenden Daten auf sogenannte TCP-Segmente geschnitten und strukturiert werden. Diese Segmente enthalten Informationen wie IP-Adressen, Ports, Flag-Bits, Sequenznummern, Bestätigungsnummern und die optionalen Daten oder Nutzdaten.

Die ersten drei Interaktionen (Drei-Wege-Handshake) enthalten nur TCP-Segment-Header ohne Nutzlast oder angehängte Daten. Hier ist ein Beispiel eines TCP-Segments

Bildnachweis: Ere/Wikipedia

Beachten Sie, dass die obige Abbildung nur für TCP gilt. Ein vollständiges TCP/IP-Segment erfordert beides IP-Adressen vom Sender und Empfänger oben auf dem TCP-Segment oben.

Wenn Sie ein Paket an eine Person senden, werden Sie vom Zustelldienst aufgefordert, ein Informationsformular auszufüllen und es dann vor dem Versand dem Paket beizufügen. In ähnlicher Weise erfordert TCP, dass der Absender einen Segmentkopf (Informationsformular) an die Daten (Paket) anhängt, bevor es beginnt, das Segment (Paket) an den Empfänger zu senden.

Immer wenn ein Client mit einem Server kommuniziert, müssen beide Parteien ihre Interaktionen in Form eines TCP-Segments formatieren. Ein TCP-Segment besteht aus einem TCP-Segmentkopf, der an die Daten angehängt ist, die Sie zu senden versuchen. Der Absender muss die Informationen ausfüllen, die der Segmentleiter benötigt.

Für einen Drei-Wege-Handshake muss der Absender Folgendes ausfüllen:

  • Quellport: Identifiziert den Port des Absenders
  • Zielhafen: Identifiziert den Port des Empfängers
  • Sequenznummer: Gibt die Segmentsequenz an
  • Bestätigungsnummer: Zeigt an, dass ein Segment bestätigt wurde, indem eins zur angegebenen Sequenznummer hinzugefügt wird

Neben dem Ausfüllen der Segmentkopffelder muss der Sender auch ein Flag-Bit auswählen. Es gibt insgesamt sechs Flag-Bits, aber für einen Drei-Wege-Handshake benötigen Sie nur die folgenden zwei:

  1. SYNC: Gibt eine Sequenznummer an. Diese Sequenznummer wird verwendet, um die Sequenz aller eingehenden Segmente für den Rest der Interaktion zu zählen.
  2. ACK: Zeigt an, dass der Empfänger der SYN-Nummer die Verbindungsanfrage akzeptiert, indem er der angegebenen SYN-Nummer eine (1) hinzufügt.

Nachdem Sie nun wissen, was ein TCP-Segment ist, sehen wir uns an, wie es in einem Drei-Wege-Handshake verwendet wird.

Wie ein Drei-Wege-Handshake funktioniert

Ein Drei-Wege-Handshake wird eingerichtet, wenn Client und Host Informationen ausgetauscht und die Sequenznummern des jeweils anderen bestätigt haben. Wie der Name schon sagt, erfolgt ein Drei-Wege-Handshake in drei Schritten.

Zuerst sendet der Client ein reines SYN-Segment, das anzeigt, dass er eine Verbindung wünscht. Zweitens antwortet der Server mit einem SYN-ACK-Segment, was bedeutet, dass er die Anfrage bestätigt hat und seine eigene SYN-Nummer zur Bestätigung an den Client sendet. Drittens sendet der Client ein ACK-Segment an den Server, um ihm mitzuteilen, dass die SYN-Nummer des Servers bestätigt wurde und für die weitere Verbindung verwendet wird.

Ein Drei-Wege-Handshake sieht etwa so aus:

Vermögenskredit: Fleshgrinder/Wikipedia

Lassen Sie uns es aufschlüsseln und uns die Segmente ansehen, damit Sie wissen, was genau passiert, wenn Client und Server Sequenznummern austauschen und bestätigen.

Schritt 1: Client sendet ein SYN-Segment

Vermögenskredit: Fleshgrinder/Wikipedia

Der Client sendet eine Anforderungsverbindung, indem er ein SYN-Segment an den Server sendet. Der Client verwendet die IP-Adresse des Clients, um den Server zu lokalisieren und das TCP-Segment zu senden.

Um die Komplexität des Segments zu reduzieren, lassen Sie uns einige Segmentfelder ignorieren und uns auf das Nötigste für eine Drei-Wege-Handshake-Verbindung konzentrieren. Dazu gehören Quellport, Zielport, Sequenznummer, Bestätigungsnummer und welche Art von Flag-Bit verwendet wird.

Und damit sollte ein SYN/Request-Segment so aussehen:

Bild vom Autor 

Der Client-Port ist eine Zufallszahl zwischen 49152 und 65536. Dieser Portbereich ist der vereinbarte Bereich, den öffentliche Geräte dynamisch verwenden können, um eine Verbindung zum Internet herzustellen. Portbereiche von 1024 bis 49151 sind privat. Sie müssen von einer Entität registriert werden, um einen Port innerhalb des angegebenen Bereichs zu verwenden. Portnummern unter 1024 sind Ports, die für verschiedene Funktionen und Internetprotokolle wie FTP (Port 20), SMTP (Port 25), DNS (Port 53) und HTTP (Port 80) reserviert sind.

Im wirklichen Leben ist eine Sequenznummer eine Zufallszahl. Für das Beispiel haben wir 0000000000 verwendet, um es einfacher zu visualisieren.

Notieren Sie sich die Sequenznummer, während wir die Schritte durchgehen. Derzeit ist es 000000000. Derzeit gibt es keine Bestätigungsnummer, da es nichts zu bestätigen gibt.

Schritt 2: Server antwortet mit einem SYN-ACK-Segment

Vermögenskredit: Fleshgrinder/Wikipedia

Sobald der Server ein SYN-Segment empfängt, antwortet er mit dem Senden eines ACK-Segments, das die Bestätigungsnummer enthält. Die Bestätigungsnummer ist die Sequenznummer des Clients plus eins (1).

Bild vom Autor erstellt

Sehen Sie sich den Quellport an. Es zeigt, dass das Segment von Port 20 stammt, was darauf hinweist, dass es als Antwort vom Server kam.

Sehen Sie sich nun die Bestätigungsnummer an. Es ist 0000000001, was der Sequenznummer des Clients (0000000000) plus eins (1) entspricht. So wird ein Segment verfolgt. Angenommen, der Client hat eine ACK-Segmentantwort erhalten, bei der die Bestätigungsnummer 0000000002 lautet. Dies würde dem Client anzeigen, dass das Segment 0000000001 fehlt und dass der Client warten muss, bis es ankommt damit Sie keinen Paketverlust erleben.

Wie Sie sehen können, sind zwei Flag-Bits aktiviert – SYN und ACK.

Abgesehen von der Bestätigung der Sequenznummer des Clients sendet der Server auch seine eigene Sequenznummer an den Client, um die Sequenznummer des Servers plus eins (1) zu bestätigen. In unserem Beispiel haben wir 1111111111 als Sequenznummer des Servers verwendet. Auch in der realen Welt ist diese Zahl zufällig.

Beachten Sie, dass die Sequenznummern des Clients und des Servers nicht übereinstimmen müssen. Solange beide Parteien die eindeutige Sequenznummer des anderen anerkennen, ist die Verbindung zuverlässig.

Schritt 3: Client antwortet mit einem ACK-Segment

Vermögenskredit: Fleshgrinder/Wikipedia

Schließlich bestätigt der Client die Sequenznummer des Servers.

Bild vom Autor

Das letzte Segment ist ein ACK-Segment vom Client.

Wie Sie können, bestätigt der Client die Sequenznummer des Servers, indem er mit der Sequenznummer des Servers (1111111111) plus eins (1) antwortet, was 1111111112 ist.

Der Client und der Server werden keine Sequenznummer mehr senden, da der Start der Sequenz bereits bestätigt wurde. Beide Parteien erwarten jedoch während der gesamten Interaktion Bestätigungssegmente mit fortlaufenden Sequenznummern plus eins (1) und den Nummernbytes. In diesem Fall erwartet der Client, dass die nächste Serverantwort ein ACK von 0000000002 hat (wenn keine angehängten Daten vorhanden sind).

Danach wird der Drei-Wege-Handshake hergestellt!

Verstehen, wie Netzwerkverbindungen funktionieren

Nachdem Sie nun gelernt haben, wie ein Drei-Wege-Handshake funktioniert, werden Sie auch leichter verstehen, wie TCP nach dem Handshake funktioniert. Client und Server beginnen mit dem Senden von Daten, wenn der Handshake eingerichtet ist. Dieses Mal wird das vollständige Segmentformat verwendet, plus die optionalen Daten oder Nutzdaten.

Daten werden normalerweise segmentiert/in kleinere Stücke geschnitten, um die Übertragung zu erleichtern. Jedes Datensegment hat seinen eigenen Segmentkopf, der eine Sequenznummer und eine Bestätigungsnummer enthält. Der Grund für eine Sequenznummer besteht darin, die Sequenz der Segmente zu kennen, wenn sie schließlich wieder zusammengesetzt werden. Die Bestätigungsnummern dienen dazu, mit dem Absender zu überprüfen, ob sein Segment empfangen wurde und mit der Reihenfolge der eingehenden Segmente übereinstimmt.

Durch das Zählen einer Sequenznummer und deren Verifizierung mit einer Bestätigung kann TCP große Datenmengen zuverlässig transportieren, ohne dass Datenpakete fehlen.

Und damit sollten Sie eine ziemlich gute Vorstellung davon haben, wie TCP funktioniert.