diff --git a/Writerside/images/image_878.png b/Writerside/images/image_878.png new file mode 100644 index 0000000..dbaec14 Binary files /dev/null and b/Writerside/images/image_878.png differ diff --git a/Writerside/images/image_879.png b/Writerside/images/image_879.png new file mode 100644 index 0000000..b20fd45 Binary files /dev/null and b/Writerside/images/image_879.png differ diff --git a/Writerside/images/image_880.png b/Writerside/images/image_880.png new file mode 100644 index 0000000..e07a924 Binary files /dev/null and b/Writerside/images/image_880.png differ diff --git a/Writerside/images/image_881.png b/Writerside/images/image_881.png new file mode 100644 index 0000000..5256def Binary files /dev/null and b/Writerside/images/image_881.png differ diff --git a/Writerside/images/image_882.png b/Writerside/images/image_882.png new file mode 100644 index 0000000..9ce5f9b Binary files /dev/null and b/Writerside/images/image_882.png differ diff --git a/Writerside/images/image_883.png b/Writerside/images/image_883.png new file mode 100644 index 0000000..a608dfb Binary files /dev/null and b/Writerside/images/image_883.png differ diff --git a/Writerside/images/image_884.png b/Writerside/images/image_884.png new file mode 100644 index 0000000..bc1e9bd Binary files /dev/null and b/Writerside/images/image_884.png differ diff --git a/Writerside/topics/04/Rechnernetze/Teil-2/12_EndeZuEnde_UDP_TCP.md b/Writerside/topics/04/Rechnernetze/Teil-2/12_EndeZuEnde_UDP_TCP.md index 3f9fdd4..440ea71 100644 --- a/Writerside/topics/04/Rechnernetze/Teil-2/12_EndeZuEnde_UDP_TCP.md +++ b/Writerside/topics/04/Rechnernetze/Teil-2/12_EndeZuEnde_UDP_TCP.md @@ -10,7 +10,8 @@ - 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 @@ -102,7 +103,7 @@ ### TCP Server Lifecycle ![image_877.png](image_877.png) -## TCP Zuverlässigkeit sicherstellen (Flusskontrolle) +## TCP Zuverlässigkeit sicherstellen - Quittungen - positive ACKs - kumulative Summenquittungen @@ -111,3 +112,82 @@ - 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](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](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](image_880.png) + + +### Datenfluss: Fehlerfreie Übertragung +![image_883.png](image_883.png) + +### Datenfluss: Fehlerhafte Übertragung +![image_884.png](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](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](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 \ No newline at end of file