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

NOM

       ip - Implémentation Linux du protocole IPv4

SYNOPSIS

       #include <sys/socket.h>
       #include <netinet/in.h>
       #include <netinet/ip.h> /* surensemble des précédents */

       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  implémente le protocole internet (IP) version 4, décrit dans les
       RFC 791 et RFC 1122. ip contient une  implémentation  de  la  diffusion
       multiple  niveau 2  conforme à la RFC 1112. Cette implémentation 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 créée 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'accéder  directement  au protocole IP. Le protocole indiqué est celui
       inscrit dans les en-têtes IP émis ou reçus. 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 précise les
       numéros assignés.

       Lorsqu'un processus veut recevoir de nouveaux paquets entrants  ou  des
       connexions,  il  doit  attacher  une  socket  à une adresse d'interface
       locale en utilisant bind(2). Une seule socket IP peut être  attachée  à
       une  paire  (adresse, port) locale donnée. Lorsqu'on indique INADDR_ANY
       lors de l'attachement, la socket sera affectée à toutes les  interfaces
       locales.  Si  listen(2)  ou connect(2) sont appelées sur une socket non
       affectée,  celle-ci  est  automatiquement  attachée  à  un  port  libre
       aléatoire, avec l'adresse locale définie à INADDR_ANY.

       L'adresse  locale  d'une socket TCP qui a été attachée est indisponible
       pendant quelques instants après sa fermeture, à  moins  que  l'attribut
       SO_REUSEADDR  ait  été  activé.  Il  faut être prudent en utilisant cet
       attribut, car il rend le protocole TCP moins fiable.

   Format d'adresse
       Une adresse de socket IP est définie comme la combinaison d'une adresse
       IP  d'interface  et  d'un  numéro  de  port. Le protocole IP de base ne
       fournit pas de numéro de port, ils sont implémentés 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 réseau */
               struct in_addr sin_addr;   /* adresse Internet */
           };

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

       sin_family est toujours défini à AF_INET.  C'est  indispensable :  sous
       Linux 2.2,  la  plupart  des  fonctions réseau renvoient EINVAL lorsque
       cette configuration manque. sin_port contient le numéro de  port,  dans
       l'ordre  des  octets  du réseau. Les numéros de ports inférieurs à 1024
       sont dits privilgis (ou parfois ports rservs). Seuls les  processus
       privilégiés  (à  savoir  ceux qui ont la capacité 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 étant seulement implémentés
       par des protocoles de plus haut niveau comme tcp(7) et udp(7).

       sin_addr est l'adresse IP de l'hôte. Le membre s_addr de  la  structure
       in_addr  contient  l'adresse de l'interface de l'hôte, dans l'ordre des
       octets du réseau. in_addr doit  se  voir  assigner  l'une  des  valeurs
       INADDR_*  (par  exemple,  INADDR_ANY)  ou  être manipulé au travers des
       fonctions de bibliothèque inet_aton(3), inet_addr(3),  inet_makeaddr(3)
       ou  directement  par  le  système  de  résolution  des  noms (consultez
       gethostbyname(3)).

       Les adresses IPv4 sont divisées en adresses de diffusions individuelle,
       générale  et multiple. Les adresses de diffusion individuelle décrivent
       une interface unique d'un hôte,  les  adresses  de  diffusion  générale
       correspondent  à  tous  les  hôtes  d'un  réseau,  et  les  adresses de
       diffusion multiple représentent tous les hôtes d'un groupe de diffusion
       multiple.  Les  datagrammes  vers des adresses de diffusion générale ne
       peuvent être émis et reçus que si l'attribut de socket SO_BROADCAST est
       activé. Dans l'implémentation actuelle, les sockets orientées connexion
       ne sont autorisées que sur des adresses de diffusion individuelle.

       Remarquez que l'adresse et le port sont toujours stockés  dans  l'ordre
       des  octets du réseau. Cela signifie en particulier qu'il faut invoquer
       htons(3) sur le numéro attribué à un  port.  Toutes  les  fonctions  de
       manipulation  d'adresses  et  de  ports  de  la  bibliothèque  standard
       fonctionnent dans l'ordre des octets.

       Il   existe   plusieurs   adresses   particulières :    INADDR_LOOPBACK
       (127.0.0.1)  correspond  toujours  à  l'hôte  local via le périphérique
       loopback ; INADDR_ANY (0.0.0.0) signifie  un  attachement  à  n'importe
       quelle  adresse ; INADDR_BROADCAST (255.255.255.255) signifie n'importe
       quel hôte et a le même effet sur l'attachement que INADDR_ANY, pour des
       raisons historiques.

   Options de sockets
       IP  gère  quelques  options  de  sockets  spécifiques au protocole, qui
       peuvent  être  définies   avec   setsockopt(2)   et   consultées   avec
       getsockopt(2). Le niveau d'option de sockets pour IP est IPPROTO_IP. Un
       attribut entier booléen est faux quand il vaut zéro, 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;   /* Numéro 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)
              échoue avec  l'erreur  EINVAL).  imr_address  est  l'adresse  de
              l'interface  locale  avec  laquelle  le  système doit joindre le
              groupe de diffusion multiple. Si elle est  égale  à  INADDR_ANY,
              une interface appropriée est choisie par le système. imr_ifindex
              est le numéro de l'interface qui doit rejoindre  ou  quitter  le
              groupe  imr_multiaddr,  ou  zéro  pour indiquer n'importe quelle
              interface.

              La structure ip_mreqn n'est  disponible  que  depuis  Linux 2.2.
              Pour  la  compatibilité,  l'ancienne structure ip_mreq (présente
              depuis Linux 1.2) est encore gérée ; elle ne diffère 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  activée,  cet  attribut  booléen  permet
              l'attachement à une adresse IP non locale ou  qui  n'existe  pas
              (encore).  Cela  permet  d'écouter  sur  une  socket,  sans  que
              l'interface  réseau  sous-jacente  ou  l'adresse  IP   dynamique
              indiquée  ne  soit  opérationnelle  au  moment  où l'application
              essaye de s'y attacher. Cette option est l'équivalent spécifique
              à  la  socket  de  l'interface ip_nonlocal_bind de /proc décrite
              plus bas.

       IP_HDRINCL (depuis Linux 2.0)
              Si cette option est activée, l'utilisateur fournit un en-tête IP
              avant  les  données  utilisateur. Cette option n'est valable que
              pour  les  sockets  SOCK_RAW.  Consultez  raw(7)  pour  plus  de
              détails.  Lorsque  cet attribut est activé, les valeurs définies
              pour IP_OPTIONS, IP_TTL et IP_TOS sont ignorées.

       IP_MTU (depuis Linux 2.2)
              Récupère la  MTU  du  chemin  actuellement  déterminée  pour  la
              socket.  Valable  seulement  quand  la  socket  a été connectée.
              Renvoie un entier. Valable uniquement avec getsockopt(2).

       IP_MTU_DISCOVER (depuis Linux 2.2)
              Définit ou récupère la  définition  de  recherche  des  MTU  des
              chemins   pour   une  socket.  Lorsqu'elle  est  activée,  Linux
              effectuera la recherche de la MTU d'un chemin comme défini  dans
              la  RFC 1191.  L'attribut interdisant la fragmentation est alors
              activé sur tous les datagrammes sortants. La valeur  par  défaut
              est    commandée    au    niveau    système   par   le   fichier
              /proc/sys/net/ipv4/ip_no_pmtu_disc pour les sockets SOCK_STREAM,
              et  désactivée  pour  toutes les autres. Pour les sockets autres
              que SOCK_STREAM, l'utilisateur est responsable de  l'empaquetage
              des données dans des blocs inférieurs à 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 déterminée si cet
              attribut est activé (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 activée, le noyau
              garde  automatiquement une trace des MTU des chemins par hôte de
              destination.  Lorsqu'il  est   connecté   à   un   correspondant
              spécifique  avec  connect(2), la MTU du chemin actuel déterminée
              peut être consultée 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 donnée peut également être obtenue en  utilisant  la
              file  d'erreur  (consultez IP_RECVERR). Une nouvelle erreur sera
              mise en file pour chaque mise à jour de la MTU.

              Durant la recherche de la MTU, les paquets initiaux des  sockets
              datagramme  peuvent  être perdus. Les applications utilisant UDP
              devraient le savoir,  et  les  éviter  dans  leur  stratégie  de
              retransmission.

              Pour  démarrer le processus de recherche de la MTU du chemin sur
              les sockets non connectées, il est possible de démarrer avec une
              grande  taille  de  datagramme  (jusqu'à  64 ko d'en-tête) et la
              diminuer au fur et à mesure des mises  à  jours  de  la  MTU  du
              chemin.

              Afin  d'obtenir  une  estimation  initiale  de la MTU du chemin,
              connecte une socket datagramme à  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'implémenter 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 particulièrement utile pour les outils de diagnostic comme
              tracepath(8) qui veulent délibérément envoyer des paquets  sonde
              plus larges que le MTU observé du chemin.

       IP_MULTICAST_IF (depuis Linux 1.2)
              Définit  le  périphérique  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 renvoyée.

       IP_MULTICAST_LOOP (depuis Linux 1.2)
              Définit ou lit un entier booléen indiquant  si  les  paquets  de
              diffusion multiple doivent être renvoyés aux sockets locales.

       IP_MULTICAST_TTL (depuis Linux 1.2)
              Définit  ou  lit  la valeur du champ Time-to-Live des paquets de
              diffusion multiple  sortants  sur  cette  socket.  Il  est  très
              important pour les paquets de diffusion multiple de fixer le TTL
              le plus petit possible. La valeur  par  défaut  est  1,  ce  qui
              signifie  que  les paquets de diffusion multiple ne quittent pas
              le réseau local à moins que le programme de l'utilisateur ne  le
              réclame explicitement. L'argument est un entier.

       IP_NODEFRAG (depuis Linux 2.6.36)
              Si activée (argument non nul), l'assemblage des paquets sortants
              est désactivé 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)
              Définit  ou  lit les options IP à envoyer avec chaque paquet sur
              cette socket. Les arguments  sont  un  pointeur  sur  un  tampon
              mémoire  contenant  les  options  et  la  longueur  des options.
              L'appel à setsockopt(2) définit les options IP associées  à  une
              socket. La taille maximale des options pour IPv4 vaut 40 octets.
              Consultez la RFC 791 pour les  options  autorisées.  Lorsque  le
              paquet  de  connexion initiale d'une socket SOCK_STREAM contient
              des options IP, celles-ci seront automatiquement attribuées à la
              socket,  avec  les  en-têtes  de  routage  inversés. Les paquets
              entrants ne peuvent  pas  modifier  les  options  après  que  la
              connexion  a  été  établie. Le traitement des options de routage
              des paquets entrants est désactivé  par  défaut,  et  peut  être
              validé  en  utilisant  l'interface accept_source_route de /proc.
              Les  autres  options,  comme  les  horodatages,  sont   toujours
              traitées. Pour les sockets datagramme, les options IP ne peuvent
              être  définies  que  par   l'utilisateur   local.   L'appel   de
              getsockopt(2)  avec IP_OPTIONS remplit le tampon fourni avec les
              options d'émission 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
              orientées  datagramme. L'argument est un attribut indiquant à la
              socket si le message IP_PKTINFO  doit  être  passé  ou  non.  Le
              message  lui-même  ne peut être écrit ou lu que comme message de
              contrôle avec un paquet, en utilisant recvmsg(2) ou sendmsg(2).

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

              ipi_ifindex est le numéro unique de l'interface sur laquelle  le
              paquet  a  été reçu. ipi_spec_dst est l'adresse locale du paquet
              et ipi_addr est  l'adresse  de  destination  dans  l'en-tête  du
              paquet. Si IP_PKTINFO est passé à sendmsg(2) et ipi_spec_dst est
              différent de zéro, alors il sera utilisé  comme  adresse  source
              pour  la  recherche dans la table de routage et pour définir les
              options de routage IP. Si ipi_ifindex  est  différent  de  zéro,
              l'adresse  locale  principale  de  l'interface  indiquée par cet
              index remplace ipi_spec_dst pour la table de routage.

       IP_RECVERR (depuis Linux 2.2)
              Active le passage amélioré des messages d'erreur. Lorsque  cette
              option  est  activée  pour  une  socket  datagramme,  toutes les
              erreurs  générées  seront  envoyées  dans  une  file   d'erreurs
              particulière à la socket. Quand l'utilisateur détecte une erreur
              d'opération sur  la  socket,  celle-ci  peut  être  examinée  en
              invoquant  recvmsg(2)  avec  l'attribut  MSG_ERRQUEUE défini. La
              structure sock_extended_err décrivant l'erreur sera passée 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 connectées. La partie comprenant les données reçues
              de la file d'erreurs  contient  le  paquet  ayant  rencontré  un
              problème.

              Le   message  de  contrôle  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;   /* numéro 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;    /* données supplémentaires */
                      uint32_t ee_data;    /* autres données */
                      /* Des données supplémentaires peuvent suivre */
                  };

                  struct sockaddr *SO_EE_OFFENDER(struct sock_extended_err *);

              ee_errno contient le numéro de  l'erreur  errno  mise  en  file.
              ee_origin  est  le  code  de  l'origine  de l'erreur. Les autres
              champs sont spécifiques au protocole.  La  macro  SO_EE_OFFENDER
              renvoie  un  pointeur  sur  l'adresse  d'un  objet  réseau  d'où
              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 définis.

              IP utilise la structure sock_extended_err comme suit : ee_origin
              contient SO_EE_ORIGIN_ICMP pour les erreurs reçues sous forme de
              paquet ICMP, ou SO_EE_ORIGIN_LOCAL pour les erreurs locales. Les
              valeurs inconnues doivent être ignorées. ee_type et ee_code sont
              définis  à  partir  des  champs  type et code de l'en-tête ICMP.
              ee_info contient la MTU déterminée pour les erreurs EMSGSIZE. Le
              message contient aussi l'adresse sockaddr_in du nœud ayant causé
              l'erreur, qui peut être 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  était  inconnue.  Lorsque  les  erreurs
              proviennent  du  réseau,  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 contrôle. La
              charge du paquet causant  l'erreur  est  renvoyée  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  renvoyées  au retour des
              fonctions de socket ou par SO_ERROR.

              Pour les sockets raw, IP_RECVERR active le passage de toutes les
              erreurs  ICMP  reçues  à  l'application,  sinon les erreurs sont
              seulement renvoyées sur les sockets connectées.

              Il  s'agit  d'un  attribut  booléen   entier.   IP_RECVERR   est
              désactivée par défaut.

       IP_RECVOPTS (depuis Linux 2.2)
              Passe  à  l'utilisateur  toutes les options IP entrantes dans un
              message de contrôle IP_OPTIONS.  L'en-tête  de  routage  et  les
              autres  options sont déjà remplies pour l'hôte local. Ceci n'est
              pas géré pour les sockets SOCK_STREAM.

       IP_RECVORIGDSTADDR (depuis Linux 2.6.29)
              Cet attribut booléen 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'être  reçu.  le
              message de service contient une structure sockaddr_in.

       IP_RECVTOS (depuis Linux 2.2)
              Le message de service IP_TOS est passé avec les paquets entrants
              si cette option est activée. Elle contient un octet  qui  décrit
              le  champ  Type-Of-Service/Precedence de l'en-tête du paquet. Il
              s'agit d'un attribut entier booléen.

       IP_RECVTTL (depuis Linux 2.2)
              Lorsque cet attribut est défini, passe un  message  de  contrôle
              IP_TTL  avec  le  champ  Time-to-Live du paquet reçu, sous forme
              d'octet. Ceci n'est pas géré pour les sockets SOCK_STREAM.

       IP_RETOPTS (depuis Linux 2.2)
              Identique à IP_RECVOPTS, mais renvoie  les  options  brutes  non
              traitées,  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 à  transférer  avec  l'option  IP  Router
              Alert  activée sur cette socket. Ceci n'est valable que pour les
              sockets raw, et  sert  par  exemple  pour  les  démons  RSVP  de
              l'espace  utilisateur.  Les  paquets  enregistrés  ne  sont  pas
              redirigés par le noyau ; l'utilisateur est responsable de  leurs
              envois. L'attachement des sockets est ignoré, et de tels paquets
              ne sont filtrés que par le protocole. Il  s'agit  d'un  attribut
              entier.

       IP_TOS (depuis Linux 1.0)
              Définit  ou  récupère le champ Type-Of-Service (TOS) envoyé avec
              chaque paquet IP sortant de cette socket. Cela sert à gérer  sur
              le  réseau  les  priorités  entre  paquets.  TOS  est  un octet.
              Quelques attributs TOS standards sont  définis :  IPTOS_LOWDELAY
              pour   minimiser   les   délais   pour   le  trafic  interactif,
              IPTOS_THROUGHPUT pour optimiser le débit, IPTOS_RELIABILITY pour
              optimiser la fiabilité, IPTOS_MINCOST doit être utilisé pour les
              données de remplissage, quand la lenteur de transmission importe
              peu.  Une  de ces valeurs TOS au maximum peut être indiquée. Les
              autres bits ne sont pas valables et doivent être effacés.  Linux
              envoie  d'abord  des datagrammes IPTOS_LOWDELAY par défaut, mais
              le comportement exact dépend de la politique configurée pour  la
              file  d'attente.  Quelques  niveaux  de  haute  priorité peuvent
              réclamer  les  privilèges  du  superutilisateur   (la   capacité
              CAP_NET_ADMIN).  La  priorité  peut  aussi  être  définie  d'une
              manière indépendante du protocole avec  les  options  de  socket
              (SOL_SOCKET, SO_PRIORITY) (consultez socket(7)).

       IP_TRANSPARENT (depuis Linux 2.6.24)
              Cet  attribut booléen active le mandataire transparent sur cette
              socket. Cette option de socket permet à l'application  appelante
              de s'attacher à une adresse IP non locale et de fonctionner à la
              fois comme un client et un  serveur  avec  l'adresse  extérieure
              comme  point  de  terminaison  local. Remarque : le routage doit
              être configuré pour  que  les  paquets  envoyés  vers  l'adresse
              extérieure  soient routés via la boîte TProxy. Les privilèges du
              superutilisateur sont nécessaires  pour  l'activation  de  cette
              option de socket (la capacité CAP_NET_ADMIN).

              Cette  option  doit  également  être  configurée  sur  la socket
              redirigée pour la redirection  TProxy  avec  la  cible  iptables
              TPROXY.

       IP_TTL (depuis Linux 1.0)
              Définit  ou  récupère  le  contenu  actuel du champ Time-to-Live
              utilisé avec chaque paquet envoyé depuis cette socket.

   Interfaces /proc
       Le protocole IP prend en  charge  une  série  d'interfaces  /proc  pour
       configurer  certaines  options  globales.  Les  paramètres peuvent être
       accédés  en  lisant  ou  écrivant  dans  les  fichiers  du   répertoire
       /proc/sys/net/ipv4/.   Les   interfaces  décrites  comme  des  booléens
       prennent  une  valeur   entière.   Celle-ci   signifie   que   l'option
       correspondante  est  activée si elle est différente de zéro (« true »),
       et désactivée si elle vaut zéro (« false »).

       ip_always_defrag (booléen ; depuis Linux 2.2.13)
              [Nouveauté des noyaux 2.2.13, dans les noyaux précédents,  cette
              fonctionnalité  était  contrôlée  lors  de  la  compilation avec
              l'option  CONFIG_IP_ALWAYS_DEFRAG.  Cette  option   n'est   plus
              présente dans les versions 2.4.x et suivantes.]

              Lorsque cet attribut booléen est activé (différent de zéro), les
              fragments entrants (morceaux de paquets IP obtenus quand un hôte
              entre  l'origine  et  la  destination  a  décidé que les paquets
              étaient  trop  grands  et  les  a  coupés  en  morceaux)  seront
              réassemblés  (défragmentés)  avant  d'être  traités,  même s'ils
              doivent être transférés.

              Cette option n'est à utiliser que pour un pare-feu  qui  est  le
              seul   lien   d'entrée   de   votre  réseau,  ou  un  mandataire
              transparent. Il ne faut jamais l'utiliser pour un routeur ou  un
              hôte  normal. Sinon, les communications fragmentées peuvent être
              interrompues si les fragments circulent par différents liens. La
              défragmentation  a  également  un  coût  mémoire  et  processeur
              important.

              Ceci est automagiquement activé lorsque le  masquerading  ou  le
              mandataire transparent sont configurés.

       ip_autoconfig (depuis Linux 2.2 à 2.6.17)
              Non documenté.

       ip_default_ttl (entier ; défaut : 64 ; depuis Linux 2.2)
              Définit  la  valeur par défaut du champ Time-to-Live des paquets
              sortants. Ceci peut être modifié  individuellement  pour  chaque
              socket avec l'option IP_TTL.

       ip_dynaddr (booléen ; désactivé par défaut ; depuis Linux 2.0.31)
              Active  la  réécriture  dynamique  des  adresses de socket et du
              masquerading lors des changements  d'adresse  d'interface.  Cela
              sert  pour  les  liaisons  téléphoniques,  avec  des adresses IP
              changeantes. 0 signifie aucune réécriture, 1 les autorise, et  2
              demande un mode bavard.

       ip_forward (booléen ; désactivé par défaut) ; depuis Linux 1.2
              Active le transfert IP avec un attribut booléen. Le transfert IP
              peut aussi être configuré interface par interface.

       ip_local_port_range (depuis Linux 2.2)
              Contient deux entiers qui définissent  l'intervalle  par  défaut
              des  ports locaux alloués aux sockets. L'allocation démarre avec
              le premier numéro et se termine avec le second. Cela ne doit pas
              entrer  en  conflit avec les ports utilisés pour le masquerading
              (bien que cela soit traité).  De  même,  des  choix  arbitraires
              peuvent  poser  des problèmes avec certains pare-feu de filtrage
              par paquet qui  font  des  suppositions  sur  les  ports  locaux
              utilisés.  Le premier nombre doit être au moins supérieur à 1024
              et de préférence à 4096 pour  éviter  les  collisions  avec  les
              ports officiels et minimiser les problèmes de pare-feu.

       ip_no_pmtu_disc (booléen ; désactivé par défaut) ; depuis Linux 2.2
              Si  activé, supprime la recherche par défaut des MTU des chemins
              pour les sockets TCP. La recherche de la MTU  d'un  chemin  peut
              échouer avec des pare-feu mal configurés (qui rejettent tous les
              paquets ICMP) ou des interfaces mal configurées (par exemple, un
              lien  point-à-point  où  les  deux  extrémités n'ont pas la même
              MTU). Il vaut  mieux  corriger  le  routeur  défectueux  que  de
              supprimer  globalement  la  recherche  des  MTU des chemins, car
              cette dernière option augmente les coûts du réseau.

       ip_nonlocal_bind (booléen ; désactivé par défaut ; depuis Linux 2.4)
              Si défini, permet aux processus de s'attacher avec bind(2) à des
              adresses  IP non locales, ce qui peut être utile mais peut faire
              planter certaines applications.

       ip6frag_time (entier ; défaut : 30)
              Définit le temps en secondes de conservation d'un fragment  IPv6
              en mémoire.

       ip6frag_secret_interval (entier ; défaut : 600)
              Définit  l'intervalle de régénération (en secondes) du secret de
              hachage (ou sa durée 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 à ipfrag_low_thresh. Contient un entier
              avec le nombre d'octets.

       neigh/*
              Consultez arp(7).

   Ioctls
       Tous les ioctls décrits dans socket(7) s'appliquent à ip.

       Les ioctls pour configurer les paramètres génériques des  périphériques
       sont décrits dans netdevice(7).

ERREURS

       EACCES L'utilisateur  a essayé de réaliser une opération sans avoir les
              permissions nécessaires. Cela inclut : l'envoi d'un paquet  vers
              une  adresse  de diffusion générale sans avoir activé l'attribut
              SO_BROADCAST, l'envoi d'un paquet par une  route  interdite,  la
              modification  du  paramétrage du pare-feu sans les privilèges du
              superutilisateur (la capacité CAP_NET_ADMIN) et l'attachement  à
              un  port  privilégié sans les privilèges du superutilisateur (la
              capacité CAP_NET_BIND_SERVICE).

       EADDRINUSE
              Tentative d'attachement à une adresse déjà utilisée.

       EADDRNOTAVAIL
              Une  interface  inexistante  a  été   demandée,   ou   l'adresse
              d'émission demandée n'était pas locale.

       EAGAIN L'opération sur une socket non bloquante devrait bloquer.

       EALREADY
              Une  opération de connexion est déjà en cours sur une socket non
              bloquante.

       ECONNABORTED
              Une connexion a été fermée durant un appel à accept(2).

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

       EINVAL Un argument non  valable  a  été  fourni.  Pour  les  opérations
              d'envoi,  cela  peut être causé par un envoi vers une route trou
              noir.

       EISCONN
              connect(2) a été appelée sur une socket déjà connectée.

       EMSGSIZE
              Un datagramme est plus grand que la MTU du chemin et ne peut pas
              être fragmenté.

       ENOBUFS, ENOMEM
              La  mémoire  libre  est  insuffisante. Cela signifie souvent que
              l'allocation mémoire est contrainte par les limites du tampon de
              socket,  pas  par  la  mémoire  du  système,  mais  ce n'est pas
              toujours le cas.

       ENOENT SIOCGSTAMP a été appelé  sur  une  socket  qu'aucun  paquet  n'a
              atteint.

       ENOPKG Un sous-système du noyau n'est pas configuré.

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

       ENOTCONN
              L'opération  n'est  définie  que  sur une socket connectée, mais
              cette socket n'était pas connectée.

       EPERM  L'utilisateur n'a pas la  permission  de  définir  une  priorité
              haute,  de  changer la configuration ou d'envoyer des signaux au
              groupe ou au processus demandé.

       EPIPE  La connexion a été  fermée  prématurément  ou  volontairement  à
              l'autre extrémité.

       ESOCKTNOSUPPORT
              La  socket  n'est  pas configurée ou un type de socket inconnu a
              été demandé.

       D'autres  erreurs  peuvent  être   déclenchées   par   les   protocoles
       supérieurs. 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 spécifiques à Linux.

       Soyez  très  prudents  avec  l'option  SO_BROADCAST,  elle  n'est   pas
       privilégiée  sous Linux. Il est facile de surcharger un réseau avec des
       diffusions générales sans  précaution.  Pour  les  nouveaux  protocoles
       applicatifs,  il  vaut  mieux  utiliser un groupe de diffusion multiple
       plutôt que la diffusion générale. Ce dernier est déconseillé.

       Certaines  autres  implémentations  des  sockets  BSD  fournissent  les
       options  de socket IP_RCVDSTADDR et IP_RECVIF pour obtenir l'adresse de
       destination  et  l'interface  des  datagrammes  reçus.  Linux   propose
       l'option IP_PKTINFO plus générale pour effectuer ce travail.

       Certaines   implémentations   BSD  des  sockets  fournissent  également
       l'option  IP_RECVTTL,  mais  un  message  de  service  ayant  le   type
       IP_RECVTTL  est  fourni  avec  le  paquet  entrant.  C'est différent de
       l'option IP_TTL utilisée sous Linux.

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

   Compatibilité
       Pour   la   compatibilité   avec   Linux 2.0,   la   syntaxe   obsolète
       socket(AF_INET, SOCK_PACKET, protocole) est encore  gérée  pour  ouvrir
       une  socket  packet(7). Ceci est déconseillé, et doit être remplacé par
       socket(AF_PACKET, SOCK_RAW, protocole). La principale différence est la
       nouvelle   structure   d'adresse   sockaddr_ll  pour  les  informations
       génériques  de  la  couche  de  liaison  à  la  place   de   l'ancienne
       sockaddr_pkt.

BOGUES

       Il y a trop de valeurs d'erreurs hétérogènes.

       Les  ioctls pour configurer les options d'interface spécifiques à IP et
       les tables ARP ne sont pas décrites.

       Certaines versions de la glibc  oublient  de  déclarer  in_pktinfo.  Le
       contournement  consiste  à la recopier depuis cette page de manuel dans
       le programme.

       La réception 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 spécifications IP d'origine.
       RFC 1122 pour les nécessités IPv4 des hôtes.
       RFC 1812 pour les nécessités 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       être       trouvées      à      l'adresse
       <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

       Depuis 2010, cette traduction est maintenue à l'aide  de  l'outil  po4a
       <URL:http://po4a.alioth.debian.org/>   par   l'équipe   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'équipe francophone de traduction de Debian (2006-2009).

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

       Vous  pouvez  toujours avoir accès à la version anglaise de ce document
       en utilisant la commande « man -L C <section> <page_de_man> ».