Test: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 1: Zeile 1:
=Wichtige Kenndaten sind die Ports=
+
= Transmission Control Protocol (TCP) =
*TCP muss die empfangenen Daten an die korrekte Applikation weiterleiten.
 
*Zur Adressierung der Anwendungen werden deshalb sogenannte Portnummern verwendet.
 
*Portnummern sind 16 Bit groß
 
*Auch UDP verwendet Portnummern zur Adressierung.
 
*Die Transportprotokolle TCP und UDP haben jeweils eigene Adressräume.
 
*Der Gültigkeitsbereich einer Portnummer ist auf einen Host beschränkt.
 
*IP-Adresse und Portnummer spezifiziert einen Kommunikationsendpunkt, einen sogenannten Socket.
 
*Die Socketnummern von Quelle und Ziel identifizieren die Verbindung (socket1, socket2).
 
*Eine Verbindung ist durch die Angabe dieses Paares eindeutig identifiziert.
 
*Well-known Ports gehen von 0 bis 1023. Nur root/Adminstrator darf diese "öffnen".
 
*Registrierte Ports von 1024 bis 49151.
 
*Dynamische oder auch private Ports 49152 bis 65535.
 
  
=TCP Header=
+
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.
{|class="wikitable" style="text-align:center;
+
 
 +
== 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 ==
 +
 
 +
{|class="wikitable" style="text-align:center;"
 
!colspan="32"|32 Bit
 
!colspan="32"|32 Bit
 
|-
 
|-
|colspan="16" style="width:50%;" |Source Port
+
|colspan="16"|Source Port || colspan="16"|Destination Port
|colspan="16" style="width:50%;" |Destination Port
 
 
|-
 
|-
|colspan="32"|Sequence Number
+
|colspan="32"|Sequence Number (SN)
 
|-
 
|-
|colspan="32"|Acknowledge Number
+
|colspan="32"|Acknowledgment Number (ACK SN)
 
|-
 
|-
|colspan="4"|Offset
+
|colspan="4"|Offset || colspan="6"|Reserved || colspan="6"|Flags || colspan="16"|Window Size
|colspan="6"|Reserved
 
|colspan="6"|Flags
 
|colspan="16"|Window
 
 
|-
 
|-
|colspan="16"|Checksum
+
|colspan="16"|Checksum || colspan="16"|Urgent Pointer
|colspan="16"|Urgent Pointer
 
 
|-
 
|-
|colspan="10"|Options
+
|colspan="32"|Options (0-40 Byte) & Padding
|colspan="22"|Paddings
 
 
|-
 
|-
|colspan="32" style="background-color:yellow"|Data
+
|colspan="32" style="background-color:yellow"|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'''.
 +
  
  
== Aufbau des TCP-Headers ==
+
=== Verbindungsabbau ===
=== Allgemeines ===
+
# Eine Seite sendet '''FIN'''.
Das TCP-Segment besteht immer aus zwei Teilen, dem Header und der Nutzlast "payload". 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 Kommunikation erforderliche Daten sowie die Dateiformat-beschreibende Information.  Da das Options-Feld in der Regel nicht genutzt wird, hat ein typischer Header eine Größe von 20 Byte.
+
# Gegenseite bestätigt mit '''ACK''' und sendet später eigenes '''FIN'''.
 +
# Initiator bestätigt das letzte '''FIN''' mit '''ACK'''.
  
=== Erläuterung ===
+
=== Datenübertragung und Sequenznummern ===
;''Source Port'' (Quellport) (2 Byte)
+
* Sequenznummern (SN) sind in beiden Richtungen unabhängig.
: Gibt die ''Portnummer'' auf der Senderseite an.
+
* Ein gesetztes SYN- oder FIN-Flag erhöht die SN logisch um 1.
; ''Destination Port'' (Zielport) (2 Byte)
+
* Beispiel: Client sendet 20 Bytes Daten. Die SN erhöht sich von n auf n+20.
: Gibt die ''Portnummer'' auf der Empfängerseite an.
+
* Die Acknowledgment Number (ACK SN) der Gegenseite bestätigt dies durch Rücksendung des Wertes n+20.
; ''Sequence Number'' (4 Byte)
 
: ''Sequenznummer'' des ersten Daten-Oktett  dieses TCP-Pakets oder die ''Initialisierungs-Sequenznummer'' falls das SYN-Flag gesetzt ist. Nach der Datenübertragung dient sie zur Sortierung der TCP-Segmente, da diese in unterschiedlicher Reihenfolge beim Empfänger ankommen können.
 
; ''Acknowledgement Number'' (Quittierungsnummer) (4 Byte)
 
: Sie gibt die ''Sequenznummer'' an, die der Empfänger dieses TCP-Segmentes als Nächstes erwartet. ''Sie ist nur gültig, falls das ACK-Flag gesetzt ist.''
 
; ''Data Offset'' (4 Bit)
 
: Das Feld Offset (oder auch Header Length) gibt die Länge des TCP- Headers in 32-Bit Worten an. Dies entspricht dem Anfang der Daten im TCP-Segment. Das Feld ist notwendig, da der Header durch das Optionsfeld eine variable Länge hat. 
 
; Reserved (6 Bit)
 
: Das ''Reserved''-Feld wird nicht verwendet und muss null sein. RFC 3168 definiert einen Mechanismus zur expliziten Benachrichtigung über Stausituationen im Netz, für den zwei weitere Flags (CWR und ECE) eingeführt werden. Das ''Reserved''-Feld wird entsprechend verkürzt.
 
; Control-Flag (6 Bit)
 
: Sind zweiwertige Variablen mit den möglichen Zuständen ''gesetzt'' und ''nicht gesetzt'', die zur Kennzeichnung bestimmter für die Kommunikation und Weiterverarbeitung der Daten wichtiger Zustände benötigt werden. Im Folgenden werden die Flags des TCP-Headers und die von ihrem Zustand abhängigen, auszuführenden Aktionen beschrieben.
 
;''URG''
 
:Wird das Flag URG auf 1 gesetzt, so bedeutet dies, daß der Urgent Pointer (Dringendzeiger) verwendet wird.
 
;''ACK''
 
:Das ACK-Bit wird gesetzt, um anzugeben, daß die Bestätigungsnummer im Feld Acknowledgement Number gültig ist. Ist das Bit auf 0 gesetzt, enthält das TCP-Segment keine Bestätigung, das Feld Acknowledgement Number wird ignoriert.
 
;''PSH''
 
:Ist das PSH-Bit gesetzt, so werden die Daten in dem entsprechenden Segment sofort bei Ankunft der adressierten Anwendung bereitgestellt ohne sie zu puffern.
 
;''RST''
 
:Das RST-Bit dient dazu eine Verbindung zurückzusetzen, falls ein Fehler bei Übertragung aufgetreten ist. Dies kann sowohl der Fall sein, wenn ein ungültiges Segment übertragen wurde, ein Host abgestürzt ist oder der Versuch eines Verbindungsaufbaus abgewiesen werden soll.
 
;''SYN''
 
:Das SYN-Flag (Synchronize Sequenze Numbers) wird verwendet, um Verbindungen aufzubauen. Zusammen mit der Acknowledgement Number und dem ACK-Bit wird die Verbindung im Form eines Dreiwege-Handshake aufgebaut (siehe oben).
 
;''FIN''
 
:Das FIN-Bit dient zum Beenden einer Verbindung. Ist das Bit gesetzt, gibt dies an, daß der Sender keine weiteren Daten zu Übertragen hat. Das Segment mit gesetztem FIN-Bit muß quittiert werden.
 
  
;''Window''
+
== Zuverlässigkeitsmechanismen ==
:Das Feld Fenstergröße enthält die Anzahl Bytes, die der Empfänger ab dem bereits bestätigten Byte empfangen kann. Mit der Angabe der Fenstergröße erfolgt in TCP die Flußsteuerung. Das TCP-Protokoll arbeitet nach dem Prinzip eines Schiebefensters mit variabler Größe (Sliding Window). Jede Seite einer Verbindung darf die Anzahl Bytes senden, die im Feld für die Fenstergröße angegeben ist, ohne auf eine Quittung von der Empfängerseite zu warten. Währen des Sendens können gleichzeitug Quittungen für die von der anderen Seite empfangenen Daten eintreffen (diese Quittungen können wiederum neue Fenstergrößen einstellen).
 
:Eine Fenstergröße von 0 besagt, daß die Bytes bis einschließlich der Acknowledgement Number minus Eins empfangen wurden, der Empfänger momentan aber keine weiteren Daten empfangen kann. Die Erlaubnis zum weiteren Senden von Daten erfolgt durch das versenden eines Segments mit gleicher Bestätigungsnummer und einer Fenstergröße ungleich Null.
 
; [[Checksum TCP]] (2 Byte)
 
: Die ''Prüfsumme'' dient zur Erkennung von Übertragungsfehlern und wird über den TCP-Header, die Daten und einen Pseudo-Header berechnet. Dieser Header besteht aus der Ziel-IP, der Quell-IP, der TCP-Protokollkennung (0x0006) und der Länge des TCP-Headers inkl. Nutzdaten (in Bytes).
 
; ''Urgent Pointer'' (2 Byte)
 
: Zusammen mit der Sequenz-Nummer gibt dieser Wert die Position des ersten Bytes ''nach'' den Urgent-Daten im Datenstrom an. Die Urgent-Daten beginnen sofort nach dem Header. Der Wert ist nur gültig, wenn das URG-Flag gesetzt ist.
 
; Options (0–40 Byte)
 
: Das Options-Feld ist unterschiedlich groß und enthält Zusatzinformationen. Die Optionen müssen ein Vielfaches von 32 Bit lang sein. Sind sie das nicht, muss mit Nullbits aufgefüllt werden ({{lang|en|''Padding''}}). Dieses Feld ermöglicht, Verbindungsdaten auszuhandeln, die nicht im TCP-Header enthalten sind, wie zum Beispiel die Maximalgröße des Nutzdatenfeldes.
 
  
=3 Way Handshake=
+
=== Retransmission (Fehlerkorrektur) ===
*Bei 3 Way Handshake baut eine Seite eine Verbindung auf.
+
* '''Timeout (RTO):''' Wenn innerhalb einer Zeitspanne kein ACK eintrifft, wird das Segment erneut gesendet.
*Dies geschieht durch ein gesetztes SYN Flag
+
* '''Fast Retransmit:''' Erhält der Sender drei identische ACKs (Duplicate ACKs), wird das fehlende Segment sofort erneut gesendet, ohne auf den Timeout zu warten.
*Die Gegenseite bestätigt dies mit einem ACK Flag und schickt ebenfalls ein SYN Flag
 
*Der Initiator bestätigt dies mit einem ACK Flag
 
*Ab diesem Zeitpunkt gilt die Verbindung ESTABLISHED
 
{{#drawio:tcp1}}
 
  
=Verbindungsabbau=
+
=== Überlaststeuerung (Congestion Control) ===
*Beim Vebindungsabbau schickt eine Seite ein FIN FLAG während einer Verbindung.
+
* '''Slow Start:''' TCP beginnt mit einer kleinen Datenmenge und steigert diese exponentiell.
*Die Gegenseite bestätigt dies mit einem ACK Flag und schickt ebenfalls ein FIN Flag
+
* '''Congestion Avoidance:''' Bei Paketverlust wird die Senderate reduziert, um Netzüberlastung zu vermeiden.
*Der Initiator bestätigt dies mit einem ACK Flag
 
*Ab diesem Zeitpunkt ist die Verbindung beendet.
 
{{#drawio:tcp2}}
 
  
=Eine Vollständige TCP-Verbindung=
+
=== Maximum Segment Size (MSS) ===
*Bei einer Verbindung ist die Sequenznummer ein Zeiger auf die aktuell übertragenen Daten.
+
* Wichtigste Option im Header.
*Die Zeiger sind in beiden Richtungen unabhängig voneinander.
+
* Gibt die maximale Größe der Nutzdaten an (meist 1460 Byte), damit das Paket ohne Fragmentierung in einen Ethernet-Frame (1500 Byte MTU) passt.
*Die Lage der Daten vom Client zum Server hat eine andere Posititon wie Server zum Client.
 
*Das heist wenn ich 23 Daten übertragen habe zeigt dieser Zeiger auf die Sequenznummer 23.
 
*Der Zeiger steht am Anfang auf 0
 
*Ein gesetztes SYN-Flag erhöht diesen Zeiger ebenfalls um 1
 
*Das bedeutet das dieser Zeiger am Anfang der Datenübertragung in beiden Richtungen auf 1 steht.
 
*Am Ende der Verbindung wird dieser Zeiger nochmal durch ein gesetztes FIN-Flag um 1 erhöht dies ist aber dann unrelevant, da die Verbindung im Anschluss endet.
 
*In unserem Beispiel wollen wir 20 Bytes vom Client zum Server übertragen und 79 vom Server zum Client.
 
*Der Zeiger von Server zu Client muss somit am Ende auf 21 stehen.
 
*Und der Zeiger von Client zu Server muss somit am Ende auf 80 stehen.
 
  
{{#drawio:tcp1.png}}
+
== Analyse ==
 +
In Wireshark lassen sich der Handshake, die gleitenden Fenster (Sliding Window) und die Sequenznummern-Verläufe visualisieren.
  
 
[[Datei:tcp12.png|900px]]
 
[[Datei:tcp12.png|900px]]
 +
[[Datei:wireshark.png]]
  
Im Gegensatz zum UDP Protokoll, bei dem nur ein Paket gesendet wird, gibt es beim TCP Protokoll mehrere Pakete, um die Verbindung herzustellen.
+
===Weitere Mechanismen===
==Abbildung mit Wireshark==
+
==== Sliding Window ====
[[Datei:wireshark.png]]
+
* 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.

Aktuelle Version vom 29. März 2026, 10:59 Uhr

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)

  1. Client sendet SYN (mit zufälliger ISN).
  2. Server antwortet mit SYN + ACK (bestätigt Client-ISN und sendet eigene ISN).
  3. Client bestätigt mit ACK.
  • Der Zustand der Verbindung wechselt auf ESTABLISHED.


Verbindungsabbau

  1. Eine Seite sendet FIN.
  2. Gegenseite bestätigt mit ACK und sendet später eigenes FIN.
  3. 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.

Tcp12.png Wireshark.png

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.