TCP (Transmission Control Protocol) ist ein Netzwerkprotokoll, das definiert, auf welche Art und Weise Daten zwischen Netzwerkkomponenten ausgetauscht werden sollen.
Beschreibung
Was ist TCP
Ist ein zuverlässiges, verbindungsorientiertes, paketvermitteltes (nicht paketvermittelnd) Transportprotokoll.
TCP ermöglicht die Übertragung eines Datenstroms.
Im Unterschied zum verbindungslosen User Datagram Protokoll (UDP) stellt TCP eine Verbindung zwischen zwei Endpunkten (Sockets) einer Netzverbindung her.
Auf dieser Verbindung können in beide Richtungen Daten übertragen werden.
Vorteile
Netzwerküberlastungskontrolle.
Zuverlässige Datenübertragung:
erkennt verlorene Segmente, doppelte Segmente und fehlerhafte Segmente.
Allgemeines
TCP ist im Prinzip eine Ende-zu-Ende-Verbindung in Vollduplex.
Kann auch als zwei Halbduplexverbindungen betrachtet werden (Informationsfluss in beide Richtungen (allerdings nicht gleichzeitig)).
Die Daten in Gegenrichtung können zusätzliche Steuerungsinformationen enthalten.
Anwendungen, die TCP häufig nutzen, sind zum Beispiel Webbrowser und Webserver.
TCP-Software
Übernimmt Verbindungsverwaltung sowie die Datenübertragung.
Netz-Protokollstack des Betriebssystems.
Anwendungsprogramme nutzen Sockets.
Software-Schnitstelle
bei Windows in extra einzubindenden Programmbibliotheken („Winsock.dll“ bzw. „wsock32.dll“).
Linux und andere unixoide Betriebssysteme enthalten einen Socketlayer im Betriebssystemkern (Zugriff über Systemaufrufe).
Entwicklung
Entwickelt von Robert E. Kahn und Vinton G. Cerf als Forschungsarbeit.
Beginn 1973, erste Standardisierung 1981 als RFC 793.
Danach gab es viele Erweiterungen, diese werden bis heute in RFCs spezifiziert.
Header
Allgemeines
Das TCP-Segment besteht immer aus zwei Teilen: dem Header und der Nutzlast.
Die Nutzlast enthält die zu übertragenden Daten.
Die wiederum Protokollinformationen der Anwendungsschicht, wie HTTP oder FTP, entsprechen können.
Der Header enthält für die Steuerung der Kommunikation erforderliche Daten.
Da das Options-Feld in der Regel nicht genutzt wird, hat ein typischer Header eine Größe von 20 Byte.
Felder des TCP-Header
Aufbau des TCP-Headers
Feld
Funktion
Größe
Source Port (Quellport)
Gibt die Portnummer auf der Senderseite an
2 Byte
Destinations Port (Zielport)
Gibt die Portnummer auf der Empfängerseite an.
2 Byte
Sequence Number
Sequenznummer des ersten Daten-Oktett dieses TCP-Segments, dient zur Sortierung Oder die Initialisierungs-Sequenznummer falls das SYN-Flag gesetzt ist
4 Byte
Acknowledgement Number
Gibt die Sequenznummer an, die der Absender dieses TCP-Segments als Nächstes erwartet Sie ist nur gültig, falls das ACK-Flag gesetzt ist.
4 Byte
Data Offset
Gibt die Länge des TCP-Headers in 32-Bit-Blöcken an (ohne Nutzdaten).
Hiermit wird die Startadresse der Nutzdaten angezeigt.
4 Bit
Reserved
Ist für zukünftige Verwendungen reserviert.
Alle Bits müssen null sein.
4 Bit
Control-Flags
Zweiwertige Variablen mit den Zuständen gesetzt und nicht gesetzt.
Kennzeichnung für die wichtigen Zustände der Kommunikation und Weiterverarbeitung der Daten.
8 Bit
(Receive) Window
Ist die Anzahl der Bytes die der Sender dieses TCP-Segments bereit ist zu empfangen.
Beginnend bei dem durch das Acknowledgementfeld indizierten Daten-Oktett.
2 Byte
Checksum
Dient zur Erkennung von Übertragungsfehlern.
Wird über den TCP-Header, die Daten und einen Pseudo-Header berechnet.
Der Header besteht aus Ziel-IP, Quell-IP, TCP-Protokollkennung (0x0006) und der Länge des TCP-Headers inkl. Nutzdaten (in Bytes).
2 Byte
Urgent Pointer
Nur gültig, wenn das URG-Flag gesetzt ist.
Die Urgent-Daten beginnen sofort nach dem Header
Zusammen mit der Sequenz-Nummer gibt dieser Wert die Position des ersten Bytes nach den Urgent-Daten an.
2 Byte
Options
Unterschiedlich groß und enthält Zusatzinformationen.
Müssen ein Vielfaches von 32 Bit lang sein, ansonsten muss mit Nullbits aufefüllt werden (Padding).
Ermöglicht Verbindungsdaten auszuhandeln, die nicht im TCP-Header enthalten sind, wie z.B. die Maximalgröße des Nutzdatenfeldes.
0–40 Byte
TCP-Flags
Feld
Funktion
Größe
ECE-Flag (ECN-Echo)
Teilt dem Sender mit, dass das Netzwerk überlastet ist und die Senderate reduziert werden muss.
Wird für Explicit Congestion Notification (ECN) benötigt
1 Bit
CRW-Flag (Congestion Window Reduced)
Teilt dem Empfänger mit das die Senderate reduziert wurde.
Wird für Explicit Congestion Notification (ECN) benötigt
1 Bit
URG-Flag (Urgent)
Die Daten nach dem Header werden sofort von der Anwendung bearbeitet.
Anwendung unterbricht die Datenverarbeitung des aktuellen TCP-Segments und liest alle Bytes nach dem Header bis zu dem Byte, auf das das Urgent-Pointer -Feld zeigt, aus.
Kann verwendet werden, um eine Anwendung auf dem Empfänger abzubrechen.
In der Regel wird dieses Flag nicht ausgewertet.
1 Bit
ACK-Flag (Acknowledgment)
Hat in Verbindung mit der Acknowledgment-Nummer die Aufgabe, den Empfang von TCP-Segmenten bestätigen.
Die Acknowledgment-Nummer ist nur gültig, wenn das Flag gesetzt ist.
1 Bit
PSH-Flag (Push)
Sowohl der ausgehende, als auch der eingehende Puffer wird übergangen.
Hilft den Datenstrom von TCP effizienter zu verarbeiten, indem die empfangende Applikation gezielter aufgeweckt werden kann.
RFC 1122 & RFC 793
1 Bit
RST-Flag (Reset)
Wird verwendet, wenn eine Verbindung abgebrochen werden soll.
z.B. bei technischen Problemen oder zur Abweisung unerwünschter Verbindungen
Oder bei nicht geöffneten Ports, es wird kein ICMP-Paket mit „Port Unreachable“ verschickt.
1 Bit
SYN-Flag (Synchronize)
Pakete mit diesem Flag initiieren eine Verbindung.
Dient der Synchronisation von Sequenznummern beim Verbindungsaufbau.
Server antwortet normalerweise mit SYN+ACK oder RST.
1 Bit
FIN-Flag (Finish)
Schlussflag, dient zur Freigabe der Verbindung, zeigt an, dass keine Daten vom Sender kommen.
FIN- und SYN-Flags haben Sequenznummern, damit diese in der richtigen Reihenfolge abgearbeitet werden.