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)