Die wichtigsten Geheimnisse der TCP-Verbindungen von Network Packet Brokern: Die Notwendigkeit eines dreifachen Handshakes wurde entmystifiziert

TCP-Verbindungsaufbau
Wenn wir im Internet surfen, eine E-Mail versenden oder ein Online-Spiel spielen, denken wir oft nicht an die komplexe Netzwerkverbindung dahinter. Dabei sind es diese scheinbar kleinen Schritte, die eine stabile Kommunikation zwischen uns und dem Server gewährleisten. Einer der wichtigsten Schritte ist der Aufbau der TCP-Verbindung, und der Kern davon ist der Drei-Wege-Handshake.

Dieser Artikel erläutert das Prinzip, den Ablauf und die Bedeutung des Drei-Wege-Handshakes im Detail. Schritt für Schritt erklären wir, warum der Drei-Wege-Handshake notwendig ist, wie er die Stabilität und Zuverlässigkeit der Verbindung gewährleistet und wie wichtig er für die Datenübertragung ist. Ein tieferes Verständnis des Drei-Wege-Handshakes ermöglicht ein besseres Verständnis der zugrunde liegenden Mechanismen der Netzwerkkommunikation und einen klareren Einblick in die Zuverlässigkeit von TCP-Verbindungen.

TCP-Dreiwege-Handshake-Prozess und Zustandsübergänge
TCP ist ein verbindungsorientiertes Transportprotokoll, das vor der Datenübertragung einen Verbindungsaufbau erfordert. Dieser Verbindungsaufbau erfolgt durch einen Drei-Wege-Handshake.

 TCP-Dreiwege-Handshake

Sehen wir uns die TCP-Pakete genauer an, die bei jeder Verbindung gesendet werden.

Client und Server sind zunächst geschlossen. Der Server lauscht zunächst aktiv auf einem Port und befindet sich im LISTEN-Zustand. Dies bedeutet, dass der Server gestartet werden muss. Anschließend ist der Client bereit, auf die Webseite zuzugreifen. Er muss eine Verbindung zum Server herstellen. Das Format des ersten Verbindungspakets lautet wie folgt:

 SYN-Paket

Wenn ein Client eine Verbindung initiiert, generiert er eine zufällige initiale Sequenznummer (client_isn) und trägt sie in das Feld „Sequenznummer“ des TCP-Headers ein. Gleichzeitig setzt der Client das SYN-Flag auf 1, um anzuzeigen, dass es sich bei dem ausgehenden Paket um ein SYN-Paket handelt. Der Client signalisiert seinen Verbindungsaufbau mit dem Server, indem er das erste SYN-Paket an den Server sendet. Dieses Paket enthält keine Anwendungsschichtdaten (d. h. keine gesendeten Daten). Zu diesem Zeitpunkt wird der Client-Status als SYN-SENT gekennzeichnet.

SYN+ACK-Paket

Wenn ein Server ein SYN-Paket von einem Client empfängt, initialisiert er seine eigene Seriennummer (server_isn) zufällig und trägt diese Nummer in das Feld „Seriennummer“ des TCP-Headers ein. Anschließend trägt der Server „client_isn + 1“ in das Feld „Bestätigungsnummer“ ein und setzt sowohl das SYN- als auch das ACK-Bit auf 1. Schließlich sendet der Server das Paket an den Client, das keine Anwendungsschichtdaten enthält (und keine Daten, die der Server senden könnte). Zu diesem Zeitpunkt befindet sich der Server im Zustand „SYN-RCVD“.

ACK-Paket

Sobald der Client das Paket vom Server empfängt, muss er die folgenden Optimierungen durchführen, um auf das endgültige Antwortpaket zu reagieren: Zunächst setzt der Client das ACK-Bit im TCP-Header des Antwortpakets auf 1. Anschließend trägt er den Wert server_isn + 1 in das Feld „Antwortnummer bestätigen“ ein. Anschließend sendet er das Paket an den Server. Dieses Paket kann Daten vom Client zum Server übertragen. Nach Abschluss dieser Vorgänge wechselt der Client in den Zustand ESTABLISHED.

Sobald der Server das Antwortpaket vom Client empfängt, wechselt er ebenfalls in den Status ESTABLISHED.

Wie Sie dem obigen Prozess entnehmen können, darf bei einem Drei-Wege-Handshake der dritte Handshake Daten übertragen, die ersten beiden jedoch nicht. Diese Frage wird häufig in Interviews gestellt. Nach Abschluss des Drei-Wege-Handshakes wechseln beide Parteien in den Zustand ESTABLISHED. Dies bedeutet, dass die Verbindung erfolgreich hergestellt wurde. Ab diesem Zeitpunkt können Client und Server mit dem Datenaustausch beginnen.

Warum dreimal die Hand schütteln? Nicht zweimal, sondern viermal?
Die häufigste Antwort lautet: „Weil der Drei-Wege-Handshake die Fähigkeit zum Empfangen und Senden gewährleistet.“ Diese Antwort ist zwar richtig, stellt aber nur den oberflächlichen Grund dar und nicht den Hauptgrund. Im Folgenden werde ich die Gründe für den Drei-Wege-Handshake aus drei Blickwinkeln analysieren, um unser Verständnis dieses Problems zu vertiefen.

Der Drei-Wege-Handshake kann die Initialisierung historisch wiederholter Verbindungen effektiv vermeiden (der Hauptgrund).
Der Drei-Wege-Handshake garantiert, dass beide Parteien eine zuverlässige anfängliche Sequenznummer erhalten haben.
Der Drei-Wege-Handshake vermeidet die Verschwendung von Ressourcen.

Grund 1: Vermeidung historischer doppelter Verknüpfungen
Kurz gesagt, der Hauptgrund für den Drei-Wege-Handshake besteht darin, Verwirrungen durch die Initialisierung alter, doppelter Verbindungen zu vermeiden. In einer komplexen Netzwerkumgebung werden Datenpakete nicht immer zum angegebenen Zeitpunkt an den Zielhost gesendet, und alte Datenpakete können aufgrund von Netzwerküberlastung und anderen Gründen zuerst beim Zielhost ankommen. Um dies zu vermeiden, verwendet TCP einen Drei-Wege-Handshake zum Verbindungsaufbau.

Drei-Wege-Handshake vermeidet historische doppelte Verbindungen

Wenn ein Client in Situationen wie einer Netzwerküberlastung mehrere SYN-Verbindungsaufbaupakete nacheinander sendet, kann Folgendes passieren:

1- Die alten SYN-Pakete kommen vor den neuesten SYN-Paketen beim Server an.
2- Der Server antwortet dem Client mit einem SYN + ACK-Paket, nachdem er das alte SYN-Paket erhalten hat.
3- Wenn der Client das SYN + ACK-Paket empfängt, stellt er anhand seines eigenen Kontexts fest, dass es sich bei der Verbindung um eine historische Verbindung handelt (Sequenznummer abgelaufen oder Zeitüberschreitung) und sendet dann das RST-Paket an den Server, um die Verbindung abzubrechen.

Bei einer Zwei-Wege-Handshake-Verbindung lässt sich nicht feststellen, ob es sich bei der aktuellen Verbindung um eine historische Verbindung handelt. Mit dem Drei-Wege-Handshake kann der Client anhand des Kontexts feststellen, ob es sich bei der aktuellen Verbindung um eine historische Verbindung handelt, wenn er bereit ist, das dritte Paket zu senden:

1- Wenn es sich um eine historische Verbindung handelt (Sequenznummer abgelaufen oder Zeitüberschreitung), ist das vom dritten Handshake gesendete Paket ein RST-Paket zum Abbruch der historischen Verbindung.
2- Wenn es sich nicht um eine historische Verbindung handelt, ist das zum dritten Mal gesendete Paket ein ACK-Paket und die beiden Kommunikationsparteien stellen die Verbindung erfolgreich her.

Der Hauptgrund dafür, dass TCP den Drei-Wege-Handshake verwendet, besteht darin, dass es die Verbindung initialisiert, um historische Verbindungen zu verhindern.

Grund 2: Um die anfänglichen Sequenznummern beider Parteien zu synchronisieren
Beide Seiten des TCP-Protokolls müssen eine Sequenznummer verwalten, die für eine zuverlässige Übertragung entscheidend ist. Sequenznummern spielen bei TCP-Verbindungen eine wichtige Rolle. Sie haben folgende Funktionen:

Der Empfänger kann doppelte Daten eliminieren und die Richtigkeit der Daten sicherstellen.

Der Empfänger kann Pakete in der Reihenfolge der Sequenznummer empfangen, um die Integrität der Daten sicherzustellen.

● Die Sequenznummer kann das von der anderen Partei empfangene Datenpaket identifizieren und ermöglicht so eine zuverlässige Datenübertragung.

Daher sendet der Client beim Aufbau einer TCP-Verbindung SYN-Pakete mit der anfänglichen Sequenznummer und fordert vom Server eine Antwort mit einem ACK-Paket an, das den erfolgreichen Empfang des SYN-Pakets des Clients bestätigt. Anschließend sendet der Server das SYN-Paket mit der anfänglichen Sequenznummer an den Client und wartet auf dessen Antwort, um eine zuverlässige Synchronisierung der anfänglichen Sequenznummern sicherzustellen.

Synchronisieren Sie die anfänglichen Seriennummern beider Parteien

Obwohl ein Vier-Wege-Handshake auch zur zuverlässigen Synchronisierung der initialen Sequenznummern beider Parteien möglich ist, können der zweite und dritte Schritt zu einem einzigen Schritt zusammengefasst werden, was zu einem Drei-Wege-Handshake führt. Die beiden Handshakes garantieren jedoch nur, dass die initiale Sequenznummer einer Partei erfolgreich von der anderen Partei empfangen wird, nicht aber, dass die initiale Sequenznummer beider Parteien bestätigt werden kann. Daher ist der Drei-Wege-Handshake die beste Wahl, um die Stabilität und Zuverlässigkeit von TCP-Verbindungen zu gewährleisten.

Grund 3: Ressourcenverschwendung vermeiden
Bei einem „zweifachen Handshake“ kann der Client das vom Server gesendete ACK-Paket nicht empfangen, wenn die SYN-Anforderung des Clients im Netzwerk blockiert ist. Daher wird das SYN-Paket erneut gesendet. Da jedoch kein dritter Handshake stattfindet, kann der Server nicht feststellen, ob der Client eine ACK-Bestätigung zum Verbindungsaufbau erhalten hat. Daher kann der Server erst nach Erhalt jeder SYN-Anforderung proaktiv eine Verbindung herstellen. Dies führt zu Folgendem:

Ressourcenverschwendung: Wenn die SYN-Anfrage des Clients blockiert wird und dadurch mehrere SYN-Pakete wiederholt übertragen werden, baut der Server nach Erhalt der Anfrage mehrere redundante, ungültige Verbindungen auf. Dies führt zu einer unnötigen Verschwendung von Serverressourcen.

Nachrichtenspeicherung: Da kein dritter Handshake vorhanden ist, kann der Server nicht erkennen, ob der Client die ACK-Bestätigung zum Verbindungsaufbau korrekt erhalten hat. Bleiben Nachrichten im Netzwerk hängen, sendet der Client daher immer wieder SYN-Anfragen, wodurch der Server ständig neue Verbindungen aufbauen muss. Dies erhöht die Netzwerküberlastung und -verzögerung und beeinträchtigt die Gesamtleistung des Netzwerks.

Vermeiden Sie Ressourcenverschwendung

Um die Stabilität und Zuverlässigkeit der Netzwerkverbindung zu gewährleisten, verwendet TCP daher den Drei-Wege-Handshake zum Herstellen der Verbindung, um das Auftreten dieser Probleme zu vermeiden.

Zusammenfassung
DerNetzwerkpaketbrokerDer TCP-Verbindungsaufbau erfolgt über einen Drei-Wege-Handshake. Dabei sendet der Client zunächst ein Paket mit dem SYN-Flag an den Server, um den Verbindungsaufbau zu signalisieren. Nach Erhalt der Client-Anfrage antwortet der Server mit einem Paket mit den SYN- und ACK-Flags an den Client, um die Annahme der Verbindungsanfrage zu bestätigen und seine eigene initiale Sequenznummer zu senden. Abschließend antwortet der Client mit einem ACK-Flag an den Server, um den erfolgreichen Verbindungsaufbau zu signalisieren. Somit befinden sich die beiden Parteien im Zustand ESTABLISHED und können mit dem Datenaustausch beginnen.

Im Allgemeinen ist der Drei-Wege-Handshake-Prozess für den TCP-Verbindungsaufbau darauf ausgelegt, die Stabilität und Zuverlässigkeit der Verbindung zu gewährleisten, Verwirrung und Ressourcenverschwendung aufgrund früherer Verbindungen zu vermeiden und sicherzustellen, dass beide Parteien Daten empfangen und senden können.


Beitragszeit: 08.01.2025