TCP
Das TCP (Transmission Control Protocol) stellt eine Verbindung zwischen 'Endverbrauchern' also in der Regel zwischen in Ausführung befindlichen Programmen auf unterschiedlichen Rechnern in unterschiedlichen Netzen zur Verfügung. Diese Eigenschaft fehlt auf der datagrammorientierten IP-Ebene. TCP geht von einem fortlaufenden Bytestrom aus den höheren Schichten aus und zerlegt diesen in sogenannte Segmente mit einer Länge von bis zu 65K Byte. TCP muss folgendes gewährleisten:
TCP ist ist formell im RFC 793 definiert. Im Laufe der Zeit wurden verschiedene Fehler und Inkonsistenzen gefunden. Ebenso haben sich Erweiterungen als nötig erwiesen. Die Fehlerkorrekturen und Erweiterungen sind im RFC 1122 bzw. im RFC 1323 beschrieben.
Ein Socket kann für mehrere Verbindungen gleichzeitig genutzt werden, d.h zwei oder mehr Verbindungen enden auf dem gleichen Socket. Portnummern unter 256 nennt man gut bekannte Ports (well known Ports). Diese Portnummern sind für die Standarddienste reserviert, Beispiele siehe oben. Eine Liste der gut bekannten Ports ist im RFC 1700 enthalten. Portnummern werden für TCP und UDP getrennt vergeben.
Eine schöne Veranschaulichung von Netzen, Hostadressen und Portnummern geben (Scheller, et al. 1994): In Analogie zum Telefonsystem stehen Portnummern auf der gleichen Stufe wie Nebenstellenanlagen. Die Netzadresse entspricht dabei der Ortsvorwahl, die Hostadresse der Rufnummer und der Port entspricht der Durchwahl des Teilnehmers.
TCP-Verbindungen sind immer Vollduplex und Punkt-zu-Punkt. Vollduplex bedeutet, daß Verkehr gleichzeitig in beide Richtungen fliessen kann. Punkt-zu-Punkt bedeutet, dass jede Verbindung genau zwei Endpunkte hat. TCP unterstützt weder Multicasting noch Broadcasting. Eine TCP-Verbindung ist ein Bytestrom, kein Nachrichtenstrom. Die Grenzen von Nachrichten werden nicht von Ende-zu-Ende beibehalten, d.h. der Empfänger kann nicht erkennen , in welchen Einheiten die Daten geschrieben wurden.
Die sendende und die empfangende TCP-Einheit tauschen Daten in Form von
Segmenten aus. Ein Segment besteht aus einem festen 20-Byte-Header, einem
optionalen Teil und den Datenbytes. Die TCP-Software entscheidet über
die Segmentgröße. Sie kann Daten vom mehreren
Schreiboperationen zu einem Segment zusammenfassen oder Daten aus einem
Schreibvorgang zu einem Segment zusammenfassen oder auf mehrere Segmente
aufteilen. Die Segmentgröße wird durch zwei Faktoren beschränkt:
Erstens muß jedes Segment, einschließlich des TCP-Headers in
das IP-Nutzdatenfeld von 65535 Bytes passen. Zweites hat jedes Netz eine
maximale Transfereinheit (MTU, Maximum Transfer Unit) in die jedes Segment
passen muss. Normalerweise ist die MTU einige tausend Bytes gross und gibt
die obere Grenze der Segmentlänge an. Genau wie bei den
IP-Datagrammen müssen TCP-Segmente beim Durchlauf durch Netze mit
kleinerer MTU vom entsprechenden Router
fragmentiert werden. Jedes neue Segment erhält einen eigenen TCP- und
IP-Header, so dass die Fragmentierung zusätzliche Belastung (jeweils
40 Byte) für das Übertragungsnetz bedeutet, ohne das der
Durchsatz gesteigert wird.
TCP-Segmente benutzen das Sliding-Windows-Protokoll zur Flusskontrolle. Überträgt
ein Sender ein Segment, startet er gleichzeitig einen Timer. Kommt nicht
innerhalb einer vorbestimmten Zeitspanne ein Segment mit einer Bestätigungsnummer
zurück, wird das Segment erneut übertragen. Es wird nun nicht
extra zu diesem Bestätigungszweck ein Segment erzeugt, sondern die
Bestätigungsnummer - die die Nummer des nächsten erwarteten
Segmentes entspricht - wird huckepack mit dem nächsten Datensegment
zurückgeschickt. Daher spricht man beim Sliding-Window-Protokoll auch
von einem Piggyback-Verfahren (Tanenbaum,
1998). Auf die Feinheiten dieses Algorithmus - insbesonders im
Zusammenhang mit der Segmentverdoppelung wegen vorzeitig abgelaufener
Timer oder wegen Fragmentierung und Ausfall einiger Segmente - soll hier
nicht eingegangen werden. In (Tanenbaum, 1998) und in (Tanenbaum,
et al. 1995) finden sich Diskussionen dieser Problematik.
Nachfolgend soll analog zum IP-Datagramm-Header der Aufbau eines TCP-Headers schematisch wiedergegeben werden (Tanenbaum, 1998 und Miller, 1991).
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Erläuterung:
Nach den 20-Bytes Kopfinformationen mit fest vorgegebenem Format folgen die Header-Optionen. Den Optionen können 65535-20-20=65515 Datenbytes folgen. Der zweite 20-Byte-Summand gehört zum IP-Header. Segmente ohne Daten sind zulässig und werden für Bestätigungen oder als Steuernachricht verschickt.