udp(7) udp(7)
NAME
udp - Internet User Datagram Protocol
SYNTAX
#include <sys/socket.h>
#include <netinet/in.h>
s = socket(AFINET, SOCKDGRAM, 0);
t = topen("/dev/udp", ORDWR);
BESCHREIBUNG
UDP ist ein einfaches Protokoll zur Übertragung von Datagrammen; es
ist direkt oberhalb des Internet-Protokolls (IP) angesiedelt. Pro-
gramme können auf UDP unter Verwendung der Socket-Schnittstelle
zugreifen, wobei der Socket-Typ SOCKDGRAM unterstützt wird, oder
unter Verwendung der Schnittstelle auf Transportebene (Transport Level
Interface, TLI), dort wird der verbindungslose Dienst (TCLTS) unter-
stützt.
Im Zusammenhang mit der Socket-Schnittstelle wird UDP normalerweise
mit den Funktionen sendto(), sendmsg(), recvfrom() und recvmsg() ver-
wendet [siehe send(3N) und recv(3N)]. Wird die Funktion connect(3N)
verwendet, um den Empfänger aller weiteren Pakete fest einzustellen,
so können danach die Funktionen recv(3N) oder read(2) und send(3N)
oder write(2) verwendet werden.
Die Adreßformate von UDP sind dieselben wie jene des Transmission Con-
trol Protocol (TCP). Ebenso wie TCP, verwendet UDP eine Portnummer
zusammen mit einer IP-Adresse zur Identifikation des Kommunikations-
partners. Der Portnummernbereich von UDP ist getrennt von dem Portnum-
mernbereich von TCP (das bedeutet, daß ein UDP-Port nicht mit einem
TCP-Port verbunden ("connected") sein kann). Die Funktion bind(3N)
kann dazu verwendet werden, die lokale Adresse und Portnummer eines
UDP-Sockets zu setzen. Die lokale IP-Adresse kann in einem Aufruf von
bind() unspezifiziert bleiben, wenn dafür der Wert INADDRANY verwen-
det wird. Wird die Funktion bind() nicht aufgerufen, so werden eine
lokale IP-Adresse und eine lokale Portnummer dem Kommunikationsend-
punkt zugewiesen, sobald das erste Paket gesendet wird. Broadcasts
können verschickt werden (vorausgesetzt, das zugrundeliegende Netzwerk
unterstützt dies) unter Verwendung einer reservierten "Broadcast-
Adresse"; diese Adresse hängt von der jeweiligen Netzwerk-
Schnittstelle ab. Broadcasts können nur durch einen privilegierten
Benutzer gesendet werden.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
udp(7) udp(7)
Optionen auf IP-Ebene können mit UDP verwendet werden [siehe ip(7)].
Es besteht eine Reihe von Möglichkeiten, wie ein UDP-Paket verloren
gehen oder verfälscht werden kann, einschließlich der Möglichkeit des
Versagens des zugrundeliegenden Kommunikationsmechanismus. UDP verwen-
det eine Prüfsumme über den Datenanteil eines Paketes. Wenn die Prüf-
summe eines empfangenen Paketes fehlerhaft ist, so wird das Paket ver-
worfen, ohne daß der Benutzer darüber informiert wird. Für jeden UDP-
Socket wird eine Warteschlange für eingehende Pakete verwaltet. Diese
Schlange hat eine begrenzte Kapazität. Eingehende Pakete, die nicht
innerhalb der Hochwasser-Markierung gespeichert werden können, werden
ohne Meldung verworfen.
UDP bearbeitet Fehlermeldungen des Internet Control Message Protocol
(ICMP), die in Reaktion auf ein von ihm gesendetes UDP-Paket empfangen
werden [siehe icmp(7)]. ICMP-Meldungen "source quench" (Quelle langs-
amer) werden ignoriert. Die ICMP-Meldungen "destination unreachable"
(Ziel nicht erreichbar), "time exceeded" (Zeitüberschreitung) und
"parameter problem" (fehlerhafter Parameter) führen dazu, daß der Sok-
ket von seinem Prozeß getrennt wird, so daß nachfolgende Versuche,
Pakete über diesen Socket zu senden, lediglich einen Fehler produzie-
ren. UDP garantiert nicht, daß Pakete in derselben Reihenfolge ausge-
liefert werden, in der sie gesendet wurden. Weiterhin ist es möglich,
daß durch den Kommunikationsprozeß gesendete Pakete dupliziert werden.
DIAGNOSE
Eine Operation auf einem Socket kann unter folgenden Bedingungen
scheitern:
EISCONN Es wurde versucht, die Operation connect() auf einem
Socket auszuführen, auf dem die Operation connect()
bereits ausgeführt wurde, und die Verbindung wurde vor
dem Versuch, eine neue Verbindung aufzubauen, nicht
erfolgreich getrennt.
EISCONN Es wurde versucht, eine der Operationen sendto() oder
sendmsg() unter Angabe einer Empfängeradresse auf einem
Socket auszuführen, auf dem bereits eine Operation con-
nect() ausgeführt wurde.
ENOTCONN Es wurde versucht, eine der Operationen send(),
write(), sendto() oder sendmsg() ohne Angabe einer Emp-
fängeradresse auf einem Socket auszuführen, auf dem die
Operation connect() bisher nicht ausgeführt wurde.
EADDRINUSE Es wurde versucht, auf einem Socket die Operation
bind() unter Angabe einer Netzwerkadresse und einer
Portnummer auszuführen, die bereits an einen anderen
Socket gebunden waren.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
udp(7) udp(7)
EADDRNOTAVAIL Es wurde versucht, auf einem Socket die Operation
bind() mit einer Netzwerkadresse auszuführen, für die
keine Netzwerk-Schnittstelle existiert.
EINVAL Es wurde versucht, die Operation sendmsg() auszuführen,
mit msgaccrights ungleich NULL.
EACCES Es wurde versucht, die Operation bind() mit einer
"reservierten" Portnummer auszuführen, ohne daß die
effektive Benutzerkennung (ID) des Prozesses gleich der
des privilegierten Benutzers war.
ENOBUFS Im System wurde Speicherplatz für interne Datenstruktu-
ren knapp.
SIEHE AUCH
read(2), write(2), bind(3N), connect(3N), recv(3N), send(3N), icmp(7),
inet(7), ip(7), tcp(7).
Postel, Jon, User Datagram Protocol, RFC 768, Network Information
Center, SRI International, Menlo Park, Calif., August 1980.
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98