diff --git a/Writerside/images/image_867.png b/Writerside/images/image_867.png new file mode 100644 index 0000000..e411319 Binary files /dev/null and b/Writerside/images/image_867.png differ diff --git a/Writerside/images/image_868.png b/Writerside/images/image_868.png new file mode 100644 index 0000000..a379121 Binary files /dev/null and b/Writerside/images/image_868.png differ diff --git a/Writerside/images/image_869.png b/Writerside/images/image_869.png new file mode 100644 index 0000000..e56f007 Binary files /dev/null and b/Writerside/images/image_869.png differ diff --git a/Writerside/images/image_870.png b/Writerside/images/image_870.png new file mode 100644 index 0000000..5f32a64 Binary files /dev/null and b/Writerside/images/image_870.png differ diff --git a/Writerside/images/image_871.png b/Writerside/images/image_871.png new file mode 100644 index 0000000..907f203 Binary files /dev/null and b/Writerside/images/image_871.png differ diff --git a/Writerside/images/image_872.png b/Writerside/images/image_872.png new file mode 100644 index 0000000..e3b18cc Binary files /dev/null and b/Writerside/images/image_872.png differ diff --git a/Writerside/images/image_873.png b/Writerside/images/image_873.png new file mode 100644 index 0000000..174314b Binary files /dev/null and b/Writerside/images/image_873.png differ diff --git a/Writerside/images/image_874.png b/Writerside/images/image_874.png new file mode 100644 index 0000000..3e0b709 Binary files /dev/null and b/Writerside/images/image_874.png differ diff --git a/Writerside/images/image_875.png b/Writerside/images/image_875.png new file mode 100644 index 0000000..ca9f48a Binary files /dev/null and b/Writerside/images/image_875.png differ diff --git a/Writerside/images/image_876.png b/Writerside/images/image_876.png new file mode 100644 index 0000000..e61400e Binary files /dev/null and b/Writerside/images/image_876.png differ diff --git a/Writerside/images/image_877.png b/Writerside/images/image_877.png new file mode 100644 index 0000000..e7cc4e3 Binary files /dev/null and b/Writerside/images/image_877.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 2826440..3f9fdd4 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 @@ -21,3 +21,93 @@ - 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](image_867.png) + +#### Neuübertragung aufgrund einer verlorenen ACK +![image_868.png](image_868.png) + +#### keine Neuübertragung, weil Bestätigung vor Timeout ankommt +![image_869.png](image_869.png) + +#### Keine Neuübertragung, weil kumulative Bestätigung ankommt (Summenquittung) +![image_870.png](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](image_871.png) + +### Verbindungsaufbau Übung +![image_872.png](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](image_873.png) + +### Verbindungsabbau Übung +![image_874.png](image_874.png) + +## TCP Verbindungsmanagement +![image_875.png](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](image_876.png) + +### TCP Server Lifecycle +![image_877.png](image_877.png) + +## TCP Zuverlässigkeit sicherstellen (Flusskontrolle) +- Quittungen + - positive ACKs + - kumulative Summenquittungen +- Zeitüberwachung + - Retransmission Timer + - Timeout (RTO) +- Sequenznummern +