Zuverlässige Übertragung

In dieser interaktiven Lerneinheit verstehst du die Mechanismen der zuverlässigen Datenübertragung in TCP, insbesondere die Funktionsweise von Sequenz- und Bestätigungsnummern. Du lernst, wie TCP sicherstellt, dass Datenpakete vollständig und in der richtigen Reihenfolge beim Empfänger ankommen - ein grundlegendes Konzept für die Fehlersuche und Optimierung von Netzwerkverbindungen. Diese Kenntnisse wendest du bei der Analyse und Behebung von Übertragungsproblemen in der Praxis an.

Einführung

Stell dir vor, du schickst eine wichtige Datei über das Internet – ein Vertragsdokument, eine Bewerbungsmappe oder ein Update für ein Live-System. Du klickst auf „Senden” – aber wie kannst du sicher sein, dass wirklich alle Daten vollständig und korrekt ankommen?

Das Internet ist kein perfekter Übertragungsweg: Pakete gehen verloren, kommen doppelt an oder treffen in falscher Reihenfolge ein. Genau hier setzt TCP an – mit cleveren Mechanismen, die jede Lücke erkennen, Verluste ausgleichen und sicherstellen, dass keine Information verloren geht.

Wie funktioniert das? Die Antwort liegt in Sequenznummern, Bestätigungen und Prüfsummen – die Grundlagen für eine stabile, zuverlässige Verbindung.

Lernziele

Nach dieser Lerneinheit kannst du:

  • erklären, wie Sequenznummern und ACKs in TCP die Reihenfolge und Vollständigkeit der Datenübertragung sicherstellen.
  • den Ablauf einer kumulativen Bestätigung nachvollziehen und deren Vorteil gegenüber Einzel-ACKs begründen.
  • beschreiben, wie TCP auf Paketverluste reagiert, inklusive Timeout, Fast Retransmit und SACK.
  • die Bedeutung der Prüfsumme für die Fehlererkennung in TCP erklären und deren Berechnung grob nachvollziehen.

Überleitung

Wir haben bereits gelernt:
In TCP ist die zuverlässige Übertragung von Datenpaketen essenziell. Dafür setzen wir Sequenznummern (Sequence Numbers) und Bestätigungsnummern (Acknowledgement Numbers) ein, die in jedem TCP-Segment enthalten sind. Diese Nummern ermöglichen es, Pakete in der richtigen Reihenfolge zusammenzusetzen und sicherzustellen, dass keine Daten verloren gehen oder doppelt eintreffen.

Sequenznummern (Sequence Numbers)

  • Jedes Byte in der Datenübertragung erhält eine fortlaufende Nummer, beginnend mit der Initial Sequence Number (ISN), die zufällig gewählt wird, um Sicherheitsrisiken zu reduzieren.
  • Die im TCP-Header angegebene Sequenznummer bezeichnet stets das erste Byte des aktuellen Segments in Bezug auf die Gesamtdatenübertragung.

Bestätigungsnummern (Acknowledgement Numbers)

  • Nach Erhalt eines fehlerfreien Segments sendet der Empfänger ein ACK zurück.
  • Die Bestätigungsnummer im ACK gibt an, welches Byte als nächstes erwartet wird – sie ist also immer um eins höher als das letzte korrekt empfangene Byte.
  • Fehlererkennung erfolgt über die Prüfsumme (Checksum): Eine Prüfziffer, mit der fehlerhafte Übertragungen erkannt werden.

Ablauf im Überblick

Erklärung der Variablen:

  • N: Steht für die Sequenznummer des ersten Bytes im aktuellen Datenfenster, das gesendet wird.
  • L: Bezeichnet die Größe des Sendefensters (Window Size), also die Menge der Bytes, die auf einmal verschickt werden.
  • N + L - 1: Ist daher die Sequenznummer des letzten Bytes in diesem Fenster
  1. Senden eines Segments: Sender verschickt ein Segment mit Seq = N, das Daten von Byte N bis N + L−1 enthält.
  2. Empfang und Prüfung: Empfänger kontrolliert die Prüfsumme und ordnet das Segment anhand der Sequenznummer ein.
  3. Bestätigung: Nach erfolgreicher Prüfung sendet der Empfänger ein ACK mit Ack = N + L zurück.
  4. Wiederholung: Geht keine Bestätigung innerhalb einer Frist ein, wiederholt der Sender das Segment.

Beispiel

  1. Sender wählt ISN = 1000 und schickt ein Segment mit 500 Datenbytes.
  2. Das Segment trägt im Header „Seq = 1000“.
  3. Empfänger erhält es, prüft die Prüfsumme (Checksum) und ordnet es korrekt ein.
  4. Empfänger sendet daraufhin ein ACK mit „Ack = 1500“, da nun das nächste Byte mit Nummer 1500 erwartet wird.

Positive und kumulative Bestätigungen

In TCP-Netzwerken sorgen Bestätigungsnummern (Acknowledgement Numbers) dafür, dass der Sender weiß, welche Datenbytes beim Empfänger angekommen sind, und gegebenenfalls erneut geschickt werden müssen. Man unterscheidet dabei positive (einzelne) und kumulative Bestätigungen.

Positive Bestätigungen (ACK)

  • Ein ACK ist ein einzelnes Bestätigungspaket, das der Empfänger immer dann zurückschickt, wenn er ein oder mehrere Datenbytes fehlerfrei erhalten hat.
  • Die Bestätigungsnummer im ACK-Header entspricht der Sequenznummer des nächsten erwarteten Bytes.
  • Beispiel: Empfänger hat Bytes 1–500 korrekt erhalten → sendet ACK = 501.

Kumulative Bestätigungen

  • Ein kumulatives ACK bestätigt zugleich alle vorhergehenden Bytes bis zu einer bestimmten Sequenznummer.
  • Dadurch spart man Overhead, weil nicht für jedes Byte oder Segment ein eigenes ACK nötig ist.

Beispiel:

Sender überträgt Bytes 1–1500 (in drei Segmenten zu je 500 Bytes). Empfänger sendet nach Erhalt des dritten Segments nur ein kumulatives ACK = 1501 und bestätigt damit Bytes 1–1500.

Ablauf und Verlussterkennung

  1. Senden: Sender verschickt aktuell die Segmente mit Seq = N bis N + L − 1.
  2. Empfang & Prüfung: Empfänger prüft jedes Segment über die Prüfsumme (Checksum) und ordnet es anhand der Seq-Nummer ein.
  3. ACK senden: Nach erfolgreichem Einbau sendet er ein kumulatives ACK mit ACK = N + L.
  4. Timeout/Retransmission: Bleibt eine Bestätigung aus (Timeout), wiederholt der Sender das Segment.
  5. Lückenerkennung: Kommt ein späteres Segment (z. B. Seq = 2001) vor einem fehlenden (Seq = 1501) an, bleibt das erwartete ACK bei 1501 – der Sender erkennt so Paketverlust und sendet nur Byte 1501–2000 erneut.

Praktisches Beispiel

  1. Sender verschickt Pakete 1 bis 5 (jeweils 100 Bytes).
  2. Empfänger erhält Pakete 1, 2, 4 und 5 – Paket 3 geht verloren.
  3. Empfänger sendet kumulatives ACK = 301, da Byte 3 fehlt und 301 das nächste erwartete Byte ist.
  4. Sender erkennt Paketverlust bei Seq = 301 und sendet Paket 3 erneut.
  5. Empfänger erhält Paket 3, fügt es korrekt ein und sendet anschließend ACK = 501, um Bytes 1–500 bestätigt zu signalisieren.
⏳ Lädt Dataview-Inhalt...

Umgang mit verlorenen und duplizierten Segmenten

TCP stellt die zuverlässige Übertragung von Daten sicher, indem es den Verlust und die Duplikation von Segmenten erkennt und verhindert. Ohne diese Mechanismen wäre eine konsistente Kommunikation über das Internet nicht möglich.

Verlust von Segmenten

Geht ein Segment verloren, erhält der Sender keine Bestätigung (ACK) innerhalb eines bestimmten Zeitraums – dem sogenannten Retransmission Timeout (RTO). Der RTO basiert auf der Round-Trip-Time (RTT), also der Zeit, die eine Nachricht benötigt, um vom Sender zum Empfänger und zurück zu gelangen. Sobald der RTO abgelaufen ist, ohne dass ein ACK eintrifft, wird das entsprechende Segment erneut gesendet.

Duplikation von Segmenten

Duplikate entstehen meist durch fehlerhafte Wiederholungen beim Sender oder durch Wiederherstellungsmaßnahmen. TCP verwendet Sequenznummern, um die Reihenfolge von Segmenten zu erkennen. Wenn der Empfänger ein Segment mit einer bereits verarbeiteten Sequenznummer erhält, wird es als Duplikat erkannt und verworfen.

Fast Retransmit

Um verlorene Segmente schneller zu erkennen – ohne auf den Ablauf des RTO zu warten – verwendet TCP den Mechanismus Fast Retransmit. Dieser wird aktiviert, wenn der Sender drei oder mehr duplizierte ACKs für dasselbe Segment erhält. Das deutet darauf hin, dass nachfolgende Segmente angekommen sind, ein früheres jedoch fehlt. Das betroffene Segment wird sofort erneut gesendet.

Selektive Bestätigungen (Selective Acknowledgments, SACK)

SACK ist eine Erweiterung von TCP, die es dem Empfänger erlaubt, den Empfang nicht aufeinanderfolgender Segmente mitzuteilen. Dadurch weiß der Sender genau, welche Datenblöcke fehlen, und kann gezielt nur diese erneut senden – das spart Zeit und Bandbreite.

Beispielhafter Ablauf

Angenommen, ein Sender überträgt Segmente mit den Sequenznummern 1 bis 5:

  1. Segmente 1, 2, 4 und 5 kommen beim Empfänger an; Segment 3 geht verloren.
  2. Der Empfänger bestätigt Segment 2 (ACK 3), da Segment 3 erwartet wird.
  3. Für Segment 4 und 5 sendet der Empfänger erneut ACK 3 (duplizierte ACKs).
  4. Der Sender erhält drei ACKs mit derselben Nummer (ACK 3) und aktiviert Fast Retransmit.
  5. Segment 3 wird erneut gesendet, der Empfänger verarbeitet es korrekt.

Sicherstellung der Datenintegrität durch Prüfsumme

Bei der Übertragung von Datenpaketen mittels TCP ist einer der wichtigsten Aspekte die Integrität der Daten. Um sicherzustellen, dass die übertragenen Daten nicht durch Übertragungsfehler verfälscht wurden, verwendet TCP die Prüfsumme.

Die Prüfsumme ist ein kurzer, aus den Daten generierter Wert, der am Sender berechnet und zusammen mit den Daten verschickt wird. Der Empfänger berechnet ebenfalls die Prüfsumme der empfangenen Daten und vergleicht diese mit der übertragenen Prüfsumme. Stimmen die beiden Werte überein, ist es sehr wahrscheinlich, dass die Daten korrekt übertragen wurden. Stimmen sie nicht überein, wird das Paket als fehlerhaft angesehen und verworfen.

Wie wird die Prüfsumme berechnet?

TCP verwendet für die Berechnung der Prüfsumme das Verfahren der komplementären Summierung (Einerkomplement-Summe). Dabei handelt es sich um eine einfache, aber effektive Methode zur Überprüfung der Datenintegrität. Die Berechnung umfasst nicht nur die Nutzdaten, sondern auch den TCP-Header und einen sogenannten Pseudo-Header.

Was ist der Pseudo-Header?

Der Pseudo-Header ist kein Teil des eigentlichen TCP-Segments, wird aber zur Prüfsummenberechnung einbezogen, um auch die Informationen aus der IP-Adressierung abzusichern. Er enthält:

  • Quell-IP-Adresse
  • Ziel-IP-Adresse
  • Reserviert (immer 0)
  • Protokoll (immer 6 für TCP)
  • TCP-Segmentlänge

Schritte zur Berechnung der Prüfsumme:

  1. Zusammenstellen des zu prüfenden Blocks: Dieser Block besteht aus dem Pseudo-Header, dem TCP-Header (mit Prüfsumme = 0) und den Nutzdaten.

  2. Berechnung der Einerkomplement-Summe:

    • Der gesamte Block wird in 16-Bit-Worte aufgeteilt.
    • Diese Worte werden addiert. Falls dabei ein Übertrag (Carry) über 16 Bit entsteht, wird dieser am Ende wieder zur Summe addiert (End-Around-Carry).
  3. Bildung des Einerkomplements: Alle Bits der 16-Bit-Summe werden invertiert (0 → 1, 1 → 0). Das Ergebnis ist die Prüfsumme.

Beispiel

Gegeben sind die folgenden 16-Bit-Worte (z. B. aus TCP-Header + Pseudo-Header + Nutzdaten):

  • 0101 1010 1111 0001 (0x5AF1)
  • 0011 1101 0000 1110 (0x3D0E)

Berechnung:

  1. Addition:

    • 0x5AF1 + 0x3D0E = 0x97FF
    • Kein Übertrag über 16 Bit, also kein End-Around-Carry nötig.
  2. Einerkomplement:

    • Invertierung von 0x97FF = 0x6800 = 0110 1000 0000 0000

Das Ergebnis 0110 1000 0000 0000 ist die berechnete Prüfsumme, die im TCP-Header eingetragen und mit den Daten übertragen wird.

⏳ Lädt Dataview-Inhalt...

Zusammenfassung und Ausblick

Zusammenfassung:

In dieser Lerneinheit hast du zentrale Mechanismen kennengelernt, mit denen das TCP-Protokoll eine zuverlässige Datenübertragung sicherstellt:

1. Sequenz- und Bestätigungsnummern

  • Jedes Byte einer TCP-Verbindung bekommt eine eindeutige Sequenznummer, beginnend mit einer zufällig gewählten Initial Sequence Number (ISN).
  • Der Empfänger bestätigt den Empfang durch ein ACK, das die nächste erwartete Byte-Nummer angibt.
  • Dank kumulativer ACKs genügt ein einziges ACK, um mehrere Segmente zu bestätigen – das spart Overhead.

2. Fehlererkennung und Verlustbehandlung

  • Jedes Segment enthält eine Prüfsumme (Checksum), mit der der Empfänger Übertragungsfehler erkennt.
  • Bleibt ein ACK aus, sendet der Absender das Segment nach einem Retransmission Timeout (RTO) erneut.
  • Mit Fast Retransmit erkennt der Sender verlorene Segmente schon nach drei identischen ACKs und überträgt sie sofort erneut.

3. Selektive Bestätigungen (SACK)

  • SACK erlaubt dem Empfänger, explizit mitzuteilen, welche Segmente angekommen sind.
  • Dadurch kann der Sender gezielt nur die fehlenden Segmente erneut übertragen – das verbessert die Effizienz deutlich.

4. Prüfsummenmechanismus im Detail

  • Die Prüfsumme wird über einen zusammengesetzten Block aus TCP-Header, Nutzdaten und einem Pseudo-Header berechnet.
  • Die Berechnung erfolgt über die sogenannte Einerkomplement-Summe, inklusive End-Around-Carry und Invertierung.
  • Stimmen Sender- und Empfänger-Prüfsumme nicht überein, wird das Segment verworfen.

Ausblick:

In der nächsten Einheit schauen wir uns an, wie TCP nicht nur für zuverlässige Übertragung sorgt, sondern auch Überlastungen vermeidet. Du lernst, wie Flusskontrolle (Flow Control) und das Sliding-Window-Verfahren sicherstellen, dass ein schneller Sender einen langsameren Empfänger nicht überfordert.