Provided by: manpages-es_4.27.0-1_all bug

NOMBRE

       udp - Protocolo UDP sobre IPv4

SINOPSIS

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

       udp_socket = socket(AF_INET, SOCK_DGRAM, 0);

DESCRIPCIÓN

       Ésta  es una implementación del protocolo UDP (User Datagram Protocol) descrito en RFC 768. Implementa un
       servicio de paquetes de datagramas no fiable y sin  conexión.  Los  paquetes  pueden  ser  reordenados  o
       duplicados  antes  de que lleguen. UDP genera y comprueba sumas de verificación (checksums) para detectar
       errores de transmisión.

       Cuando se crea un conector (socket) UDP, sus direcciones local y remota están sin especificar. Se  pueden
       enviar  datagramas  inmediatamente usando sendto(2) o sendmsg(2) con una dirección de destino válida como
       argumento. Cuando se llama a connect(2) sobre el conector, se envía la dirección de destino por defecto y
       a partir de ese momento se pueden enviar  datagramas  usando  send(2)  o  write(2)  sin  especificar  una
       dirección  de  destino.  Todavía  es  posible  realizar  envíos  a otros destinos pasando una dirección a
       sendto(2) o sendmsg(2). Para poder recibir paquetes, se debe ligar primero el conector  a  una  dirección
       local  usando  bind(2). De otra manera la capa de conector asignará automáticamente un puerto local libre
       fuera del rango definido por /proc/sys/net/ipv4/ip_local_port_range y ligará el conector a INADDR_ANY.

       Todas las operaciones de recepción sólo devuelven un paquete. Cuando el paquete es  más  pequeño  que  el
       buffer  pasado,  sólo  se  devuelven  los datos del paquete y, cuando es mayor, el paquete se trunca y la
       bandera MSG_TRUNC se activa. MSG_WAITALL no está soportada.

       Se pueden enviar o recibir opciones IP usando las opciones de conectores descritas en  ip(7).  Estas  son
       procesadas  por el núcleo sólo cuando está activado el parámetro adecuado de /proc (pero todavía se pasan
       al usuario incluso cuando está desactivada). Vea ip(7).

       Cuando en un envío está activa la opción MSG_DONTROUTE, la dirección  de  destino  debe  referirse  a  la
       dirección de una interfaz local y el paquete sólo se envía a esa interfaz.

       Por  defecto,  la  implementación  UDP  de  Linux  averigua el MTU (siglas en inglés de 'unidad máxima de
       transmisión') de la ruta. Por lo tanto, el núcleo hace un  seguimiento  del  MTU  para  una  IP  concreta
       emitiendo  EMSGSIZE  cuando  un  paquete  UDP lo sobrepasa, en cuyo caso la aplicación debería reducir el
       tamaño de sus paquetes. Es posible deshabilitar esta opción mediante  la  opción  IP_MTU_DISCOVER  en  el
       archivo  /proc/sys/net/ipv4/ip_no_pmtu_disc  ,  consulte ip(7), en cuyo caso UDP fragmentará los paquetes
       emitidos si sobrepasan el MTU de la interfaz. No es recomendable deshabilitarlo  ya  que  podría  afectar
       negativamente al rendimiento y a la fiabilidad.

   Formato de las direcciones
       UDP usa el formato de dirección sockaddr_in de IPv4 descrito en ip(7).

   Gestión de errores
       Todos  los errores fatales serán pasados al usuario como un resultado de error incluso cuando el conector
       no esté conectado. Ésto incluye errores asíncronos recibidos de la red. Puede obtenerse un error  por  un
       paquete  anterior  que  fue  enviado  por  el mismo conector. Este comportamiento difiere de muchas otras
       implementaciones de BSD que  no  pasan  ningún  error  al  menos  que  el  conector  esté  conectado.  El
       comportamiento de Linux viene dado por el RFC 1122.

       Por  compatibilidad  con  código  anterior  es  posible activar la opción SO_BSDCOMPAT de SOL_SOCKET para
       recibir errores remotos (excepto EPROTO y EMSGSIZE) sólo cuando el conector se ha conectado.  Siempre  se
       obvian  los  errores  generados  localmente. En versiones posteriores del núcleo se quitó esta opción del
       conector. Consulte socket(7).

       Cuando se activa la opción IP_RECVERR todos los errores se almacenan en la cola de errores de conector  y
       se pueden recibir mediante recvmsg(2) con la opción MSG_ERRQUEUE activa.

   Interfaces /proc
       Los  parámetros  de  configuración  de  UDP  en  un  equipo  pueden  verse en los archivos del directorio
       /proc/sys/net/ipv4/.

       udp_mem (desde Linux 2.6.25)
              Es un vector con tres valores que gestiona la cantidad de páginas que los  conectores  UDP  pueden
              tener a la cola.

              min    Por  debajo  de  esa  cantidad de páginas, UDP no se preocupa de la cantidad de memoria que
                     necesita. Si se sobrepasa, UDP comenzará a limitar su uso.

              pressure
                     Este valor se introdujo para seguir el formato de tcp_mem. Consulte tcp(7).

              max    Cantidad de paǵinas que pueden tener en cola todos los conectores UDP.

              Los valores por defecto se calculan durante el inicio del equipo en base a la cantidad de  memoria
              disponible.

       udp_rmem_min (número entero; valor por defecto: TAMAÑO_PÁGINA; desde la versión 2.6.25 de Linux)
              Tamaño  minimo,  en  bytes,  de  los  buffers  de recepción empleados por los conectores UDP en la
              moderación. Cada uno de los conectores podrá emplear este tamaño para  recibir  datos,  aunque  el
              total de páginas de los conectores UDP exceda el valor 'pressure' de udp_mem.

       udp_wmem_min (número entero; por defecto: TAMAÑO_PÁGINA; a partir de la versión 2.6.25 de Linux)
              Tamaño  mínimo,  en  bytes,  del buffer de envío empleado por los conectores UDP en la moderación.
              Cada conector puede emplear este tamaño para enviar datos aunque la cantidad total de  páginas  de
              los conectores UDP sobrepase el valor de 'pressure' para udp_mem.

   Opciones de los conectores
       Para  definir  u  obtener  la  opción  de  un  conector UDP deberá invocar getsockopt(2) para obtenerla o
       setsockopt(2) para definir la opción con el argumento de la opción definido como IPPROTO_UDP.  Salvo  que
       se indique lo contrario, optval es un puntero a un número int.

       A continuación se incluye una lista con las opciones de los conectores específicas para UDP. Si desea ver
       otras opciones de los conectores también aplicables a UDP: consulte socket(7).

       UDP_CORK (desde Linux 2.5.44)
              Si  se  activa  esta  opción,  todos  los  datos  de  salida de ese conector se juntan en un único
              datagrama que se tansmite cuando la opción está deshabilitado. No debe emplearse  esta  opción  si
              desea que el código fuente sea portable.

       UDP_SEGMENTE (desde Linux 4.18)
              Activa  la  descarga  de  la  segmentación  de UDP. La descarga de segmentación reduce la carga de
              send(2) al transferir múltiples datagramas de valor de datos como un solo paquete grande a  través
              de  la  ruta  de  transmisión  del  núcleo, incluso cuando excede la MTU. Lo más tarde posible, el
              paquete grande se divide por el tamaño del segmento en una serie  de  datagramas.   Este  paso  de
              descarga  de  segmentación  se  encarga  al  hardware si es compatible, de lo contrario se realiza
              mediante software. Esta opción toma un valor en  el  intervalo  [0, USHRT_MAX]  que  establece  el
              tamaño  del  segmento:  el tamaño de la carga útil del datagrama, excluyendo el encabezado UDP. El
              tamaño del segmento debe elegirse de tal forma que se envíen como máximo 64 datagramas en una sola
              llamada y que los datagramas después de la segmentación cumplan las mismas reglas de  MTU  que  se
              aplican  a  los datagramas enviados sin esta opción.  La descarga de la segmentación depende de la
              descarga de la suma de comprobación, ya que se calculan después de segmentar. La opción también se
              puede establecer para las llamadas individuales sendmsg(2) pasándolas como cmsg(3).  Un  valor  de
              cero desactiva la función. Esta opción no debe utilizarse si es importante la portabilidad.

       UDP_GRO (desde Linux 5.0)
              Activa  descarga  de  recepción  de  UDP.  Si está habilitada, el conector puede recibir múltiples
              datagramas de datos como un único búfer grande, junto con un cmsg(3) que contiene  el  tamaño  del
              segmento.  Esta  opción es la inversa de la descarga de segmentación. Reduce el coste de recepción
              al manejar múltiples datagramas de datos como un solo paquete grande en la ruta de  recepción  del
              kernel,  incluso  cuando eso excede la MTU. Esta opción no debe usarse si se ortorga importancia a
              la portabilidad.

   Ioctls
       Estos ioctls pueden ser utilizados con ioctl(2). La sintaxis correcta es:

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

       FIONREAD (SIOCINQ)
              Obtiene un puntero hacia un entero como argumento. Devuelve el tamaño del siguiente datagrama,  en
              bytes,  pendiente  del  entero o el valor 0 si no hay ninguno pendiente. Aviso: con FIONREAD no es
              posible saber si no hay ningún datagrama pendiente o si el siguiente datagrama contiene zero bytes
              de datos. Para distinguir ambos casos, es preferible el uso de select(2), poll(2) o epoll(7).

       TIOCOUTQ (SIOCOUTQ)
              Devuelve el número de bytes de datos en la cola de envío local. Sólo disponible  en  Linux  2.4  o
              superior.

       Además todos los ioctls documentados en ip(7) y socket(7) están soportados.

ERRORES

       Una  operación  de  enviar  o recibir sobre un conector UDP puede devolver cualquier error documentado en
       socket(7) o ip(7).

       ECONNREFUSED
              No se ha asociado un receptor a la dirección de destino. Esto podría ser provocado por un  paquete
              anterior enviado por el conector.

VERSIONES

       IP_RECVERR es una nueva característica de la versión 2.2 de Linux.

VÉASE TAMBIÉN

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

       Documentación del código fuente del núcleo Documentation/networking/ip-sysctl.txt.

       RFC 768 para el protocolo UDP.
       RFC 1122 para los requisitos del anfitrión (host).
       RFC 1191 para una descripción del descubrimiento de la MTU de la ruta.

TRADUCCIÓN

       La  traducción  al  español  de esta página del manual fue creada por Juan Piernas <piernas@ditec.um.es>,
       Miguel Pérez Ibars <mpi79470@alu.um.es> y Marcos Fouces <marcos@debian.org>

       Esta traducción es documentación libre;  lea  la  GNU General Public License Version 3  o  posterior  con
       respecto a las condiciones de copyright.  No existe NINGUNA RESPONSABILIDAD.

       Si  encuentra  algún  error  en  la  traducción  de esta página del manual, envíe un correo electrónico a
       debian-l10n-spanish@lists.debian.org.

Páginas de Manual de Linux 6.9.1                   2 Mayo 2024                                            udp(7)