Three-Way-Handshake
Kurz: Der dreistufige Verbindungsaufbau bei TCP: SYN → SYN-ACK → ACK, bevor die eigentliche Datenübertragung beginnt.
Genauer: Client und Server tauschen dabei ihre jeweiligen Start-Sequenznummern aus und bestätigen sich gegenseitig die Verbindungsbereitschaft. Erst nach diesen drei Paketen gilt die Verbindung als “established” und Nutzdaten werden übertragen. Dieser Overhead ist einer der Gründe, warum UDP für latenzkritische Anwendungen schneller ist — es überspringt den Handshake komplett.
Im Detail
Der Ablauf im Detail:
Client Server
|----------- SYN (seq=x) --------->| "Ich möchte eine Verbindung, meine Startnummer ist x"
|<------ SYN-ACK (seq=y, ack=x+1) -| "OK, bestätigt. Meine Startnummer ist y"
|----------- ACK (ack=y+1) ------->| "Bestätigt. Verbindung steht."
Nach diesen drei Paketen befinden sich beide Seiten im Zustand “ESTABLISHED” und können Nutzdaten austauschen. Der Abbau einer TCP-Verbindung läuft übrigens spiegelbildlich mit vier Paketen ab (FIN, ACK, FIN, ACK — “Four-Way-Handshake” beim Verbindungsabbau), weil beide Seiten unabhängig voneinander signalisieren müssen, dass sie fertig sind, bevor die Verbindung vollständig geschlossen wird.
Die zusätzliche Latenz des Handshakes (mindestens eine komplette Hin-und-Zurück-Runde, bevor überhaupt Nutzdaten fließen) ist bei kurzen Verbindungen spürbar — moderne Optimierungen wie TCP Fast Open versuchen, bei wiederholten Verbindungen zu bekannten Servern schon während des Handshakes erste Nutzdaten mitzuschicken, um diesen Overhead zu reduzieren.