Man page - udp(7)

Packages contains this manual

Available languages:

en fr es pl ja ru ro zh_TW zh_CN

Manual

udp

NOM
SYNOPSIS
DESCRIPTION
Formats d’adresse
Traitement des erreurs
/proc interfaces
Options de socket
Ioctls
ERREURS
VERSIONS
VOIR AUSSI
TRADUCTION

NOM

udp - Protocole UDP pour IPv4

SYNOPSIS

#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/udp.h>

udp_socket = socket(AF_INET, SOCK_DGRAM, 0);

DESCRIPTION

Il s’agit d’une implĂ©mentation de l’User Datagram Protocol dĂ©crit dans la RFC 768. Elle implĂ©mente un service de paquets datagrammes non fiable, sans connexion. Les paquets peuvent ĂȘtre rĂ©ordonnĂ©s ou dupliquĂ©s avant leur arrivĂ©e. UDP crĂ©e et vĂ©rifie des sommes de contrĂŽle pour dĂ©tecter les erreurs de transmission.

Lorsqu’un socket UDP est créé, ses adresses locales et distantes sont indĂ©terminĂ©es. Les datagrammes peuvent ĂȘtre envoyĂ©s immĂ©diatement en utilisant sendto (2) ou sendmsg (2) avec une adresse de destination valable en argument. Lorsque connect (2) est appelĂ© sur un socket, l’adresse de destination par dĂ©faut est dĂ©finie, et les datagrammes pourront ĂȘtre envoyĂ©s avec send (2) ou write (2) sans indiquer d’adresse de destination. Il restera possible d’envoyer des donnĂ©es Ă  d’autres destinations en passant l’adresse Ă  sendto (2) ou sendmsg (2). Afin de recevoir les paquets, un socket doit ĂȘtre attachĂ© Ă  une adresse locale en utilisant bind (2). Sinon, la couche socket affectera automatiquement un port local libre, hors de l’intervalle dĂ©fini par /proc/sys/net/ipv4/ip_local_port_range et attacher le socket Ă  l’adresse INADDR_ANY .

Les opĂ©rations de rĂ©ception ne renvoient qu’un seul paquet Ă  la fois. Si le paquet est plus petit que le tampon transmis, il n’y aura pas plus de donnĂ©es renvoyĂ©es. S’il est plus grand, le paquet sera tronquĂ© et le drapeau MSG_TRUNC sera activĂ©. MSG_WAITALL n’est pas pris en charge.

Les options IP peuvent ĂȘtre envoyĂ©es ou lues en utilisant les options des sockets dĂ©crites dans ip (7). Elles ne sont traitĂ©es par le noyau que lorsque le paramĂštre /proc appropriĂ© est activĂ© (mais sont quand mĂȘme fournies Ă  l’utilisateur quant il est inhibĂ©). Consultez ip (7).

Quand l’attribut MSG_DONTROUTE est actif Ă  l’émission, l’adresse de destination doit reprĂ©senter une adresse d’interface locale, et le paquet n’est envoyĂ© qu’à cette interface.

Par dĂ©faut, l’UDP sous Linux utilise la dĂ©tection de MTU (« Maximum Transmission Unit ») par chemin. Cela signifie que le noyau garde en mĂ©moire le MTU vers une adresse IP particuliĂšre, et renvoie EMSGSIZE lorsqu’une Ă©criture sur un socket UDP dĂ©passe cette taille. Dans ce cas, l’application doit rĂ©duire la taille du paquet. La dĂ©tection de MTU par chemin peut ĂȘtre dĂ©sactivĂ©e avec l’option de socket IP_MTU_DISCOVER ou le fichier /proc/sys/net/ipv4/ip_no_pmtu_disc ; consultez ip (7) pour plus de dĂ©tails. Lorsque cette option est dĂ©sactivĂ©e, UDP fragmente les paquets sortants dont la taille dĂ©passe le MTU de l’interface. C’est cependant dĂ©couragĂ©, pour des raisons de performance et de fiabilitĂ©.

Formats d’adresse

UDP utilise le format d’adresse IPv4 sockaddr_in comme indiquĂ© dans ip (7).

Traitement des erreurs

Toutes les erreurs fatales seront transmises Ă  l’utilisateur comme un retour d’erreur mĂȘme lorsque le socket n’est pas connectĂ©. Ça comprend les erreurs asynchrones reçues du rĂ©seau. Vous pouvez ainsi recevoir une erreur due Ă  un paquet prĂ©cĂ©demment envoyĂ© sur le mĂȘme socket. Ce comportement diffĂšre de celui de nombreuses autres implĂ©mentations des sockets BSD, qui ne transmettent pas d’erreur si le socket n’est pas connectĂ©. Le comportement de Linux correspond Ă  la RFC 1122 .

Pour assurer la compatibilitĂ© avec du code ancien, sous Linux 2.0 et 2.2, l’option SOL_SOCKET SO_BSDCOMPAT pouvait ĂȘtre dĂ©finie pour ne recevoir les erreurs distantes que si le socket a Ă©tĂ© connectĂ© (sauf pour EPROTO et EMSGSIZE ). Les erreurs locales sont toujours transmises. La gestion de cette option a Ă©tĂ© supprimĂ©e dans les noyaux plus rĂ©cents ; consultez socket (7) pour plus d’informations.

Lorsque l’option IP_RECVERR est active, toutes les erreurs sont stockĂ©es dans la file d’erreur du socket et peuvent ĂȘtre lues avec recvmsg (2) en activant son option MSG_ERRQUEUE .

/proc interfaces

La configuration des paramÚtres systÚme pour UDP est accessible par les fichiers du répertoire /proc/sys/net/ipv4/ .
udp_mem
(depuis Linux 2.6.25)

C’est un vecteur de trois entiers qui contrîle le nombre de pages permises pour la file d’attente de tous les sockets UDP.

min

En dessous de ce nombre de pages, UDP ne se soucie pas de son appétit en mémoire. Quand la quantité de mémoire allouée par UDP dépasse cette valeur, UDP commence à limiter son utilisation mémoire.

pressure

Cette valeur a été introduite pour suivre le format de tcp_mem (voir tcp (7)).

max

Nombre de pages permises pour la file d’attente de tous les sockets UDP.

Les valeurs par défaut pour ces trois éléments sont calculées au démarrage à partir de la quantité de mémoire disponible.

udp_rmem_min (entier ; PAGE_SIZE par défaut ; depuis Linux 2.6.25)

Taille minimale, en octets, des tampons de rĂ©ception utilisĂ©s par les sockets UDP dans le mode de modĂ©ration. Chaque socket UDP peut utiliser cette taille pour recevoir des donnĂ©es, mĂȘme si le nombre total de pages pour les sockets UDP dĂ©passe le seuil udp_mem .

udp_wmem_min (entier ; PAGE_SIZE par défaut ; depuis Linux 2.6.25)

Taille minimale, en octets, du tampon d’émission utilisĂ© par les sockets UDP dans le mode de modĂ©ration. Chaque socket UDP peut utiliser cette taille pour envoyer des donnĂ©es, mĂȘme si le nombre total de pages pour les sockets UDP dĂ©passe le seuil udp_mem .

Options de socket

Pour lire ou Ă©crire une option de socket UDP, appeler getsockopt (2) pour la lecture ou setsockopt (2) pour l’écriture, avec l’argument de niveau d’option valant IPPROTO_UDP . Sauf mention contraire, optval est un pointeur vers un int .

Voilà une liste des options spécifiques à UDP. Pour des détails sur certaines autres options de socket qui sont aussi applicables sur les sockets UDP, voir socket (7).
UDP_CORK
(depuis Linux 2.5.44)

Si cette option est active, toutes les donnĂ©es en sortie sur ce socket sont accumulĂ©es dans un unique datagramme qui est Ă©mis dĂšs que l’option est dĂ©sactivĂ©e. Cette option ne doit pas ĂȘtre utilisĂ©e dans des programmes destinĂ©s Ă  ĂȘtre portables.

UDP_SEGMENT (depuis Linux 4.18)

Enables UDP segmentation offload. Segmentation offload reduces send (2) cost by transferring multiple datagrams worth of data as a single large packet through the kernel transmit path, even when that exceeds MTU. As late as possible, the large packet is split by segment size into a series of datagrams. This segmentation offload step is deferred to hardware if supported, else performed in software. This option takes a value in the range [ 0 , USHRT_MAX ] that sets the segment size: the size of datagram payload, excluding the UDP header. The segment size must be chosen such that at most 64 datagrams are sent in a single call and that the datagrams after segmentation meet the same MTU rules that apply to datagrams sent without this option. Segmentation offload depends on checksum offload, as datagram checksums are computed after segmentation. The option may also be set for individual sendmsg (2) calls by passing it as a cmsg (3). A value of zero disables the feature. This option should not be used in code intended to be portable.

UDP_GRO (depuis Linux 5.0)

Enables UDP receive offload. If enabled, the socket may receive multiple datagrams worth of data as a single large buffer, together with a cmsg (3) that holds the segment size. This option is the inverse of segmentation offload. It reduces receive cost by handling multiple datagrams worth of data as a single large packet in the kernel receive path, even when that exceeds MTU. This option should not be used in code intended to be portable.

Ioctls

Ces ioctls sont accessibles à travers l’appel systùme ioctl (2). La syntaxe correcte est :

int value ;
error
= ioctl( udp_socket , ioctl_type , & value );

FIONREAD ( SIOCINQ )

Prend en argument un pointeur sur un entier. Y Ă©crit la taille en octets du prochain datagramme en attente, ou 0 si aucun datagramme n’est disponible. Attention : en utilisant FIONREAD , il est impossible de distinguer le cas oĂč aucun datagramme n’est en attente du cas oĂč le prochain datagramme en attente contient 0 octet de donnĂ©es. Il est prĂ©fĂ©rable d’utiliser select (2), poll (2), ou epoll (7) pour diffĂ©rencier ces cas.

TIOCOUTQ ( SIOCOUTQ )

Renvoie le nombre d’octets de donnĂ©es dans la file d’émission locale. Seulement sur Linux 2.4 et ultĂ©rieurs.

De plus, les ioctls documentés dans ip (7) et socket (7) sont pris en charge.

ERREURS

Toutes les erreurs documentĂ©es pour socket (7) ou ip (7) peuvent ĂȘtre renvoyĂ©es lors d’une Ă©mission ou d’une rĂ©ception sur un socket UDP.
ECONNREFUSED

Aucun correspondant sur l’adresse destination associĂ©e au socket. Ça peut ĂȘtre causĂ© par l’émission antĂ©rieure d’un paquet sur le socket.

VERSIONS

IP_RECVERR est une nouveauté de Linux 2.2.

VOIR AUSSI

ip (7), raw (7), socket (7), udplite (7)

Le fichier source du noyau Documentation/networking/ip-sysctl.txt .

RFC 768 pour le protocole UDP.
RFC 1122 pour les nĂ©cessitĂ©s de l’hĂŽte.
RFC 1191 pour une description de la recherche du MTU du chemin.

TRADUCTION

La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org> et David Prévot <david@tilapin.org>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n’y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org .