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

NOMBRE

       ip - Implementacion 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'ON

       Linux  implementa  el  Protocolo  de  Internet (Internet Protocol, IP),
       version  4,  descrito  en  RFC791   y   RFC1122.    ip   contiene   una
       implementacion  de  multidestino del Nivel 2 segun el RFC1112.  Tambien
       contiene un enrutador IP incluyendo un filtro de paquetes.

       La interfaz del programador es compatible con la de los conectores BSD.
       Para mas informacion sobre conectores, vea socket(7).

       Un  conector  IP  se  crea  llamando a la funcion socket(2) de la forma
       socket(PF_INET,  socket_type,  protocol).   Los  tipos  de   conectores
       validos  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  unicos  valores
       validos  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 valido del IANA definido por uno de los numeros asignados
       en el RFC1700.

       Cuando  un  proceso  quiere  recibir  nuevos  paquetes  de  entrada   o
       conexiones,  debe  enlazar  un  conector a una direccion de la interfaz
       local usando bind(2).  Solo se puede ligar un  conector  IP  a  un  par
       (direccion,  puerto)  dado.   Cuando en la llamada a bind se especifica
       INADDR_ANY, el conector sera ligado a  todas  las  interfaces  locales.
       Cuando  se  llama a listen(2) o connect(2) con un conector no enlazado,
       el conector sera automaticamente ligado a  un  puerto  aleatorio  libre
       cuya  direccion  local sea INADDR_ANY.  Una direccion local de conector
       TCP que haya sido enlazada, no  estara  disponible  durante  un  cierto
       tiempo despues de que se cierre, a menos que se haya activado la opcion
       SO_REUSEADDR.  Se debe tener cuidado al usar esta opcion  ya  que  hace
       que TCP sea menos fiable.

FORMATO DE LAS DIRECCIONES

       Una  direccion  de  conector  IP  se define como una combinacion de una
       direccion de interfaz IP y un numero de puerto. El protocolo IP  basico
       no   proporciona   numeros  de  puerto.  Estos  son  implementados  por
       protocolos de  un  nivel  mas  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;  /* direccion de Internet */
              };

              /* Direccion de Internet. */
              struct in_addr {
                  u_int32_t      s_addr;     /* direccion 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 mayoria 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 numeros de puerto por debajo de 1024
       se  llaman  puertos reservados.  Solo 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 direccion IP del anfitrion (host).  El miembro s_addr de
       struct in_addr contiene la direccion de la interfaz del  anfitrion  con
       los  bytes  en  orden de red.  Solo se deberia 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 resolucion de
       nombres (vea gethostbyname(3)).  Las direcciones  IPv4  se  dividen  en
       direcciones  unidestino,  de  difusion  y multidestino. Las direcciones
       unidestino  especifican  una  unica  interfaz  de  un  anfitrion,   las
       direcciones  de difusion especifican todos los anfitriones de una red y
       las direcciones multidestino identifican a todos los anfitriones de  un
       grupo  multidestino.  Solo  se  pueden  enviar  datagramas  a o recibir
       datagramas de direcciones de difusion cuando esta activa la  opcion  de
       conector  SO_BROADCAST.   En  la  implementacion actual, los conectores
       orientados a conexion solo pueden usar direcciones unidestino.

       Dese cuenta que la direccion y el puerto se almacenan siempre en  orden
       de  red.  En  particular, esto significa que necesita llamar a htons(3)
       con el numero que se ha asignado al  puerto.  Todas  las  funciones  de
       manipulacion  de direccion/puerto en la biblioteca estandar trabajan en
       orden de red.

       Existen  varias  direcciones  especiales:  INADDR_LOOPBACK  (127.0.0.1)
       siempre   se  refiere  al  ordenador  local  a  traves  del  dispositvo
       `loopback'.  INADDR_ANY (0.0.0.0) significa  cualquier  direccion  para
       enlazar.    INADDR_BROADCAST   (255.255.255.255)   significa  cualquier
       ordenador y, por razones historicas, tiene el mismo efecto en el enlace
       que INADDR_ANY.

OPCIONES DE LOS CONECTORES

       IP  soporta  algunas opciones de conector especificas 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 opcion 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  tamano  maximo  de  opcion para IPv4 es de 40
              bytes. Vea RFC791  para  las  opciones  permitidas.   Cuando  el
              paquete  inicial  de  peticion  de  conexion  para  un  conector
              SOCK_STREAM  contiene  opciones   IP,   las   opciones   IP   se
              configuraran  automaticamente  al  valor  de  las  opciones  del
              paquete inicial con las cabeceras de enrutamiento invertidas. No
              se  permite  que  los  paquetes  de entrada cambien las opciones
              despues  de  que  la   conexion   se   haya   establecido.    El
              procesamiento de todas las opciones de enrutamiento de la fuente
              de entrada esta desactivado  por  defecto  y  se  puede  activar
              usando  la sysctl accept_source_route.  Otras opciones, como las
              marcas  de  tiempo,  todavia  se  siguen  manejando.  Para   los
              conectores  de  datagramas,  las  opciones  IP  solo  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 informacion sobre los paquetes de
              entrada.  Esto  solo  funciona  para  conectores  orientados   a
              datagramas.   El  argumento  es  un  indicador  que  le  dice al
              conector si deberia pasar el mensaje IP_PKTINFO. El  mensaje  en
              si  mismo  solo  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;  /* Indice de la interfaz */
                  struct in_addr ipi_spec_dst; /* Direccion local */
                  struct in_addr ipi_addr;     /* Direccion de destino en la
                                                  cabecera */
              };

              ipi_ifindex es el indice de la interfaz en la que se recibio  el
              paquete.   ipi_spec_dst  es  la  direccion  local  del paquete y
              ipi_addr es la direccion de destino en la cabecera del  paquete.
              Si  se  pasa  IP_PKTINFO  a  sendmsg(2), el paquete de salida se
              enviara a traves de la interfaz especificada en ipi_ifindex  con
              la direccion de destino indicada en ipi_spec_dst.

       IP_RECVTOS
              Cuando  esta  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 opcion entera booleana.

       IP_RECVTTL
              Cuando esta opcion esta  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 anfitrion 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 anfitrion.

       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    estandares   definidas:
              IPTOS_LOWDELAY para minizar los retrasos en el caso  de  trafico
              interactivo,  IPTOS_THROUGHPUT  para  optimizar  el rendimiento,
              IPTOS_RELIABILITY para optimizar la fiabilidad e  IPTOS_MINCOST,
              que  se  deberia  usar  para  "datos  de relleno" donde no tenga
              sentido una transmision lenta. Como mucho, se puede  especificar
              uno  de  estos  valores  TOS.  Los otros bits son invalidos y se
              limpiaran.   Por  defecto,  Linux   envia   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  tambien
              se  puede  configurar  de una manera independiente del protocolo
              mediante la opcion de conector ( SOL_SOCKET,  SO_PRIORITY)  (vea
              socket(7)).

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

       IP_HDRINCL
              Cuando esta activa,  el  usuario  proporciona  una  cabecera  IP
              delante  de  los  datos  de usuario. Solo valida para conectores
              SOCK_RAW.  Vea raw(7) para mas informacion. Cuando  esta  opcion
              esta 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 encolaran en una  cola  de  errores  por  conector.
              Cuando  el  usuario recibe un errore procedente de una operacion
              con  un  conector,  se  pueden  recibir  el  errore  llamando  a
              recvmsg(2)  con  la  opcion  MSG_ERRQUEUE  activa. La estructura
              sock_extended_err que describe el error se pasara en un  mensaje
              auxiliar con el tipo IP_RECVERR y el nivel SOL_IP.  Esto es util
              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;   /* numero de error */
                  u_int8_t        ee_origin;  /* donde se origino el error */
                  u_int8_t        ee_type;    /* tipo */
                  u_int8_t        ee_code;    /* codigo */
                  u_int8_t        ee_pad;
                  u_int32_t       ee_info;    /* informacion 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 numero de error del error puesto en cola.
              ee_origin es el codigo de origen que identifica  al  origen  del
              error.  Los otros campos son especificos del protocolo. La macro
              SO_EE_OFFENDER devuelve un puntero a la direccion del objeto  de
              red  donde  se  origino  el  error  dado  un  puntero al mensaje
              auxiliar.  Si la direccion no es conocida, el miembro  sa_family
              de  sockaddr  valdra  AF_UNSPEC  y  los otros campos de sockaddr
              seran 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 codigo de  la
              cabecera ICMP.  ee_info contiene la MTU descubierta para errores
              EMSGSIZE.  El mensaje contiene tambien la estructura sockaddr_in
              del nodo que provoco el error, a la cual se puede acceder con la
              macro SO_EE_OFFENDER.   El  campo  sin_family  de  la  direccion
              devuelta  por  SO_EE_OFFENDER  valdra AF_UNSPEC cuando la fuente
              sea desconocida.  Cuando el error se origino 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  util  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 solo 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 aplicacion. En otro  caso,
              solo  se  informa  de  los errores que se producen en conectores
              conectados.

              Esta opcion establece u obtiene un valor booleano  entero.   Por
              defecto, IP_RECVERR esta desactivada.

       IP_PMTU_DISCOVER
              Establece  o  recibe  la configuracion del "descubrimiento de la
              MTU de la ruta"  para  el  conector.  Cuando  se  activa,  Linux
              realizara  el  descubrimiento  de  la  MTU  de  la  ruta en este
              conector tal y como se define  en  RFC1191.  La  opcion  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 demas esta desactivado. Para  conectores  que  no  son
              SOCK_STREAM  es responsabilidad del usuario enpaquetar los datos
              en trozos de tamano  MTU  y  realizar  la  retransmision  si  es
              necesario.  El  nucleo  rechazara aquellos paquetes que sean mas
              grandes que la MTU de ruta conocida si esta opcion  esta  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
              nucleo automaticamente memoriza la MTU de la ruta por  anfitrion
              de  destino.   Cuando  se esta conectado a un extremo especifico
              mediante connect(2), se puede obtener convenientemente la MTU de
              la ruta conocida actualmente usando la opcion de conector IP_MTU
              (por ejemplo, despues de que haya ocurrido un  error  EMSGSIZE).
              La   MTU  puede  cambiar  con  el  tiempo.  Para  conectores  no
              orientados a conexion con  muchos  destinos,  tambien  se  puede
              acceder   a  la  nueva  MTU  usando  la  cola  de  errores  (vea
              IP_RECVERR).  Se encolara un nuevo error para cada actualizacion
              que llegue de la MTU.

              Mientras  se  esta  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
              retransmision de paquetes.

              Para  iniciar  el proceso de descubrimiento de la MTU de la ruta
              en conectores no orientados a conexion, es posible comenzar  con
              un  tamano 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  estimacion  inicial  de  la  MTU de la ruta,
              conecte un conector de datagramas a  una  direccion  de  destino
              usando  connect(2) y obtenga la MTU llamando a getsockopt(2) con
              la opcion IP_MTU.

       IP_MTU Obtiene la MTU de la ruta conocida actualmente para el  conector
              actual.  Solo  valida  cuando  el  conector  ha  sido conectado.
              Devuelve un entero.  Solo valida para getsockopt(2).

       IP_ROUTER_ALERT
              Pasar a este conector todos los paquetes "a reenviar" que tengan
              activa  la  opcion  "alarma del enrutador IP" (IP Router Alert).
              Solo valida para conectores directos. Esto es util, por ejemplo,
              para  demonios  RSVP  en  el  espacio  de  usuario. Los paquetes
              interceptados   no   son   reenviados   por   el   nucleo,    es
              responsabilidad  de  los usuarios envilarlos de nuevo. Se ignora
              el enlace del conector, tales paquetes solo son filtrados por el
              protocolo. Espera una opcion 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 mas
              pequeno posible. El valor por defecto es 1 lo que significa  que
              los  paquetes  multidestino  no abandonaran la red local a menos
              que el  programa  de  usuario  lo  solicite  explicitamente.  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; /* Direccion IP del grupo
                                                   multidestino */
                  struct in_addr imr_address;   /* Direccion IP de la
                                                   interfaz local */
                  int            imr_ifindex;   /* Indice de la interfaz */
              };

              imr_multiaddr contiene la direccion del  grupo  multidestino  al
              que  la  aplicacion  se quiere unir o quiere dejar. Debe ser una
              direccion multidestino valida.  imr_address es la  direccion  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 indice de la interfaz que
              debe unirse a o dejar el grupo imr_multiaddr, o 0  para  indicar
              cualquier interfaz.

              Por  compatibilidad,  todavia  se  soporta la antigua estructura
              ip_mreq.  Difiere de ip_mreqn solo en que no  incluye  el  campo
              imr_ifindex.  Esta opcion solo es valida 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 opcion de conector invalida, 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. Este se puede cambiar para cada conector con
              la opcion IP_TTL.

       ip_forward
              Activa  el  reenvio IP con una opcion booleana. Tambien se puede
              configurar el reenvio IP interfaz a interfaz.

       ip_dynaddr
              Activa la reescritura dinamica de la direccion del conector y de
              las  entradas  de  enmascaramiento  (masquerading)  para  cuando
              cambie la direccion de la interfaz. Esto es util para interfaces
              dialup  (como  las telefonicas) 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 numero y termina con el segundo. Dese cuenta que
              estos no deben entrar en conflicto con los puertos usados por el
              enmascaramiento   (aunque  se  trate  el  caso).   Tambien,  las
              elecciones arbitrarias pueden  producir  problemas  con  algunos
              filtros  de  paquetes  del cortafuegos que realizan suposiciones
              sobre los puertos locales en uso. El primer numero 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 esta 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  numero  de  fragmentos  IP  encolados  alcanza  el valor
              ipfrag_high_thresh,   la    cola    se    recorta    al    valor
              ipfrag_low_thresh.  Contiene un entero con el numero de bytes.

       ip_always_defrag
              [Nueva con la version 2.2.13 del nucleo. En anteriores versiones
              del  nucleo  la  caracteristica  era  controlada  en  tiempo  de
              compilacion por la opcion CONFIG_IP_ALWAYS_DEFRAG]

              Cuanda  esta  opcion booleana se habilita (es distinta de 0) los
              fragmentos de entrada (partes de paquetes IP que aparecen cuando
              algun  anfitrion  entre  el  origen y el destino decidio que los
              paquetes eran demasiado grandes y los  dividio  en  pedazos)  se
              reensamblaran (desfragmentaran) antes de ser procesados, incluso
              aunque vayan a ser reenviados.

              Solo habilitelo cuando tenga en  funcionamiento  un  cortafuegos
              que sea el unico enlace de su red o un proxy transparente. Nunca
              lo active para un enrutador u ordenador normal. En otro caso, se
              puede   perturbar   la   comunicacion   fragmentada  cuando  los
              fragmentos  viajen  a   traves   de   diferentes   enlaces.   La
              desfragmentacion  tambien tiene un alto coste de tiempo de CPU y
              de memoria.

              Esto  se  activa  automagicamente   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 pagina
       ipfw(7) del paquete ipchains.

       Las ioctls para configurar los parametros de los dispositivos genericos
       se describen en netdevice(7).

OBSERVACIONES

       Tenga  mucho  cuidado con la opcion SO_BROADCAST (no es privilegiada en
       Linux). Es facil sobrecargar la red  realizando  difusiones  sin  tomar
       precauciones. Para los nuevos protocolos de aplicacion es mejor usar un
       grupo  multidestino  que  usar  la  difusion.  La  difusion   no   esta
       recomendada.

       Otras  implementaciones  de conectores BSD proporcionan las opciones de
       conector IP_RCVDSTADDR y IP_RECVIF para obtener la direccion de destino
       y  la  interfaz  de los datagramas recibidos. Linux posee la opcion mas
       general IP_PKTINFO para la misma tarea.

ERRORES

       ENOTCONN
              La operacion solo esta definida en conectores  conectados,  pero
              el conector no lo esta.

       EINVAL Se  ha  pasado  un  argumento  invalido. Para las operaciones de
              envio, este 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 operacion sin los permisos
              necesarios.  Estos incluyen: enviar un paquete a  una  direccion
              de difusion sin haber activado la opcion SO_BROADCAST, enviar un
              paquete  a  traves  de  una   ruta   prohibida,   modificar   la
              configuracion   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 direccion ya en uso.

       ENOPROTOOPT y EOPNOTSUPP
              Se han pasado una opcion de conector invalida.

       EPERM  El usuario no tiene permiso para establecer una prioridad  alta,
              cambiar  la  configuracion  o  enviar senales al proceso o grupo
              solicitado.

       EADDRNOTAVAIL
              Se ha solicitado una interfaz inexistente o la direccion  fuente
              solicitada no es local.

       EAGAIN La operacion se bloquearia en un conector bloqueante.

       ESOCKTNOSUPPORT
              El  conector  no  esta 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  esta  realizando  una  operacion  de  conexion  sobre  un
              conector no bloqueante.

       ECONNABORTED
              Se ha cerrado la conexion durante un accept(2).

       EPIPE  La  conexion  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 ningun paquete.

       EHOSTUNREACH
              Ninguna  entrada valida de la tabla de enrutamiento coincide con
              la direccion 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 nucleo.

       ENOBUFS, ENOMEM
              No  hay suficiente memoria libre. Esto a menudo significa que la
              reserva de memoria esta limitada por los limites  del  bufer  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 nucleo 2.2 de  Linux.   Tambien
       son  todas  especificas  de Linux y no deberian usarse en programas que
       pretendan ser portables.

       struct ip_mreqn es nueva  en  Linux  2.2.   Linux  2.0  solo  soportaba
       ip_mreq.

       Las sysctls se introdujeron en la version 2.2 de Linux.

COMPATIBILIDAD

       Por  compatibilidad  con  Linux  2.0,  todavia  se  soporta la sintaxis
       obsoleta socket(PF_INET, SOCK_RAW, protocol) para abrir un conector  de
       paquetes  (packet(7)).   Se  recomienda no usar esta sintaxis y deberia
       reemplazarse por socket(PF_PACKET, SOCK_RAW, protocol).   La  principal
       diferencia  es  la  nueva estructura de direcciones sockaddr_ll para la
       informacion generica 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
       especificas de IP y las tablas ARP.

       Algunas versiones de glibc olvidan  declarar  in_pktinfo.   Actualmente
       esto  se  soluciona  copiandolo  en  su  programa  desde esta pagina de
       manual.

       Recibir la direccion de destino original con MSG_ERRQUEUE en msg_name a
       traves  de  recvmsg(2)  no funciona bien en algunos nucleos de la serie
       2.2.

AUTORES

       Esta pagina de manual fue escrita por Andi Kleen.

V'EASE TAMBI'EN

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

       RFC791 para la especificacion IP original.
       RFC1122 para los requerimientos IPv4 para lo anfitriones.
       RFC1812 para los requeremientos IPv4 para los enrutadores.

Pagina man de Linux              19 junio 2001                           IP(7)