Provided by: manpages-fr_3.65d1p1-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, un  protocole  IP  IANA  valable  peut  être  indiqué,  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. Lorsque INADDR_ANY
       est indiqué au moment de l'attachement, la socket sera affectée à  toutes  les  interfaces
       locales.   Si   listen(2)   est   appelée  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.  Si  connect(2)  est  appelée  sur  une  socket  non  affectée,  celle-ci  est
       automatiquement attachée à un port libre aléatoire ou  un  port  partagé,  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 privilégiés (ou parfois ports réservés). 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 à l’aide du 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_ADD_SOURCE_MEMBERSHIP (depuis Linux 2.4.22 et 2.5.68)
              Rejoint  un  groupe  de  diffusion  multiple  et  autorise  la réception de données
              uniquement depuis une source indiquée. L'argument est une structure ip_mreq_source.

                  struct ip_mreq_source {
                      struct in_addr imr_multiaddr;  /* Adresse IP du groupe
                                                        de diffusion multiple */
                      struct in_addr imr_interface;  /* Adresse IP de
                                                        l'interface locale */
                      struct in_addr imr_sourceaddr; /* Adresse IP de la source
                                                        de diffusion multiple */
                  };

              La structure ip_mreq_source est similaire à ip_mreqn décrite sous IP_ADD_MEMBERSIP.
              Le  champ  imr_multiaddr  contient  l'adresse  du  groupe de diffusion multiple que
              l'application veut rejoindre ou quitter.Le champ  imr_interface  est  l'adresse  de
              l'interface  locale avec laquelle le système doit rejoindre le groupe de diffusion.
              Le  champ  imr_sourceaddr  contient  l'adresse  de  la   source   depuis   laquelle
              l'application veut recevoir des données.

              Cette  option  peut être utilisée plusieurs fois pour autoriser la réception depuis
              plusieurs sources.

       IP_BLOCK_SOURCE (depuis Linux 2.4.22 / 2.5.68)
              Bloque la réception de données en diffusion multiple depuis une  source  spécifique
              pour  un groupe donné. Cela n'est possible qu'après que l'application s'est abonnée
              au   groupe   de   diffusion   multiple   en   utilisant    IP_ADD_MEMBERSHIP    ou
              IP_ADD_SOURCE_MEMBERSHIP.

              L'argument    est    une    structure    ip_mreq_source    comme    décrite    pour
              IP_ADD_SOURCE_MEMBERSHIP.

       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_DROP_SOURCE_MEMBERSHIP (since Linux 2.4.22 et 2.5.68)
              Quitte  un  groupe  spécifique  à  une source, c'est-à-dire arrêter de recevoir des
              données  depuis  une  source  donnée  pour  un  groupe  de  diffusion   donné.   Si
              l'application  est  abonnée  à  d'autres  sources  du  même groupe, les données des
              sources restantes seront toujours  transmises.  Pour  couper  la  réception  depuis
              toutes les sources, utilisez IP_LEAVE_GROUP.

              L'argument    est    une    structure    ip_mreq_source    comme    décrite    pour
              IP_ADD_SOURCE_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_MSFILTER (depuis Linux 2.4.22 et 2.5.68)
              Cette option permet d'accéder à l'API  de  filtrage  avancée.  L'argument  est  une
              structure ip_msfilter.

                  struct ip_msfilter {
                      struct in_addr imsf_multiaddr; /* Adresse IP du groupe
                                                        de diffusion multiple */
                      struct in_addr imsf_interface; /* Adresse IP de
                                                        l'interface locale */
                      uint32_t       imsf_fmode;     /* Mode de filtrage */
                  };

                      uint32_t       imsf_numsrc;    /* Nombre de sources dans
                                                        le tableau qui suit */
                      struct in_addr imsf_slist[1];  /* Tableau des adresses
                                                        sources */
                  };

              Les  deux  macros MCAST_INCLUDE et MCAST_EXCLUDE permettent d'identifier le mode de
              filtrage. De plus, la macro IP_MSFILTER_SIZE(n) permet de déterminer la quantité de
              mémoire nécessaire pour stocker une structure ip_msfilter contenant n sources.

              Pour  une  description  complète  du  filtrage  des  sources de diffusion multiple,
              consultez la RFC 3376.

       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
              conformément à la RFC 1191 sur les sockets SOCK_STREAM. Pour les sockets autres que
              SOCK_STREAM,   IP_PMTUDISC_DO  force  l'activation  de  l'attribut  interdisant  la
              fragmentation sur tous les  paquets  sortants.  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  (avec  l'erreur  EMSGSIZE)  les
              datagrammes  qui  sont  plus gros que la MTU du chemin déterminée. IP_PMTUDISC_WANT
              fragmentera un datagramme si nécessaire d'après  la  MTU  du  chemin,  ou  activera
              l'attribut interdisant la fragmentation sinon.

              Les  valeurs par défaut du système peuvent être basculées entre IP_PMTUDISC_WANT et
              IP_PMTUDISC_DONT en écrivant (respectivement des valeurs nulle ou non  nulle)  dans
              le fichier /proc/sys/net/ipv4/ip_no_pmtu_disc.

              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). La MTU des chemins 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_ALL (depuis Linux 2.6.31)
              Définit la politique de distribution des messages multicast aux sockets attachés  à
              l'adresse  jocker  INADDR_ANY.  Ce  paramètre  est  un  booléen  (par  défaut à 1).
              Configuré à 1, la socket recevra les messages destinés à tous les groupes  auxquels
              le  système  est abonné. Sinon, seuls seront distribués les messages destinés à des
              groupes auxquels la socket s'est explicitement abonné  (par  exemple  en  utilisant
              l'option IP_ADD_MEMBERSHIP).

       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 (depuis Linux 3.5), 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  définir 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 valable 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 (depuis Linux 2.2)
              Fournit  un  message  IP_PKTINFO  de  service,  qui  contient une structure pktinfo
              fournissant quelques informations sur le paquet entrant. Ça 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  propre  à  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. Cela 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. Ce 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. Ce 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. Ce 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.

       IP_UNBLOCK_SOURCE (depuis Linux 2.4.22 et 2.5.68)
              Débloque   une   source   de   diffusion  multiple  précédemment  bloquée.  Renvoie
              EADDRNOTAVAIL si la source indiquée n'était pas bloquée.

              L'argument    est    une    structure    ip_mreq_source    comme    décrite    pour
              IP_ADD_SOURCE_MEMBERSHIP.

   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.

              C’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. Cela  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 attente 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_MSFILTER,  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). C’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),  icmp(7),  ipv6(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.65 du projet man-pages Linux. Une description
       du projet et des  instructions  pour  signaler  des  anomalies  peuvent  être  trouvées  à
       l'adresse http://www.kernel.org/doc/man-pages/.

TRADUCTION

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

       Christophe    Blaess    <http://www.blaess.fr/christophe/>   (1996-2003),   Alain   Portal
       <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> ».