Test
Zur Navigation springen
Zur Suche springen
Transmission Control Protocol (TCP)
TCP ist ein verbindungsorientiertes, zuverlässiges Transportprotokoll (RFC 793). Es garantiert die Zustellung der Daten in der korrekten Reihenfolge und regelt die Übertragungsgeschwindigkeit je nach Netzlast.
Adressierung über Ports
- TCP leitet Daten an die korrekte Applikation weiter.
- Portnummern: 16 Bit (0 bis 65535).
- TCP und UDP nutzen getrennte Adressräume.
- Socket: Kombination aus IP-Adresse und Portnummer (Kommunikationsendpunkt).
- Verbindung: Eindeutig identifiziert durch das 5-Tupel {Quell-IP, Quell-Port, Ziel-IP, Ziel-Port, Protokoll}.
Portbereiche
- Well-known Ports (0 - 1023): Reserviert für Standarddienste (z. B. HTTP 80, SSH 22). Zugriff nur durch Root/Administrator.
- Registered Ports (1024 - 49151): Für spezifische Anwendungen registriert.
- Dynamic/Private Ports (49152 - 65535): Vom Betriebssystem für kurzzeitige Client-Verbindungen vergeben.
TCP Header
| 32 Bit | |||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Source Port | Destination Port | ||||||||||||||||||||||||||||||
| Sequence Number (SN) | |||||||||||||||||||||||||||||||
| Acknowledgment Number (ACK SN) | |||||||||||||||||||||||||||||||
| Offset | Reserved | Flags | Window Size | ||||||||||||||||||||||||||||
| Checksum | Urgent Pointer | ||||||||||||||||||||||||||||||
| Options (0-40 Byte) & Padding | |||||||||||||||||||||||||||||||
| Data (Payload) | |||||||||||||||||||||||||||||||
Erläuterung der Header-Felder
- Source / Destination Port (je 2 Byte): Identifiziert Sender- und Empfängeranwendung.
- Sequence Number (4 Byte): Zeiger auf die Position im Datenstrom. Bei SYN-Flag: Initial Sequence Number (ISN). Dient der Sortierung beim Empfänger.
- Acknowledgment Number (4 Byte): Bestätigt den Erhalt aller Bytes bis zu diesem Wert minus eins. Gibt an, welches Byte als Nächstes erwartet wird. (Nur gültig, wenn ACK-Flag gesetzt).
- Data Offset (4 Bit): Länge des TCP-Headers in 32-Bit-Worten (notwendig wegen variabler Options-Länge).
- Window Size (2 Byte): Flusssteuerung (Flow Control). Gibt an, wie viele Bytes der Empfänger aktuell noch puffern kann (Sliding Window).
- Checksum (2 Byte): Fehlererkennung über Header, Daten und IP-Pseudo-Header.
- Urgent Pointer (2 Byte): Zeigt auf das Ende von Vorrangdaten im Datenstrom (nur bei URG-Flag).
Control Flags (6 Bit)
- SYN: Synchronize – Aufbau einer Verbindung und Abgleich der Sequenznummern.
- ACK: Acknowledgment – Bestätigung des Empfangs; Acknowledgment Number ist gültig.
- FIN: Finish – Ordentliches Beenden der Verbindung.
- RST: Reset – Abrupter Abbruch der Verbindung (Fehlerfall).
- PSH: Push – Daten sofort an die Anwendung durchreichen, Pufferung umgehen.
- URG: Urgent – Markiert Daten als besonders dringlich.
Verbindungssteuerung
Drei-Wege-Handschlag (3-Way-Handshake)
- Client sendet SYN (mit zufälliger ISN).
- Server antwortet mit SYN + ACK (bestätigt Client-ISN und sendet eigene ISN).
- Client bestätigt mit ACK.
- Der Zustand der Verbindung wechselt auf ESTABLISHED.
Verbindungsabbau
- Eine Seite sendet FIN.
- Gegenseite bestätigt mit ACK und sendet später eigenes FIN.
- Initiator bestätigt das letzte FIN mit ACK.
Datenübertragung und Sequenznummern
- Sequenznummern (SN) sind in beiden Richtungen unabhängig.
- Ein gesetztes SYN- oder FIN-Flag erhöht die SN logisch um 1.
- Beispiel: Client sendet 20 Bytes Daten. Die SN erhöht sich von n auf n+20.
- Die Acknowledgment Number (ACK SN) der Gegenseite bestätigt dies durch Rücksendung des Wertes n+20.
Zuverlässigkeitsmechanismen
Retransmission (Fehlerkorrektur)
- Timeout (RTO): Wenn innerhalb einer Zeitspanne kein ACK eintrifft, wird das Segment erneut gesendet.
- Fast Retransmit: Erhält der Sender drei identische ACKs (Duplicate ACKs), wird das fehlende Segment sofort erneut gesendet, ohne auf den Timeout zu warten.
Überlaststeuerung (Congestion Control)
- Slow Start: TCP beginnt mit einer kleinen Datenmenge und steigert diese exponentiell.
- Congestion Avoidance: Bei Paketverlust wird die Senderate reduziert, um Netzüberlastung zu vermeiden.
Maximum Segment Size (MSS)
- Wichtigste Option im Header.
- Gibt die maximale Größe der Nutzdaten an (meist 1460 Byte), damit das Paket ohne Fragmentierung in einen Ethernet-Frame (1500 Byte MTU) passt.
Analyse
In Wireshark lassen sich der Handshake, die gleitenden Fenster (Sliding Window) und die Sequenznummern-Verläufe visualisieren.
Weitere Mechanismen
Sliding Window
- Dieser Mechanismus erlaubt es dem Sender, mehrere Datenpakete direkt nacheinander zu verschicken, ohne auf jede einzelne Bestätigung warten zu müssen.
- Die Fenstergröße bestimmt dabei, wie viele Bytes maximal unterwegs sein dürfen, bevor der Datenfluss für eine Quittung gestoppt wird.
- Durch das kontinuierliche Nachrücken des Fensters bei eintreffenden Bestätigungen wird eine hohe Auslastung der verfügbaren Bandbreite erreicht.
Flow Control
- Die Flusssteuerung schützt ausschließlich den Empfänger davor, von einer zu schnellen Datenrate des Senders überflutet zu werden.
- Der Empfänger teilt dem Sender dazu im TCP-Header ständig mit, wie viel Platz momentan noch in seinem eigenen Empfangspuffer frei ist.
- Der Sender passt seine Übertragungsgeschwindigkeit dynamisch an diesen Wert an und stoppt den Versand sofort, wenn das Fenster den Wert Null erreicht.
Congestion Control
- Die Überlaststeuerung dient dem Schutz des gesamten Netzwerks und verhindert einen Datenstau in den dazwischenliegenden Routern.
- TCP erkennt eine Überlastung im Netz meist indirekt durch das Ausbleiben von Bestätigungen oder das Eintreffen doppelter Quittungen.
- Bei erkanntem Stau reduziert der Sender seine Übertragungsrate drastisch, um die Netzlast sofort zu senken und einen Kollaps zu vermeiden.
Slow Start
- Zu Beginn jeder Verbindung startet TCP mit einer sehr kleinen Datenmenge, um die Kapazität der Leitung vorsichtig zu testen.
- Mit jeder erfolgreichen Bestätigung wird die Anzahl der gesendeten Pakete verdoppelt, was zu einem schnellen, exponentiellen Anstieg der Rate führt.
- Dieser Vorgang endet, sobald ein definierter Schwellenwert erreicht wird oder das erste Paket verloren geht.
Retransmission Timeout (RTO)
- Dies ist der grundlegende Schutzmechanismus, der aktiv wird, wenn ein Paket auf dem Weg zum Empfänger komplett verloren geht.
- Der Sender startet für jedes Paket einen Timer und wartet eine berechnete Zeitspanne auf die zugehörige Bestätigung.
- Läuft dieser Timer ab, ohne dass eine Antwort eingetroffen ist, wird das entsprechende Segment automatisch erneut gesendet.
Fast Retransmit
- Dieser Mechanismus beschleunigt die Fehlerkorrektur, indem er nicht auf den Ablauf des Retransmission-Timers wartet.
- Erhält der Sender drei identische Bestätigungen für das gleiche Datenpaket, wertet er dies als sicheres Zeichen für eine Lücke im Datenstrom.
- Das fehlende Segment wird daraufhin sofort erneut übertragen, was die Verzögerung bei Paketverlusten im Vergleich zum Timeout massiv reduziert.
Selective Acknowledgment (SACK)
- Mit dieser Erweiterung kann der Empfänger dem Sender ganz präzise mitteilen, welche spezifischen Datenblöcke bereits angekommen sind.
- Ohne SACK müsste der Sender bei einem Verlust oft alle Daten ab der Lücke erneut übertragen, auch wenn Teile davon eigentlich schon da sind.
- Durch SACK werden nur die tatsächlich fehlenden Segmente nachgefordert, was die Effizienz in instabilen Netzen deutlich steigert.
Window Scaling
- Window Scaling erweitert das ursprüngliche 16-Bit-Fensterfeld im TCP-Header, um wesentlich größere Datenmengen pro Fenster zu ermöglichen.
- In modernen Hochgeschwindigkeitsnetzen ist dies notwendig, da das Standardlimit von 64 KB sonst die Übertragungsrate künstlich begrenzen würde.
- Diese Option wird bereits während des Verbindungsaufbaus (Drei-Wege-Handschlag) zwischen beiden Partnern ausgehandelt.

