next up previous contents
Nächste Seite: Adressierung, Routing und Multiplexing Aufwärts: Die TCP/IP Protokoll Architektur Vorherige Seite: Die Internet-Layer - Das   Inhalt

Die Transport Layer - Das TCP-Protokoll

Die Protokollschicht direkt oberhalb der Internet Layer ist die Host-to-Host Transport Layer, kurz Transport Layer (siehe Abbildung 5.2). Die beiden wichtigsten Protokolle dieser Schicht sind das
Transmission Control Protocol     TCP
und das
User Datagram Protocol     UDP
TCP stellt zuverlässige Datenübergabedienste mit Ende-zu-Ende Fehlererkennung und -korrektur zur Verfügung. UDP dagegen stellt verbindungslose Datagramm Übergabedienste mit niedrigem Overhead zur Verfügung. Beide Protokolle übertragen Daten zwischen der Application Layer und Internet Layer. Es bleibt der Wahl des Anwendungsprogrammierers überlassen, welches dieser Protokolle für die spezielle Anwendung genutzt wird. UDP Das UDP Protokoll stellt Anwendungsprogrammen einen direkten Zugriff auf die Datagramm Ausgabedienste zur Verfügung, wie sie zum Beispiel von IP bereitgestellt werden. Dies erlaubt den Anwendungen, Nachrichten über ein Netz mit einem Minimum an Protokoll-Overhead auszutauschen. UDP ist ein unzuverlässiges, verbindungsloses Protokoll. Wie bereits erwähnt, bedeutet unzuverlässig im aktuellen Kontext, daß das UDP Protokoll über keine Mechanismen verfügt, um zu erkennen, ob die Daten auch einwandfrei den Zielrechner erreicht haben. UDP benutzt 16 Bit Quellport und Zielport Zahlen im Message Header, um Daten zwischen den korrekten Anwendungsprozessen auszutauschen. Die Abbildung 5.8 zeigt das explizite Format des UDP Protokolls.

Abbildung 5.8: Das UDP Format.

Die UDP Steuerungssoftware - die letztendlich das UDP Protokoll realisiert - auf die eine Anwendung aus der Application Layer zugreift, steckt in einem Windows-Rechner in der Datei winsock.dll. Dort arbeitet die UDP Software eng mit der IP-Steuerungssoftware zusammen, um UDP Pakete mittels IP Datagrammen zu übertragen, bzw. umgekehrt, empfangene IP Pakete, die sich als UDP Pakete entpuppen, auszuwerten.5.10 TCP Mit dem Protokoll TCP wird zum einen die Zuverlässigkeit des (darunterliegenden) Internet-Protokolls erhöht, zum anderen übernimmt TCP durch den Gebrauch sogenannter Port - Nummern die Adressierung von Diensten der (darüberliegenden) Anwendungsschicht. Die Aufgabe des TCP-Protokolls innerhalb der TCP/IP Architektur läßt sich folgendermaßen charakterisieren:
Die Aufgabe von TCP besteht darin, für den Auf- und Abbau der Verbindungen zwischen den einzelnen Arbeitsstationen im Netzwerk zu sorgen. TCP steuert den Datenfluß und stellt die Vollständigkeit der Übertragung sicher. TCP ist ein zuverlässiges, verbindungsorientiertes, Byte-Stream Protokoll.
TCP ist ein verbindungsorientiertes Protokoll. Es ist nicht nur zuverlässig, sondern erfordert auch, daß eine Verbindung errichtet wird, bevor Daten von einem Rechner an einen anderen übertragen werden können. Sobald die Übertragung beendet wird, wird die Verbindung gelöst. Das Plus an Zuverlässigkeit wird durch folgende Mechanismen erwirkt: Damit die oben beschriebene Funktionalität auch gewährleistet werden kann, muß der TCP-Protokollkopf mit den entsprechenden Feldern ausgerüstet sein. Der TCP-Protokoll-Kopf (den nennt man auch TCP Segment ist in Abbildung 5.9 dargestellt. Der TCP Segment-Header ist im RFC 793 definiert.

Abbildung 5.9: Das TCP Segment Format.
\begin{figure}
\centering
\epsfig {file=../pics/tcp_kopf.eps,width=8cm}
\end{figure}

Die Funktionalität der einzelnen Felder des TCP-Kopfes ist folgende: Im TCP Protokoll wird die Zuverlässigkeit durch einen Mechanismus realisiert, der Positive Acknowledgement with Re-transmission ( PAR) heißt. Einfach ausgedrückt bedeutet dies, ein System, das PAR einsetzt, sendet solange Daten, bis vom Empfänger das Signal eintrifft, daß die Übertragung funktioniert hat. Jedes Seqment, das von TCP übertragen wird, enthält im Header eine Prüfsumme (siehe Feld Prüfsumme in Abbildung 5.9). Diese nutzt der Empfänger, um festzustellen, ob die einlaufenden Daten einwandfrei angekommen sind. Ist dies der Fall, sendet die Empfangsstation ein positive acknowledgement Signal an die Sendestation zurück. Ist das Datensegment beschädigt, wird dieses einfach verworfen. Nach einer gewissen Zeit überträgt das sendende TCP Modul alle Segmente erneut, von denen keine positive Bestätigung erhalten wurde. TCP ist verbindungsorientiert. Es wird eine logische Ende-zu-Ende Verbindung zwischen den beiden kommunizierenden Hostrechnern aufgebaut. Dazu werden Kontrollinformationen zwischen den beiden Endpunkten ausgetauscht um ein Dialog aufzubauen, bevor die Daten übertragen werden. Dies nennt man einen Handshake. TCP nutzt zu diesem Zweck das Feld Flags im vierten Word des Segmentheaders. Die Art von Handshake, die TCP benutzt, nennt man 3-Wege-Handshake, da zum Verbindungsaufbau drei Segmente zwischen Sender und Empfänger ausgetauscht werden müssen. Die Abbildung 5.10 zeigt die einfachste Version eines 3-Wege-Handshakes. Hostrechner A baut die Verbindung dadurch auf, daß ein Segment zu Host B gesendet wird, das im Feld Flags das Synchronize sequence numbers (SYN) Bit gesetzt hat. Dieses Segment teilt dem Hostrechner B mit,
  1. daß Host A Verbindung aufbauen möchte
  2. welche Sequenznummer Host A als Startnummer für die zu übertragenden Segmente benutzen wird.
Host B antwortet anschließend A mit einem Segment, in dem die Acknowledgement ( ACK) und SYN Bits gesetzt sind.

Abbildung 5.10: Der 3-Wege-Handshake.

Bs Segment bestätigt den Empfang von As ersten Segment und teilt A mit, mit welcher Sequence Nummer Host B die Segmentennumerierung beginnen wird. Schließlich sendet Host A eine Bestätigung des Empfangs von Bs Segment und transferiert (endlich) die ersten Daten. Nach diesem Austausch hat Host As TCP Gewißheit, daß das TCP des Zielrechners am Leben und bereit ist, Daten zu empfangen. Sobald die Verbindung aufgebaut ist, können die Daten transferiert werden. Haben die kooperierenden Module den Datentransfer beendet, geht das Prozedere rückwärts, ein 3-Wege-Handshake, um die Verbindung abzubauen. Dazu wird im Flag-Eintrag des Segmentheaders ein No more data from sender Bit gesetzt (sog. FIN Bit). Genau dieser Ende-zu-Ende Datenaustausch baut die logische Verbindung zwischen den beiden Hostsystemen auf. TCP betrachtet die zu versendenden Daten als kontinuierlicher Bytestrom, nicht als unabhängige Pakete. Daher muß TCP die korrekte Reihenfolge gewährleisten, in der die Bytes gesendet bzw. empfangen werden. Die Felder Sequenznummer und Quittungsnummer (=Acknowledge Number) dienen genau diesem Zweck. Der TCP Standard fordert keine spezielle Startnummer für die Numerierung der Bytes, jedes System wählt dazu seine eigene Nummer. Um den Datenstrom korrekt kontrollieren zu können, muß jedes System die Startnummer des anderen Systems kennen. Die beiden Enden der Verbindung synchronisieren die Byte Numerierung durch Austausch der SYN Segmente während des Handshakes. Das Feld Sequenznummer im Segmentheader des SYN Segmentes enthält die Initial Sequence Number (kurz ISN), die die Anfangsnummer der Bytezählerei darstellt. Aus Sicherheitsgründen sollte die Zahl zufällig gewählt sein, üblicherweise ist die ISN = 0. Jedes Byte der zu übertragenden Daten wird fortlaufend durchnumeriert, das erste Datenbyte hat daher die Nummer ISN+1. Die Sequenznummer im Header eines Datensegmentes identifiziert die fortlaufende Position des ersten Bytes des Datensegmenets im gesamten Datenstrom. Beispiel: Hat das erste Byte eines Datenstroms die Sequenznummer = 1 (ISN=0) und sind bereits 4000 Bytes übertragen, so ist das erste Datenbyte des aktuellen Segmentes das 4001 Byte, daher ist die Sequenznummer im Header des aktuellen Segmentes 4001. Das Feld Quittungsnummer (Acknowledgment Segment) (ACK) hat zwei Funktionen: Die Empfangsbestätigung teilt der Sendestation mit, wieviele Daten empfangen wurden und wieviele weitere Daten der Empfänger entgegennehmen kann. Die Quittungsnummer ist die Sequenznummer des nächsten Bytes, das der Empfängerhost erwartet. Der TCP Standard fordert keine individuelle Empfangsbestätigung für jedes Paket. Die Quittungsnummer ist eine positive Empfangsbestätigung aller Bytes bis zu dieser Nummer. Hat beispielsweise das erste übertragene Byte die Sequenznummer 1 und wurden bereits 2.000 Bytes fehlerfrei empfangen, ist die Quittungsnummer 2.001. Das Feld Fenstergröße (auch Window) im TCP Header gibt an, wieviele Bytes der Empfängerhost entgegennehmen kann. Ist der Empfänger in der Lage, 6.000 weitere Bytes entgegenzunehmen, ist die Fenstergröße 6.000. Ein nichtverschwindender Wert im Feld Fenstergröße teilt der Sendestation mit, daß sie mit der Übertragung der Daten fortfahren kann solange die totale Anzahl der Bytes kleiner bleibt als die Puffergröße. Die Empfangsstation kontrolliert den einkommenden Bytefluß durch Ändern des Wertes im Feld Fenstergröße. Steht dort der Wert 0, dann stellt der Sender die Übertragung solange ein, bis er einen ACK erhält mit einem Window-Wert ungleich Null.

Abbildung 5.11: Der TCP - Datenstrom.
\begin{figure}
\centering
\footnotesize
\unitlength 0.8mm
\linethickness {...
....67){\framebox (141.67,65.00)[cc]{}}
\end{picture}
\normalsize
\end{figure}

Die Abbildung 5.11 zeigt einen TCP Datenstrom, der mit einer ISN = 0 beginnt. Das Empfängersystem hat insgesamt bereits 2.000 Bytes empfangen und quittiert, daher ist die aktuelle Quittungsnummer 2.001. Weiterhin verfügt der Empfängerhost momentan über einen Puffer von 6.000 Bytes, daher hat er der Sendestation im Feld Fenstergröße seines ACK Segmentes den Wert 6.000 zurückgegeben. Die Sendestation ist gerade dabei, ein Segment der Größe von 1.000 Bytes beginnend mit der Sequenznummer 4.001 zu senden. Die Sendestation hat seit mit der Sequenznummer 4.001 zu senden. Die Sendestation hat keine Quittierung seit der Bytenummer 2.001 erhalten, sendet jedoch weiterhin Daten solange sich alles im Bereich der freigegebenen Fenstergröße abspielt. Hat der Sender den Puffer gefüllt und noch keine Quittierung über den Erhalt der zuvor gesendeten Daten erhalten, dann stellt er die Datenübertragung ein, wartet eine geraume Zeit und überträgt erneut die Bytes ab der letzten Quittierung. In Abbildung 5.11 würde die Wiederholungsübertragung ab dem Byte 2.001 beginnen, falls der Empfänger keine Bestätigung zurücksendet. Diese Prozedur gewährleistet, daß die Daten sicher das Ziel erreichen. TCP ist auch dafür verantwortlich, daß Daten, die aus der IP-Layer erhalten werden, an die richtige Anwendung in der Application Layer weitergegeben werden. Die Anwendung, für die die Daten bestimmt sind, wird durch eine 16-Bit Zahl - Port Nummer genannt - identifiziert. Dafür sind die Einträge in den Feldern Sender-Port und Empfänger-Port im TCP Segment Header verantwortlich.
next up previous contents
Nächste Seite: Adressierung, Routing und Multiplexing Aufwärts: Die TCP/IP Protokoll Architektur Vorherige Seite: Die Internet-Layer - Das   Inhalt
Yasar Arman
2000-05-15