TCP und UDP sind Transportprotokolle der Internetschicht. Sie unterscheiden sich grundlegend in ZuverlΓ€ssigkeit, Geschwindigkeit und AnwendungsfΓ€llen.

Überblick

| Eigenschaft | TCP | UDP | |-------------|-----|-----| | Verbindung | Verbindungsorientiert | Verbindungslos | | ZuverlΓ€ssigkeit | Garantierte Zustellung | Keine Garantie | | Reihenfolge | Garantiert | Nicht garantiert | | Fehlerkorrektur | Ja | Nein | | Overhead | Hoch | Niedrig | | Geschwindigkeit | Langsamer | Schneller |

TCP (Transmission Control Protocol)

Funktionsweise

TCP stellt eine zuverlΓ€ssige, geordnete Verbindung her.

Three-Way-Handshake (Verbindungsaufbau):

Client                    Server
   |                         |
   |──────── SYN ──────────>β”‚  "Ich will eine Verbindung"
   |                         |
   β”‚<─────── SYN+ACK ───────│  "OK, ich auch"
   |                         |
   |──────── ACK ──────────>β”‚  "BestΓ€tigt"
   |                         |
   |    Verbindung steht     |

DatenΓΌbertragung:

Client                    Server
   |                         |
   |──── Daten (Seq=1) ────>β”‚
   β”‚<─────── ACK=2 ─────────│  "Paket 1 erhalten"
   |                         |
   |──── Daten (Seq=2) ────>β”‚
   β”‚<─────── ACK=3 ─────────│  "Paket 2 erhalten"

Verbindungsabbau (Four-Way-Handshake):

Client                    Server
   |                         |
   |──────── FIN ──────────>β”‚  "Ich bin fertig"
   β”‚<─────── ACK ───────────│  "OK"
   β”‚<─────── FIN ───────────│  "Ich auch"
   |──────── ACK ──────────>β”‚  "OK, tschΓΌss"

Eigenschaften

ZuverlΓ€ssigkeit:

  • Jedes Paket wird bestΓ€tigt (ACK)
  • Verlorene Pakete werden erneut gesendet
  • PrΓΌfsummen erkennen Übertragungsfehler

Flusskontrolle:

  • EmpfΓ€nger teilt verfΓΌgbaren Puffer mit
  • Sender passt Geschwindigkeit an
  • Verhindert Überlastung

Staukontrolle:

  • Erkennt NetzwerkΓΌberlastung
  • Reduziert Senderate bei Paketverlusten

TCP-Header

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
β”œβ”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”€
β”‚         Source Port          β”‚       Destination Port        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                        Sequence Number                        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                    Acknowledgment Number                      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”¬β”€β”¬β”€β”¬β”€β”¬β”€β”¬β”€β”¬β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚Offsetβ”‚Reservβ”‚Uβ”‚Aβ”‚Pβ”‚Rβ”‚Sβ”‚Fβ”‚           Window Size              β”‚
β”œβ”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚         Checksum             β”‚       Urgent Pointer          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Header-Grâße: 20-60 Bytes

Anwendungen

HTTP/HTTPS (Web)      β†’ Port 80/443
FTP (Dateitransfer)   β†’ Port 21
SSH (Secure Shell)    β†’ Port 22
SMTP (E-Mail senden)  β†’ Port 25/587
IMAP (E-Mail abrufen) β†’ Port 143/993
MySQL                 β†’ Port 3306

UDP (User Datagram Protocol)

Funktionsweise

UDP ist verbindungslos – einfach senden ohne Handshake.

Client                    Server
   |                         |
   |──── Daten (Paket 1) ──>β”‚  Keine BestΓ€tigung
   |──── Daten (Paket 2) ──>β”‚
   |──── Daten (Paket 3) ──>β”‚
   |                         |

Kein Verbindungsaufbau, keine BestΓ€tigungen, keine Reihenfolge.

Eigenschaften

Schnelligkeit:

  • Kein Handshake nΓΆtig
  • Keine Wartezeit auf ACKs
  • Minimaler Overhead

Einfachheit:

  • "Fire and Forget"
  • Anwendung muss ZuverlΓ€ssigkeit selbst implementieren

Broadcast/Multicast:

  • Kann an mehrere EmpfΓ€nger gleichzeitig senden
  • TCP nur Punkt-zu-Punkt

UDP-Header

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
β”œβ”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”΄β”€β”€
β”‚         Source Port          β”‚       Destination Port        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚           Length             β”‚           Checksum            β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Header-Grâße: 8 Bytes (nur!)

Anwendungen

DNS (NamensauflΓΆsung)    β†’ Port 53
DHCP (IP-Zuweisung)      β†’ Port 67/68
NTP (Zeitsynchronisation)β†’ Port 123
VoIP/SIP                 β†’ Port 5060
Online-Gaming            β†’ Variabel
Video-Streaming (RTP)    β†’ Variabel
VPN (WireGuard)          β†’ Port 51820

Detaillierter Vergleich

Overhead

TCP-Paket:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ IP-Header  β”‚ TCP-Header  β”‚        Daten            β”‚
β”‚  20 Bytes  β”‚  20+ Bytes  β”‚                         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
Minimum: 40 Bytes Header

UDP-Paket:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ IP-Header  β”‚ UDP-Header  β”‚        Daten            β”‚
β”‚  20 Bytes  β”‚   8 Bytes   β”‚                         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
Minimum: 28 Bytes Header

Latenz

TCP (mit Handshake):
Zeit: ─┬─[SYN]──────[SYN+ACK]──────[ACK]──────[Daten]─>
       └─────────────────────────────────────────────────
       3 Pakete bevor Daten fließen

UDP:
Zeit: ─[Daten]────────────────────────────────────────>
       Sofort Daten senden

Paketverlust

TCP (automatische Wiederholung):
Sender: [1] [2] [3] [4]
            ↓
         Verloren
            ↓
EmpfΓ€nger erhΓ€lt: [1] [3] [4]
            ↓
EmpfΓ€nger: ACK fΓΌr 1, wartet auf 2
            ↓
Sender: Sendet [2] erneut
            ↓
EmpfΓ€nger: [1] [2] [3] [4] - vollstΓ€ndig


UDP (keine Wiederholung):
Sender: [1] [2] [3] [4]
            ↓
         Verloren
            ↓
EmpfΓ€nger erhΓ€lt: [1] [3] [4] - Paket 2 fehlt dauerhaft

Wann TCP verwenden?

DatenintegritΓ€t kritisch

  • Dateitransfer: Jedes Byte muss ankommen
  • E-Mail: VollstΓ€ndige Nachrichten
  • Webanwendungen: Korrekte Darstellung
  • Datenbanken: Transaktionssicherheit
  • API-Aufrufe: ZuverlΓ€ssige Kommunikation

Beispiel: HTTP

Browser                   Server
   |                         |
   |── TCP Handshake ──────>β”‚
   β”‚<───────────────────────│
   |── GET /index.html ────>β”‚
   β”‚<── 200 OK + HTML ──────│
   |── TCP Close ──────────>β”‚

Wann UDP verwenden?

Geschwindigkeit wichtiger als VollstΓ€ndigkeit

  • Live-Streaming: Verlorenes Frame = Skip (kein Neuanfordern)
  • Online-Gaming: Aktuelle Position wichtiger als alte
  • VoIP: Kurze Unterbrechung besser als VerzΓΆgerung
  • DNS: Kleine Anfragen, schnelle Antwort

Beispiel: DNS

Client                    DNS-Server
   |                         |
   |── "example.com?" ─────>β”‚  UDP, Port 53
   β”‚<── "192.0.2.1" ────────│  Sofortige Antwort
   |                         |

Kein Handshake = schneller
Bei Verlust: Client fragt erneut

Beispiel: Online-Gaming

Client                    Game-Server
   |                         |
   |── Position X=10 ─────>β”‚
   |── Position X=11 ─────>β”‚  ← Verloren (egal)
   |── Position X=12 ─────>β”‚
   |                         |
Alte Position ist irrelevant, aktuelle zΓ€hlt

Hybride AnsΓ€tze

QUIC (HTTP/3)

  • UDP-basiert
  • Aber mit ZuverlΓ€ssigkeit in Anwendungsschicht
  • Schnellerer Handshake als TCP
  • Bessere Performance bei Paketverlusten
Traditionell:      HTTP/2 β†’ TLS β†’ TCP
Neu (HTTP/3):      HTTP/3 β†’ QUIC (UDP)
                           ↑
                   ZuverlΓ€ssigkeit + VerschlΓΌsselung

Gaming mit Reliability Layer

Viele Spiele nutzen UDP mit eigenem Protokoll:

  • Wichtige Daten (Login, Kaufen) β†’ ZuverlΓ€ssig (mit ACK)
  • Bewegungsdaten β†’ UnzuverlΓ€ssig (aktuellste gewinnt)

Ports und Firewalls

TCP-Ports ΓΆffnen

# UFW
ufw allow 80/tcp
ufw allow 443/tcp

# iptables
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

UDP-Ports ΓΆffnen

# UFW
ufw allow 53/udp
ufw allow 51820/udp

# iptables
iptables -A INPUT -p udp --dport 53 -j ACCEPT

Zusammenfassung

| Kriterium | TCP | UDP | |-----------|-----|-----| | Nutzen wenn | Daten vollstΓ€ndig ankommen mΓΌssen | Geschwindigkeit wichtiger | | Beispiele | Web, E-Mail, FTP, SSH | DNS, VoIP, Gaming, Streaming | | Verbindung | Ja (Handshake) | Nein | | ZuverlΓ€ssig | Ja | Nein | | Reihenfolge | Garantiert | Nicht garantiert | | Overhead | 20+ Bytes | 8 Bytes | | Latenz | HΓΆher | Niedriger |

Fazit

TCP und UDP haben beide ihre Berechtigung. TCP ist das Arbeitstier des Internets fΓΌr alles, was zuverlΓ€ssig sein muss. UDP glΓ€nzt bei Echtzeitanwendungen, wo Geschwindigkeit wichtiger ist als VollstΓ€ndigkeit. Moderne Protokolle wie QUIC kombinieren die Vorteile beider Welten. Die Wahl hΓ€ngt von der Anwendung ab: DatenintegritΓ€t β†’ TCP, Echtzeit β†’ UDP.