ip

IP(7)                     Manuel du programmeur Linux                    IP(7)



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 (c'est-à -dire
              le système hébergeant l'application utilisant l'option de
              socket IP_TRANSPARENT). 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)
              Ce fichier contient deux entiers qui définissent lâintervalle
              de ports locaux alloués aux sockets qui ne sont pas
              explicitement liées à  un numéro de port â câest-à -dire,
              lâintervalle utilisé pour les ports éphémères. Un port
              éphémère est alloué à une socket dans les circonstances
              suivantes :

              *  le numéro de port dans une adresse de socket est défini Ã
                 0 en appelant bind(2) ;

              *  listen(2) est appelé sur une socket de flux qui nâétait pas
                 liée auparavant ;

              *  connect(2) a été appelée sur une socket qui nâétait pas
                 liée auparavant ;

              *  sendto(2) est appelée sur une socket de datagramme qui
                 nâétait pas liée auparavant.

              Lâallocation de ports éphémères commence avec le premier
              numéro de ip_local_port_range et se termine avec le second. Si
              lâintervalle de ports éphémères est épuisé, alors lâappel
              système associé renvoie une erreur (mais consultez BOGUES).

              Remarquez que lâintervalle de ports dans ip_local_port_range ne
              devrait 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.

       Lâerreur utilisée pour diagnostiquer lâépuisement de lâintervalle de
       ports éphémères varie suivant les appels systèmes (connect(2),
       bind(2), listen(2), sendto(2)) qui peuvent assigner des ports
       éphémères.

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

       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.70 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 Ã
       <perkamon-fr@traduc.org>.

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



Linux                             10 mai 2014                            IP(7)