David Schirrmeister 813f7d63b0 update
2025-06-11 12:52:54 +02:00

6.9 KiB

Ende-zu-Ende Protokolle: UDP und TCP

TCP

Zuverlässiger Byte-Strom mit integrierter Flusskontrolle

Ausgangslage für eine (virtuelle) TCP-Verbindung

image_866.png

  • MSS (Maximum Segment Size)
    • maximale Größe eines TCP-Segments (NUR Daten, ohne Header)
    • wird bei Verbindungsaufbau ausgehandelt
    • abhängig von der MTU (Maximum Transmission Unit) des darunterliegenden Netzwerks
  • Retransmission Timer (Timeout = RTO)
    • Nach Ablauf des Timers werden unbestätigte Datenpakete erneut gesendet

TCP Sequenznummern

  • Sequenznummer eines TCP-Segments
    • Bytestromnummer des ersten Bytes im Segment
    • wird bei Verbindungsaufbau ausgehandelt

TCP Bestätigungsnummern

  • Bestätigungsnummer eines TCP-Segments
    • Bytestromnummer des nächsten erwarteten Bytes
    • Als Quittungsnummer wird gesetzt:
      • ACK-Nummer (von Host B) = fehlerfrei empfangene Squenznummer + Größe der Nutzdaten in Byte
  • i.d.R poitiv
    • stellen Summenquittungen dar
      • d.h. alle Bytes bis zur ACK-Nummer wurden fehlerfrei empfangen
  • werden zusammen mit den restlichen Daten die von B nach A gesendet werden, in einem TCP-Segment übertragen
    • "Huckepack"

TCP Telnet Fallstudie

image_867.png

Neuübertragung aufgrund einer verlorenen ACK

image_868.png

keine Neuübertragung, weil Bestätigung vor Timeout ankommt

image_869.png

Keine Neuübertragung, weil kumulative Bestätigung ankommt (Summenquittung)

image_870.png

TCP Verbindungsaufbau

TCP-Verbindung ist Full-Duplex

Beide Verbindungen (Hin und Rück) müssen separat aufgebaut werden

SYN-Flag = 1 dient zum Aufbau (Synchronisation)

ACK-Flag = 1 dient zur Bestätigung (Quittung)

Sequenz- und Quittungsnummern beziehen sich auf Bytes

  • TCP-Verbindung wird mit einem 3-Wege-Handshake aufgebaut
    • Verbindungsanfrage (SYN) von A an B
      • SYN = 1
      • SEQ = x (Startsequenznummer)
    • Verbindungsbestätigung (SYN, ACK) von B an A
      • SYN = 1
      • ACK = x + 1 (Bestätigungsnummer)
      • SEQ = y (Startsequenznummer von B)
    • Bestätigung (ACK) von A an B
      • SYN = 0
      • ACK = y + 1 (Bestätigungsnummer)
      • SEQ = x + 1 (Fortsetzung der Sequenznummer von A)
  • image_871.png

Verbindungsaufbau Übung

image_872.png

TCP Verbindungsabbau

TCP-Verbindung ist Full-Duplex → Jede Richtung muss separat abgebaut werden

Falls nur eine Verbindung abgebaut wird (und die andere noch aktiv ist), dann wird die Verbindung in den Zustand "Half-Close" versetzt.
bspw. Wenn der Client nur noch empfangen möchte, aber nicht mehr senden.

  • Schematisch
    • Schließung TCP-Verbindung mit anschließender Wartezeit von 30 Sekunden
    • image_873.png

Verbindungsabbau Übung

image_874.png

TCP Verbindungsmanagement

image_875.png

  • TCP-Verbindungen werden in einem Verbindungsmanagement verwaltet
  • Zustände:
    • CLOSED: Verbindung ist geschlossen
    • LISTEN: Verbindung wartet auf Verbindungsanfrage
    • SYN-SENT: Verbindungsanfrage wurde gesendet, aber noch keine Antwort erhalten
    • SYN-RECEIVED: Verbindungsanfrage wurde empfangen, aber noch keine Bestätigung gesendet
    • ESTABLISHED: Verbindung ist aufgebaut und kann Daten übertragen
    • FIN-WAIT-1: Die Anwendung möchte Übertragung beenden
    • FIN-WAIT-2: Andere Seite ist einverstanden die Verbindung zu beenden
    • TIME-WAIT: Verbindung ist geschlossen, aber wartet auf mögliche ausstehende Pakete
    • CLOSING: Beide Seiten haben gleichzeitig versucht, die Verbindung zu schließen
    • CLOSE-WAIT: Gegenseite hat Verbindungsfreigabe eingeleitet
    • LAST-ACK: Warten, bis keine TCP-Segmente mehr kommen

TCP Client Lifecycle

image_876.png

TCP Server Lifecycle

image_877.png

TCP Zuverlässigkeit sicherstellen

  • Quittungen
    • positive ACKs
    • kumulative Summenquittungen
  • Zeitüberwachung
    • Retransmission Timer
    • Timeout (RTO)
  • Sequenznummern

TCP Flusskontrolle

Senden

  • TCP-Sender sendet Daten, solange der Sendepuffer nicht voll ist
    • enthält die gesendeten, aber noch nicht bestätigten Daten
  • image_878.png
  • Sendefenster wird dazu benutzt, um die Anzahl von Bytes anzugeben, die der Empfänger bereit ist anzunehmen
    • bildet absolute obere Grenze, die vom Sender nicht überschritten werden darf

Empfangen

  • TCP-Empfänger sendet ACKs, solange der Empfangspuffer nicht voll ist

  • image_879.png

  • Empfangsfenster ist dynamisch

    • wird vom Empfänger in jedem ACK aktualisiert
    • gibt an, wie viele Bytes der Empfänger noch aufnehmen kann

Flusskontrolle Beispiel

image_880.png

Datenfluss: Fehlerfreie Übertragung

image_883.png

Datenfluss: Fehlerhafte Übertragung

image_884.png

TCP Pipelining, Sliding Window

Pipelining

  • TCP-Sender kann mehrere Segmente senden, ohne auf die Bestätigung des Empfängers zu warten
  • Erlaubt eine höhere Auslastung der Verbindung
  • Sender sendet mehrere Segmente in einem Rutsch
    • z.B. 3 Segmente mit jeweils 1000 Bytes
  • Konsequenzen:
    • Sender und Empfänger benötigen einen Puffer für mehrere Segmente
      • Minimum: Sender muss alle gesendeten, aber noch nicht bestätigten Segmente puffern
    • Bereich der Sequenz- und Bestätigungsnummern wird größer

Sliding Window

image_881.png

  • Sliding Window ist eine Erweiterung des Pipelining
  • Gewährleistet:
    • Zuverlässige Übertragung in einem Bytestrom
    • Übertragung der Daten in richtiger Reihenfolge
    • Flusskontrolle zwischen Sender und Empfänger
  • Integrierte Flusskontrolle
    • keine feste Sliding Window Größe
      • wird Sender vom Empfänger mitgeteilt ("Advertised Window")
        • auf Grundlage des Speicherplatzes, der der Verbindung zugewiesen ist

Sliding Window Beispiel

image_882.png

  • Senderseite (a)
    • LastByteAcked ≤ LastByteSent
    • LastByteSent ≤ LastByteWritten
    • Bytes zwischen LastByteAcked und LastByteSent puffern
  • Empfängerseite (b)
    • LastByteRead ≤ LastByteExpected
    • LastByteExpected ≤ LastByteReceived + 1
    • Bytes zwischen LastByteRead und LastByteReceived puffern

TCP Fehlerbehandlung

  • Erfolgt durch Go-Back-N
    • Sender sendet Datenpakete, bis er eine Bestätigung erhält
    • Bei Verlust eines Pakets wird es erneut gesendet
  • Arbeitet mit positiven ACKs
    • Empfänger sendet ACKs für empfangene Pakete (ggf. kumulative ACKs)
    • Ab dem ersten, nicht quittierten Paket, werden alle folgenden Pakete erneut gesendet

TCP Überlastungskontrolle

  • Funktion der Netzwerkschicht zur Regelung des Datenflusses
  • Begrenzung der Übertragungsrate
  • Lösungsansatz:
    • TCP-Slow-Start
      • Startet mit einer niedrigen Übertragungsrate
      • Erhöht die Rate exponentiell, bis ein Paket verloren geht
    • TCP-Kongestionskontrolle
      • Reduziert die Übertragungsrate, wenn Pakete verloren gehen