05.11.2013 Aufrufe

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

200 4 Gr<strong>und</strong>lagen der Socket-Programmierung<br />

socket()<br />

connect()<br />

Client<br />

Server<br />

socket()<br />

bind()<br />

listen()<br />

accept()<br />

connect() blockiert<br />

connect()<br />

syn (seq=i)<br />

syn (seq=k), ack (seq=i+1)<br />

ack (seq=k+1)<br />

accept() blockiert<br />

accept()<br />

Abb. 4.12. Drei-Wege-Handshake beim TCP-Verbindungsaufbau<br />

SYN-Bit gesetzt ist. Dies ist der erste Schritt des dreistufigen Handshake-<br />

Verfahrens. Das Paket erhält die initiale Sequenznummer i des Clients für<br />

diese Verbindung. Die initiale Sequenznummer ist beliebig <strong>und</strong> jedes Betriebssystem<br />

hat hier seine eigenen Mechanismen, um diesen Initialwert<br />

zu bestimmen. Der connect()-Aufruf blockiert so lange, bis der Verbindungsaufbau<br />

zwischen Client <strong>und</strong> Server abgeschlossen ist.<br />

3. Nun folgt der zweite Schritt des Drei-Wege-Handshakes: Der Server bestätigt<br />

die Synchronisationsanforderung des Clients, indem er das eintreffende<br />

SYN-Paket <strong>mit</strong> einem Acknowledge, also einem TCP-Paket <strong>mit</strong> gesetztem<br />

ACK-Bit im TCP-Header quittiert. Die Bestätigungsnummer im<br />

ACK-Teil des Headers wird dazu auf i + 1 gesetzt. Gleichzeitig setzt der<br />

Server das SYN-Bit im TCP-Header <strong>und</strong> synchronisiert da<strong>mit</strong> im gleichen<br />

Paket seine eigene Sequenznummer k <strong>mit</strong> dem Client. Analog zur<br />

Sequenznummer des Clients kann der Initialwert für k vom TCP-Server<br />

frei gewählt werden.<br />

4. In einem abschließenden Schritt bestätigt der Client dem Server den Erhalt<br />

des SYN/ACK-Pakets. Er verschickt dazu ein TCP-Paket <strong>mit</strong> gesetztem<br />

ACK-Bit, wobei die Bestätigungsnummer im ACK-Teil des Headers<br />

auf k + 1 gesetzt wird. Die Sequenznummer des vom Client verschickten<br />

ACK-Pakets ist i +1.<br />

Im Anschluß an das Drei-Wege-Handshake ist die Verbindung zwischen Client<br />

<strong>und</strong> Server aufgebaut <strong>und</strong> die beiden Parteien können <strong>mit</strong> dem Daten-

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!