Provided by: manpages-fr_3.32d0.2p4-1_all bug

NOM

       ip - Implementation Linux du protocole IPv4

SYNOPSIS

       #include <sys/socket.h>
       #include <netinet/in.h>
       #include <netinet/ip.h> /* surensemble des precedents */

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

DESCRIPTION

       Linux  implemente le protocole internet (IP) version 4, decrit dans les
       RFC 791 et RFC 1122. ip contient une  implementation  de  la  diffusion
       multiple  niveau 2  conforme a la RFC 1112. Cette implementation inclut
       un routeur IP comprenant un filtre de paquets.

       L'interface de programmation est compatible avec les sockets BSD.  Pour
       plus d'informations sur les sockets, consultez socket(7).

       Une socket IP est creee en appelant la fonction socket(2) sous la forme
       socket(AF_INET, type_socket, protocole). Les types valables de  sockets
       sont  SOCK_STREAM pour ouvrir une socket tcp(7), SOCK_DGRAM pour ouvrir
       une socket udp(7), ou SOCK_RAW pour ouvrir une socket raw(7) permettant
       d'acceder  directement  au protocole IP. Le protocole indique est celui
       inscrit dans les en-tetes IP emis ou recus. Les seules valeurs valables
       pour  le  protocole sont 0 et IPPROTO_TCP pour les sockets TCP, et 0 et
       IPPROTO_UDP pour les sockets UDP. Pour les sockets  SOCK_RAW,  on  peut
       indiquer  un  protocole  IP  IANA  valable dont la RFC 1700 precise les
       numeros assignes.

       Lorsqu'un processus veut recevoir de nouveaux paquets entrants  ou  des
       connexions,  il  doit  attacher  une  socket  a une adresse d'interface
       locale en utilisant bind(2). Une seule socket IP peut etre  attachee  a
       une  paire  (adresse, port) locale donnee. Lorsqu'on indique INADDR_ANY
       lors de l'attachement, la socket sera affectee a toutes les  interfaces
       locales.  Si  listen(2)  ou connect(2) sont appelees sur une socket non
       affectee,  celle-ci  est  automatiquement  attachee  a  un  port  libre
       aleatoire, avec l'adresse locale definie a INADDR_ANY.

       L'adresse  locale  d'une socket TCP qui a ete attachee est indisponible
       pendant quelques instants apres sa fermeture, a  moins  que  l'attribut
       SO_REUSEADDR  ait  ete  active.  Il  faut etre prudent en utilisant cet
       attribut, car il rend le protocole TCP moins fiable.

   Format d'adresse
       Une adresse de socket IP est definie comme la combinaison d'une adresse
       IP  d'interface  et  d'un  numero  de  port. Le protocole IP de base ne
       fournit pas de numero de port, ils sont implementes par les  protocoles
       de  plus  haut  niveau  comme udp(7) et tcp(7). Sur les sockets raw, le
       champ sin_port contient le protocole IP.

           struct sockaddr_in {
               sa_family_t    sin_family; /* famille d'adresses : AF_INET */
               in_port_t      sin_port;   /* port dans l'ordre des
                                             octets reseau */
               struct in_addr sin_addr;   /* adresse Internet */
           };

           /* Adresse Internet */
           struct in_addr {
               uint32_t       s_addr;     /* adresse dans l'ordre des
                                             octets reseau */
           };

       sin_family est toujours defini a AF_INET.  C'est  indispensable :  sous
       Linux 2.2,  la  plupart  des  fonctions reseau renvoient EINVAL lorsque
       cette configuration manque. sin_port contient le numero de  port,  dans
       l'ordre  des  octets  du reseau. Les numeros de ports inferieurs a 1024
       sont dits privil'egi'es (ou parfois ports r'eserv'es). Seuls les  processus
       privilegies  (a  savoir  ceux qui ont la capacite CAP_NET_BIND_SERVICE)
       peuvent appeler bind(2) pour ces sockets. Le protocole IPv4 en tant que
       tel  n'a  pas  le concept de ports, ceux-ci etant seulement implementes
       par des protocoles de plus haut niveau comme tcp(7) et udp(7).

       sin_addr est l'adresse IP de l'hote. Le membre s_addr de  la  structure
       in_addr  contient  l'adresse de l'interface de l'hote, dans l'ordre des
       octets du reseau. in_addr doit  se  voir  assigner  l'une  des  valeurs
       INADDR_*  (par  exemple,  INADDR_ANY)  ou  etre manipule au travers des
       fonctions de bibliotheque inet_aton(3), inet_addr(3),  inet_makeaddr(3)
       ou  directement  par  le  systeme  de  resolution  des  noms (consultez
       gethostbyname(3)).

       Les adresses IPv4 sont divisees en adresses de diffusions individuelle,
       generale  et multiple. Les adresses de diffusion individuelle decrivent
       une interface unique d'un hote,  les  adresses  de  diffusion  generale
       correspondent  a  tous  les  hotes  d'un  reseau,  et  les  adresses de
       diffusion multiple representent tous les hotes d'un groupe de diffusion
       multiple.  Les  datagrammes  vers des adresses de diffusion generale ne
       peuvent etre emis et recus que si l'attribut de socket SO_BROADCAST est
       active. Dans l'implementation actuelle, les sockets orientees connexion
       ne sont autorisees que sur des adresses de diffusion individuelle.

       Remarquez que l'adresse et le port sont toujours stockes  dans  l'ordre
       des  octets du reseau. Cela signifie en particulier qu'il faut invoquer
       htons(3) sur le numero attribue a un  port.  Toutes  les  fonctions  de
       manipulation  d'adresses  et  de  ports  de  la  bibliotheque  standard
       fonctionnent dans l'ordre des octets.

       Il   existe   plusieurs   adresses   particulieres :    INADDR_LOOPBACK
       (127.0.0.1)  correspond  toujours  a  l'hote  local via le peripherique
       loopback ; INADDR_ANY (0.0.0.0) signifie  un  attachement  a  n'importe
       quelle  adresse ; INADDR_BROADCAST (255.255.255.255) signifie n'importe
       quel hote et a le meme effet sur l'attachement que INADDR_ANY, pour des
       raisons historiques.

   Options de sockets
       IP  gere  quelques  options  de  sockets  specifiques au protocole, qui
       peuvent  etre  definies   avec   setsockopt(2)   et   consultees   avec
       getsockopt(2). Le niveau d'option de sockets pour IP est IPPROTO_IP. Un
       attribut entier booleen est faux quand il vaut zero, et vrai sinon.

       IP_ADD_MEMBERSHIP (depuis Linux 1.2)
              Rejoint un groupe de  diffusion  multiple.  L'argument  est  une
              structure ip_mreqn.

                  struct ip_mreqn {
                      struct in_addr imr_multiaddr; /* Adresse IP du groupe
                                                       de diffusion multiple */
                      struct in_addr imr_address;   /* Adresse IP de
                                                       l'interface locale */
                      int            imr_ifindex;   /* Numero d'interface */
                  };

              imr_multiaddr contient l'adresse du groupe de diffusion multiple
              que l'application veut rejoindre  ou  quitter.  Il  doit  s'agir
              d'une adresse de diffusion multiple valable (sinon setsockopt(2)
              echoue avec  l'erreur  EINVAL).  imr_address  est  l'adresse  de
              l'interface  locale  avec  laquelle  le  systeme doit joindre le
              groupe de diffusion multiple. Si elle est  egale  a  INADDR_ANY,
              une interface appropriee est choisie par le systeme. imr_ifindex
              est le numero de l'interface qui doit rejoindre  ou  quitter  le
              groupe  imr_multiaddr,  ou  zero  pour indiquer n'importe quelle
              interface.

              La structure ip_mreqn n'est  disponible  que  depuis  Linux 2.2.
              Pour  la  compatibilite,  l'ancienne structure ip_mreq (presente
              depuis Linux 1.2) est encore geree ; elle ne differe de ip_mreqn
              que par l'absence du membre imr_ifindex. Uniquement valable avec
              setsockopt(2).

       IP_DROP_MEMBERSHIP (depuis Linux 1.2)
              Quitte un groupe  de  diffusion  multiple.  L'argument  est  une
              structure ip_mreqn ou ip_mreq comme pour IP_ADD_MEMBERSHIP.

       IP_FREEBIND (depuis Linux 2.4)
              Si  cette  option  est  activee,  cet  attribut  booleen  permet
              l'attachement a une adresse IP non locale ou  qui  n'existe  pas
              (encore).  Cela  permet  d'ecouter  sur  une  socket,  sans  que
              l'interface  reseau  sous-jacente  ou  l'adresse  IP   dynamique
              indiquee  ne  soit  operationnelle  au  moment  ou l'application
              essaye de s'y attacher. Cette option est l'equivalent specifique
              a  la  socket  de  l'interface ip_nonlocal_bind de /proc decrite
              plus bas.

       IP_HDRINCL (depuis Linux 2.0)
              Si cette option est activee, l'utilisateur fournit un en-tete IP
              avant  les  donnees  utilisateur. Cette option n'est valable que
              pour  les  sockets  SOCK_RAW.  Consultez  raw(7)  pour  plus  de
              details.  Lorsque  cet attribut est active, les valeurs definies
              pour IP_OPTIONS, IP_TTL et IP_TOS sont ignorees.

       IP_MTU (depuis Linux 2.2)
              Recupere la  MTU  du  chemin  actuellement  determinee  pour  la
              socket.  Valable  seulement  quand  la  socket  a ete connectee.
              Renvoie un entier. Valable uniquement avec getsockopt(2).

       IP_MTU_DISCOVER (depuis Linux 2.2)
              Definit ou recupere la  definition  de  recherche  des  MTU  des
              chemins   pour   une  socket.  Lorsqu'elle  est  activee,  Linux
              effectuera la recherche de la MTU d'un chemin comme defini  dans
              la  RFC 1191.  L'attribut interdisant la fragmentation est alors
              active sur tous les datagrammes sortants. La valeur  par  defaut
              est    commandee    au    niveau    systeme   par   le   fichier
              /proc/sys/net/ipv4/ip_no_pmtu_disc pour les sockets SOCK_STREAM,
              et  desactivee  pour  toutes les autres. Pour les sockets autres
              que SOCK_STREAM, l'utilisateur est responsable de  l'empaquetage
              des donnees dans des blocs inferieurs a la MTU et doit s'assurer
              de la retransmission si besoin. Le noyau rejettera  les  paquets
              qui  sont  plus  gros  que  la  MTU  du chemin determinee si cet
              attribut est active (avec l'erreur EMSGSIZE).

              Attributs MTU des chemins   Signification
              IP_PMTUDISC_WANT            utiliser une configuration par route
              IP_PMTUDISC_DONT            ne pas rechercher la MTU des chemins
              IP_PMTUDISC_DO              toujours chercher la MTU des chemins
              IP_PMTUDISC_PROBE           activer DF (<< Don't Fragment >>, ne
                                          pas fragmenter), mais ignore les
                                          recherches de MTU des chemins

              Lorsque la recherche de la MTU des chemins est activee, le noyau
              garde  automatiquement une trace des MTU des chemins par hote de
              destination.  Lorsqu'il  est   connecte   a   un   correspondant
              specifique  avec  connect(2), la MTU du chemin actuel determinee
              peut etre consultee en utilisant l'option IP_MTU  de  la  socket
              (par  exemple  si  une erreur EMSGSIZE se produit). Cette valeur
              peut changer au cours du temps. Pour les sockets sans  connexion
              avec   plusieurs   destinations,   la   nouvelle  MTU  pour  une
              destination donnee peut egalement etre obtenue en  utilisant  la
              file  d'erreur  (consultez IP_RECVERR). Une nouvelle erreur sera
              mise en file pour chaque mise a jour de la MTU.

              Durant la recherche de la MTU, les paquets initiaux des  sockets
              datagramme  peuvent  etre perdus. Les applications utilisant UDP
              devraient le savoir,  et  les  eviter  dans  leur  strategie  de
              retransmission.

              Pour  demarrer le processus de recherche de la MTU du chemin sur
              les sockets non connectees, il est possible de demarrer avec une
              grande  taille  de  datagramme  (jusqu'a  64 ko d'en-tete) et la
              diminuer au fur et a mesure des mises  a  jours  de  la  MTU  du
              chemin.

              Afin  d'obtenir  une  estimation  initiale  de la MTU du chemin,
              connecte une socket datagramme a  l'adresse  de  destination  en
              utilisant   connect(2)   et   consultez   la   MTU  en  appelant
              getsockopt(2) avec l'option IP_MTU.

              Il est possible d'implementer la RFC 4821 pour les recherches de
              MTU  avec  des  sockets  SOCK_DGRAM  ou SOCK_RAW en utilisant la
              valeur IP_PMTUDISC_PROBE (disponible depuis Linux 2.6.22). C'est
              aussi particulierement utile pour les outils de diagnostic comme
              tracepath(8) qui veulent deliberement envoyer des paquets  sonde
              plus larges que le MTU observe du chemin.

       IP_MULTICAST_IF (depuis Linux 1.2)
              Definit  le  peripherique  local  pour  une  socket de diffusion
              multiple. L'argument est  une  structure  ip_mreqn  ou  ip_mreq,
              comme pour IP_ADD_MEMBERSHIP.

              Lorsqu'une option de socket non valable est fournie, ENOPROTOOPT
              est renvoyee.

       IP_MULTICAST_LOOP (depuis Linux 1.2)
              Definit ou lit un entier booleen indiquant  si  les  paquets  de
              diffusion multiple doivent etre renvoyes aux sockets locales.

       IP_MULTICAST_TTL (depuis Linux 1.2)
              Definit  ou  lit  la valeur du champ Time-to-Live des paquets de
              diffusion multiple  sortants  sur  cette  socket.  Il  est  tres
              important pour les paquets de diffusion multiple de fixer le TTL
              le plus petit possible. La valeur  par  defaut  est  1,  ce  qui
              signifie  que  les paquets de diffusion multiple ne quittent pas
              le reseau local a moins que le programme de l'utilisateur ne  le
              reclame explicitement. L'argument est un entier.

       IP_NODEFRAG (depuis Linux 2.6.36)
              Si activee (argument non nul), l'assemblage des paquets sortants
              est desactive dans  la  couche  netfilter.  Cette  option  n'est
              valide que pour des sockets SOCK_RAW. L'argument est un entier.

       IP_OPTIONS (depuis Linux 2.0)
              Definit  ou  lit les options IP a envoyer avec chaque paquet sur
              cette socket. Les arguments  sont  un  pointeur  sur  un  tampon
              memoire  contenant  les  options  et  la  longueur  des options.
              L'appel a setsockopt(2) definit les options IP associees  a  une
              socket. La taille maximale des options pour IPv4 vaut 40 octets.
              Consultez la RFC 791 pour les  options  autorisees.  Lorsque  le
              paquet  de  connexion initiale d'une socket SOCK_STREAM contient
              des options IP, celles-ci seront automatiquement attribuees a la
              socket,  avec  les  en-tetes  de  routage  inverses. Les paquets
              entrants ne peuvent  pas  modifier  les  options  apres  que  la
              connexion  a  ete  etablie. Le traitement des options de routage
              des paquets entrants est desactive  par  defaut,  et  peut  etre
              valide  en  utilisant  l'interface accept_source_route de /proc.
              Les  autres  options,  comme  les  horodatages,  sont   toujours
              traitees. Pour les sockets datagramme, les options IP ne peuvent
              etre  definies  que  par   l'utilisateur   local.   L'appel   de
              getsockopt(2)  avec IP_OPTIONS remplit le tampon fourni avec les
              options d'emission actuelles.

       IP_PKTINFO (since Linux 2.2)
              Fournit un message  IP_PKTINFO  de  service,  qui  contient  une
              structure  pktinfo  fournissant  quelques  informations  sur  le
              paquet  entrant.  Ceci  ne  fonctionne  que  pour  les   sockets
              orientees  datagramme. L'argument est un attribut indiquant a la
              socket si le message IP_PKTINFO  doit  etre  passe  ou  non.  Le
              message  lui-meme  ne peut etre ecrit ou lu que comme message de
              controle avec un paquet, en utilisant recvmsg(2) ou sendmsg(2).

                  struct in_pktinfo {
                      unsigned int   ipi_ifindex;   /* Numero d'interface     */
                      struct in_addr ipi_spec_dst;  /* Adresse locale         */
                      struct in_addr ipi_addr;      /* Adresse de destination */
                  };

              ipi_ifindex est le numero unique de l'interface sur laquelle  le
              paquet  a  ete recu. ipi_spec_dst est l'adresse locale du paquet
              et ipi_addr est  l'adresse  de  destination  dans  l'en-tete  du
              paquet. Si IP_PKTINFO est passe a sendmsg(2) et ipi_spec_dst est
              different de zero, alors il sera utilise  comme  adresse  source
              pour  la  recherche dans la table de routage et pour definir les
              options de routage IP. Si ipi_ifindex  est  different  de  zero,
              l'adresse  locale  principale  de  l'interface  indiquee par cet
              index remplace ipi_spec_dst pour la table de routage.

       IP_RECVERR (depuis Linux 2.2)
              Active le passage ameliore des messages d'erreur. Lorsque  cette
              option  est  activee  pour  une  socket  datagramme,  toutes les
              erreurs  generees  seront  envoyees  dans  une  file   d'erreurs
              particuliere a la socket. Quand l'utilisateur detecte une erreur
              d'operation sur  la  socket,  celle-ci  peut  etre  examinee  en
              invoquant  recvmsg(2)  avec  l'attribut  MSG_ERRQUEUE defini. La
              structure sock_extended_err decrivant l'erreur sera passee comme
              message  de  service  ayant  le  type  IP_RECVERR  et  le niveau
              IPPROTO_IP. Ceci permet une  gestion  d'erreur  fiable  sur  les
              sockets  non connectees. La partie comprenant les donnees recues
              de la file d'erreurs  contient  le  paquet  ayant  rencontre  un
              probleme.

              Le   message  de  controle  IP_RECVERR  contient  une  structure
              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;   /* numero d'erreur */
                      uint8_t  ee_origin;  /* origine de l'erreur */
                      uint8_t  ee_type;    /* type */
                      uint8_t  ee_code;    /* code */
                      uint8_t  ee_pad;
                      uint32_t ee_info;    /* donnees supplementaires */
                      uint32_t ee_data;    /* autres donnees */
                      /* Des donnees supplementaires peuvent suivre */
                  };

                  struct sockaddr *SO_EE_OFFENDER(struct sock_extended_err *);

              ee_errno contient le numero de  l'erreur  errno  mise  en  file.
              ee_origin  est  le  code  de  l'origine  de l'erreur. Les autres
              champs sont specifiques au protocole.  La  macro  SO_EE_OFFENDER
              renvoie  un  pointeur  sur  l'adresse  d'un  objet  reseau  d'ou
              l'erreur provient, en prenant en argument  un  pointeur  sur  le
              message  de  service.  Si cette adresse n'est pas disponible, le
              membre sa_family de la structure sockaddr contient AF_UNSPEC  et
              les autres champs de sockaddr ne sont pas definis.

              IP utilise la structure sock_extended_err comme suit : ee_origin
              contient SO_EE_ORIGIN_ICMP pour les erreurs recues sous forme de
              paquet ICMP, ou SO_EE_ORIGIN_LOCAL pour les erreurs locales. Les
              valeurs inconnues doivent etre ignorees. ee_type et ee_code sont
              definis  a  partir  des  champs  type et code de l'en-tete ICMP.
              ee_info contient la MTU determinee pour les erreurs EMSGSIZE. Le
              message  contient  aussi  l'adresse  sockaddr_in  du noeud ayant
              cause  l'erreur,  qui   peut   etre   obtenu   avec   la   macro
              SO_EE_OFFENDER.  Le  champ  sin_family  de l'adresse fournie par
              SO_EE_OFFENDER vaut  AF_UNSPEC  si  la  source  etait  inconnue.
              Lorsque les erreurs proviennent du reseau, toutes les options IP
              (IP_OPTIONS, IP_TTL, etc.) valables pour la socket et  contenues
              dans  le  paquet  d'erreur  sont  transmises  comme  messages de
              controle. La charge du  paquet  causant  l'erreur  est  renvoyee
              comme   charge   normale.   TCP  n'a  pas  de  file  d'erreurs ;
              MSG_ERRQUEUE n'est  pas  permis  sur  les  sockets  SOCK_STREAM.
              IP_RECVERR  est  valable  pour TCP, mais toutes les erreurs sont
              renvoyees au retour des fonctions de socket ou par SO_ERROR.

              Pour les sockets raw, IP_RECVERR active le passage de toutes les
              erreurs  ICMP  recues  a  l'application,  sinon les erreurs sont
              seulement renvoyees sur les sockets connectees.

              Il  s'agit  d'un  attribut  booleen   entier.   IP_RECVERR   est
              desactivee par defaut.

       IP_RECVOPTS (depuis Linux 2.2)
              Passe  a  l'utilisateur  toutes les options IP entrantes dans un
              message de controle IP_OPTIONS.  L'en-tete  de  routage  et  les
              autres  options sont deja remplies pour l'hote local. Ceci n'est
              pas gere pour les sockets SOCK_STREAM.

       IP_RECVORIGDSTADDR (depuis Linux 2.6.29)
              Cet attribut booleen active le message IP_ORIGDSTADDR de service
              dans  recvmsg(2),  dans  lequel  le  noyau  renvoie l'adresse de
              destination originale du datagramme en  train  d'etre  recu.  le
              message de service contient une structure sockaddr_in.

       IP_RECVTOS (depuis Linux 2.2)
              Le message de service IP_TOS est passe avec les paquets entrants
              si cette option est activee. Elle contient un octet  qui  decrit
              le  champ  Type-Of-Service/Precedence de l'en-tete du paquet. Il
              s'agit d'un attribut entier booleen.

       IP_RECVTTL (depuis Linux 2.2)
              Lorsque cet attribut est defini, passe un  message  de  controle
              IP_TTL  avec  le  champ  Time-to-Live du paquet recu, sous forme
              d'octet. Ceci n'est pas gere pour les sockets SOCK_STREAM.

       IP_RETOPTS (depuis Linux 2.2)
              Identique a IP_RECVOPTS, mais renvoie  les  options  brutes  non
              traitees,  avec  les options d'enregistrement des horodatages et
              du routage non remplies pour ce saut.

       IP_ROUTER_ALERT (depuis Linux 2.2)
              Passe tous les paquets a  transferer  avec  l'option  IP  Router
              Alert  activee sur cette socket. Ceci n'est valable que pour les
              sockets raw, et  sert  par  exemple  pour  les  demons  RSVP  de
              l'espace  utilisateur.  Les  paquets  enregistres  ne  sont  pas
              rediriges par le noyau ; l'utilisateur est responsable de  leurs
              envois. L'attachement des sockets est ignore, et de tels paquets
              ne sont filtres que par le protocole. Il  s'agit  d'un  attribut
              entier.

       IP_TOS (depuis Linux 1.0)
              Definit  ou  recupere le champ Type-Of-Service (TOS) envoye avec
              chaque paquet IP sortant de cette socket. Cela sert a gerer  sur
              le  reseau  les  priorites  entre  paquets.  TOS  est  un octet.
              Quelques attributs TOS standards sont  definis :  IPTOS_LOWDELAY
              pour   minimiser   les   delais   pour   le  trafic  interactif,
              IPTOS_THROUGHPUT pour optimiser le debit, IPTOS_RELIABILITY pour
              optimiser la fiabilite, IPTOS_MINCOST doit etre utilise pour les
              donnees de remplissage, quand la lenteur de transmission importe
              peu.  Une  de ces valeurs TOS au maximum peut etre indiquee. Les
              autres bits ne sont pas valables et doivent etre effaces.  Linux
              envoie  d'abord  des datagrammes IPTOS_LOWDELAY par defaut, mais
              le comportement exact depend de la politique configuree pour  la
              file  d'attente.  Quelques  niveaux  de  haute  priorite peuvent
              reclamer  les  privileges  du  superutilisateur   (la   capacite
              CAP_NET_ADMIN).  La  priorite  peut  aussi  etre  definie  d'une
              maniere independante du protocole avec  les  options  de  socket
              (SOL_SOCKET, SO_PRIORITY) (consultez socket(7)).

       IP_TRANSPARENT (depuis Linux 2.6.24)
              Cet  attribut booleen active le mandataire transparent sur cette
              socket. Cette option de socket permet a l'application  appelante
              de s'attacher a une adresse IP non locale et de fonctionner a la
              fois comme un client et un  serveur  avec  l'adresse  exterieure
              comme  point  de  terminaison  local. Remarque : le routage doit
              etre configure pour  que  les  paquets  envoyes  vers  l'adresse
              exterieure  soient routes via la boite TProxy. Les privileges du
              superutilisateur sont necessaires  pour  l'activation  de  cette
              option de socket (la capacite CAP_NET_ADMIN).

              Cette  option  doit  egalement  etre  configuree  sur  la socket
              redirigee pour la redirection  TProxy  avec  la  cible  iptables
              TPROXY.

       IP_TTL (depuis Linux 1.0)
              Definit  ou  recupere  le  contenu  actuel du champ Time-to-Live
              utilise avec chaque paquet envoye depuis cette socket.

   Interfaces /proc
       Le protocole IP prend en  charge  une  serie  d'interfaces  /proc  pour
       configurer  certaines  options  globales.  Les  parametres peuvent etre
       accedes  en  lisant  ou  ecrivant  dans  les  fichiers  du   repertoire
       /proc/sys/net/ipv4/.   Les   interfaces  decrites  comme  des  booleens
       prennent  une  valeur   entiere.   Celle-ci   signifie   que   l'option
       correspondante est activee si elle est differente de zero (<< true >>),
       et desactivee si elle vaut zero (<< false >>).

       ip_always_defrag (booleen ; depuis Linux 2.2.13)
              [Nouveaute des noyaux 2.2.13, dans les noyaux precedents,  cette
              fonctionnalite  etait  controlee  lors  de  la  compilation avec
              l'option  CONFIG_IP_ALWAYS_DEFRAG.  Cette  option   n'est   plus
              presente dans les versions 2.4.x et suivantes.]

              Lorsque cet attribut booleen est active (different de zero), les
              fragments entrants (morceaux de paquets IP obtenus quand un hote
              entre  l'origine  et  la  destination  a  decide que les paquets
              etaient  trop  grands  et  les  a  coupes  en  morceaux)  seront
              reassembles  (defragmentes)  avant  d'etre  traites,  meme s'ils
              doivent etre transferes.

              Cette option n'est a utiliser que pour un pare-feu  qui  est  le
              seul   lien   d'entree   de   votre  reseau,  ou  un  mandataire
              transparent. Il ne faut jamais l'utiliser pour un routeur ou  un
              hote  normal. Sinon, les communications fragmentees peuvent etre
              interrompues si les fragments circulent par differents liens. La
              defragmentation  a  egalement  un  cout  memoire  et  processeur
              important.

              Ceci est automagiquement active lorsque le  masquerading  ou  le
              mandataire transparent sont configures.

       ip_autoconfig (depuis Linux 2.2 a 2.6.17)
              Non documente.

       ip_default_ttl (entier ; defaut : 64 ; depuis Linux 2.2)
              Definit  la  valeur par defaut du champ Time-to-Live des paquets
              sortants. Ceci peut etre modifie  individuellement  pour  chaque
              socket avec l'option IP_TTL.

       ip_dynaddr (booleen ; desactive par defaut ; depuis Linux 2.0.31)
              Active  la  reecriture  dynamique  des  adresses de socket et du
              masquerading lors des changements  d'adresse  d'interface.  Cela
              sert  pour  les  liaisons  telephoniques,  avec  des adresses IP
              changeantes. 0 signifie aucune reecriture, 1 les autorise, et  2
              demande un mode bavard.

       ip_forward (booleen ; desactive par defaut) ; depuis Linux 1.2
              Active le transfert IP avec un attribut booleen. Le transfert IP
              peut aussi etre configure interface par interface.

       ip_local_port_range (depuis Linux 2.2)
              Contient deux entiers qui definissent  l'intervalle  par  defaut
              des  ports locaux alloues aux sockets. L'allocation demarre avec
              le premier numero et se termine avec le second. Cela ne doit pas
              entrer  en  conflit avec les ports utilises pour le masquerading
              (bien que cela soit traite).  De  meme,  des  choix  arbitraires
              peuvent  poser  des problemes avec certains pare-feu de filtrage
              par paquet qui  font  des  suppositions  sur  les  ports  locaux
              utilises.  Le premier nombre doit etre au moins superieur a 1024
              et de preference a 4096 pour  eviter  les  collisions  avec  les
              ports officiels et minimiser les problemes de pare-feu.

       ip_no_pmtu_disc (booleen ; desactive par defaut) ; depuis Linux 2.2
              Si  active, supprime la recherche par defaut des MTU des chemins
              pour les sockets TCP. La recherche de la MTU  d'un  chemin  peut
              echouer avec des pare-feu mal configures (qui rejettent tous les
              paquets ICMP) ou des interfaces mal configurees (par exemple, un
              lien  point-a-point  ou  les  deux  extremites n'ont pas la meme
              MTU). Il vaut  mieux  corriger  le  routeur  defectueux  que  de
              supprimer  globalement  la  recherche  des  MTU des chemins, car
              cette derniere option augmente les couts du reseau.

       ip_nonlocal_bind (booleen ; desactive par defaut ; depuis Linux 2.4)
              Si defini, permet aux processus de s'attacher avec bind(2) a des
              adresses  IP non locales, ce qui peut etre utile mais peut faire
              planter certaines applications.

       ip6frag_time (entier ; defaut : 30)
              Definit le temps en secondes de conservation d'un fragment  IPv6
              en memoire.

       ip6frag_secret_interval (entier ; defaut : 600)
              Definit  l'intervalle de regeneration (en secondes) du secret de
              hachage (ou sa duree de vie) pour les fragments IPv6.

       ipfrag_high_thresh (entier), ipfrag_low_thresh (entier)
              Si le nombre de fragments IP en file atteint ipfrag_high_thresh,
              la  file  est restreinte a ipfrag_low_thresh. Contient un entier
              avec le nombre d'octets.

       neigh/*
              Consultez arp(7).

   Ioctls
       Tous les ioctls decrits dans socket(7) s'appliquent a ip.

       Les ioctls pour configurer les parametres generiques des  peripheriques
       sont decrits dans netdevice(7).

ERREURS

       EACCES L'utilisateur  a essaye de realiser une operation sans avoir les
              permissions necessaires. Cela inclut : l'envoi d'un paquet  vers
              une  adresse  de diffusion generale sans avoir active l'attribut
              SO_BROADCAST, l'envoi d'un paquet par une  route  interdite,  la
              modification  du  parametrage du pare-feu sans les privileges du
              superutilisateur (la capacite CAP_NET_ADMIN) et l'attachement  a
              un  port  privilegie sans les privileges du superutilisateur (la
              capacite CAP_NET_BIND_SERVICE).

       EADDRINUSE
              Tentative d'attachement a une adresse deja utilisee.

       EADDRNOTAVAIL
              Une  interface  inexistante  a  ete   demandee,   ou   l'adresse
              d'emission demandee n'etait pas locale.

       EAGAIN L'operation sur une socket non bloquante devrait bloquer.

       EALREADY
              Une  operation de connexion est deja en cours sur une socket non
              bloquante.

       ECONNABORTED
              Une connexion a ete fermee durant un appel a accept(2).

       EHOSTUNREACH
              Aucune table de routage valable ne  correspond  a  l'adresse  de
              destination.  Cette  erreur peut etre due a un message ICMP d'un
              routeur distant ou pour la table de routage interne.

       EINVAL Un argument non  valable  a  ete  fourni.  Pour  les  operations
              d'envoi,  cela  peut etre cause par un envoi vers une route trou
              noir.

       EISCONN
              connect(2) a ete appelee sur une socket deja connectee.

       EMSGSIZE
              Un datagramme est plus grand que la MTU du chemin et ne peut pas
              etre fragmente.

       ENOBUFS, ENOMEM
              La  memoire  libre  est  insuffisante. Cela signifie souvent que
              l'allocation memoire est contrainte par les limites du tampon de
              socket,  pas  par  la  memoire  du  systeme,  mais  ce n'est pas
              toujours le cas.

       ENOENT SIOCGSTAMP a ete appele  sur  une  socket  qu'aucun  paquet  n'a
              atteint.

       ENOPKG Un sous-systeme du noyau n'est pas configure.

       ENOPROTOOPT et EOPNOTSUPP
              Passage d'une option de socket non valable.

       ENOTCONN
              L'operation  n'est  definie  que  sur une socket connectee, mais
              cette socket n'etait pas connectee.

       EPERM  L'utilisateur n'a pas la  permission  de  definir  une  priorite
              haute,  de  changer la configuration ou d'envoyer des signaux au
              groupe ou au processus demande.

       EPIPE  La connexion a ete  fermee  prematurement  ou  volontairement  a
              l'autre extremite.

       ESOCKTNOSUPPORT
              La  socket  n'est  pas configuree ou un type de socket inconnu a
              ete demande.

       D'autres  erreurs  peuvent  etre   declenchees   par   les   protocoles
       superieurs. Consultez tcp(7), raw(7), udp(7) et socket(7).

NOTES

       IP_FREEBIND,  IP_MTU,  IP_MTU_DISCOVER, IP_RECVORIGDSTADDR, IP_PKTINFO,
       IP_RECVERR, IP_ROUTER_ALERT et IP_TRANSPARENT sont specifiques a Linux.

       Soyez  tres  prudents  avec  l'option  SO_BROADCAST,  elle  n'est   pas
       privilegiee  sous Linux. Il est facile de surcharger un reseau avec des
       diffusions generales sans  precaution.  Pour  les  nouveaux  protocoles
       applicatifs,  il  vaut  mieux  utiliser un groupe de diffusion multiple
       plutot que la diffusion generale. Ce dernier est deconseille.

       Certaines  autres  implementations  des  sockets  BSD  fournissent  les
       options  de socket IP_RCVDSTADDR et IP_RECVIF pour obtenir l'adresse de
       destination  et  l'interface  des  datagrammes  recus.  Linux   propose
       l'option IP_PKTINFO plus generale pour effectuer ce travail.

       Certaines   implementations   BSD  des  sockets  fournissent  egalement
       l'option  IP_RECVTTL,  mais  un  message  de  service  ayant  le   type
       IP_RECVTTL  est  fourni  avec  le  paquet  entrant.  C'est different de
       l'option IP_TTL utilisee sous Linux.

       L'utilisation  du  niveau  des  options  de  socket  SOL_IP  n'est  pas
       portable, les empilages bases sur BSD utilisent le niveau IPPROTO_IP.

   Compatibilit'e
       Pour   la   compatibilite   avec   Linux 2.0,   la   syntaxe   obsolete
       socket(AF_INET, SOCK_PACKET, protocole) est encore  geree  pour  ouvrir
       une  socket  packet(7). Ceci est deconseille, et doit etre remplace par
       socket(AF_PACKET, SOCK_RAW, protocole). La principale difference est la
       nouvelle   structure   d'adresse   sockaddr_ll  pour  les  informations
       generiques  de  la  couche  de  liaison  a  la  place   de   l'ancienne
       sockaddr_pkt.

BOGUES

       Il y a trop de valeurs d'erreurs heterogenes.

       Les  ioctls pour configurer les options d'interface specifiques a IP et
       les tables ARP ne sont pas decrites.

       Certaines versions de la glibc  oublient  de  declarer  in_pktinfo.  Le
       contournement  consiste  a la recopier depuis cette page de manuel dans
       le programme.

       La reception de l'adresse de destination  originale  avec  MSG_ERRQUEUE
       dans   msg_name   par   recvmsg(2)  ne  fonctionne  pas  dans  certains
       noyaux 2.2.

VOIR AUSSI

       recvmsg(2),   sendmsg(2),   byteorder(3),   ipfw(4),   capabilities(7),
       netlink(7), raw(7), socket(7), tcp(7), udp(7)

       RFC 791 pour les specifications IP d'origine.
       RFC 1122 pour les necessites IPv4 des hotes.
       RFC 1812 pour les necessites IPv4 des routeurs.

COLOPHON

       Cette  page  fait  partie  de  la  publication 3.32 du projet man-pages
       Linux. Une description du projet et des instructions pour signaler  des
       anomalies       peuvent       etre       trouvees      a      l'adresse
       <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

       Depuis 2010, cette traduction est maintenue a l'aide  de  l'outil  po4a
       <URL:http://po4a.alioth.debian.org/>   par   l'equipe   de   traduction
       francophone       au       sein        du        projet        perkamon
       <URL:http://perkamon.alioth.debian.org/>.

       Christophe  Blaess  <URL:http://www.blaess.fr/christophe/> (1996-2003),
       Alain  Portal  <URL:http://manpagesfr.free.fr/>  (2003-2006).    Julien
       Cristau et l'equipe francophone de traduction de Debian (2006-2009).

       Veuillez   signaler   toute   erreur   de   traduction  en  ecrivant  a
       <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
       paquet manpages-fr.

       Vous  pouvez  toujours avoir acces a la version anglaise de ce document
       en utilisant la commande << man -L C <section> <page_de_man> >>.