
|
|
TCP - Verbindungsauf- und -abbau
Bevor Nutzdaten übertragen werden können, erfordert TCP einen Verbindungsaufbau.
Dieser beschränkt sich darauf, die Verbindung bei Sender und Empfänger zu
initialisieren. Er hat nichts mit dem zugrundeliegenden Netzwerk, sprich dem
physikalischen Aufbau der Verbindung zu tun. Das wird vor allem dann klar, wenn
man bedenkt, dass das TCP-Protokoll ja nur von den Endgeräten ausgewertet wird.
Die Router auf dem Weg jedes Pakets "sehen" nur IP-Pakete, deren Inhalt ist
ihnen gleichgültig.
Der Verbindungsaufbau erfolgt in drei Schritten, weswegen er "Three Way
Handshake" genannt wird. Zunächst überträgt der Client-Prozess ein Datenpaket,
das noch keine Nutzdaten enthält. Er trägt aber eine zufällig bestimmte
Sequenznummer ein und setzt das Flag "SYN" (Synchronize), was dem Server-Prozess
einen Verbindungsaufbau signalisiert. Die Sequenznummer gilt ab jetzt als
laufender Bytezähler für die Datenübertragung von Client zu Server während
dieser Verbindung und wird mit jedem übertragenen Paket um die Anzahl der
im vorhergehenden Paket enthaltenen Nutzdatenbytes erhöht. Waren keine
Nutzdaten enthalten, erfolgt trotzdem eine Erhöhung um eins.
Der Server-Prozess antwortet auf das Datenpaket mit einer
Verbindungs-Aufbaubestätigung. Diese ist durch die Flags SYN und ACK
(Achnowledge, Bestätigung) gekennzeichnet. Auch er wählt für seine zukünftigen
Übertragungen (die ja in Gegenrichtung laufen) eine Sequenznummer. Als
Bestätigungsnummer setzt er die um eins erhöhte Sequenznummer ein, die er
zuvor vom Client erhalten hatte. Damit teilt er mit, dass er nun ein Datenpaket
mit dieser Sequenznummer erwartet.
Nun betrachtet der Client-Prozess die Verbindung als aufgebaut. Er muss das
jedoch noch dem Server mitteilen, wobei er in diesem Paket wahlweise auch
schon Nutzdaten mitschicken kann. Auf jeden Fall sendet er ein Paket mit
dem Flag "ACK", das die Sequenz- und Bestätigungsnummern korrekt gesetzt hat.
Der Verbindungsabbau wird von einer der Endstellen eingeleitet, indem diese
zunächst ihren Sendepuffer leert und im letzten Paket das "FIN"-Flag setzt.
Die Gegenstelle bestätigt dessen Empfang, indem sie ebenfalls ein Paket mit
gesetztem "FIN"-Flag sendet. Nun leert auch sie noch ihren Sendepuffer und
versieht das letzte Datenpaket mit einem weiteren "FIN"-Flag. Der Auslöser des
Verbindungsabbaus bestätigt dies nochmals mit einem "ACK"-Paket, bleibt aber
noch für einen kurzen Zeitraum empfangsbereit, um eventuelle Nachzügler-Pakete
noch entgegenzunehmen. Danach gilt die Verbindung als getrennt und der Socket
wird auf beiden Seiten wieder freigegeben.
|
|