Die wichtigsten Geheimnisse von TCP-Verbindungen über Netzwerkpaketbroker: Die Notwendigkeit des Dreifach-Handshakes erklärt

TCP-Verbindungsaufbau
Beim Surfen im Internet, beim Versenden von E-Mails oder beim Spielen von Online-Spielen denken wir oft nicht an die komplexe Netzwerkverbindung dahinter. Doch gerade diese scheinbar kleinen Schritte gewährleisten eine stabile Kommunikation zwischen uns und dem Server. Einer der wichtigsten Schritte ist der Aufbau der TCP-Verbindung, deren Kernstück der Drei-Wege-Handschlag bildet.

Dieser Artikel erläutert detailliert Prinzip, Ablauf und Bedeutung des Drei-Wege-Handschlags. Schritt für Schritt erklären wir, warum der Drei-Wege-Handschlag notwendig ist, wie er Verbindungsstabilität und -zuverlässigkeit gewährleistet und welche Bedeutung er für die Datenübertragung hat. Ein tieferes Verständnis des Drei-Wege-Handschlags ermöglicht uns ein besseres Verständnis der zugrundeliegenden Mechanismen der Netzwerkkommunikation und eine klarere Sicht auf die Zuverlässigkeit von TCP-Verbindungen.

TCP-Drei-Wege-Handshake: Ablauf und Zustandsübergänge
TCP ist ein verbindungsorientiertes Transportprotokoll, das den Aufbau einer Verbindung vor der Datenübertragung erfordert. Dieser Verbindungsaufbau erfolgt durch einen Drei-Wege-Handschlag.

 TCP-Drei-Wege-Handschlag

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

Anfangs sind sowohl Client als auch Server geschlossen. Der Server lauscht zunächst aktiv an einem Port und befindet sich im Zustand „LISTEN“, was bedeutet, dass er gestartet werden muss. Anschließend kann der Client auf die Webseite zugreifen. Dazu muss er eine Verbindung zum Server herstellen. Das Format des ersten Verbindungspakets ist wie folgt:

 SYN-Paket

Wenn ein Client eine Verbindung initiiert, generiert er eine zufällige initiale Sequenznummer (client_isn) und trägt diese in das Feld „Sequenznummer“ des TCP-Headers ein. Gleichzeitig setzt der Client das SYN-Flag auf 1, um anzuzeigen, dass es sich beim ausgehenden Paket um ein SYN-Paket handelt. Der Client signalisiert dem Server seine Absicht, eine Verbindung herzustellen, indem er das erste SYN-Paket sendet. Dieses Paket enthält keine Anwendungsschichtdaten (d. h. keine gesendeten Daten). An diesem Punkt wird der Status des Clients auf „SYN-SENT“ gesetzt.

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 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. Dieses Paket enthält keine Anwendungsdaten (und somit auch keine Daten, die der Server senden muss). Der Server befindet sich nun 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 Antwortpaket reagieren zu können: Zuerst setzt der Client das ACK-Bit im TCP-Header des Antwortpakets auf 1. Dann trägt er den Wert server_isn + 1 in das Feld „Antwortnummer bestätigen“ ein. Schließlich sendet der Client das Paket an den Server. Dieses Paket kann Daten vom Client zum Server übertragen. Nach Abschluss dieser Operationen wechselt der Client in den Status „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 beim Drei-Wege-Handshake nur der dritte Handshake Daten übertragen, die ersten beiden jedoch nicht. Diese Frage wird häufig in Vorstellungsgesprächen gestellt. Sobald der Drei-Wege-Handshake abgeschlossen ist, wechseln beide Parteien in den Status „ESTABLISHED“. Dies signalisiert, dass die Verbindung erfolgreich hergestellt wurde und Client und Server nun Daten austauschen können.

Warum drei Händedrücke? Nicht zwei, sondern vier?
Die gängige Antwort lautet: „Weil der Drei-Wege-Handschlag die Sende- und Empfangsfähigkeit gewährleistet.“ Diese Antwort ist zwar richtig, aber nur die oberflächliche Erklärung und nennt nicht den eigentlichen Grund. Im Folgenden analysiere ich die Gründe für den Drei-Wege-Handschlag aus drei Perspektiven, um unser Verständnis dieses Themas zu vertiefen.

Der Drei-Wege-Handschlag kann die Initialisierung von historisch wiederholten Verbindungen effektiv vermeiden (der Hauptgrund).
Der Drei-Wege-Handschlag garantiert, dass beide Parteien eine zuverlässige initiale Sequenznummer erhalten haben.
Der Dreier-Handschlag vermeidet Ressourcenverschwendung.

Grund 1: Vermeidung historischer doppelter Joins
Kurz gesagt, der Hauptgrund für den Drei-Wege-Handschlag ist die Vermeidung von Verwirrung durch doppelte Verbindungsaufbauten. In komplexen Netzwerkumgebungen werden Datenpakete nicht immer zeitgerecht an den Zielrechner gesendet, und aufgrund von Netzwerküberlastung und anderen Gründen können ältere Datenpakete den Zielrechner zuerst erreichen. Um dies zu verhindern, verwendet TCP einen Drei-Wege-Handschlag zum Verbindungsaufbau.

Drei-Wege-Handschlag vermeidet historisch bedingte doppelte Verbindungen

Wenn ein Client nacheinander mehrere SYN-Verbindungsaufbaupakete sendet, beispielsweise bei Netzwerküberlastung, kann Folgendes auftreten:

1- Die alten SYN-Pakete erreichen den Server vor den neuesten SYN-Paketen.
2- Der Server sendet dem Client nach Empfang des alten SYN-Pakets ein SYN + ACK-Paket zurück.
3- Wenn der Client das SYN + ACK-Paket empfängt, stellt er anhand seines eigenen Kontextes fest, dass es sich um eine historische Verbindung handelt (Sequenznummer abgelaufen oder Timeout), und sendet dann das RST-Paket an den Server, um die Verbindung abzubrechen.

Bei einer Zwei-Wege-Verbindung lässt sich nicht feststellen, ob es sich um eine ältere Verbindung handelt. Der Drei-Wege-Handschlag ermöglicht es dem Client hingegen, anhand des Kontextes beim Senden des dritten Pakets zu bestimmen, ob es sich um eine ältere Verbindung handelt.

1- Falls es sich um eine historische Verbindung handelt (Sequenznummer abgelaufen oder Timeout), ist das beim dritten Handshake gesendete Paket ein RST-Paket, um die historische Verbindung abzubrechen.
2. Falls es sich nicht um eine historische Verbindung handelt, ist das zum dritten Mal gesendete Paket ein ACK-Paket, und die beiden Kommunikationspartner stellen die Verbindung erfolgreich her.

Der Hauptgrund, warum TCP den Drei-Wege-Handschlag verwendet, ist daher, dass er 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 ein Schlüsselfaktor für eine zuverlässige Übertragung ist. Sequenznummern spielen eine wichtige Rolle bei TCP-Verbindungen. Sie erfüllen folgende Funktionen:

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

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

● Die Sequenznummer ermöglicht die Identifizierung des vom anderen Teilnehmer empfangenen Datenpakets und somit eine zuverlässige Datenübertragung.

Beim Aufbau einer TCP-Verbindung sendet der Client daher SYN-Pakete mit der initialen Sequenznummer und fordert vom Server eine ACK-Antwort an, die den erfolgreichen Empfang des SYN-Pakets bestätigt. Anschließend sendet der Server das SYN-Paket mit der initialen Sequenznummer an den Client und wartet auf dessen endgültige Antwort, um die zuverlässige Synchronisierung der initialen Sequenznummern sicherzustellen.

Synchronisieren Sie die anfänglichen Seriennummern beider Parteien

Obwohl ein Vier-Wege-Handschlag die Synchronisierung der Anfangssequenznummern beider Parteien zuverlässig ermöglicht, können der zweite und dritte Schritt zu einem Drei-Wege-Handschlag zusammengefasst werden. Allerdings garantieren diese beiden Handschläge lediglich, dass die Anfangssequenznummer einer Partei von der anderen empfangen wird; die Bestätigung der Anfangssequenznummern beider Parteien ist nicht gewährleistet. Daher ist der Drei-Wege-Handschlag die beste Wahl, um die Stabilität und Zuverlässigkeit von TCP-Verbindungen sicherzustellen.

Grund 3: Ressourcenverschwendung vermeiden
Bei einem reinen „Zwei-Handshake“ kann der Client, wenn seine SYN-Anfrage im Netzwerk blockiert wird, das vom Server gesendete ACK-Paket nicht empfangen und die SYN-Anfrage erneut senden. 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 dem Empfang jeder SYN-Anfrage proaktiv eine Verbindung herstellen. Dies führt zu Folgendem:

Ressourcenverschwendung: Wird die SYN-Anfrage des Clients blockiert, was zur wiederholten Übertragung mehrerer SYN-Pakete führt, baut der Server nach dem Empfang der Anfrage mehrere redundante, ungültige Verbindungen auf. Dies führt zu einer unnötigen Verschwendung von Serverressourcen.

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

Ressourcenverschwendung vermeiden

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

Zusammenfassung
DerNetzwerkpaketbrokerDer Aufbau einer TCP-Verbindung erfolgt mittels Drei-Wege-Handschlag. Dabei sendet der Client zunächst ein Paket mit dem SYN-Flag an den Server, um seine Verbindungsanfrage zu übermitteln. Nach Erhalt der Anfrage antwortet der Server mit einem Paket, das die Verbindungsanfrage des Clients akzeptiert und seine eigene initiale Sequenznummer enthält. Abschließend sendet der Client eine ACK-Antwort an den Server, um die erfolgreiche Verbindungsherstellung zu bestätigen. Somit befinden sich beide Parteien im Zustand „ESTABLISHED“ und können Daten austauschen.

Im Allgemeinen ist der Drei-Wege-Handschlagprozess für den Aufbau einer TCP-Verbindung so konzipiert, dass er die Stabilität und Zuverlässigkeit der Verbindung gewährleistet, Verwirrung und Ressourcenverschwendung durch frühere Verbindungen vermeidet und sicherstellt, dass beide Parteien Daten empfangen und senden können.


Veröffentlichungsdatum: 08.01.2025