Transport Layer

  • Link-Layer: Punkt-zu-Punkt - Übertragung
  • IP-Layer: Ende-zu-Ende - Übertragung (über mehrere hop-to-hop - Links)
  • Transport Layer (verbindet Prozesse miteinander, z.B. Webbrowser zu Webserver; Vollständigkeit und Reihenfolge der Pakete können garantiert werden)

Adressierung

  • Kernel kennt die Prozesse anhand der PID
  • Ports werden für die öffentliche Adressierung verwendet
  • Sockets für die flexible, interne Zuweisung eines Prozesses zu einem Port
  • Portnummer: 16-Bit Zahl
  • Bereiche: well-known ports (System-Ports, 0-1023), registered ports (User-Ports, 1024-49151), dynamic ports (nicht reservierte Ports)
  • Identifizieren den Layer-4 - Endpunkt
  • Die IP-Adresse, die Angabe des Protokolls (z.B. TCP oder UDP) und die Portnummer identifzieren gemeinsam den Port

Sockets

  • Programm-seitige Anbindung an einen Port
  • Identifizierung mit File-Descriptor
  • An einem Port können mehrere Sockets hängen
  • Sockets sind bidirektional
  • Typen: Datagram socket, TCP listening socket oder passiver TCP-Socket, TCP connection socket oder aktiver TCP socket
  • Tools: telnet, netcat, nmap, tcpdump

Verbindungslose Übertragung

  • Ein IP-Paket startet und get von Hop zu Hop
  • Pakete hängen untereinander nicht zusammen
  • Keine Rückmeldung über den Empfang (außer bei ICMP)
  • Verbindungsloser im Transport Layer: UDP

Verbindungsorientierte Übertragung

  • Zusammenhängender Datenstrom (stream)
  • Verbindung muss auf- und abgebaut werden
  • Meist birdirektional
  • Wichtigster Vertreter: TCP

UDP (User Datagram Protocol)

  • Der User definiert alles selbst und ist für die Übertragung selbst verantwortlich
  • Datagram wird gesendet und vergessen, falls Ziel-Host erreichbar ist (ansonsten ICMP-Fehler)
  • Kein Verbindungsaufbau notwendig
  • Effizient (sehr kleiner Header)
  • Unzuverlässig (Empfänger könnte nicht existieren, fehlerhafte Datagrams werden verworfen, zufällige Reihenfolge, Staugefahr/Netzauslastung)
  • UDP-Header ist nur 8 Bytes groß
  • UDP Lite: nur ein Teil der Daten wird von der Checksumme abgedeckt
  • Checksum: One's Complement Checksum (OCC)

TCP (Transport Control Protocol)

  • Datenstrom (stream)
  • TCP kümmert sich um die Segmentierung, jedes Segment wird in ein IP-Datagram gepackt
  • Segmente werden zuverlässig übertragen (erneute Sendung bei Paketverlust oder Übertragungsfehler, richtige Reihenfolge)
  • Verbindungsorientiert (zuerst muss die Verbindung aufgebaut werden)
  • Flow control: Empfänger soll nicht überfordert werden
  • Congestion control: Netz soll nicht überfordert werden

TCP-Header


  • Source Port und Destination Port: 16 bit
  • Sequence number: Fortlaufende Segmentnummer
  • Acknowledgement number: Bestätigung (Nummer des nächsten erwarteten Segments)
  • Data offset: Headerlänge in Bytes (inklusive Options)
  • ECE (Explicit Congestion Echo): Netz ist überlastet
  • CWR (Congestion Window Reduced): Reaktion auf ECE
  • URG (Urgent): wichtigen Daten stehen am Beginn des Segments
  • ACK: Empfangsbestätigung
  • PSH: Daten nicht puffern
  • RST (Reset): Sofortiges Beenden der TCP-Verbindung
  • SYN (Synchronize): TCP-Verbindung aufbauen
  • FIN (Finish): TCP-Verbindung schließen
  • Checksum: TCC (ähnlich wie bei UDP)
  • Urgent pointer: Ende (Position) der wichtigen Daten (URG-Flag muss gesetzt sein)
  • Options: Timestamps, selective ACK, MSS, usw.

MSS (Maximum Segment Size)

  • Maximaler TCP-Payload (ohne TCP-Header)
  • MTU (Maximum Transmission Unit): maximale Größe eines IP-Datagrams (mit Payload)
  • MSS <= MTU - 20 Byte (IP-Header) - 20 Byte (TCP-Header)


3-way handshake


4-way close


ACK

  • Empfänger bestätigt den Erhalt der Daten
  • Sender wird somit benachrichtigt
  • Es sind bei einer (auch bidirektionalen) Verbindung keine eigenen ACK-Pakete notwendig
  • Das Feld Acknowledgement number wird ausgelesen, falls ACK-Flag gesetzt ist

Sequence number und Acknowledgement number

  • Sequence number (in Bytes): startet bei einer Zufallszahl
  • Acknowledgement number = Sequence number + Größe --> entspricht also der nächsten Sequenznummer

Sliding window protocol

  • Sender und Empfänger verwenden einen Buffer
  • Ein Teil des Buffers ist aktiv (Window)
  • Sie müssen abgestimmt sein (Sendefenster <= Empfangsfenster)

Congestion window

  • Sendefenster, transmission window
  • Gruppe von Segmenten, die unterwegs sind (aber noch nicht bestätigt sind)
  • Größe wird bestimmt durch: flow control, congestion control
  • Die Größe beeinflusst die Sendegeschwindigkeit (Verbindungsauslastung) und die Netzauslastung (Überlastung)

Verbindungsauslastung

  • Segmente sind für eine gewisse Zeit unterwegs (RTT, Round Trip Time)
  • Auch auf ACK muss gewartet werden
  • Pessimistisch: Nach jedem Segment auf ACK warten (langsam, lange Wartezeit)
  • Optimistisch: Dauernd senden und auf ACK hoffen (schnell, hohe Auslastung)

Receive window

  • Empfangsfenster
  • Abspeicherung der empfangenen Segment in der richtigen Reihenfolge
  • Segment müssen dort warten, bis alle vorherigen empfangen wurden

ARQ (Automatic Repeat Request)

  • Stop-and-Wait
  • Go-Back-N
  • Selective Repeat

Stop-and-Wait (pessimistisch, CWnd = 1, RWnd = 1)


Go-Back-N (optimistisch, CWnd > 1, RWnd = 1)


Selective Repeat (CWnd > 1, RWnd > 1)


Sliding Window bei TCP

  • Selective Repeat ARQ
  • Größe von CWnd und RWnd von Bandbreite und Auslastung abhängig
  • Cumulative ACK
  • Retransmission nach ACK-timeout
  • Fast-retransmit nach 3 identischen ACK

Flow control

  • Empfänger gibt an, wie viele Bytes er im RWnd noch speichern kann
  • Sender limitiert somit die Anzahl der Segmente, die gesendet werden
  • Falls noch kein ACK erhalten wurde, könnten Segmente noch unterwegs sein oder ausständige Segmente könnten verloren gegangen sein

Congestion control

  • Sender reduziert CWnd, wenn das Netz zu stark belastet wird
  • Kompromiss zwischen zu kleines CWnd (schlechte Auslastung, viel Wartezeit) und zu großes CWnd (Netz überlastet, hoher Paketverlust)
  • Es gibt verschiedene TCP-Varianten mit entsprechenden Algorithmen zur Messung der Netzauslastung und Berechnung des optimalen CWnd (z.B. Reno, Vegas, Cubic)


Zuletzt geändert: Donnerstag, 21. September 2023, 15:03