Selective Acknowledgment (SACK) ist eine TCP-Header-Option (Typ 5), die dem Daten-Sender mitteilt, welche Segmente bereits korrekt empfangen wurden. Statt nur der kumulativen Bestätigung (ACK) kann der Empfänger gezielt Lücken melden — der Sender wiederholt nur die verlorenen Segmente, nicht den gesamten Fensterinhalt.

Problem ohne SACK

Ohne SACK bestätigt TCP nur die höchste durchgehend empfangene Sequenznummer (kumulativer ACK). Verliert ein Segment in der Mitte eines Fensters, müssen alle nachfolgenden Segmente erneut gesendet werden (Go-Back-N-Verhalten auf TCP-Ebene). Der Sender erkennt den Verlust erst durch DupACKs (drei gleiche kumulative ACKs) und startet Fast Retransmit — das Fenster wird dann ab dem verlorenen Segment wiederholt.

Funktionsweise von SACK

Der SACK-Empfänger trägt in die Option bis zu vier (später erweiterte) (Left-Edge, Right-Edge)-Paare ein, die jeweils einen korrekt empfangenen, aber nicht kumulativ bestätigten Datenbereich beschreiben. Der Sender sieht genau, welche Bereiche fehlen, und wiederholt nur diese. Der Effekt ist besonders bei mehrfachen Verlusten in einem Fenster groß: Bei zwei verlorenen Segmenten ohne SACK müsste der Sender das ganze Fenster wiederholen; mit SACK nur zwei gezielte Wiederholungen.

Voraussetzungen

  • SACK-Per-Option (RFC 2018, Oktober 1996, Mathis/Mahdavi/Floyd/Romanow): TCP-Option in SYN/SYN-ACK ausgehandelt — beide Endpunkte müssen SACK-Permitted (Typ 4) ankündigen.
  • Der SACK-Header kann bei vielen Lückenoptionen den Nutzdatenplatz reduzieren — in der Praxis ist SACK bei modernen TCP-Stacks (Linux, Windows, macOS) standardmäßig aktiviert.
  • SACK ersetzt nicht die Staukontrolle (Congestion Control), sondern macht die Wiederholung gezielter — das TCP-Segment wird nur einmal wiederholt.

Verwandte Grundlagen

TCP, TCP-Segment, MSS, Window Scale, TCP-Timestamps, Selective Repeat, Congestion Window.