Einrichtung der TCP-Verbindung
Wenn wir im Internet surfen, eine E-Mail senden oder ein Online-Spiel spielen, denken wir oft nicht an die komplexe Netzwerkverbindung, die dahinter steckt. Es sind jedoch diese scheinbar kleinen Schritte, die eine stabile Kommunikation zwischen uns und dem Server gewährleisten. Einer der wichtigsten Schritte ist der TCP-Verbindungsaufbau, dessen Kern der Drei-Wege-Handshake ist.
In diesem Artikel werden das Prinzip, der Prozess und die Bedeutung des Drei-Wege-Handschlags ausführlich erläutert. 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. Mit einem tieferen Verständnis des Drei-Wege-Handshakes erhalten wir ein besseres Verständnis der zugrunde liegenden Mechanismen der Netzwerkkommunikation und einen klareren Überblick über die Zuverlässigkeit von TCP-Verbindungen.
TCP-Drei-Wege-Handshake-Prozess und Zustandsübergänge
TCP ist ein verbindungsorientiertes Transportprotokoll, das vor der Datenübertragung einen Verbindungsaufbau erfordert. Dieser Verbindungsaufbauvorgang erfolgt durch einen Drei-Wege-Handshake.
Werfen wir einen genaueren Blick auf die TCP-Pakete, die in jeder Verbindung gesendet werden.
Zunächst sind sowohl der Client als auch der Server GESCHLOSSEN. Zunächst lauscht der Server aktiv auf einem Port und befindet sich im LISTEN-Zustand, was bedeutet, dass der Server gestartet werden muss. Als nächstes ist der Client bereit, mit dem Zugriff auf die Webseite zu beginnen. Er muss eine Verbindung mit dem Server herstellen. Das Format des ersten Verbindungspakets ist wie folgt:
Wenn ein Client eine Verbindung initiiert, generiert er eine zufällige Anfangssequenznummer (client_isn) und platziert sie im Feld „Sequenznummer“ des TCP-Headers. Gleichzeitig setzt der Client die Position des SYN-Flags auf 1, um anzuzeigen, dass es sich bei dem ausgehenden Paket um ein SYN-Paket handelt. Der Client gibt an, dass er eine Verbindung mit dem Server aufbauen möchte, indem er das erste SYN-Paket an den Server sendet. Dieses Paket enthält keine Daten der Anwendungsschicht (d. h. gesendete Daten). Zu diesem Zeitpunkt wird der Status des Clients als SYN-SENT markiert.
Wenn ein Server ein SYN-Paket von einem Client empfängt, initialisiert er nach dem Zufallsprinzip seine eigene Seriennummer (server_isn) und fügt diese Nummer dann in das Feld „Seriennummer“ des TCP-Headers ein. Als nächstes gibt der Server client_isn + 1 in das Feld „Bestätigungsnummer“ ein und setzt sowohl SYN- als auch ACK-Bits auf 1. Schließlich sendet der Server das Paket an den Client, das keine Daten auf Anwendungsebene (und keine Daten für den Server) enthält senden). Zu diesem Zeitpunkt befindet sich der Server im SYN-RCVD-Status.
Sobald der Client das Paket vom Server empfängt, muss er die folgenden Optimierungen durchführen, um auf das endgültige Antwortpaket zu reagieren: Zuerst setzt der Client das ACK-Bit des TCP-Headers des Antwortpakets auf 1; Zweitens gibt der Client im Feld „Antwortnummer bestätigen“ den Wert server_isn + 1 ein; Schließlich sendet der Client das Paket an den Server. Dieses Paket kann Daten vom Client zum Server übertragen. Nach Abschluss dieser Vorgänge wechselt der Client in den ESTABLISHED-Status.
Sobald der Server das Antwortpaket vom Client erhält, wechselt er ebenfalls in den Status ESTABLISHED.
Wie Sie dem obigen Prozess entnehmen können, darf bei der Durchführung eines Drei-Wege-Handshakes der dritte Handshake Daten übertragen, die ersten beiden Handshakes jedoch nicht. Das ist eine Frage, die oft in Vorstellungsgesprächen gestellt wird. Sobald der Drei-Wege-Handshake abgeschlossen ist, gehen beide Parteien in den Status ESTABLISHED über. Dies zeigt an, dass die Verbindung erfolgreich hergestellt wurde. Ab diesem Zeitpunkt können Client und Server beginnen, Daten aneinander zu senden.
Warum drei Händeschütteln? Nicht zweimal, sondern viermal?
Die gängige Antwort lautet: „Weil der Drei-Wege-Handshake die Fähigkeit zum Empfangen und Senden garantiert.“ Diese Antwort ist richtig, aber sie ist nur der oberflächliche Grund und stellt nicht den Hauptgrund dar. Im Folgenden werde ich die Gründe für den dreifachen Händedruck unter drei Aspekten analysieren, um unser Verständnis für dieses Problem zu vertiefen.
Durch den Drei-Wege-Handshake kann die Initialisierung historisch wiederholter Verbindungen (der Hauptgrund) effektiv vermieden werden.
Der Drei-Wege-Handshake garantiert, dass beide Parteien eine zuverlässige Anfangssequenznummer erhalten haben.
Der Drei-Wege-Handshake vermeidet die Verschwendung von Ressourcen.
Grund 1: Vermeiden Sie historische doppelte Verknüpfungen
Kurz gesagt besteht der Hauptgrund für den Drei-Wege-Handshake darin, Verwirrung durch die alte doppelte Verbindungsinitialisierung zu vermeiden. In einer komplexen Netzwerkumgebung erfolgt die Übertragung von Datenpaketen nicht immer in Übereinstimmung mit der angegebenen Zeit an den Zielhost, 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, um die Verbindung herzustellen.
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 empfangen hat.
3- Wenn der Client das SYN + ACK-Paket empfängt, bestimmt er anhand seines eigenen Kontexts, 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 Two-Handshake-Verbindung gibt es keine Möglichkeit festzustellen, ob es sich bei der aktuellen Verbindung um eine historische Verbindung handelt. Der Drei-Wege-Handshake ermöglicht es dem Client, anhand des Kontexts zu bestimmen, ob es sich bei der aktuellen Verbindung um eine historische Verbindung handelt, wenn er zum Senden des dritten Pakets bereit ist:
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 kommunizierenden Parteien stellen die Verbindung erfolgreich her.
Daher besteht der Hauptgrund dafür, dass TCP den Drei-Wege-Handshake verwendet, 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 beibehalten, was ein Schlüsselfaktor für die Gewährleistung einer zuverlässigen Übertragung ist. Sequenznummern spielen bei TCP-Verbindungen eine wichtige Rolle. Sie bewirken Folgendes:
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 Gegenpartei 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 den Server auf, mit einem ACK-Paket zu antworten, das den erfolgreichen Empfang des SYN-Pakets des Clients anzeigt. Anschließend sendet der Server das SYN-Paket mit der Anfangssequenznummer an den Client und wartet ein für alle Mal auf die Antwort des Clients, um sicherzustellen, dass die Anfangssequenznummern zuverlässig synchronisiert werden.
Obwohl auch ein Vier-Wege-Handshake möglich ist, um die anfänglichen Sequenznummern beider Parteien zuverlässig zu synchronisieren, können der zweite und der dritte Schritt in einem einzigen Schritt zusammengefasst werden, was zu einem Drei-Wege-Handshake führt. Die beiden Handshakes können jedoch nur garantieren, dass die anfängliche Sequenznummer einer Partei erfolgreich von der anderen Partei empfangen wird, es gibt jedoch keine Garantie dafür, dass die anfängliche 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 sicherzustellen.
Grund 3: Vermeiden Sie die Verschwendung von Ressourcen
Wenn nur ein „Two-Handshake“ vorliegt und die Client-SYN-Anfrage im Netzwerk blockiert ist, kann der Client das vom Server gesendete ACK-Paket nicht empfangen, sodass das SYN erneut gesendet wird. Da es jedoch keinen dritten Handshake gibt, kann der Server nicht feststellen, ob der Client eine ACK-Bestätigung zum Herstellen der Verbindung erhalten hat. Daher kann der Server erst nach Erhalt jeder SYN-Anfrage proaktiv eine Verbindung herstellen. Dies führt zu Folgendem:
Ressourcenverschwendung: Wenn die SYN-Anfrage des Clients blockiert wird, was zur wiederholten Übertragung mehrerer SYN-Pakete führt, stellt der Server nach Erhalt der Anfrage mehrere redundante ungültige Verbindungen her. Dies führt zu einer unnötigen Verschwendung von Serverressourcen.
Nachrichtenaufbewahrung: Aufgrund des Fehlens eines dritten Handshakes hat der Server keine Möglichkeit zu wissen, ob der Client die ACK-Bestätigung zum Aufbau der Verbindung korrekt erhalten hat. Wenn Nachrichten im Netzwerk hängen bleiben, sendet der Client daher immer wieder SYN-Anfragen, was dazu führt, dass der Server ständig neue Verbindungen aufbaut. Dies erhöht die Überlastung und Verzögerung des Netzwerks und wirkt sich negativ auf die Gesamtleistung des Netzwerks aus.
Um die Stabilität und Zuverlässigkeit der Netzwerkverbindung sicherzustellen, verwendet TCP daher den Drei-Wege-Handshake zum Herstellen der Verbindung, um das Auftreten dieser Probleme zu vermeiden.
Zusammenfassung
DerNetzwerkpaket-BrokerDer TCP-Verbindungsaufbau erfolgt über einen Drei-Wege-Handshake. Beim Drei-Wege-Handshake sendet der Client zunächst ein Paket mit dem SYN-Flag an den Server und zeigt damit an, dass er eine Verbindung aufbauen möchte. Nachdem der Server die Anfrage vom Client erhalten hat, antwortet er dem Client mit einem Paket mit SYN- und ACK-Flags, das angibt, dass die Verbindungsanfrage akzeptiert wurde, und sendet seine eigene Anfangssequenznummer. Abschließend antwortet der Client mit einem ACK-Flag an den Server, um anzuzeigen, dass die Verbindung erfolgreich hergestellt wurde. Somit befinden sich die beiden Parteien im Status ESTABLISHED und können beginnen, Daten aneinander zu senden.
Im Allgemeinen soll der Drei-Wege-Handshake-Prozess für den TCP-Verbindungsaufbau die Stabilität und Zuverlässigkeit der Verbindung gewährleisten, Verwirrung und Ressourcenverschwendung bei historischen Verbindungen vermeiden und sicherstellen, dass beide Parteien Daten empfangen und senden können.
Zeitpunkt der Veröffentlichung: 08.01.2025