Provided by:
manpages-fr_3.32d0.2p4-1_all 
NOM
ip - Implementation Linux du protocole IPv4
SYNOPSIS
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h> /* surensemble des precedents */
tcp_socket = socket(AF_INET, SOCK_STREAM, 0);
udp_socket = socket(AF_INET, SOCK_DGRAM, 0);
raw_socket = socket(AF_INET, SOCK_RAW, protocole);
DESCRIPTION
Linux implemente le protocole internet (IP) version 4, decrit dans les
RFC 791 et RFC 1122. ip contient une implementation de la diffusion
multiple niveau 2 conforme a la RFC 1112. Cette implementation inclut
un routeur IP comprenant un filtre de paquets.
L'interface de programmation est compatible avec les sockets BSD. Pour
plus d'informations sur les sockets, consultez socket(7).
Une socket IP est creee en appelant la fonction socket(2) sous la forme
socket(AF_INET, type_socket, protocole). Les types valables de sockets
sont SOCK_STREAM pour ouvrir une socket tcp(7), SOCK_DGRAM pour ouvrir
une socket udp(7), ou SOCK_RAW pour ouvrir une socket raw(7) permettant
d'acceder directement au protocole IP. Le protocole indique est celui
inscrit dans les en-tetes IP emis ou recus. Les seules valeurs valables
pour le protocole sont 0 et IPPROTO_TCP pour les sockets TCP, et 0 et
IPPROTO_UDP pour les sockets UDP. Pour les sockets SOCK_RAW, on peut
indiquer un protocole IP IANA valable dont la RFC 1700 precise les
numeros assignes.
Lorsqu'un processus veut recevoir de nouveaux paquets entrants ou des
connexions, il doit attacher une socket a une adresse d'interface
locale en utilisant bind(2). Une seule socket IP peut etre attachee a
une paire (adresse, port) locale donnee. Lorsqu'on indique INADDR_ANY
lors de l'attachement, la socket sera affectee a toutes les interfaces
locales. Si listen(2) ou connect(2) sont appelees sur une socket non
affectee, celle-ci est automatiquement attachee a un port libre
aleatoire, avec l'adresse locale definie a INADDR_ANY.
L'adresse locale d'une socket TCP qui a ete attachee est indisponible
pendant quelques instants apres sa fermeture, a moins que l'attribut
SO_REUSEADDR ait ete active. Il faut etre prudent en utilisant cet
attribut, car il rend le protocole TCP moins fiable.
Format d'adresse
Une adresse de socket IP est definie comme la combinaison d'une adresse
IP d'interface et d'un numero de port. Le protocole IP de base ne
fournit pas de numero de port, ils sont implementes par les protocoles
de plus haut niveau comme udp(7) et tcp(7). Sur les sockets raw, le
champ sin_port contient le protocole IP.
struct sockaddr_in {
sa_family_t sin_family; /* famille d'adresses : AF_INET */
in_port_t sin_port; /* port dans l'ordre des
octets reseau */
struct in_addr sin_addr; /* adresse Internet */
};
/* Adresse Internet */
struct in_addr {
uint32_t s_addr; /* adresse dans l'ordre des
octets reseau */
};
sin_family est toujours defini a AF_INET. C'est indispensable : sous
Linux 2.2, la plupart des fonctions reseau renvoient EINVAL lorsque
cette configuration manque. sin_port contient le numero de port, dans
l'ordre des octets du reseau. Les numeros de ports inferieurs a 1024
sont dits privil'egi'es (ou parfois ports r'eserv'es). Seuls les processus
privilegies (a savoir ceux qui ont la capacite CAP_NET_BIND_SERVICE)
peuvent appeler bind(2) pour ces sockets. Le protocole IPv4 en tant que
tel n'a pas le concept de ports, ceux-ci etant seulement implementes
par des protocoles de plus haut niveau comme tcp(7) et udp(7).
sin_addr est l'adresse IP de l'hote. Le membre s_addr de la structure
in_addr contient l'adresse de l'interface de l'hote, dans l'ordre des
octets du reseau. in_addr doit se voir assigner l'une des valeurs
INADDR_* (par exemple, INADDR_ANY) ou etre manipule au travers des
fonctions de bibliotheque inet_aton(3), inet_addr(3), inet_makeaddr(3)
ou directement par le systeme de resolution des noms (consultez
gethostbyname(3)).
Les adresses IPv4 sont divisees en adresses de diffusions individuelle,
generale et multiple. Les adresses de diffusion individuelle decrivent
une interface unique d'un hote, les adresses de diffusion generale
correspondent a tous les hotes d'un reseau, et les adresses de
diffusion multiple representent tous les hotes d'un groupe de diffusion
multiple. Les datagrammes vers des adresses de diffusion generale ne
peuvent etre emis et recus que si l'attribut de socket SO_BROADCAST est
active. Dans l'implementation actuelle, les sockets orientees connexion
ne sont autorisees que sur des adresses de diffusion individuelle.
Remarquez que l'adresse et le port sont toujours stockes dans l'ordre
des octets du reseau. Cela signifie en particulier qu'il faut invoquer
htons(3) sur le numero attribue a un port. Toutes les fonctions de
manipulation d'adresses et de ports de la bibliotheque standard
fonctionnent dans l'ordre des octets.
Il existe plusieurs adresses particulieres : INADDR_LOOPBACK
(127.0.0.1) correspond toujours a l'hote local via le peripherique
loopback ; INADDR_ANY (0.0.0.0) signifie un attachement a n'importe
quelle adresse ; INADDR_BROADCAST (255.255.255.255) signifie n'importe
quel hote et a le meme effet sur l'attachement que INADDR_ANY, pour des
raisons historiques.
Options de sockets
IP gere quelques options de sockets specifiques au protocole, qui
peuvent etre definies avec setsockopt(2) et consultees avec
getsockopt(2). Le niveau d'option de sockets pour IP est IPPROTO_IP. Un
attribut entier booleen est faux quand il vaut zero, et vrai sinon.
IP_ADD_MEMBERSHIP (depuis Linux 1.2)
Rejoint un groupe de diffusion multiple. L'argument est une
structure ip_mreqn.
struct ip_mreqn {
struct in_addr imr_multiaddr; /* Adresse IP du groupe
de diffusion multiple */
struct in_addr imr_address; /* Adresse IP de
l'interface locale */
int imr_ifindex; /* Numero d'interface */
};
imr_multiaddr contient l'adresse du groupe de diffusion multiple
que l'application veut rejoindre ou quitter. Il doit s'agir
d'une adresse de diffusion multiple valable (sinon setsockopt(2)
echoue avec l'erreur EINVAL). imr_address est l'adresse de
l'interface locale avec laquelle le systeme doit joindre le
groupe de diffusion multiple. Si elle est egale a INADDR_ANY,
une interface appropriee est choisie par le systeme. imr_ifindex
est le numero de l'interface qui doit rejoindre ou quitter le
groupe imr_multiaddr, ou zero pour indiquer n'importe quelle
interface.
La structure ip_mreqn n'est disponible que depuis Linux 2.2.
Pour la compatibilite, l'ancienne structure ip_mreq (presente
depuis Linux 1.2) est encore geree ; elle ne differe de ip_mreqn
que par l'absence du membre imr_ifindex. Uniquement valable avec
setsockopt(2).
IP_DROP_MEMBERSHIP (depuis Linux 1.2)
Quitte un groupe de diffusion multiple. L'argument est une
structure ip_mreqn ou ip_mreq comme pour IP_ADD_MEMBERSHIP.
IP_FREEBIND (depuis Linux 2.4)
Si cette option est activee, cet attribut booleen permet
l'attachement a une adresse IP non locale ou qui n'existe pas
(encore). Cela permet d'ecouter sur une socket, sans que
l'interface reseau sous-jacente ou l'adresse IP dynamique
indiquee ne soit operationnelle au moment ou l'application
essaye de s'y attacher. Cette option est l'equivalent specifique
a la socket de l'interface ip_nonlocal_bind de /proc decrite
plus bas.
IP_HDRINCL (depuis Linux 2.0)
Si cette option est activee, l'utilisateur fournit un en-tete IP
avant les donnees utilisateur. Cette option n'est valable que
pour les sockets SOCK_RAW. Consultez raw(7) pour plus de
details. Lorsque cet attribut est active, les valeurs definies
pour IP_OPTIONS, IP_TTL et IP_TOS sont ignorees.
IP_MTU (depuis Linux 2.2)
Recupere la MTU du chemin actuellement determinee pour la
socket. Valable seulement quand la socket a ete connectee.
Renvoie un entier. Valable uniquement avec getsockopt(2).
IP_MTU_DISCOVER (depuis Linux 2.2)
Definit ou recupere la definition de recherche des MTU des
chemins pour une socket. Lorsqu'elle est activee, Linux
effectuera la recherche de la MTU d'un chemin comme defini dans
la RFC 1191. L'attribut interdisant la fragmentation est alors
active sur tous les datagrammes sortants. La valeur par defaut
est commandee au niveau systeme par le fichier
/proc/sys/net/ipv4/ip_no_pmtu_disc pour les sockets SOCK_STREAM,
et desactivee pour toutes les autres. Pour les sockets autres
que SOCK_STREAM, l'utilisateur est responsable de l'empaquetage
des donnees dans des blocs inferieurs a la MTU et doit s'assurer
de la retransmission si besoin. Le noyau rejettera les paquets
qui sont plus gros que la MTU du chemin determinee si cet
attribut est active (avec l'erreur EMSGSIZE).
Attributs MTU des chemins Signification
IP_PMTUDISC_WANT utiliser une configuration par route
IP_PMTUDISC_DONT ne pas rechercher la MTU des chemins
IP_PMTUDISC_DO toujours chercher la MTU des chemins
IP_PMTUDISC_PROBE activer DF (<< Don't Fragment >>, ne
pas fragmenter), mais ignore les
recherches de MTU des chemins
Lorsque la recherche de la MTU des chemins est activee, le noyau
garde automatiquement une trace des MTU des chemins par hote de
destination. Lorsqu'il est connecte a un correspondant
specifique avec connect(2), la MTU du chemin actuel determinee
peut etre consultee en utilisant l'option IP_MTU de la socket
(par exemple si une erreur EMSGSIZE se produit). Cette valeur
peut changer au cours du temps. Pour les sockets sans connexion
avec plusieurs destinations, la nouvelle MTU pour une
destination donnee peut egalement etre obtenue en utilisant la
file d'erreur (consultez IP_RECVERR). Une nouvelle erreur sera
mise en file pour chaque mise a jour de la MTU.
Durant la recherche de la MTU, les paquets initiaux des sockets
datagramme peuvent etre perdus. Les applications utilisant UDP
devraient le savoir, et les eviter dans leur strategie de
retransmission.
Pour demarrer le processus de recherche de la MTU du chemin sur
les sockets non connectees, il est possible de demarrer avec une
grande taille de datagramme (jusqu'a 64 ko d'en-tete) et la
diminuer au fur et a mesure des mises a jours de la MTU du
chemin.
Afin d'obtenir une estimation initiale de la MTU du chemin,
connecte une socket datagramme a l'adresse de destination en
utilisant connect(2) et consultez la MTU en appelant
getsockopt(2) avec l'option IP_MTU.
Il est possible d'implementer la RFC 4821 pour les recherches de
MTU avec des sockets SOCK_DGRAM ou SOCK_RAW en utilisant la
valeur IP_PMTUDISC_PROBE (disponible depuis Linux 2.6.22). C'est
aussi particulierement utile pour les outils de diagnostic comme
tracepath(8) qui veulent deliberement envoyer des paquets sonde
plus larges que le MTU observe du chemin.
IP_MULTICAST_IF (depuis Linux 1.2)
Definit le peripherique local pour une socket de diffusion
multiple. L'argument est une structure ip_mreqn ou ip_mreq,
comme pour IP_ADD_MEMBERSHIP.
Lorsqu'une option de socket non valable est fournie, ENOPROTOOPT
est renvoyee.
IP_MULTICAST_LOOP (depuis Linux 1.2)
Definit ou lit un entier booleen indiquant si les paquets de
diffusion multiple doivent etre renvoyes aux sockets locales.
IP_MULTICAST_TTL (depuis Linux 1.2)
Definit ou lit la valeur du champ Time-to-Live des paquets de
diffusion multiple sortants sur cette socket. Il est tres
important pour les paquets de diffusion multiple de fixer le TTL
le plus petit possible. La valeur par defaut est 1, ce qui
signifie que les paquets de diffusion multiple ne quittent pas
le reseau local a moins que le programme de l'utilisateur ne le
reclame explicitement. L'argument est un entier.
IP_NODEFRAG (depuis Linux 2.6.36)
Si activee (argument non nul), l'assemblage des paquets sortants
est desactive dans la couche netfilter. Cette option n'est
valide que pour des sockets SOCK_RAW. L'argument est un entier.
IP_OPTIONS (depuis Linux 2.0)
Definit ou lit les options IP a envoyer avec chaque paquet sur
cette socket. Les arguments sont un pointeur sur un tampon
memoire contenant les options et la longueur des options.
L'appel a setsockopt(2) definit les options IP associees a une
socket. La taille maximale des options pour IPv4 vaut 40 octets.
Consultez la RFC 791 pour les options autorisees. Lorsque le
paquet de connexion initiale d'une socket SOCK_STREAM contient
des options IP, celles-ci seront automatiquement attribuees a la
socket, avec les en-tetes de routage inverses. Les paquets
entrants ne peuvent pas modifier les options apres que la
connexion a ete etablie. Le traitement des options de routage
des paquets entrants est desactive par defaut, et peut etre
valide en utilisant l'interface accept_source_route de /proc.
Les autres options, comme les horodatages, sont toujours
traitees. Pour les sockets datagramme, les options IP ne peuvent
etre definies que par l'utilisateur local. L'appel de
getsockopt(2) avec IP_OPTIONS remplit le tampon fourni avec les
options d'emission actuelles.
IP_PKTINFO (since Linux 2.2)
Fournit un message IP_PKTINFO de service, qui contient une
structure pktinfo fournissant quelques informations sur le
paquet entrant. Ceci ne fonctionne que pour les sockets
orientees datagramme. L'argument est un attribut indiquant a la
socket si le message IP_PKTINFO doit etre passe ou non. Le
message lui-meme ne peut etre ecrit ou lu que comme message de
controle avec un paquet, en utilisant recvmsg(2) ou sendmsg(2).
struct in_pktinfo {
unsigned int ipi_ifindex; /* Numero d'interface */
struct in_addr ipi_spec_dst; /* Adresse locale */
struct in_addr ipi_addr; /* Adresse de destination */
};
ipi_ifindex est le numero unique de l'interface sur laquelle le
paquet a ete recu. ipi_spec_dst est l'adresse locale du paquet
et ipi_addr est l'adresse de destination dans l'en-tete du
paquet. Si IP_PKTINFO est passe a sendmsg(2) et ipi_spec_dst est
different de zero, alors il sera utilise comme adresse source
pour la recherche dans la table de routage et pour definir les
options de routage IP. Si ipi_ifindex est different de zero,
l'adresse locale principale de l'interface indiquee par cet
index remplace ipi_spec_dst pour la table de routage.
IP_RECVERR (depuis Linux 2.2)
Active le passage ameliore des messages d'erreur. Lorsque cette
option est activee pour une socket datagramme, toutes les
erreurs generees seront envoyees dans une file d'erreurs
particuliere a la socket. Quand l'utilisateur detecte une erreur
d'operation sur la socket, celle-ci peut etre examinee en
invoquant recvmsg(2) avec l'attribut MSG_ERRQUEUE defini. La
structure sock_extended_err decrivant l'erreur sera passee comme
message de service ayant le type IP_RECVERR et le niveau
IPPROTO_IP. Ceci permet une gestion d'erreur fiable sur les
sockets non connectees. La partie comprenant les donnees recues
de la file d'erreurs contient le paquet ayant rencontre un
probleme.
Le message de controle IP_RECVERR contient une structure
sock_extended_err :
#define SO_EE_ORIGIN_NONE 0
#define SO_EE_ORIGIN_LOCAL 1
#define SO_EE_ORIGIN_ICMP 2
#define SO_EE_ORIGIN_ICMP6 3
struct sock_extended_err {
uint32_t ee_errno; /* numero d'erreur */
uint8_t ee_origin; /* origine de l'erreur */
uint8_t ee_type; /* type */
uint8_t ee_code; /* code */
uint8_t ee_pad;
uint32_t ee_info; /* donnees supplementaires */
uint32_t ee_data; /* autres donnees */
/* Des donnees supplementaires peuvent suivre */
};
struct sockaddr *SO_EE_OFFENDER(struct sock_extended_err *);
ee_errno contient le numero de l'erreur errno mise en file.
ee_origin est le code de l'origine de l'erreur. Les autres
champs sont specifiques au protocole. La macro SO_EE_OFFENDER
renvoie un pointeur sur l'adresse d'un objet reseau d'ou
l'erreur provient, en prenant en argument un pointeur sur le
message de service. Si cette adresse n'est pas disponible, le
membre sa_family de la structure sockaddr contient AF_UNSPEC et
les autres champs de sockaddr ne sont pas definis.
IP utilise la structure sock_extended_err comme suit : ee_origin
contient SO_EE_ORIGIN_ICMP pour les erreurs recues sous forme de
paquet ICMP, ou SO_EE_ORIGIN_LOCAL pour les erreurs locales. Les
valeurs inconnues doivent etre ignorees. ee_type et ee_code sont
definis a partir des champs type et code de l'en-tete ICMP.
ee_info contient la MTU determinee pour les erreurs EMSGSIZE. Le
message contient aussi l'adresse sockaddr_in du noeud ayant
cause l'erreur, qui peut etre obtenu avec la macro
SO_EE_OFFENDER. Le champ sin_family de l'adresse fournie par
SO_EE_OFFENDER vaut AF_UNSPEC si la source etait inconnue.
Lorsque les erreurs proviennent du reseau, toutes les options IP
(IP_OPTIONS, IP_TTL, etc.) valables pour la socket et contenues
dans le paquet d'erreur sont transmises comme messages de
controle. La charge du paquet causant l'erreur est renvoyee
comme charge normale. TCP n'a pas de file d'erreurs ;
MSG_ERRQUEUE n'est pas permis sur les sockets SOCK_STREAM.
IP_RECVERR est valable pour TCP, mais toutes les erreurs sont
renvoyees au retour des fonctions de socket ou par SO_ERROR.
Pour les sockets raw, IP_RECVERR active le passage de toutes les
erreurs ICMP recues a l'application, sinon les erreurs sont
seulement renvoyees sur les sockets connectees.
Il s'agit d'un attribut booleen entier. IP_RECVERR est
desactivee par defaut.
IP_RECVOPTS (depuis Linux 2.2)
Passe a l'utilisateur toutes les options IP entrantes dans un
message de controle IP_OPTIONS. L'en-tete de routage et les
autres options sont deja remplies pour l'hote local. Ceci n'est
pas gere pour les sockets SOCK_STREAM.
IP_RECVORIGDSTADDR (depuis Linux 2.6.29)
Cet attribut booleen active le message IP_ORIGDSTADDR de service
dans recvmsg(2), dans lequel le noyau renvoie l'adresse de
destination originale du datagramme en train d'etre recu. le
message de service contient une structure sockaddr_in.
IP_RECVTOS (depuis Linux 2.2)
Le message de service IP_TOS est passe avec les paquets entrants
si cette option est activee. Elle contient un octet qui decrit
le champ Type-Of-Service/Precedence de l'en-tete du paquet. Il
s'agit d'un attribut entier booleen.
IP_RECVTTL (depuis Linux 2.2)
Lorsque cet attribut est defini, passe un message de controle
IP_TTL avec le champ Time-to-Live du paquet recu, sous forme
d'octet. Ceci n'est pas gere pour les sockets SOCK_STREAM.
IP_RETOPTS (depuis Linux 2.2)
Identique a IP_RECVOPTS, mais renvoie les options brutes non
traitees, avec les options d'enregistrement des horodatages et
du routage non remplies pour ce saut.
IP_ROUTER_ALERT (depuis Linux 2.2)
Passe tous les paquets a transferer avec l'option IP Router
Alert activee sur cette socket. Ceci n'est valable que pour les
sockets raw, et sert par exemple pour les demons RSVP de
l'espace utilisateur. Les paquets enregistres ne sont pas
rediriges par le noyau ; l'utilisateur est responsable de leurs
envois. L'attachement des sockets est ignore, et de tels paquets
ne sont filtres que par le protocole. Il s'agit d'un attribut
entier.
IP_TOS (depuis Linux 1.0)
Definit ou recupere le champ Type-Of-Service (TOS) envoye avec
chaque paquet IP sortant de cette socket. Cela sert a gerer sur
le reseau les priorites entre paquets. TOS est un octet.
Quelques attributs TOS standards sont definis : IPTOS_LOWDELAY
pour minimiser les delais pour le trafic interactif,
IPTOS_THROUGHPUT pour optimiser le debit, IPTOS_RELIABILITY pour
optimiser la fiabilite, IPTOS_MINCOST doit etre utilise pour les
donnees de remplissage, quand la lenteur de transmission importe
peu. Une de ces valeurs TOS au maximum peut etre indiquee. Les
autres bits ne sont pas valables et doivent etre effaces. Linux
envoie d'abord des datagrammes IPTOS_LOWDELAY par defaut, mais
le comportement exact depend de la politique configuree pour la
file d'attente. Quelques niveaux de haute priorite peuvent
reclamer les privileges du superutilisateur (la capacite
CAP_NET_ADMIN). La priorite peut aussi etre definie d'une
maniere independante du protocole avec les options de socket
(SOL_SOCKET, SO_PRIORITY) (consultez socket(7)).
IP_TRANSPARENT (depuis Linux 2.6.24)
Cet attribut booleen active le mandataire transparent sur cette
socket. Cette option de socket permet a l'application appelante
de s'attacher a une adresse IP non locale et de fonctionner a la
fois comme un client et un serveur avec l'adresse exterieure
comme point de terminaison local. Remarque : le routage doit
etre configure pour que les paquets envoyes vers l'adresse
exterieure soient routes via la boite TProxy. Les privileges du
superutilisateur sont necessaires pour l'activation de cette
option de socket (la capacite CAP_NET_ADMIN).
Cette option doit egalement etre configuree sur la socket
redirigee pour la redirection TProxy avec la cible iptables
TPROXY.
IP_TTL (depuis Linux 1.0)
Definit ou recupere le contenu actuel du champ Time-to-Live
utilise avec chaque paquet envoye depuis cette socket.
Interfaces /proc
Le protocole IP prend en charge une serie d'interfaces /proc pour
configurer certaines options globales. Les parametres peuvent etre
accedes en lisant ou ecrivant dans les fichiers du repertoire
/proc/sys/net/ipv4/. Les interfaces decrites comme des booleens
prennent une valeur entiere. Celle-ci signifie que l'option
correspondante est activee si elle est differente de zero (<< true >>),
et desactivee si elle vaut zero (<< false >>).
ip_always_defrag (booleen ; depuis Linux 2.2.13)
[Nouveaute des noyaux 2.2.13, dans les noyaux precedents, cette
fonctionnalite etait controlee lors de la compilation avec
l'option CONFIG_IP_ALWAYS_DEFRAG. Cette option n'est plus
presente dans les versions 2.4.x et suivantes.]
Lorsque cet attribut booleen est active (different de zero), les
fragments entrants (morceaux de paquets IP obtenus quand un hote
entre l'origine et la destination a decide que les paquets
etaient trop grands et les a coupes en morceaux) seront
reassembles (defragmentes) avant d'etre traites, meme s'ils
doivent etre transferes.
Cette option n'est a utiliser que pour un pare-feu qui est le
seul lien d'entree de votre reseau, ou un mandataire
transparent. Il ne faut jamais l'utiliser pour un routeur ou un
hote normal. Sinon, les communications fragmentees peuvent etre
interrompues si les fragments circulent par differents liens. La
defragmentation a egalement un cout memoire et processeur
important.
Ceci est automagiquement active lorsque le masquerading ou le
mandataire transparent sont configures.
ip_autoconfig (depuis Linux 2.2 a 2.6.17)
Non documente.
ip_default_ttl (entier ; defaut : 64 ; depuis Linux 2.2)
Definit la valeur par defaut du champ Time-to-Live des paquets
sortants. Ceci peut etre modifie individuellement pour chaque
socket avec l'option IP_TTL.
ip_dynaddr (booleen ; desactive par defaut ; depuis Linux 2.0.31)
Active la reecriture dynamique des adresses de socket et du
masquerading lors des changements d'adresse d'interface. Cela
sert pour les liaisons telephoniques, avec des adresses IP
changeantes. 0 signifie aucune reecriture, 1 les autorise, et 2
demande un mode bavard.
ip_forward (booleen ; desactive par defaut) ; depuis Linux 1.2
Active le transfert IP avec un attribut booleen. Le transfert IP
peut aussi etre configure interface par interface.
ip_local_port_range (depuis Linux 2.2)
Contient deux entiers qui definissent l'intervalle par defaut
des ports locaux alloues aux sockets. L'allocation demarre avec
le premier numero et se termine avec le second. Cela ne doit pas
entrer en conflit avec les ports utilises pour le masquerading
(bien que cela soit traite). De meme, des choix arbitraires
peuvent poser des problemes avec certains pare-feu de filtrage
par paquet qui font des suppositions sur les ports locaux
utilises. Le premier nombre doit etre au moins superieur a 1024
et de preference a 4096 pour eviter les collisions avec les
ports officiels et minimiser les problemes de pare-feu.
ip_no_pmtu_disc (booleen ; desactive par defaut) ; depuis Linux 2.2
Si active, supprime la recherche par defaut des MTU des chemins
pour les sockets TCP. La recherche de la MTU d'un chemin peut
echouer avec des pare-feu mal configures (qui rejettent tous les
paquets ICMP) ou des interfaces mal configurees (par exemple, un
lien point-a-point ou les deux extremites n'ont pas la meme
MTU). Il vaut mieux corriger le routeur defectueux que de
supprimer globalement la recherche des MTU des chemins, car
cette derniere option augmente les couts du reseau.
ip_nonlocal_bind (booleen ; desactive par defaut ; depuis Linux 2.4)
Si defini, permet aux processus de s'attacher avec bind(2) a des
adresses IP non locales, ce qui peut etre utile mais peut faire
planter certaines applications.
ip6frag_time (entier ; defaut : 30)
Definit le temps en secondes de conservation d'un fragment IPv6
en memoire.
ip6frag_secret_interval (entier ; defaut : 600)
Definit l'intervalle de regeneration (en secondes) du secret de
hachage (ou sa duree de vie) pour les fragments IPv6.
ipfrag_high_thresh (entier), ipfrag_low_thresh (entier)
Si le nombre de fragments IP en file atteint ipfrag_high_thresh,
la file est restreinte a ipfrag_low_thresh. Contient un entier
avec le nombre d'octets.
neigh/*
Consultez arp(7).
Ioctls
Tous les ioctls decrits dans socket(7) s'appliquent a ip.
Les ioctls pour configurer les parametres generiques des peripheriques
sont decrits dans netdevice(7).
ERREURS
EACCES L'utilisateur a essaye de realiser une operation sans avoir les
permissions necessaires. Cela inclut : l'envoi d'un paquet vers
une adresse de diffusion generale sans avoir active l'attribut
SO_BROADCAST, l'envoi d'un paquet par une route interdite, la
modification du parametrage du pare-feu sans les privileges du
superutilisateur (la capacite CAP_NET_ADMIN) et l'attachement a
un port privilegie sans les privileges du superutilisateur (la
capacite CAP_NET_BIND_SERVICE).
EADDRINUSE
Tentative d'attachement a une adresse deja utilisee.
EADDRNOTAVAIL
Une interface inexistante a ete demandee, ou l'adresse
d'emission demandee n'etait pas locale.
EAGAIN L'operation sur une socket non bloquante devrait bloquer.
EALREADY
Une operation de connexion est deja en cours sur une socket non
bloquante.
ECONNABORTED
Une connexion a ete fermee durant un appel a accept(2).
EHOSTUNREACH
Aucune table de routage valable ne correspond a l'adresse de
destination. Cette erreur peut etre due a un message ICMP d'un
routeur distant ou pour la table de routage interne.
EINVAL Un argument non valable a ete fourni. Pour les operations
d'envoi, cela peut etre cause par un envoi vers une route trou
noir.
EISCONN
connect(2) a ete appelee sur une socket deja connectee.
EMSGSIZE
Un datagramme est plus grand que la MTU du chemin et ne peut pas
etre fragmente.
ENOBUFS, ENOMEM
La memoire libre est insuffisante. Cela signifie souvent que
l'allocation memoire est contrainte par les limites du tampon de
socket, pas par la memoire du systeme, mais ce n'est pas
toujours le cas.
ENOENT SIOCGSTAMP a ete appele sur une socket qu'aucun paquet n'a
atteint.
ENOPKG Un sous-systeme du noyau n'est pas configure.
ENOPROTOOPT et EOPNOTSUPP
Passage d'une option de socket non valable.
ENOTCONN
L'operation n'est definie que sur une socket connectee, mais
cette socket n'etait pas connectee.
EPERM L'utilisateur n'a pas la permission de definir une priorite
haute, de changer la configuration ou d'envoyer des signaux au
groupe ou au processus demande.
EPIPE La connexion a ete fermee prematurement ou volontairement a
l'autre extremite.
ESOCKTNOSUPPORT
La socket n'est pas configuree ou un type de socket inconnu a
ete demande.
D'autres erreurs peuvent etre declenchees par les protocoles
superieurs. Consultez tcp(7), raw(7), udp(7) et socket(7).
NOTES
IP_FREEBIND, IP_MTU, IP_MTU_DISCOVER, IP_RECVORIGDSTADDR, IP_PKTINFO,
IP_RECVERR, IP_ROUTER_ALERT et IP_TRANSPARENT sont specifiques a Linux.
Soyez tres prudents avec l'option SO_BROADCAST, elle n'est pas
privilegiee sous Linux. Il est facile de surcharger un reseau avec des
diffusions generales sans precaution. Pour les nouveaux protocoles
applicatifs, il vaut mieux utiliser un groupe de diffusion multiple
plutot que la diffusion generale. Ce dernier est deconseille.
Certaines autres implementations des sockets BSD fournissent les
options de socket IP_RCVDSTADDR et IP_RECVIF pour obtenir l'adresse de
destination et l'interface des datagrammes recus. Linux propose
l'option IP_PKTINFO plus generale pour effectuer ce travail.
Certaines implementations BSD des sockets fournissent egalement
l'option IP_RECVTTL, mais un message de service ayant le type
IP_RECVTTL est fourni avec le paquet entrant. C'est different de
l'option IP_TTL utilisee sous Linux.
L'utilisation du niveau des options de socket SOL_IP n'est pas
portable, les empilages bases sur BSD utilisent le niveau IPPROTO_IP.
Compatibilit'e
Pour la compatibilite avec Linux 2.0, la syntaxe obsolete
socket(AF_INET, SOCK_PACKET, protocole) est encore geree pour ouvrir
une socket packet(7). Ceci est deconseille, et doit etre remplace par
socket(AF_PACKET, SOCK_RAW, protocole). La principale difference est la
nouvelle structure d'adresse sockaddr_ll pour les informations
generiques de la couche de liaison a la place de l'ancienne
sockaddr_pkt.
BOGUES
Il y a trop de valeurs d'erreurs heterogenes.
Les ioctls pour configurer les options d'interface specifiques a IP et
les tables ARP ne sont pas decrites.
Certaines versions de la glibc oublient de declarer in_pktinfo. Le
contournement consiste a la recopier depuis cette page de manuel dans
le programme.
La reception de l'adresse de destination originale avec MSG_ERRQUEUE
dans msg_name par recvmsg(2) ne fonctionne pas dans certains
noyaux 2.2.
VOIR AUSSI
recvmsg(2), sendmsg(2), byteorder(3), ipfw(4), capabilities(7),
netlink(7), raw(7), socket(7), tcp(7), udp(7)
RFC 791 pour les specifications IP d'origine.
RFC 1122 pour les necessites IPv4 des hotes.
RFC 1812 pour les necessites IPv4 des routeurs.
COLOPHON
Cette page fait partie de la publication 3.32 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent etre trouvees a l'adresse
<URL:http://www.kernel.org/doc/man-pages/>.
TRADUCTION
Depuis 2010, cette traduction est maintenue a l'aide de l'outil po4a
<URL:http://po4a.alioth.debian.org/> par l'equipe de traduction
francophone au sein du projet perkamon
<URL:http://perkamon.alioth.debian.org/>.
Christophe Blaess <URL:http://www.blaess.fr/christophe/> (1996-2003),
Alain Portal <URL:http://manpagesfr.free.fr/> (2003-2006). Julien
Cristau et l'equipe francophone de traduction de Debian (2006-2009).
Veuillez signaler toute erreur de traduction en ecrivant a
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir acces a la version anglaise de ce document
en utilisant la commande << man -L C <section> <page_de_man> >>.