UDP (User Datagram Protocol) ist ein verbindungsloses Datenübertragungsprotokoll, das über IP arbeitet und beim Senden von Datagrammen eine minimale Latenz bietet. Im Gegensatz zu TCP garantiert UDP keine Zustellung, Paketreihenfolge oder Schutz vor Duplizierung. Laut IETF RFC 768 (2024) verarbeitet UDP mehr als 40% des weltweiten Internetverkehrs aufgrund von Videoanrufen, Streaming und DNS-Abfragen.
Wichtige Erkenntnisse
UDP (User Datagram Protocol) ist eines der wichtigsten Protokolle der Transportschicht des TCP/IP-Modells, das 1980 von David Reed entwickelt wurde. Es bietet einen minimalen Datenübertragungsmechanismus: Die Anwendung sendet ein Datagramm, und das Protokoll verfolgt nicht, ob es beim Empfänger angekommen ist.
Der UDP-Header besteht aus nur vier Feldern: Quellport, Zielport, Länge und Prüfsumme. Jedes Feld belegt 2 Byte, sodass die gesamte Headergröße 8 Byte beträgt. Zum Vergleich: Ein TCP-Header ohne Optionen belegt 20 Byte, mit Optionen bis zu 60 Byte.
Das Protokoll unterstützt keine Fragmentierung auf seiner eigenen Ebene — wenn ein Datagramm die MTU (Maximum Transmission Unit) überschreitet, wird es auf IP-Ebene fragmentiert. Wenn ein Fragment verloren geht, wird das gesamte Datagramm verworfen, da UDP keine erneute Übertragung einzelner Fragmente anfordern kann. Entwickler müssen die Datagrammgröße kontrollieren — für mobile Netzwerke beträgt die MTU oft 1400 Byte, daher sollte die maximale Größe diesen Wert nicht überschreiten.
Eine Anwendung, die UDP verwendet, erstellt einen Socket vom Typ SOCK_DGRAM, gibt den Port und die Ziel-IP-Adresse an und sendet ein Datagramm. Das Protokoll fügt einen minimalen Header hinzu und übergibt das Paket an die IP-Schicht. Der Empfänger hört auf seinem Port und extrahiert Daten aus eingehenden Datagrammen.
UDP führt keine Überlastungskontrolle durch — die Anwendung kann Datagramme mit der maximalen Geschwindigkeit senden, die das Netzwerk unterstützt. Dies kann zu Kanalüberlastung führen, aber in Echtzeitszenarien ist eine solche Aggressivität gerechtfertigt: Für einen Videoanruf ist ein Datenstrom mit möglichen Verlusten wichtiger als das Stoppen der Übertragung.
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(b'Hello, UDP!', ('192.168.1.100', 8888))
sock.close()
In diesem Beispiel wird ein SOCK_DGRAM-Socket für UDP erstellt. Die sendto-Methode sendet ein Datagramm ohne Verbindungsaufbau — man muss nur die IP und den Port des Empfängers kennen. Die recvfrom-Methode auf der Serverseite gibt sowohl die Daten als auch die Adresse des Absenders für die Antwort zurück. UDP-Sockets auf mobilen Plattformen werden ähnlich konfiguriert, erfordern jedoch zusätzliche Berechtigungen: Auf iOS muss NSAppTransportSecurity für unverschlüsselte UDP-Verbindungen hinzugefügt werden, und auf Android die INTERNET-Berechtigung im Manifest.
Die Wahl von UDP ist in Szenarien gerechtfertigt, in denen Geschwindigkeit wichtiger ist als Zuverlässigkeit. Das Protokoll verschwendet keine Zeit mit Verbindungsaufbau, Bestätigungen und erneuten Übertragungen — dies bietet minimale Latenz, erfordert jedoch, dass der Entwickler Verluste eigenständig behandelt.
| Vorteile | Nachteile |
|---|---|
| Niedrige Latenz — kein Handshake | Keine Zustellgarantie |
| Kleinerer Header — 8 Byte | Keine Überlastungskontrolle |
| Broadcast- und Multicast-Unterstützung | Mögliche Paketduplikate |
| Datagramm-Unabhängigkeit — keine Warteschlangen | Datagrammgröße durch MTU begrenzt |
In mobilen Anwendungen wird UDP über Frameworks wie WebRTC verwendet, die Verlustkontrolle, adaptive Bitrate und Jitter-Puffer über UDP hinzufügen. Dies bietet die Geschwindigkeitsvorteile ohne die Nachteile des reinen Protokolls.
Ein weiterer wichtiger Aspekt von UDP ist das Fehlen einer Überlastungskontrolle. In TCP reduzieren die Slow-Start- und Congestion-Avoidance-Algorithmen bei Paketverlust die Übertragungsgeschwindigkeit, um eine Netzwerküberlastung zu vermeiden. UDP verfügt über keine solchen Mechanismen, daher müssen Entwickler ihre eigenen Ratenkontrollstrategien implementieren — zum Beispiel adaptive Bitrate bei Videoanrufen oder Rate Limiting in Spieleservern, um übermäßige Netzwerküberlastung zu verhindern.
UDP ist in Szenarien unverzichtbar, in denen die Toleranz gegenüber Latenz wichtiger ist als die Toleranz gegenüber Paketverlust. Lassen Sie uns die wichtigsten Anwendungsbereiche des Protokolls in der mobilen und Webentwicklung erkunden.
Die Protokolle RTP und RTSP, die über UDP laufen, werden zur Übertragung von Echtzeit-Audio- und Videoströmen verwendet. WebRTC — der Standard für Videoanrufe in Browsern und mobilen Anwendungen — verwendet UDP als primären Transport für Mediendaten und TCP für die Signalisierung. Der Verlust eines Pakets in einem 30-fps-Video ist für den Benutzer nicht wahrnehmbar, im Gegensatz zur Verzögerung einer erneuten Übertragung, die ein merkliches Einfrieren des Bildes verursacht.
Multiplayer-Shooter und MOBAs benötigen für eine ordnungsgemäße Synchronisation eine Latenz von unter 50 ms. UDP überträgt Spielerpositionen, Schüsse und Ereignisse schneller als TCP, und Paketverlust wird einfach ignoriert — das nächste Update kommt in 16–33 ms. Beliebte Spiele-Engines, darunter Unity und Unreal Engine, verwenden UDP über eigene Transportschichten mit zusätzlicher Zuverlässigkeit für kritische Ereignisse durch Bestätigungen auf Anwendungsebene.
DNS-Abfragen verwenden UDP auf Port 53, da jede Abfrage ein einzelnes kleines Datagramm (normalerweise bis zu 512 Byte) ist. Wenn keine Antwort eintrifft, wiederholt der Client die Abfrage einfach nach einem Timeout, was schneller ist als der Aufbau einer TCP-Verbindung mit ihrem Drei-Wege-Handshake. DHCP arbeitet ebenfalls über UDP, da der Client noch keine IP-Adresse hat und keine TCP-Verbindung aufbauen kann, während Broadcast-UDP-Pakete das Auffinden eines DHCP-Servers im lokalen Netzwerk ermöglichen.
Die Wahl zwischen UDP und TCP ist ein Kompromiss zwischen Geschwindigkeit und Zuverlässigkeit. Jedes Protokoll ist für seine Aufgabenklasse optimal, und das Verständnis ihrer Unterschiede hilft, die richtigen Architekturentscheidungen bei der Gestaltung der Netzwerkkommunikation in mobilen Anwendungen zu treffen.
| Kriterium | UDP | TCP |
|---|---|---|
| Verbindungsaufbau | Nicht erforderlich | Drei-Wege-Handshake |
| Header | 8 Byte | 20–60 Byte |
| Zustellgarantie | Nein | Ja, mit Bestätigung |
| Reihenfolge | Nein | Ja |
| Überlastungskontrolle | Nein | Ja (AIMD, Slow Start) |
| Anwendungsfälle | Streaming, Spiele, DNS | Web, E-Mail, Dateien, API |
Mobile Projekte verwenden oft einen hybriden Ansatz: TCP für zuverlässige Anfragen (Authentifizierung, Datenladen) und UDP für Medienströme. QUIC — ein modernes Protokoll von Google, das über UDP läuft — kombiniert die Geschwindigkeit von UDP mit der Zuverlässigkeit von TCP und wird bereits in HTTP/3 verwendet.
Betrachten wir einen einfachen UDP-Server in Python, der Nachrichten von Clients empfängt und eine Antwort sendet. Der Server hört auf Port 8888 und verarbeitet eingehende Datagramme in einer Endlosschleife.
import socket
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server.bind(('0.0.0.0', 8888))
print('UDP-Server auf Port 8888 gestartet')
while True:
data, addr = server.recvfrom(1024)
print(f'Empfangen von {addr}: {data.decode()}')
server.sendto(b'OK', addr)
Der Server erstellt einen UDP-Socket, bindet sich an Port 8888 und wartet auf eingehende Datagramme. recvfrom gibt die Daten und die Adresse des Clients zurück, was eine Antwort über sendto ermöglicht. Im Gegensatz zu TCP behält der Server keinen Verbindungszustand bei — jedes Datagramm wird unabhängig verarbeitet. Dies macht UDP-Server skalierbar: Ein einzelner Server kann Millionen von Clients verarbeiten, ohne Speicher für jede einzelne Verbindung zuzuweisen, was für DNS-Server und Spiel-Matchmaking-Systeme wichtig ist.
In der mobilen Entwicklung wird UDP häufig über High-Level-Bibliotheken verwendet. Beispielsweise bietet CocoaAsyncSocket für iOS UDP-Sockets mit Delegaten und GCD für die asynchrone Ereignisverarbeitung. Auf Android ist die DatagramSocket-Klasse Teil der Standard-java.net-Bibliothek und erfordert keine zusätzlichen Abhängigkeiten. Für Flutter gibt es das Paket udp, das eine einfache Schnittstelle zum Senden und Empfangen von Datagrammen ohne Konfiguration nativer Sockets bietet.
Es ist wichtig zu beachten, dass viele mobile Netzwerke und Unternehmensfirewalls UDP-Verkehr blockieren, insbesondere auf Ports über 1024. Wenn Ihre Anwendung UDP verwendet, müssen Sie einen Fallback auf TCP bereitstellen oder die Protokollverfügbarkeit über STUN-Server prüfen, wie es WebRTC tut. Auf iOS unterstützt das System-Network.framework mit NWConnection sowohl TCP als auch UDP und wählt automatisch das optimale Protokoll basierend auf der Verfügbarkeit aus. Für Echtzeitanwendungen wird auch die Implementierung einer adaptiven Bitrate empfohlen, die bei Paketverlust die Stream-Qualität reduziert und so eine kontinuierliche Wiedergabe auch auf instabilen Kanälen mit hohen Fehlerraten gewährleistet.
Häufig gestellte Fragen
UDP baut keine Verbindung auf und garantiert keine Paketzustellung, was es schneller als TCP macht. Der UDP-Header ist 8 Byte groß, verglichen mit 20–60 Byte bei TCP. UDP eignet sich für Streaming und Spiele, während TCP für Webanfragen und Dateiübertragungen geeignet ist.
Ein Datagramm ist ein unabhängiges Datenpaket mit einem UDP-Header (Quellport, Zielport, Länge, Prüfsumme). Jedes Datagramm wird unabhängig verarbeitet, ohne Bezug zu vorherigen. Die Datagrammgröße ist durch die Netzwerk-MTU und spezifikationsgemäß auf bis zu 65507 Byte begrenzt.
UDP bietet keine Zuverlässigkeit auf Transportebene — diese wird von der Anwendung implementiert. Entwickler fügen Sequenznummern, Prüfsummen, erneute Übertragungsanfragen und Fehlerkorrektur hinzu. FEC (Forward Error Correction) ermöglicht die Wiederherstellung verlorener Pakete ohne erneute Übertragung.
UDP ist nicht geeignet für Szenarien, in denen Datenintegrität kritisch ist: Dateiübertragungen, Banktransaktionen, REST-APIs. In diesen Fällen garantiert TCP, dass jedes Byte in der richtigen Reihenfolge ankommt. UDP wird auch nicht auf instabilen Kanälen mit hohen Verlustraten empfohlen.
QUIC ist ein Transportprotokoll, das über UDP läuft, von Google entwickelt und von der IETF als RFC 9000 standardisiert. Es kombiniert die Geschwindigkeit von UDP mit der Zuverlässigkeit von TCP, unterstützt Multiplexing ohne Head-of-Line-Blocking und verfügt über integrierte Verschlüsselung. HTTP/3 verwendet QUIC als Transportschicht.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch