update
BIN
Writerside/images/image_878.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
Writerside/images/image_879.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
Writerside/images/image_880.png
Normal file
After Width: | Height: | Size: 70 KiB |
BIN
Writerside/images/image_881.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
Writerside/images/image_882.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
Writerside/images/image_883.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
Writerside/images/image_884.png
Normal file
After Width: | Height: | Size: 34 KiB |
@ -10,7 +10,8 @@
|
|||||||
- maximale Größe eines TCP-Segments (NUR Daten, ohne Header)
|
- maximale Größe eines TCP-Segments (NUR Daten, ohne Header)
|
||||||
- wird bei Verbindungsaufbau ausgehandelt
|
- wird bei Verbindungsaufbau ausgehandelt
|
||||||
- abhängig von der MTU (Maximum Transmission Unit) des darunterliegenden Netzwerks
|
- 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
|
## TCP Sequenznummern
|
||||||
- Sequenznummer eines TCP-Segments
|
- Sequenznummer eines TCP-Segments
|
||||||
- Bytestromnummer des ersten Bytes im Segment
|
- Bytestromnummer des ersten Bytes im Segment
|
||||||
@ -102,7 +103,7 @@
|
|||||||
### TCP Server Lifecycle
|
### TCP Server Lifecycle
|
||||||

|

|
||||||
|
|
||||||
## TCP Zuverlässigkeit sicherstellen (Flusskontrolle)
|
## TCP Zuverlässigkeit sicherstellen
|
||||||
- Quittungen
|
- Quittungen
|
||||||
- positive ACKs
|
- positive ACKs
|
||||||
- kumulative Summenquittungen
|
- kumulative Summenquittungen
|
||||||
@ -111,3 +112,82 @@
|
|||||||
- Timeout (RTO)
|
- Timeout (RTO)
|
||||||
- Sequenznummern
|
- 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
|
||||||
|
|
||||||
|
### 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
|
||||||
|
|
||||||
|
#### 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
|