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  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.

Linux                                           1 Noviembre 2020                                           IP(7)