Provided by: manpages-es_1.55-8_all bug

NOMBRE

       ip - Implementación Linux del protocolo IPv4

SINOPSIS

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

       tcp_socket = socket(PF_INET, SOCK_STREAM, 0);
       raw_socket = socket(PF_INET, SOCK_RAW, protocol);
       udp_socket = socket(PF_INET, SOCK_DGRAM, protocol);

DESCRIPCIÓN

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

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

       Un  conector  IP  se  crea  llamando a la función socket(2) de la forma
       socket(PF_INET,  socket_type,  protocol).   Los  tipos  de   conectores
       válidos  son SOCK_STREAM para abrir un conector tcp(7), SOCK_DGRAM para
       abrir un conector udp(7) o SOCK_RAW para abrir un  conector  directo  (
       raw(7))  para  acceder  al  protocolo  IP directamente.  protocol es el
       protocolo IP en la cabecera IP a enviar o recibir. Los  únicos  valores
       válidos  para  protocol  son 0 y IPPROTO_TCP para conectores TCP, y 0 y
       IPPROTO_UDP para conectores UDP.  Para  SOCK_RAW  debe  especificar  un
       protocolo  IP válido del IANA definido por uno de los números asignados
       en el RFC1700.

       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 listen(2) o 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. 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 */
                  u_int16_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 {
                  u_int32_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 reservados.  Sólo los procesos con identificador de
       usuario efectivo 0 o la capacidad CAP_NET_BIND_SERVICE pueden  realizar
       enlaces  mediante  bind(2)  a  estos  conectores.  Dese  cuenta  que el
       protocolo IPv4 puro no posee como tal el concepto de puerto. Estos  son
       implementados por protocolos superiores como tcp(7) y udp(7).

       sin_addr es la dirección IP del anfitrión (host).  El miembro s_addr de
       struct in_addr contiene la dirección de la interfaz del  anfitrión  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 SOL_IP.  Una opción entera
       booleana es cero cuando es  falsa  y  cualquier  otra  cosa  cuando  es
       cierta.

       IP_OPTIONS
              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 RFC791  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
              usando  la sysctl 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_PKTINFO
              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 es el índice de la interfaz en la que se recibió  el
              paquete.   ipi_spec_dst  es  la  dirección  local  del paquete y
              ipi_addr es la dirección de destino en la cabecera del  paquete.
              Si  se  pasa  IP_PKTINFO  a  sendmsg(2), el paquete de salida se
              enviará a través de la interfaz especificada en ipi_ifindex  con
              la dirección de destino indicada en ipi_spec_dst.

       IP_RECVTOS
              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
              Cuando esta opción está  activa,  pasa  un  mensaje  de  control
              IP_RECVTTL  con  el  campo  "tiempo  de vida" (time to live) del
              paquete recibido dado por un byte. No soportada  por  conectores
              SOCK_STREAM.

       IP_RECVOPTS
              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_RETOPTS
              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_TOS 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
              disciplina de  encolamiento  configurada.   Algunos  niveles  de
              prioridad  alta  pueden  necesitar  un  identificador de usuario
              efectivo 0 o la capacidad CAP_NET_ADMIN.  La  prioridad  también
              se  puede  configurar  de una manera independiente del protocolo
              mediante la opción de conector ( SOL_SOCKET,  SO_PRIORITY)  (vea
              socket(7)).

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

       IP_HDRINCL
              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_RECVERR (definido en <linux/errqueue.h>)
              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 SOL_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 {
                  u_int32_t       ee_errno;   /* número de error */
                  u_int8_t        ee_origin;  /* dónde se originó el error */
                  u_int8_t        ee_type;    /* tipo */
                  u_int8_t        ee_code;    /* código */
                  u_int8_t        ee_pad;
                  u_int32_t       ee_info;    /* información adicional */
                  u_int32_t       ee_data;    /* otros datos */
                  /* More data may follow */
              };

              struct sockaddr *SO_EE_OFFENDER(struct sock_extended_err *);

              ee_errno  contiene  el número de error 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.

              Dese cuenta que TCP no posee una cola de errores.   MSG_ERRQUEUE
              es  ilegal  en  conectores  SOCK_STREAM.   Por  tanto, todos los
              errores son devueltos sólo por funciones de conector o  mediante
              SO_ERROR.

              Para  conectores  directos  (raw),  IP_RECVERR activa el paso de
              todos los errores ICMP recibidos a la aplicación. En 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_PMTU_DISCOVER
              Establece  o  recibe  la configuración del "descubrimiento de la
              MTU de la ruta"  para  el  conector.  Cuando  se  activa,  Linux
              realizará  el  descubrimiento  de  la  MTU  de  la  ruta en este
              conector tal y como se define  en  RFC1191.  La  opción  de  "no
              fragmentar"  se  activa  en  todos  los datagramas de salida. El
              valor global por defecto del sistema  se  controla  mediante  la
              sysctl  ip_no_pmtu_disc  para  los conectores SOCK_STREAM y para
              todos los demás está desactivado. Para  conectores  que  no  son
              SOCK_STREAM  es responsabilidad del usuario enpaquetar los datos
              en trozos 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 ).

              Opciones               del   Significado
              descubrimiento de  la  MTU
              de la ruta
              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.

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

       IP_MTU Obtiene la MTU de la ruta conocida actualmente para el  conector
              actual.  Sólo  válida  cuando  el  conector  ha  sido conectado.
              Devuelve un entero.  Sólo válida para getsockopt(2).

       IP_ROUTER_ALERT
              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_MULTICAST_TTL
              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_MULTICAST_LOOP
              Establece  o  lee un argumento entero booleano que indica si los
              paquetes multidestino enviados deben o no ser  devueltos  a  los
              conectores locales.

       IP_ADD_MEMBERSHIP
              Unirse  a  un grupo multidestino. El argumento es una estructura
              struct 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. 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.

              Por  compatibilidad,  todavía  se  soporta la antigua estructura
              ip_mreq.  Difiere de ip_mreqn sólo en que no  incluye  el  campo
              imr_ifindex.  Ésta opción sólo es válida para setsockopt(2).

       IP_DROP_MEMBERSHIP
              Dejar  un  grupo  multidestino.  El  argumento es una estructura
              ip_mreqn o ip_mreq similar a la de IP_ADD_MEMBERSHIP.

       IP_MULTICAST_IF
              Establece el dispositivo local para un conector multidestino. El
              argumento  es  una estructura ip_mreqn o ip_mreq similar a la de
              IP_ADD_MEMBERSHIP.

              Cuando se pasa una opción de conector inválida, se  devuelve  el
              error ENOPROTOOPT.

SYSCTLS

       El  protocolo  IP  soporta  la  interfaz sysctl para configurar algunas
       opciones globales. Se puede acceder a las sysctls leyendo o escribiendo
       los ficheros /proc/sys/net/ipv4/* o usando la interfaz sysctl(2).

       ip_default_ttl
              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_forward
              Activa  el  reenvío IP con una opción booleana. También se puede
              configurar el reenvío IP interfaz a interfaz.

       ip_dynaddr
              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_autoconfig
              No documentado.

       ip_local_port_range
              Contiene dos enteros que definen el intervalo de puertos locales
              por defecto reservados para los conectores. La reserva  comienza
              con  el  primer número y termina con el segundo. Dése cuenta que
              estos no deben entrar en conflicto con los puertos usados por el
              enmascaramiento   (aunque  se  trate  el  caso).   También,  las
              elecciones arbitrarias pueden  producir  problemas  con  algunos
              filtros  de  paquetes  del cortafuegos que realizan suposiciones
              sobre los puertos locales en uso. El primer número debe  ser  al
              menos >1024, mejor >4096 para evitar conflictos con puertos bien
              conocidos y para minimizar los problemas con el cortafuegos.

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

       ipfrag_high_thresh, ipfrag_low_thresh
              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.

       ip_always_defrag
              [Nueva con la versión 2.2.13 del núcleo. En anteriores versiones
              del  núcleo  la  característica  era  controlada  en  tiempo  de
              compilación por la opción CONFIG_IP_ALWAYS_DEFRAG]

              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.

              Sólo habilítelo cuando tenga en  funcionamiento  un  cortafuegos
              que sea el único enlace de su red o un proxy transparente. Nunca
              lo active para un enrutador u ordenador normal. En otro caso, se
              puede   perturbar   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.

       neigh/*
              Vea arp(7).

IOCTLS

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

       Las  ioctls  para  configurar el cortafuegos se documentan en la página
       ipfw(7) del paquete ipchains.

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

OBSERVACIONES

       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.

ERRORES

       ENOTCONN
              La operación sólo está definida en conectores  conectados,  pero
              el conector no lo está.

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

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

       EACCES El  usuario ha intentado ejecutar una operación sin los permisos
              necesarios.  Estos incluyen: enviar un paquete a  una  dirección
              de difusión sin haber activado la opción SO_BROADCAST, enviar un
              paquete  a  través  de  una   ruta   prohibida,   modificar   la
              configuración   del   cortafuegos   sin   tener   la   capacidad
              CAP_NET_ADMIN ni un  identificador  de  usuario  efectivo  0,  y
              realizar  un  enlace  a  un  puerto  reservado  sin la capacidad
              CAP_NET_BIND_SERVICE ni un identificador de usuario efectivo  0.

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

       ENOPROTOOPT y EOPNOTSUPP
              Se han pasado una opción de conector inválida.

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

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

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

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

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

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

       EPIPE  La conexión se ha cerrado inesperadamente o el otro  extremo  la
              ha cancelado.

       ENOENT Se  ha  llamado  a  SIOCGSTAMP  con  un  conector en donde no ha
              llegado ningún paquete.

       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.

       ENODEV Dispositivo  de  red  no disponible o incapaz de enviar paquetes
              IP.

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

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

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

VERSIONES

       IP_PKTINFO,  IP_MTU,   IP_PMTU_DISCOVER,   IP_PKTINFO,   IP_RECVERR   y
       IP_ROUTER_ALERT  son  opciones nuevas del núcleo 2.2 de Linux.  También
       son todas específicas de Linux y no deberían usarse  en  programas  que
       pretendan ser portables.

       struct  ip_mreqn  es  nueva  en  Linux  2.2.   Linux 2.0 sólo soportaba
       ip_mreq.

       Las sysctls se introdujeron en la versión 2.2 de Linux.

COMPATIBILIDAD

       Por compatibilidad con  Linux  2.0,  todavía  se  soporta  la  sintáxis
       obsoleta  socket(PF_INET, SOCK_RAW, protocol) para abrir un conector de
       paquetes (packet(7)).  Se recomienda no usar esta  sintaxis  y  debería
       reemplazarse  por  socket(PF_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.

FALLOS

       Existen demasiados valores de error inconsistentes.

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

       Algunas  versiones  de  glibc olvidan declarar in_pktinfo.  Actualmente
       ésto se soluciona copiándolo  en  su  programa  desde  esta  página  de
       manual.

       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.

AUTORES

       Esta página de manual fue escrita por Andi Kleen.

VÉASE TAMBIÉN

       sendmsg(2),  recvmsg(2), socket(7), netlink(7), tcp(7), udp(7), raw(7),
       ipfw(7)

       RFC791 para la especificación IP original.
       RFC1122 para los requerimientos IPv4 para lo anfitriones.
       RFC1812 para los requeremientos IPv4 para los enrutadores.