6.9 KiB
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
- 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
- stellen Summenquittungen dar
- werden zusammen mit den restlichen Daten die von B nach A gesendet werden, in einem TCP-Segment übertragen
- "Huckepack"
TCP Telnet Fallstudie
Neuübertragung aufgrund einer verlorenen ACK
keine Neuübertragung, weil Bestätigung vor Timeout ankommt
Keine Neuübertragung, weil kumulative Bestätigung ankommt (Summenquittung)
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)
- Verbindungsanfrage (SYN) von A an B
Verbindungsaufbau Übung
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.
Verbindungsabbau Übung
TCP Verbindungsmanagement
- 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
TCP Server Lifecycle
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
- 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
-
Empfangsfenster ist dynamisch
- wird vom Empfänger in jedem ACK aktualisiert
- gibt an, wie viele Bytes der Empfänger noch aufnehmen kann
Flusskontrolle Beispiel
Datenfluss: Fehlerfreie Übertragung
Datenfluss: Fehlerhafte Übertragung
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
- Sender und Empfänger benötigen einen Puffer für mehrere Segmente
Sliding Window
- 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
- wird Sender vom Empfänger mitgeteilt ("Advertised Window")
- keine feste Sliding Window Größe
Sliding Window Beispiel
- 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
- TCP-Slow-Start