TCP

Transmission Control Protocol

TCP ist das am weitesten verbreitete Protokoll zur Übertragung von Daten. Alle Betriebssysteme unterstützen TCP, weil es einfach, sicher und sehr zuverlässig ist. TCP stützt sich meistens auf das Internet Protocol IP und wird deshalb oft mit TCP/IP bezeichnet. Internet, Mail und viele andere Dienste arbeiten mit TCP als Grundlage.
Netzwerk Zusammenarbeit - Lokal und weltweit
TCP-Kompress Protokoll, Aufgaben, Verbindung, Sicherheit, Socket
Verhandlung Die interaktive Kommunikation zwischen TCP-Partnern
Geschichte Einige historische Daten
TCP-Header Aufbau eines typischen TCP-Headers
Daten TCP Daten-Pakete
Verwandte Themen OSI-Modell, UDP, Port IP, ICMP
Links Ausgewählte Links zum Thema 'TCP'

TCP-Kompress

Protokoll

TCP ist ein Protokoll - Eine standardisierte Sammlung von Regeln, nach denen Daten in Netzwerken ausgetauscht werden.

OSI-Modell

TCP-Software arbeitet in der Transport-Schicht des OSI-Modells. TCP benötigt zur Arbeit alle darunter liegenden Schichten, z.B. IP (als TCP/IP) und Ethernet. TCP erhält von einer darüber liegenden Schicht den Auftrag zur Übertragung der Daten.

Aufgaben

Die Aufgabe von TCP besteht darin, die Übertragung der Daten zu organisieren und zu überwachen.
Wichtige Teil-Aufgaben sind:
Feststellung, ob das Ziel erreichbar ist
Zerlegung der Daten ↓ in transportable Pakete
Übergabe jedes Pakets an IP zur Übertragung
Zusammensetzung der von IP empfangenen Daten-Pakete
Kontrolle der Vollständigkeit und Rückmeldung an den Sender
Nochmalige Übertragung defekter oder verloren gegangener Pakete
Geregelter Abbau der Verbindung

Verbindungs-Orientiert

TCP stellt einen bidirektionale Verbindung zwischen Sender und Empfänger her. Damit wird erreicht:
Die Übertragung findet nur statt, wenn das Ziel erreichbar ist. Daten werden nicht "ins Leere" gesendet (wie z.B. von IP oder UDP).
Die TCP-Komponenten von Sender und Empfänger wissen voneinander und organisieren gemeinsam die Übertragung.
Das erleichtert das Erkennen und Beheben von Problemen, die bei der Übertragung auftreten.

Sicherheit & Zuverlässigkeit

TCP ist ein zuverlässiges Protokoll. Das bedeutet:
TCP kontrolliert, dass alle Daten-Pakete übertragen werden. Kein Paket darf fehlen oder mehrfach verwendet werden.
TCP organisiert die Zusammensetzung empfangener Pakete in der richtigen Reihenfolge.
TCP organisiert die wiederholte Sendung von defekten oder verloren gegangenen Daten-Paketen.

Socket = IP-Adresse + Port

Die Kombination von IP-Adresse + Port wird als Socket bezeichnet.
Jede TCP-Verbindung erfordert die Angabe je eines kompletten Sockets für Sender und Empfänger.

Ein Server-Programm erzeugt einen dauerhaften Socket auf einem standardisierten Port, z.B. ein Webserver auf Port 80. Der Server lauscht (listen) auf Aufträge, d.h. das Betriebssystem leitet alle auf Port 80 eintreffenden Daten an den Server.

Ein Client, welcher Daten (z.B. Auftrag zum Senden einer Webseite) an den Server senden will, erzeugt dazu einen temporären Socket (beliebiger Port). TCP organisiert die Übertragung des Client-Auftrags zwischen den beiden Sockets.

Die Antwort-Daten des Webservers bestehen aus dem HTML-Quelltext der Webseite. Der Client lauscht auf seinem Socket auf die erwarteten Daten des Servers.
Der Server erzeugt einen temporären Socket (beliebiger Port) zum Senden der HTML-Daten. TCP organisiert die Übertragung der Daten an den Client. Danach werden die temporären Sockets von Client und Server geschlossen.
Der dauerhafte Socket des Servers bleibt geöffnet und lauscht auf weitere Aufträge.

TCP auf allen Systemen

TCP ist in den Netzwerk-Komponenten aller Betriebssysteme enthalten.
TCP benötigt keine Konfiguration, stellt keine Fragen und arbeitet auf jedem PC rasch und sicher im Hintergrund.

TCP/IP

Die Kombination von TCP und IP stellt derzeit das wichtigste und am häufigsten verwendete Netzwerk-Protokoll dar.
Wenn Sicherheit keine Rolle spielt, oder wenn Geschwindigkeit wichtiger ist, wird UDP an Stelle von TCP eingesetzt (meist sogar an den gleichen Ports).

Verhandlung

Eine wesentliche Voraussetzung für die Sicherheit von TCP ist die Einbeziehung beider Partner (Sender und Empfänger) in die Übertragung.
Dazu wird ein Bidirektionaler Daten-Kanal (Voll-Duplex) aufgebaut, das bedeutet:

Zusätzlich zu den Nutz-Daten werden in beide Richtungen (!) Nachrichten zur Kontrolle der Übertragung ausgetauscht. ( TCP-Header ↓ )

TCP ist ein Verbindungs-orientiertes Protokoll, d.h. es stellt vor Übertragung der Nutz-Daten eine gesicherte Verbindung zwischen Sender und Empfänger her. (IP oder UDP sind verbindungs-lose Protokolle).

Technische Probleme:
In großen und komplexen Netzwerken wie dem Internet muss man damit rechnen, dass mit einer gewissen Wahrscheinlichkeit Probleme auftreten, z.B.
Flexible Übertragungs-Wege benötigen unterschiedlich viel Zeit. Das kann die Reihenfolge eintreffender Pakete ändern.
Überlastung einer Komponente führt zu Verzögerung oder Ablehnung der Daten-Annahme.
Ausfall einer Komponente (zumindest für einige Zeit) kann zum Verlust ganzer Daten-Pakete führen.

TCP kann die meisten dieser Probleme erkennen und meist auch beheben. Dazu wird ein gewisser Aufwand (Overhead) betrieben, welcher TCP etwas langsamer macht als UDP.
Bei jeder TCP-Verbindung sind u.a. diese Arbeiten auszuführen:

Synchronisation

Die TCP-Komponenten von Sender und Empfänger identifizieren einander. Sie tauschen zur Kontrolle in beide Richtungen kurze Pakete von Daten aus (3-way handshake).

TCP-Sender

Die Nutz-Daten werden in Pakete zerlegt, die Pakete werden eindeutig nummeriert.
Die Pakete werden zur Übertragung einzeln an IP übergeben.
Der Sender erwartet vom Empfänger die Bestätigung empfangener Pakete.
Der Sender versucht die Daten-Rate optimal an die realen Bedingungen nazupassen.
Bei Problemen wird die Sendung der betroffenen Pakete wiederholt.

TCP-Empfänger

Der Empfänger gibt laufend seine Aufnahme-Kapazität bekannt.
Die einzelnen Pakete der Nutz-Daten werden empfangen und identifiziert.
Die Pakete werden in der richtigen Reihenfolge zusammengesetzt.
An den Sender wird eine Bestätigung für korrekt empfangene Pakete gesendet.

Abbau

Nach korrekter Übertragung informieren beide Partner einander vom kontrollierten Abbau der Verbindung.

Optimierung

Jedes von TCP erkannte Problem führt zum Austausch zusätzlicher Daten: Sender und Empfänger informieren einander vom aufgetretenen Problem, in der Folge werden die betroffenen Daten-Pakete erneut gesendet.
Bei gehäuftem Auftreten von Fehlern könnte das zur Überlastung des Netzwerks führen. Man verwendet besondere Algorithmen in TCP Hilfs-Programmen zum Erkennen und Vermeiden solcher Situationen.
TCP beobachtet laufend die Fehler-Rate und ändert danach sein Verhalten.

Die Übertragung wird langsam begonnen (Slow Start), danach wird die Daten-Rate (Bit pro Sekunde) kontrolliert gesteigert. Nach Eintreffen jeder Bestätigung kennt der Sender die Zeit für Hin- und Rückweg der Daten (round trip). Fehlerhafte oder verlorene Pakete werden nochmals gesendet.
Mit Hilfe der aktuellen Informationen stellt TCP sein Verhalten auf optimalen Durchsatz ein. Wenn alles klappt, wird die Daten-Rate gesteigert, bei Fehlern verringert.

Die Algorithmen zur Optimierung von TCP sind nicht vorgegeben, sondern man forscht laufend nach Möglichkeiten zur Verbesserung.

Geschichte

TCP wurde 1973 von Robert E. Kahn im Rahmen von ARPANET "erfunden" und später gemeinsam mit Vinton E. Cerf entwickelt. Die treibende Kraft war der Kalte Krieg, speziell die Entwicklung eines dezentralen Netzwerks zur unangreifbar sicheren Kommunikation.
Die Entwicklung dauerte mehrere Jahre und verlagerte sich zunehmend in den zivilen Bereich.

TCP wurde erstmals 1981 als ziviler Standard RFC 793 festgelegt. Es folgten zahlreiche Erweiterungen und Verbesserungen. Die heutige Version beruht hauptsächlich auf RFC 1323 von 1992.
Vinton Cerf & Robert Kahn Vinton Cerf und Robert Kahn bei einer Ehrung durch den US-Präsidenten
(Quelle: Wikipedia)

Man findet nur wenige Bilder von Bob Kahn, gerade dieses Bild ist kein Zufall. In den USA wird die Entwicklung von TCP offenbar noch immer dem militärischen Sektor zugeordnet. Nicht alle Pioniere der Informatik werden solcherart geehrt...
Zur gleichen Zeit wurden unabhängig voneinander auch die Programmiersprache C und das Betriebssystem UNIX entwickelt.
Es gab keine Personal Computer sondern große zentrale Computer mit einer Vielzahl von Terminals (Bildschirm-Arbeitsplätzen). Über derartige Computer verfügten neben dem Militär hauptsächlich Universitäten.

Durch Zusammenführung der Universitäts-Computer mit ihrem C-programmierten UNIX System im TCP-organisierten ARPANET entstand erstmals ein leistungsfähiges dezentrales Netzwerk.
Daraus entwickelte sich das heutige Internet.

Interessant ist u.a. der ideologische Aspekt:
Das zentralistisch organisierte Militär entwickelte anfangs großen Widerstand gegen eine dezentrale Lösung, weil man einen Verlust an Einfluss befürchtete.
Interessant und noch heute aktuell sind die Ziele bei der Entwicklung von TCP:
Das Netzwerk ist dezentral organisiert. Bei Ausfall einzelner Komponenten können alle intakten Komponenten weiter miteinander kommunizieren.
Es gibt keinen einzelnen Punkt ("Zentrale"), der einen Zusammenbruch des gesamten Netzwerks auslösen kann.
Das Netzwerk wird durch Hinzufügen oder Entfernen von Teilnehmern (PC) nicht inhaltlich (qualitativ) verändert sondern nur in seinem Ausmaß (quantitativ).
Möglichst viele Komponenten werden redundant angelegt. Sie können einander ganz oder teilweise ersetzen.
Man versucht erst gar nicht, alle Fehler zu verhindern, sondern man rechnet mit Fehlern und entwickelt Strategien zu ihrer Erkennung und Behebung.
Heute ist TCP weltweit etabliert, der Standard ist schon lange unverändert und eine wesentliche Änderung in naher Zukunft nicht notwendig. Die Algorithmen zur Optimierung des Datenverkehrs mit TCP sind jedoch Gegenstand der IT-Forschung und werden von Zeit zu Zeit an die technischen Möglichkeiten und an die Gebrauchs-Gewohnheiten des Internet angepasst.

TCP Header

TCP erhält von der übergeordneten Schicht des OSI Kommunikations-Modells (letzlich von einem AnwenderInnen-Programm) den Befehl zur Übertragung von Daten.

Synchronisation

Vor Beginn der Übertragung wird eine bidirektionale Verbindung zwischen dem eigenen PC und dem entfernten Ziel aufgebaut. Die Bezeichnung "Sender" und "Empfänger" ist nicht ganz zutreffend, da beide Sockets gleichberechtigt Daten senden und empfangen können. In der Phase der Synchronisation werden mit SYN-Flag speziell bezeichnete Daten-Pakete ausgetauscht.

Daten-Pakete

Nach Aufbau der TCP-Verbindung werden die zu sendenden Daten in transportable Pakete von ca. 1450 Byte zerlegt und fortlaufend nummeriert.
Jedem Paket wird ein Block von TCP Verwaltungs-Daten vorangestellt, der TCP-Header. Wichtigster Inhalt sind die Port-Nummern von Sender und Empfänger.

Weitergabe an IP

Fertig mit TCP Header verpackte Daten-Pakete werden an die darunter liegende Schicht - normalerweise an IP - zum Transport übergeben.
IP verpackt die Daten weiter und stellt selbst einen IP-Header voran. Wichtigster Inhalt sind die IP-Adressen von Sender und Empfänger.

Empfang

Beim Empfang von Daten-Paketen wird der TCP-Header von den Nutz-Daten getrennt, analysiert und die gewonnene Information zur Organisation der weiteren Übertragung verwendet. Unter anderem werden die einzelnen Daten-Pakete mit Hilfe ihrer Paket-Nummer in der richtigen Reihenfolge zusammengesetzt.
Typischer TCP-Header eines Daten-Pakets
WortBitBitsNameKommentar
00..1516 Source PortPort-Nummer (0..65535) des Senders
16..3116Destination Port Port-Nummer (0..65535) des Empfängers
10..3132 Sequence Number Fortlaufende Nummer des Daten-Pakets
20..3132 Acknowledgement Number Bestätigungs-Nummer (Quittung) nur mit ACK ↓
30..34 Data Offset Länge des TCP-Headers in Worten
4..96ReservedReserviert (6 Null-Bits)
101URG Wichtige Unterbrechung, bestätigt den Urgent Pointer ↓
111ACK Acknowledgement-Flag, bestätigt die ACK-Nummer ↑
121PSH Push-Flag: Daten sofort weiterleiten
131RST Reset-Flag: Verbindung abbrechen
141SYN Synchronisation (Aufbau der Verbindung)
151FIN Ende der Daten.
16..3116 Window max. Länge der Empfangs-Daten in Byte
40..1516 Checksum Prüfsumme
16..3116 Urgent Pointer Position der Urgent-Daten, nur mit URG ↑
*0..3132 Options optional Options-Worte zu je 32 Bit
Beachten sie die Verwendung von 32-Bit Worten, besonders beim Vergleich mit dem IP-Header oder Ethernet-Header.
Der TCP-Header ist in Worten zu je 32 Bit = 2 Byte organisiert.
Alle Daten werden in Network Byte Order (Big endian, Höchstwertiges Byte voran) angegeben.

Sequence Number

Bei Verbindungs-Aufbau (SYN ↓ gesetzt) die Initialisierungs-Nummer
Bei Daten-Übertragung die fortlaufende Nummer des ersten Daten-Bytes dieses TCP-Paketes (zum Sortieren der Daten).

Acknowledgment Number (Quittierungsnummer)

Nur gültig, wenn ACK ↓ gesetzt ist: Jene Sequenznummer, die der Sender dieses TCP-Segmentes als nächstes erwartet.

Data Offset

Länge des TCP-Headers in 32-Bit-Worten (ohne Nutz-Daten).

Control- Flags

Mehrere 1-Bit (Boolean) Variable zur Steuerung der Kommunikation.

URG
Urgent-Flag: Dringende Unterbrechung (kaum verwendet).
Die Verarbeitung der Daten wird unterbrochen und jene Daten gelesen, auf welche der Urgent Pointer ↓ zeigt.

ACK
Acknowledge-(Bestätigungs)-Flag.
Dient bei Verbindungs-Aufbau (SYN gesetzt) zur Handshake-Bestätigung.
Beim Daten-Transport (ohne SYN) dient es zur Bestätigung der ACK-Nummer ↑

PSH
Push-Flag leert den Daten-Buffer des Empfängers und veranlasst die sofortige Verarbeitung der Daten.

RST
Reset-Flag zum vorzeitigen, jedoch kontrollierten Abbruch einer Verbindung.

SYN
Synchronisations-Flag, kennzeichnet Pakete zum Verbindungs-Aufbau (Handshake).

FIN
Finish-Flag zeigt das Ende der Daten an.

Window

Der Empfänger signalisiert, wieviele Bytes er zur Verarbeitung empfangen kann. Wichtig zur Optimierung der Kommunikation, verhindert Überlastung.

Checksum

Prüfsumme zur Erkennung von Übertragungsfehlern:
Berechnung aus TCP-Header + Daten.

Urgent Pointer

Nur gültig, wenn URG gesetzt ist. Ergibt zusammen mit der Sequenz-Nummer die Position der (wichtigen) Urgent-Daten.

Options

Weitere optionale Worte zu je 32 Bit.

Daten

Bei Aufbau der Verbindung (Synchronisation) einigen sich Sender und Empfänger auf die Größe der Daten-Pakete. Dazu wird der Options-Bereich am Ende des TCP Headers verwendet. Die Größe der Daten-Pakete richtet sich nach den technischen Möglichkeiten von Sender und Empfänger. Der kleinere der beiden möglichen Paket-Längen wird verwendet.
Beispiel:
Eine Verbindung läuft über TCP - IP - Ethernet - (A)DSL

DSL verwendet PPP (Point to Point Protocol), ADSL verwendet PPoE (Point to Point over Ethernet). Dieses Protokoll stellt jedem transportierten Daten-Block (frame) einen Header von 8 Byte voran.

Ethernet kann nur Daten-Blöcke (frames) von max. 1500 Bytes transportieren und ist damit meist das begrenzende Element der gesamten Verbindung.
Dieses Protokoll stellt jedem frame einen Ethernet-Header von 20 Byte voran.

IP kann theoretisch Blöcke bis zu 64kB transportieren. Dieses Protokoll stellt jedem IP-Paket einen IP-Header von 20 Byte voran.

TCP stellt jedem Daten-Paket einen TCP-Header von ca. 20 Byte voran. Wenn das Daten-Paket durch die hier angenommene Verbindung laufen soll, dann kann ein Paket nur etwas mehr als 1400 Byte Nutzdaten aufnehmen.
max = 1500 - (8+20+20+20) = 1500-68 = 1432


XHTML CSS