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.

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

bestätigt den Vorgang <strong>mit</strong> einem entsprechenden ACK-Paket, bei dem<br />

im ACK-Teil des TCP-Headers die Sequenznummer auf m + 1 gesetzt<br />

ist. Außerdem wird der zugehörigen Anwendung, sobald diese alle zwischengespeicherten<br />

Daten aus dem Socket gelesen hat, das FIN als Dateiendemarke<br />

weitergereicht. Nach einem FIN-Paket können also über die<br />

Verbindung keine weiteren Daten mehr für die Anwendung eintreffen. 25<br />

3. Sobald die Anwendung auf der passiven Seite beim Eintreffen der Dateiendemarke<br />

den bislang einseitigen Verbindungsabbau bemerkt hat, wird<br />

sie ihrerseits die close()-Funktion zum vollständigen Abbau der Verbindung<br />

aufrufen. Die TCP-Schicht überträgt in der Folge ein FIN-Paket <strong>mit</strong><br />

der aktuellen Sequenznummer n an die Gegenstelle.<br />

4. Die TCP-Schicht der Partei, die dieses finale FIN-Paket erhält, reagiert<br />

wieder <strong>mit</strong> der üblichen Bestätigung auf das FIN. Der ACK-Teil des TCP-<br />

Headers trägt dazu die Sequenznummer n+1. Auch hier wird der Anwendung<br />

das Eintreffen des FIN-Pakets durch eine Dateiendemarke <strong>mit</strong>geteilt<br />

<strong>und</strong> es ist nun auch von der passiven zur aktiven Seite kein weiterer Datenfluß<br />

mehr möglich.<br />

Obwohl wir für den Abbau einer TCP-Verbindung vier Schritte aufgezählt<br />

haben, spricht man auch hier von einem Drei-Wege-Handshake. Die aufeinanderfolgende<br />

Übertragung des ACK- <strong>und</strong> des FIN-Pakets wird hier lediglich<br />

als ein Weg gewertet, die beiden Operationen können in der Praxis sogar sehr<br />

häufig in einem einzigen TCP-Paket zusammengefaßt werden.<br />

TCP-Zustände <strong>und</strong> -Zustandsübergänge<br />

Abbildung 4.14 zeigt nun die elf verschiedenen Zustände, die vom Transmission<br />

Control Protocol beim Verbindungsaufbau <strong>und</strong> -abbau durchlaufen werden.<br />

Den Ausgangs- <strong>und</strong> Endpunkt bildet dabei stets der geschlossene TCP-<br />

Zustand CLOSED, der in diesem Diagramm ganz oben zu finden ist. Abhängig<br />

vom Verhalten der Anwendung werden von der TCP-Schicht z. B. die zuvor<br />

besprochenen SYN- <strong>und</strong> FIN-Aktionen initiiert. Je nach client- oder serverseitig<br />

durchgeführter Aktion <strong>und</strong> den da<strong>mit</strong> verschickten bzw. empfangenen<br />

TCP-Paketen werden dann die durch TCP vorgegebenen Zustandsübergänge<br />

durchgeführt. Zudem werden von der TCP-Schicht ggf. weitere TCP-Pakete<br />

(etwa ein ACK) verschickt.<br />

Der <strong>mit</strong> der gestrichelten Linie markierte Pfad durch Abb. 4.14 ist der typische<br />

Weg eines Servers: Ausgehend von einem geschlossen Socket führt<br />

derServereinpassives Öffnen des <strong>Sockets</strong> durch. Der Aufruf von listen()<br />

25 In die andere Richtung, also von der passiven Seite zur aktiven Seite können in<br />

dieser Phase des Verbindungsabbaus sehr wohl noch Daten über die Socketverbindung<br />

übertragen werden. Die Verbindung wird in diesem Zustand deshalb oft<br />

als halb geschlossen bzw. half-closed beschrieben.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!