Provided by: manpages-es_4.13-4_all bug

NOMBRE

       ip - Implementación del protocolo IPv4 en Linux

SINOPSIS

       #include <sys/socket.h>
       #include <netinet/in.h>
       #include <netinet/ip.h> /* superconjunto del anterior */

       tcp_socket = socket(AF_INET, SOCK_STREAM, 0);
       udp_socket = socket(AF_INET, SOCK_DGRAM, 0);
       raw_socket = socket(AF_INET, SOCK_RAW, protocolo);

DESCRIPCIÓN

       Linux  implementa el Protocolo de Internet (Internet Protocol, IP), version 4, descrito en
       RFC 791 y RFC 1122. ip contiene una implementación de multidestino del Nivel  2  según  el
       RFC 1112. También contiene un enrutador IP incluyendo un filtro de paquetes.

       La interfaz del programador es compatible con la de los conectores BSD. Consulte socket(7)
       para más información sobre conectores.

       Los conectores IP se generan mediante socket(2):

           socket(AF_INET, socket_type, protocol);

       Los tipos de conector válidos serían SOCK_STREAM para un  conector  de  flujo,  SOCK_DGRAM
       para abrir un conector de datagrama y SOCK_RAW para abrir un conector raw(7) que accede al
       protocolo IP directamente.

       protocol representa el protocolo IP en el encabezado IP que se  envía  o  recibe.  Valores
       validos para protocol serían:

       • 0 y IPPROTO_TCP para conectores de flujo tcp(7);

       • 0 y IPPROTO_UDP para conectores de datagrama udp(7);

       • IPPROTO_SCTP para conectores de flujo sctp(7); y

       • IPPROTO_UDPLITE para conectores de datagrama udplite(7).

       Para  SOCK_RAW puede definir un protocolo IP válido según el IANA tal como se define en el
       RFC 1700.

       Cuando un proceso quiere recibir nuevos paquetes de entrada o conexiones, debe enlazar  un
       conector  a  una  dirección  de  la  interfaz local usando bind(2). Sólo se puede ligar un
       conector IP a un par (dirección, puerto) dado. Cuando en la llamada a bind  se  especifica
       INADDR_ANY,  el  conector  será  ligado  a todas las interfaces locales. Cuando se llama a
       connect(2) con un conector no enlazado, el  conector  será  automáticamente  ligado  a  un
       puerto aleatorio libre cuya dirección local sea INADDR_ANY.

       Una  dirección  local de conector TCP que haya sido enlazada, no estará disponible durante
       un cierto tiempo después de que se  cierre,  a  menos  que  se  haya  activado  la  opción
       SO_REUSEADDR.  Se  debe  tener  cuidado  al usar esta opción ya que hace que TCP sea menos
       fiable.

   Formato de las direcciones
       Una dirección de conector IP se define como una combinación de una dirección  de  interfaz
       IP  y un número de puerto 16-bit. El protocolo IP básico no proporciona números de puerto.
       Estos son implementados por protocolos de un nivel más alto como udp(7) y tcp(7).  En  los
       conectores directos, a sin_port se le asigna el protocolo IP.

           struct sockaddr_in {
               sa_family_t    sin_family; /* familia de direcciones: AF_INET */
               in_port_t      sin_port;   /* puerto con los bytes en el orden de red */
               struct in_addr sin_addr;   /* dirección de Internet */
           };

           /* dirección de Internet. */
           struct in_addr {
               uint32_t       s_addr;     /* dirección con los bytes en el orden de red */
           };

       A sin_family siempre se le asigna el valor AF_INET. Este valor es necesario. En Linux 2.2,
       la mayoría de las funciones de red devuelven EINVAL  cuando  se  ha  omitido  este  valor.
       sin_port  contiene  el  puerto  con  los  bytes en orden de red. Los números de puerto por
       debajo de 1024 se llaman puertos privilegiados (algunas veces  puertos  reservados).  Sólo
       los procesos privilegiados o con la capacidad CAP_NET_BIND_SERVICE pueden realizar enlaces
       mediante bind(2) a estos conectores. Observer que el protocolo IPv4 puro no posee como tal
       el  concepto  de  puerto.  Estos son implementados por protocolos de capas superiores como
       tcp(7) y udp(7).

       sin_addr es la dirección IP del equipo. El miembro s_addr de struct  in_addr  contiene  la
       dirección de la interfaz del equipo con los bytes en orden de red. Sólo se debería acceder
       a  in_addr   usando   las   funciones   de   biblioteca   inet_aton(3),   inet_addr(3)   y
       inet_makeaddr(3),  o  directamente  mediante  el  mecanismo  de resolución de nombres (vea
       gethostbyname(3)).

       Las direcciones IPv4 se dividen en direcciones unidestino, de difusión y multidestino. Las
       direcciones  unidestino especifican una única interfaz de un anfitrión, las direcciones de
       difusión especifican todos los anfitriones de  una  red  y  las  direcciones  multidestino
       identifican  a  todos  los  anfitriones  de  un  grupo multidestino. Sólo se pueden enviar
       datagramas a o recibir datagramas de direcciones de difusión cuando está activa la  opción
       de  conector  SO_BROADCAST.  En  la  implementación  actual,  los  conectores orientados a
       conexión sólo pueden usar direcciones unidestino.

       Dese cuenta que la dirección y el  puerto  se  almacenan  siempre  en  orden  de  red.  En
       particular, esto significa que necesita llamar a htons(3) con el número que se ha asignado
       al puerto. Todas las funciones  de  manipulación  de  dirección/puerto  en  la  biblioteca
       estándar trabajan en orden de red.

       Existen  varias  direcciones especiales: INADDR_LOOPBACK (127.0.0.1) siempre se refiere al
       ordenador local  a  través  del  dispositvo  `loopback'.  INADDR_ANY  (0.0.0.0)  significa
       cualquier  dirección  para enlazar. INADDR_BROADCAST (255.255.255.255) significa cualquier
       ordenador y, por razones históricas, tiene el mismo efecto en el enlace que INADDR_ANY.

   Opciones de los conectores
       IP soporta algunas opciones de conector específicas del protocolo que se pueden configurar
       con  setsockopt(2)  y  leer con getsockopt(2). El nivel de opciones de conector para IP es
       IPPROTO_IP. Una opción entera booleana es cero cuando  es  falsa  y  cualquier  otra  cosa
       cuando es cierta.

       Si  se  define  una  opción  no  válida,  getsockopt(2)  y  setsockopt(2)  emiten el error
       ENOPROTOOPT.

       IP_ADD_MEMBERSHIP (desde Linux 1.2)
              Unirse a un grupo multidestino. El argumento es una estructura ip_mreqn.

           struct ip_mreqn {
               struct in_addr imr_multiaddr; /* Dirección IP del grupo
                                                multidestino */
               struct in_addr imr_address;   /* Dirección IP de la
                                                interfaz local */
               int            imr_ifindex;   /* Índice de la interfaz */
           };

       imr_multiaddr contiene la dirección del grupo multidestino al que la aplicación se  quiere
       unir  o  quiere  dejar  (setsockopt(2)  falla con un error EINVAL). Debe ser una dirección
       multidestino válida. imr_address es la dirección de  la  interfaz  local  con  la  que  el
       sistema  debe  unirse al grupo multidestino. Si es igual a INADDR_ANY el sistema elige una
       interfaz adecuada. imr_ifindex es el índice de la interfaz que debe unirse a  o  dejar  el
       grupo imr_multiaddr, o 0 para indicar cualquier interfaz.

              La  estructura  ip_mreqn  está  disponible  desde  la  versión  2.2  de Linux. Para
              preservar la compatibilidad, la antigua  estructura  ip_mreq  (existente  desde  la
              versión  1.2) sigue teniendo soporte. Sólo difiere de ip_mreqn en que no incluye el
              campo imr_ifindex. El núcleo identifica qué estructura se está empleando en base al
              tamaño de optlen.

              IP_ADD_MEMBERSHIP sólo es válido para setsockopt(2).

       IP_ADD_SOURCE_MEMBERSHIP (desde Linux 2.4.22 / 2.5.68)
              Se  une  a  un grupo multidestino permitiendo recibir datos de una única fuente. El
              argumento es una estructura ip_mreq_source.

           struct ip_mreq_source {
               struct in_addr imr_multiaddr;  /* Dirección IP del
                                                  grupo de multidifusión
               struct in_addr imr_interface;  /* Dirección IP de la
                                                 interfaz local */
               struct in_addr imr_sourceaddr; /* Dirección IP
                                                 multidifusión del origen */
           };

       The ip_mreq_source structure is similar to  ip_mreqn  described  under  IP_ADD_MEMBERSHIP.
       The  imr_multiaddr field contains the address of the multicast group the application wants
       to join or leave.  The imr_interface field is the address  of  the  local  interface  with
       which  the  system  should  join  the  multicast group.  Finally, the imr_sourceaddr field
       contains the address of the source the application wants to receive data from.

              Es posible emplear esta opción varias veces para recibir datos de varias fuentes.

       IP_BIND_ADDRESS_NO_PORT (desde Linux 4.2)
              Indica al núcleo que no se reserve brevemente un puerto al usar bind(2) con el cero
              como  número  de  puerto.  Dicho  puerto  se  seleccionará  posteriormente  durante
              connect(2) de forma que se puede compartir un puerto origen mientras la tupla de  4
              sea única.

       IP_BLOCK_SOURCE (desde Linux 2.4.22 / 2.5.68)
              Stop  receiving  multicast  data  from a specific source in a given group.  This is
              valid only after the application has subscribed to the multicast group using either
              IP_ADD_MEMBERSHIP or IP_ADD_SOURCE_MEMBERSHIP.

              El   argumento   es   una   estructura  ip_mreq_source  tal  como  se  describe  en
              IP_ADD_MEMBERSHIP.

       IP_DROP_MEMBERSHIP (desde Linux 1.2)
              Dejar un grupo multidestino. El argumento es  una  estructura  ip_mreqn  o  ip_mreq
              similar a la de IP_ADD_MEMBERSHIP.

       IP_DROP_SOURCE_MEMBERSHIP (desde Linux 2.4.22 / 2.5.68)
              Leave  a  source-specific group—that is, stop receiving data from a given multicast
              group that come from a given source.  If the application has subscribed to multiple
              sources  within  the  same  group,  data  from  the remaining sources will still be
              delivered.   To   stop   receiving   data   from   all   sources   at   once,   use
              IP_DROP_MEMBERSHIP.

              El   argumento   es   una   estructura  ip_mreq_source  tal  como  se  describe  en
              IP_ADD_MEMBERSHIP.

       IP_FREEBIND (desde Linux 2.4)
              If enabled, this boolean option allows binding to an IP address that is nonlocal or
              does  not  (yet)  exist.  This permits listening on a socket, without requiring the
              underlying network interface or the specified dynamic IP address to be  up  at  the
              time  that  the application is trying to bind to it.  This option is the per-socket
              equivalent of the ip_nonlocal_bind /proc interface described below.

       IP_HDRINCL (desde Linux 2.0)
              Cuando está activa, el usuario proporciona una cabecera IP delante de los datos  de
              usuario.  Sólo  válida  para  conectores SOCK_RAW; vea raw(7) para más información.
              Cuando esta opción está activa los valores configurados mediante IP_OPTIONS, IP_TTL
              y IP_TOS se ignoran.

       IP_MSFILTER (desde Linux 2.4.22 / 2.5.68)
              Esta  opción  proporciona  acceso  a  la  API  de  filtrado  avanzado de estado. El
              argumento es una estructura ip_msfilter.

           struct ip_msfilter {
               struct in_addr imsf_multiaddr; /* Dirección IP
                                                 de multidifusión */
               struct in_addr imsf_interface; /* Dirección IP de la
                                                 interfaz local */
               uint32_t       imsf_fmode;     /* Modo-filtrado */

               uint32_t       imsf_numsrc;    /* Cantidad de fuentes en
                                                 el siguiente array */
               struct in_addr imsf_slist[1];  /* Dirección del array de
                                                 fuentes */
           };

       There are two macros, MCAST_INCLUDE and MCAST_EXCLUDE, which can be used  to  specify  the
       filtering mode.  Additionally, the IP_MSFILTER_SIZE(n)  macro exists to determine how much
       memory is needed to store ip_msfilter structure with n sources in the source list.

              Para completa descripción del filtrado de fuentes de multidifusión, consulte el RFC
              3376.

       IP_MTU (desde Linux 2.2)
              Obtiene la MTU de la ruta conocida actualmente para el conector actual. Devuelve un
              entero.

              IP_MTU sólo es válido para getsockopt(2) y sólo puede emplearse cuando el  conector
              se ha conectado.

       IP_MTU_DISCOVER (desde Linux 2.2)
              Establece  o recibe la configuración del descubrimiento de la MTU de la rutapara el
              conector. Cuando se activa, Linux realizará el descubrimiento de la MTU de la  ruta
              en  este conector tal y como se define en RFC 1191 para los conectores SOCK_STREAM.
              Para los conectores SOCK_STREAM, IP_PMTUDISC_DO fuerza la opción de  no  fragmentar
              en  todos  los  datagramas de salida. Es responsabilidad del usuario enpaquetar los
              datos en fragmentos de tamaño MTU y realizar la retransmisión si es  necesario.  El
              núcleo rechazará aquellos paquetes que sean más grandes que la MTU de ruta conocida
              si  esta  opción  está  activa  (con  EMSGSIZE).  IP_PMTUDISC_WANT  fragmentará  un
              datagrama si necesario, en base al MTU, o activará la opción de no fragmentar.

              The   system-wide   default   can   be   toggled   between   IP_PMTUDISC_WANT   and
              IP_PMTUDISC_DONT  by  writing  (respectively,  zero  and  nonzero  values)  to  the
              /proc/sys/net/ipv4/ip_no_pmtu_disc file.

              Opciones del descubrimiento del MTU de la ruta   Significado
              IP_PMTUDISC_WANT                                 Usar configuraciones por ruta.
              IP_PMTUDISC_DONT                                 Nunca realizar el descubrimiento de la MTU de la ruta.
              IP_PMTUDISC_DO                                   Realizar siempre el descubrimiento de la MTU de la ruta.
              IP_PMTUDISC_PROBE                                Define DF pero ignora el MTU de la ruta.

              Cuando  se activa el descubrimiento de la MTU de la ruta, el núcleo automáticamente
              memoriza la MTU de la ruta por anfitrión de destino. Cuando se está conectado a  un
              extremo específico mediante connect(2), se puede obtener convenientemente la MTU de
              la ruta conocida actualmente usando la opción  de  conector  IP_MTU  (por  ejemplo,
              después  de  que  haya  ocurrido  un  error  EMSGSIZE). La MTU puede cambiar con el
              tiempo. Para conectores no orientados a conexión con muchos  destinos,  también  se
              puede  acceder  a  la  nueva  MTU  usando  la  cola de errores (vea IP_RECVERR). Se
              encolará un nuevo error para cada actualización que llegue de la MTU.

              Mientras se está realizando el descubrimiento de la MTU, se pueden perder  paquetes
              iniciales  de  los conectores de datagramas. Las aplicaciones que usan UDP deben se
              conscientes de esto y no tenerlo en cuenta para sus estrategias de retransmisión de
              paquetes.

              Para  iniciar  el  proceso  de descubrimiento de la MTU de la ruta en conectores no
              orientados a conexión, es posible comenzar con un tamaño grande de datagramas  (con
              longitudes de bytes de hasta 64KB en las cabeceras) y dejar que se reduzca mediante
              actualizaciones de la MTU de la ruta.

              Para obtener una estimación inicial de la MTU de la ruta, conecte  un  conector  de
              datagramas a una dirección de destino usando connect(2) y obtenga la MTU llamando a
              getsockopt(2) con la opción IP_MTU.

              It is possible to implement RFC  4821  MTU  probing  with  SOCK_DGRAM  or  SOCK_RAW
              sockets  by  setting  a  value of IP_PMTUDISC_PROBE (available since Linux 2.6.22).
              This is also particularly useful for diagnostic tools such  as  tracepath(8)   that
              wish to deliberately send probe packets larger than the observed Path MTU.

       IP_MULTICAST_ALL (desde Linux 2.6.31)
              This  option  can  be  used  to modify the delivery policy of multicast messages to
              sockets bound to the wildcard  INADDR_ANY  address.   The  argument  is  a  boolean
              integer  (defaults  to  1).  If set to 1, the socket will receive messages from all
              the groups that have been joined globally on the whole system.  Otherwise, it  will
              deliver messages only from the groups that have been explicitly joined (for example
              via the IP_ADD_MEMBERSHIP option) on this particular socket.

       IP_MULTICAST_IF (desde Linux 1.2)
              Set the local device for a multicast socket.  The argument for setsockopt(2)  is an
              ip_mreqn  or  (since Linux 3.5)  ip_mreq structure similar to IP_ADD_MEMBERSHIP, or
              an in_addr structure.  (The kernel determines which structure is being passed based
              on  the  size  passed  in  optlen.)   For getsockopt(2), the argument is an in_addr
              structure.

       IP_MULTICAST_LOOP (desde Linux 1.2)
              Establece  o  lee  un  argumento  entero  booleano  que  indica  si  los   paquetes
              multidestino enviados deben o no ser devueltos a los conectores locales.

       IP_MULTICAST_TTL (desde Linux 1.2)
              Establece  o  lee  el  valor  "tiempo  de vida" (time-to-live, TTL) de los paquetes
              multidestino de salida para este conector. Es  muy  importante  para  los  paquetes
              multidestino  utilizar el TTL más pequeño posible. El valor por defecto es 1 lo que
              significa que los paquetes multidestino no abandonarán la red local a menos que  el
              programa de usuario lo solicite explícitamente. El argumento es un entero.

       IP_NODEFRAG (desde Linux 2.6.36)
              si  está activo (el argumento es distinto de cero), el reensamblado de los paquetes
              salientes está desactivado en la capa de  netfilter.  El  argumento  es  un  número
              entero.

              Esta opción sólo es válida para los conectores SOCK_RAW

       IP_OPTIONS (desde Linux 2.0)
              Establece  u obtiene las opciones IP a enviar con cada paquete desde este conector.
              Los argumentos son punteros a un buffer de memoria que contiene las opciones  y  la
              longitud  de  las  opciones.  La  llamada  setsockopt(2)  establece las opciones IP
              asociadas a un conector. El tamaño máximo de opción para IPv4 es de 40  bytes.  Vea
              RFC 791  para  las  opciones  permitidas.  Cuando el paquete inicial de petición de
              conexión para un conector SOCK_STREAM contiene opciones  IP,  las  opciones  IP  se
              configurarán  automáticamente  al valor de las opciónes del paquete inicial con las
              cabeceras de enrutamiento invertidas. No se permite que  los  paquetes  de  entrada
              cambien   las  opciones  después  de  que  la  conexión  se  haya  establecido.  El
              procesamiento de todas las opciones de enrutamiento de la fuente  de  entrada  está
              desactivado  por  defecto  y  se  puede  activar  mediante  la  interfaz  en  /proc
              accept_source_route. Otras opciones, como las marcas de tiempo, todavía  se  siguen
              manejando.  Para  los  conectores  de  datagramas,  las opciones IP sólo pueden ser
              configuradas por el usuario local. Llamar a getsockopt(2) con IP_OPTIONS coloca  en
              el buffer proporcionado las opciones IP actuales usadas para enviar.

       IP_PASSSEC (desde Linux 2.6.17)
              If labeled IPSEC or NetLabel is configured on the sending and receiving hosts, this
              option enables receiving of the security context of the peer socket in an ancillary
              message  of type SCM_SECURITY retrieved using recvmsg(2).  This option is supported
              only for UDP sockets;  for  TCP  or  SCTP  sockets,  see  the  description  of  the
              SO_PEERSEC option below.

              The  value  given  as  an  argument to setsockopt(2)  and returned as the result of
              getsockopt(2)  is an integer boolean flag.

              The security context returned in the SCM_SECURITY ancillary message is of the  same
              format as the one described under the SO_PEERSEC option below.

              Note:  the  reuse of the SCM_SECURITY message type for the IP_PASSSEC socket option
              was likely a mistake, since other IP  control  messages  use  their  own  numbering
              scheme  in  the  IP  namespace and often use the socket option value as the message
              type.  There is no conflict currently since the IP option with the  same  value  as
              SCM_SECURITY is IP_HDRINCL and this is never used for a control message type.

       IP_PKTINFO (desde Linux 2.2)
              Pasa  un  mensaje  auxiliar  IP_PKTINFO  que  contiene  una  estructura pktinfo que
              proporciona alguna información sobre los paquetes de entrada.  Esto  sólo  funciona
              para  conectores  orientados a datagramas. El argumento es un indicador que le dice
              al conector si debería pasar el mensaje IP_PKTINFO. El mensaje  en  sí  mismo  sólo
              puede  ser  enviado/obtenido  como  un  mensaje  de  control  con un paquete usando
              recvmsg(2) o sendmsg(2).

                  struct in_pktinfo {
                      unsigned int   ipi_ifindex;  /* Índice de la interfaz */
                      struct in_addr ipi_spec_dst; /* Dirección local */
                      struct in_addr ipi_addr;     /* Dirección de destino
                                                      en la cabecera */
                  };

              ipi_ifindex is the unique index of  the  interface  the  packet  was  received  on.
              ipi_spec_dst  is  the  local  address of the packet and ipi_addr is the destination
              address in  the  packet  header.   If  IP_PKTINFO  is  passed  to  sendmsg(2)   and
              ipi_spec_dst  is  not  zero,  then  it  is used as the local source address for the
              routing table lookup and for setting up IP source route options.  When  ipi_ifindex
              is  not  zero,  the  primary  local address of the interface specified by the index
              overwrites ipi_spec_dst for the routing table lookup.

       IP_RECVERR (desde Linux 2.2)
              Habilita el paso adicional fiable de mensajes de error.  Cuando  se  activa  en  un
              conector  de  datagramas  todos  los  errores generados se encolarán en una cola de
              errores por conector.  Cuando  el  usuario  recibe  un  errore  procedente  de  una
              operación con un conector, se pueden recibir el errore llamando a recvmsg(2) con la
              opción MSG_ERRQUEUE activa. La estructura sock_extended_err que describe  el  error
              se pasará en un mensaje auxiliar con el tipo IP_RECVERR y el nivel IPPROTO_IP. Esto
              es útil para el manejo fiable de errores en conectores no conectados. La  parte  de
              datos recibida de la cola de errores contiene el paquete de error.

              El mensaje de control IP_RECVERR contiene una estructura sock_extended_err:

                  #define SO_EE_ORIGIN_NONE    0
                  #define SO_EE_ORIGIN_LOCAL   1
                  #define SO_EE_ORIGIN_ICMP    2
                  #define SO_EE_ORIGIN_ICMP6   3

                  struct sock_extended_err {
                      uint32_t ee_errno;   /* número del error */
                      uint8_t  ee_origin;  /* lugar donde se originó */
                      uint8_t  ee_type;    /* tipo */
                      uint8_t  ee_code;    /* código */
                      uint8_t  ee_pad;
                      uint32_t ee_info;    /* información adicional */
                      uint32_t ee_data;    /* otros datos */
                      /* A continuación aún puede ir más info */
                  };

                  struct sockaddr *SO_EE_OFFENDER(struct sock_extended_err *);

              ee_errno  contiene  el  número  de  errno del error puesto en cola. ee_origin es el
              código de origen  que  identifica  al  origen  del  error.  Los  otros  campos  son
              específicos  del  protocolo.  La  macro  SO_EE_OFFENDER  devuelve  un  puntero a la
              dirección del objeto de red dónde se originó el error dado un  puntero  al  mensaje
              auxiliar.  Si  la dirección no es conocida, el miembro sa_family de sockaddr valdrá
              AF_UNSPEC y los otros campos de sockaddr serán indefinidos.

              IP usa la estructura sock_extended_err como sigue: a  ee_origin  se  le  asigna  el
              valor   SO_EE_ORIGIN_ICMP   para   errores   recibidos   en   un   paquete  ICMP  o
              SO_EE_ORIGIN_LOCAL para errores  generados  localmente.  Los  valores  desconocidos
              deben ser ignorados. A ee_type y ee_code se les asignan los campos tipo y código de
              la cabecera ICMP. ee_info contiene la MTU descubierta  para  errores  EMSGSIZE.  El
              mensaje contiene también la estructura sockaddr_in del nodo que provocó el error, a
              la cual se puede acceder con la macro SO_EE_OFFENDER. El  campo  sin_family  de  la
              dirección  devuelta  por  SO_EE_OFFENDER  valdrá  AF_UNSPEC  cuando  la  fuente sea
              desconocida.  Cuando  el  error  se  originó  en  la  red,   todas   las   opciones
              IP(IP_OPTIONS,  IP_TTL  etc.)  activas en el conector y contenidas en el paquete de
              error, se pasan como mensajes de control. El contenido  útil  del  paquete  que  ha
              provocado  el  error  se devuelve como datos normales. Observe que TCP no posee una
              cola de errores. MSG_ERRQUEUE es ilegal en conectores SOCK_STREAM. IP_RECERR sí  es
              válido en TCP pero todos los errores son devueltos únicamente mediante funciones de
              conector o a través de SO_ERROR.

              Para conectores directos (raw), IP_RECVERR activa el paso de todos los errores ICMP
              recibidos  a  la aplicación. En cualquier otro caso, sólo se informa de los errores
              que se producen en conectores conectados.

              Esta opción establece u obtiene un valor booleano entero. Por  defecto,  IP_RECVERR
              está desactivada.

       IP_RECVOPTS (desde Linux 2.2)
              Pasa  todas  las  opciones  IP  de  entrada  al  usuario  en  un mensaje de control
              IP_OPTIONS. La cabecera de  enrutamiento  y  otras  opciones  ya  las  completa  el
              anfitrión local. No soportada para conectores SOCK_STREAM.

       IP_RECVORIGDSTADDR (desde Linux 2.6.29)
              Esta  opción  booleana,  activará  en  recvmsg(2) el mensaje auxiliar en el cual el
              núcleo devuelve la dirección de destino  original  del  datagrama  recibido.  Dicho
              mensaje auxiliar contiene una estructura sockaddr_in.

       IP_RECVTOS (desde Linux 2.2)
              Cuando está activa, se pasa el mensaje auxiliar IP_TOS con los paquetes de entrada.
              Contiene un byte que  especifica  el  campo  Tipo  de  Servicio/Precedencia  de  la
              cabecera del paquete. Espera una opción entera booleana.

       IP_RECVTTL (desde Linux 2.2)
              Cuando  esta  opción  está  activa,  pasa un mensaje de control IP_TTL con el campo
              "tiempo de vida" (time to live) del paquete recibido en forma de entero de 32 bits.
              Los conectores SOCK_STREAM no lo implementan.

       IP_RETOPTS (desde Linux 2.2)
              Identica a IP_RECVOPTS pero devuelve opciones directas sin procesar cuyas marcas de
              tiempo y opciones del registro de ruta no son completadas por este anfitrión.

       IP_ROUTER_ALERT (desde Linux 2.2)
              Pasar a este conector todos los paquetes a reenviar que  tengan  activa  la  opción
              alarma  del  enrutador  IP (IP Router Alert). Sólo válida para conectores directos.
              Esto es útil, por ejemplo, para  demonios  RSVP  en  el  espacio  de  usuario.  Los
              paquetes  interceptados  no son reenviados por el núcleo, es responsabilidad de los
              usuarios envilarlos de nuevo. Se ignora el enlace del conector, tales paquetes sólo
              son filtrados por el protocolo. Espera una opción entera.

       IP_TOS (desde Linux 1.0)
              Establece  o devuelve el campo Tipo de Servicio (Type-Of-Service, TOS) a enviar con
              cada paquete IP creado desde este conector. Se usa para priorizar los  paquetes  en
              la  red.  TOS  es  un  byte.  Existen  algunas  opciones  TOS estándares definidas:
              IPTOS_LOWDELAY para minizar  los  retrasos  en  el  caso  de  tráfico  interactivo,
              IPTOS_THROUGHPUT para optimizar el rendimiento, IPTOS_RELIABILITY para optimizar la
              fiabilidad e IPTOS_MINCOST, que se debería usar para "datos de  relleno"  donde  no
              tenga  sentido una transmisión lenta. Como mucho, se puede especificar uno de estos
              valores TOS. Los otros bits son inválidos y se limpiarán. Por defecto, Linux  envía
              primero  datagramas  IPTOS_LOWDELAY  pero  el  comportamiento  exacto depende de la
              configuración de la cola.  Algunos  niveles  de  prioridad  alta  pueden  necesitar
              privilegios de administrador (consulte la capacidad CAP_NET_ADMIN.

       IP_TRANSPARENT (desde Linux 2.6.24)
              Setting  this  boolean  option  enables  transparent proxying on this socket.  This
              socket option allows the calling application to bind to a nonlocal IP  address  and
              operate  both  as  a  client  and  a  server  with the foreign address as the local
              endpoint.  NOTE: this requires that routing be set up in a way that  packets  going
              to  the foreign address are routed through the TProxy box (i.e., the system hosting
              the application that employs the  IP_TRANSPARENT  socket  option).   Enabling  this
              socket option requires superuser privileges (the CAP_NET_ADMIN capability).

              TProxy  redirection  with the iptables TPROXY target also requires that this option
              be set on the redirected socket.

       IP_TTL (desde Linux 1.0)
              Establece u obtiene el campo "tiempo de vida" actual que se envía en  cada  paquete
              enviado desde este conector.

       IP_UNBLOCK_SOURCE (desde Linux 2.4.22 / 2.5.68)
              Desbloquea    fuentes   multidifusión   bloqueadas   con   anterioridad.   Devuelve
              EADDRNOTAVAIL cuando no se está bloqueando la fuente.

              El  argumento  es  una  estructura  ip_mreq_source  tal   como   se   describe   en
              IP_ADD_MEMBERSHIP.

       SO_PEERSEC (desde Linux 2.6.17)
              If labeled IPSEC or NetLabel is configured on both the sending and receiving hosts,
              this read-only socket option returns  the  security  context  of  the  peer  socket
              connected  to  this  socket.   By  default,  this  will be the same as the security
              context of the process that created the peer socket unless overridden by the policy
              or by a process with the required permissions.

              The  argument to getsockopt(2)  is a pointer to a buffer of the specified length in
              bytes into which the security context string will be copied.  If the buffer  length
              is less than the length of the security context string, then getsockopt(2)  returns
              -1, sets errno to ERANGE, and returns the required length via optlen.   The  caller
              should  allocate at least NAME_MAX bytes for the buffer initially, although this is
              not guaranteed to be sufficient.  Resizing the buffer to the  returned  length  and
              retrying may be necessary.

              The  security  context  string  may  include  a  terminating  null character in the
              returned length, but is not guaranteed to do so: a security context "foo" might  be
              represented  as either {'f','o','o'} of length 3 or {'f','o','o','\0'} of length 4,
              which are considered to be interchangeable.  The  string  is  printable,  does  not
              contain  non-terminating  null  characters,  and  is in an unspecified encoding (in
              particular, it is not guaranteed to be ASCII or UTF-8).

              El empleo de esta opción para conectores de la familia  AF_INET  está  implementado
              desde la versión 2.6.17 para conectores TCP y desde la 4.17 para los SCTP.

              For  SELinux,  NetLabel conveys only the MLS portion of the security context of the
              peer across the wire, defaulting the rest of the security  context  to  the  values
              defined  in  the policy for the netmsg initial security identifier (SID).  However,
              NetLabel can be configured to pass full security contexts over  loopback.   Labeled
              IPSEC  always  passes  full  security contexts as part of establishing the security
              association (SA) and looks them up based on the association for each packet.

   Interfaces /proc
       The IP protocol supports a set of /proc interfaces to configure  some  global  parameters.
       The   parameters   can   be  accessed  by  reading  or  writing  files  in  the  directory
       /proc/sys/net/ipv4/.  Interfaces described as  Boolean  take  an  integer  value,  with  a
       nonzero  value ("true") meaning that the corresponding option is enabled, and a zero value
       ("false")  meaning that the option is disabled.

       ip_always_defrag (Booleano; desde Linux 2.2.13)
              [Nueva con la versión 2.2.13 del núcleo. En  anteriores  versiones  del  núcleo  la
              característica    era   controlada   durante   la   compilación   por   la   opción
              CONFIG_IP_ALWAYS_DEFRAG] que ya no está presente en versiones 2.4.x y posteriores.

              Cuanda esta opción booleana se habilita  (es  distinta  de  0)  los  fragmentos  de
              entrada  (partes de paquetes IP que aparecen cuando algún anfitrión entre el origen
              y el destino decidió que los paquetes eran  demasiado  grandes  y  los  dividió  en
              pedazos) se reensamblarán (desfragmentarán) antes de ser procesados, incluso aunque
              vayan a ser reenviados.

              Habilítelo sólo cuando tenga en funcionamiento un  cortafuegos  que  sea  el  único
              enlace  de  su  red  o  un  proxy transparente. Nunca lo active para un router o un
              equipo. Podría perturbarse la comunicación fragmentada cuando los fragmentos viajen
              a  través de diferentes enlaces. La desfragmentación también tiene un alto coste de
              tiempo de CPU y de memoria.

              Esto se activa 'automágicamente' cuando se configura un enmascaramiento o un  proxy
              transparente.

       ip_autoconfig (desde Linux 2.2 to 2.6.17)
              No documentado.

       ip_default_ttl (entero; por defecto: 64; a partir de la versión 2.2)
              Establece  el  valor  "tiempo de vida" (TTL) por defecto de los paquetes de salida.
              Éste se puede cambiar para cada conector con la opción IP_TTL.

       ip_dynaddr (Booleano; por defecto: deshabilitado; a partir de Linux 2.0.31)
              Activa la reescritura dinámica de la dirección del conector y de  las  entradas  de
              enmascaramiento (masquerading) para cuando cambie la dirección de la interfaz. Esto
              es  útil  para  interfaces  dialup  (como  las  telefónicas)  con  direcciones   IP
              cambiantes. 0 significa no reescritura, 1 la activa y 2 activa el modo verboso.

       ip_forward (Booleano; por defecto: dehabilitado; a partir de la versión 1.2)
              Activa  el  reenvío  IP  con  una  opción  booleana. También se puede configurar el
              reenvío IP interfaz a interfaz.

       ip_local_port_range (desde Linux 2.2)
              This file contains two integers that define the default local port range  allocated
              to  sockets  that are not explicitly bound to a port number—that is, the range used
              for ephemeral ports.  An ephemeral port is allocated to a socket in  the  following
              circumstances:

              *  el  número  de  puerto  aparece  como  0 en una dirección de conector al invocar
                 bind(2);

              *  se invoca listen(2) en un conector de flujo sin enlzar previamente;

              *  Se ha invocado connect(2) en un conector no conectado previamente.

              *  se invoca sendto(2) en un conector de datagrama no conectado previamente.

              Allocation of ephemeral ports starts with the first number  in  ip_local_port_range
              and  ends  with  the  second number.  If the range of ephemeral ports is exhausted,
              then the relevant system call returns an error (but see BUGS).

              Note that the port range in ip_local_port_range should not conflict with the  ports
              used  by  masquerading (although the case is handled).  Also, arbitrary choices may
              cause problems with some firewall packet filters that make  assumptions  about  the
              local  ports  in  use.   The  first number should be at least greater than 1024, or
              better, greater than 4096, to avoid clashes with well known ports and  to  minimize
              firewall problems.

       ip_no_pmtu_disc (Boolean; default: disabled; since Linux 2.2)
              Si  está activa, por defecto no realiza el descubrimiento de la MTU de la ruta para
              los conectores TCP. El descubrimiento de la MTU de  la  ruta  puede  fallar  si  se
              encuentran  en la ruta cortafuegos mal configurados (como los que pierden todos los
              paquetes ICMP) o interfaces mal configuradas (por ejemplo, un enlace punto a  punto
              en  donde  ambos  extremos no se ponen de acuerdo en la MTU). Es mejor arreglar los
              enrutadores defectuosos de la ruta que desactivar globalmente el descubrimiento  de
              la MTU de la ruta ya que el no realizarlo incurre en un alto coste para la red.

       ip_nonlocal_bind (Boolean; default: disabled; since Linux 2.4)
              If  set,  allows processes to bind(2)  to nonlocal IP addresses, which can be quite
              useful, but may break some applications.

       ip6frag_time (integer; default: 30)
              Time in seconds to keep an IPv6 fragment in memory.

       ip6frag_secret_interval (integer; default: 600)
              Regeneration interval (in seconds) of the hash secret (or  lifetime  for  the  hash
              secret) for IPv6 fragments.

       ipfrag_high_thresh (integer), ipfrag_low_thresh (integer)
              Si  el  número  de  fragmentos IP encolados alcanza el valor ipfrag_high_thresh, la
              cola se recorta al valor ipfrag_low_thresh. Contiene un entero  con  el  número  de
              bytes.

       neigh/*
              Vea arp(7).

   Ioctls
       Todas las ioctls descritas en socket(7) se aplican a ip.

       Las  ioctls  para  configurar los parámetros de los dispositivos genéricos se describen en
       netdevice(7).

ERRORES

       EACCES The user tried to execute an operation without the  necessary  permissions.   These
              include:  sending  a  packet to a broadcast address without having the SO_BROADCAST
              flag set; sending a packet  via  a  prohibit  route;  modifying  firewall  settings
              without   superuser   privileges  (the  CAP_NET_ADMIN  capability);  binding  to  a
              privileged port without superuser privileges (the CAP_NET_BIND_SERVICE capability).

       EADDRINUSE
              Se ha intentado el enlace a una dirección ya en uso.

       EADDRNOTAVAIL
              Se ha solicitado una interfaz inexistente o la dirección fuente  solicitada  no  es
              local.

       EAGAIN La operación se bloquearía sobre un conector bloqueante.

       EALREADY
              Ya se está realizando una operación de conexión sobre un conector no bloqueante.

       ECONNABORTED
              Se ha cerrado la conexión durante un accept(2).

       EHOSTUNREACH
              Ninguna  entrada  válida  de  la tabla de enrutamiento coincide con la dirección de
              destino. Este error puede ser provocado  por  un  mensaje  ICMP  procedente  de  un
              enrutador remoto o por la tabla local de enrutamiento.

       EINVAL Se  ha  pasado  un argumento inválido. Para las operaciones de envío, éste se puede
              producir al enviar a una ruta blackhole.

       EISCONN
              Se ha llamado a connect(2) sobre un conector ya conectado.

       EMSGSIZE
              El datagrama es mayor que una MTU de la ruta y no puede ser fragmentado.

       ENOBUFS, ENOMEM
              No hay suficiente memoria libre. Esto a menudo significa que la reserva de  memoria
              está  limitada  por  los  límites  del  búfer  de conectores, no por la memoria del
              sistema, aunque esto no es coherente al 100%.

       ENOENT Se ha llamado a SIOCGSTAMP sobre un conector en donde no han llegado paquetes.

       ENOPKG No se ha configurado un subsistema del núcleo.

       ENOPROTOOPT y EOPNOTSUPP
              Se han pasado opciones de conector inválidas.

       ENOTCONN
              La operación solo está definida en un conector conectado pero el conector  no  está
              conectado.

       EPERM  El  usuario  no  tiene  permiso  para  establecer  una  prioridad  alta, cambiar la
              configuración o enviar señales al proceso o grupo solicitado.

       EPIPE  La conexión ha sido cerrada o cancelada por el otro extremo.

       ESOCKTNOSUPPORT
              El conector no está configurado o se ha solicitado un tipo de conector desconocido.

       Los protocolos superpuestos pueden generar otros errores. Vea  tcp(7),  raw(7),  udp(7)  y
       socket(7).

NOTAS

       IP_FREEBIND,   IP_MSFILTER,   IP_MTU,   IP_MTU_DISCOVER,  IP_RECVORIGDSTADDR,  IP_PASSSEC,
       IP_PKTINFO, IP_RECVERR, IP_ROUTER_ALERT y IP_TRANSPARENT son específicas de Linux.

       Tenga mucho cuidado con la opción SO_BROADCAST (no es privilegiada  en  Linux).  Es  fácil
       sobrecargar  la  red  realizando  difusiones  sin  tomar  precauciones.  Para  los  nuevos
       protocolos de aplicación es mejor usar un grupo multidestino  que  usar  la  difusión.  La
       difusión no está recomendada.

       Otras   implementaciones   de   conectores  BSD  proporcionan  las  opciones  de  conector
       IP_RCVDSTADDR y IP_RECVIF para obtener la dirección  de  destino  y  la  interfaz  de  los
       datagramas recibidos. Linux posee la opción más general IP_PKTINFO para la misma tarea.

       Algunas  implementaciones de conectores de BSD también proporcionan una opción IP_RECVTTL,
       pasando un mensaje auxiliar con el tipo IP_RECVTTL en el paquete entrante. Esta opción  es
       diferente de IP_TTL empleada en Linux.

       El  empleo de la opción de nivel SOL_IP en conectores no es portable. Las pilas basadas en
       BSD emplean el nivel IPPROTO_IP

       INADDR_ANY (0.0.0.0) y INADDR_BROADCAST (255.255.255.255) son neutrales respecto del orden
       de los bytes.
        Esto significa que htonl(3) no les afecta.

   Compatibilidad
       Por  compatibilidad con Linux 2.0, todavía se soporta la sintáxis obsoleta socket(AF_INET,
       SOCK_PACKET, protocol) para abrir un conector de paquetes (packet(7)).  Se  recomienda  no
       usar  esta  sintaxis  y debería reemplazarse por socket(AF_PACKET, SOCK_RAW, protocol). La
       principal diferencia es la nueva estructura de direcciones sockaddr_ll para la información
       genérica de la capa de enlace en lugar de la antigua sockaddr_pkt.

ERRORES

       Hay demasiados valores de error inconsistentes.

       The  error  used  to  diagnose  exhaustion  of the ephemeral port range differs across the
       various  system  calls  (connect(2),  bind(2),  listen(2),  sendto(2))   that  can  assign
       ephemeral ports.

       No se han descrito las ioctls para configurar las opciones de interfaz específicas de IP y
       las tablas ARP.

       Recibir la dirección de  destino  original  con  MSG_ERRQUEUE  en  msg_name  a  través  de
       recvmsg(2) no funciona bien en algunos núcleos de la serie 2.2.

VÉASE TAMBIÉN

       recvmsg(2),  sendmsg(2),  byteorder(3),  capabilities(7),  icmp(7), ipv6(7), netdevice(7),
       netlink(7), raw(7), socket(7), tcp(7), udp(7), ip(8)

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

       RFC 791 para la especificación IP original. RFC1122 para los requerimientos IPv4  para  lo
       anfitriones. RFC 1812 para los requeremientos IPv4 para los enrutadores.

COLOFÓN

       Esta  página es parte de la versión 5.10 del proyecto Linux man-pages. Puede encontrar una
       descripción del proyecto, información sobre cómo informar errores y la última  versión  de
       esta página en https://www.kernel.org/doc/man-pages/.

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
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ 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 ⟨⟩.