ip(7) Miscellaneous Information Manual ip(7) NOM ip - Implementation Linux du protocole IPv4 SYNOPSIS #include #include #include /* superset of previous */ 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). Un socket IP est cree en utilisant socket(2) : socket(AF_INET, type_socket, protocole); Les sockets autorises incluent SOCK_STREAM pour ouvrir un socket flux, SOCK_DGRAM pour ouvrir un socket datagramme et SOCK_RAW pour ouvrir un socket raw(7) pour acceder directement au protocole IP. protocole est le protocole IP dans les en-tetes IP recus ou envoyes. Les valeurs autorisees pour protocole incluent : - 0 et IPPROTO_TCP pour les sockets flux tcp(7) ; - 0 et IPPROTO_UDP pour les sockets datagramme udp(7) ; - IPPROTO_SCTP pour les sockets flux sctp(7) ; - IPPROTO_UDPLITE pour les sockets datagramme udplite(7). Pour SOCK_RAW un protocole IP IANA autorise, defini dans les numeros assignes de la RFC 1700, peut etre indique. Lorsqu'un processus veut recevoir de nouveaux paquets entrants ou des connexions, il doit attacher un socket a une adresse d'interface locale en utilisant bind(2). Un seul socket IP peut etre attache a une paire (adresse, port) locale donnee. Lorsque INADDR_ANY est indique au moment de l'attachement, le socket sera affecte a toutes les interfaces locales. Si listen(2) est appelee sur un socket non affecte, celui-ci est automatiquement attache a un port libre aleatoire, avec l'adresse locale definie a INADDR_ANY. Si connect(2) est appelee sur un socket non affecte, celui-ci est automatiquement attache a un port libre aleatoire ou un port partage utilisable avec l'adresse locale definie a INADDR_ANY. L'adresse locale d'un socket TCP qui a ete attache 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. Formats d'adresse An IP socket address is defined as a combination of an IP interface address and a 16-bit port number. The basic IP protocol does not supply port numbers, they are implemented by higher level protocols like udp(7) and tcp(7). On raw sockets .sin_port is set to the IP protocol. See sockaddr_in(3type). .sin_family is always set to AF_INET. This is required; in Linux 2.2 most networking functions return EINVAL when this setting is missing. .sin_port contains the port in network byte order. The port numbers below 1024 are called privileged ports (or sometimes: reserved ports). Only a privileged process (on Linux: a process that has the CAP_NET_BIND_SERVICE capability in the user namespace governing its network namespace) may bind(2) to these sockets. Note that the raw IPv4 protocol as such has no concept of a port, they are implemented only by higher protocols like tcp(7) and udp(7). .sin_addr is the IP host address. The .s_addr member of the in_addr(3type) structure contains the host interface address in network byte order. in_addr(3type) should be assigned one of the INADDR_* values (e.g., INADDR_LOOPBACK) using htonl(3) or set using the inet_aton(3), inet_addr(3), inet_makeaddr(3) library functions or directly with the name resolver (see gethostbyname(3)). Les adresses IPv4 sont divisees en adresses de diffusion individuelle (unicast), de diffusion generale (broadcast) et de diffusion multiple (multicast). 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 orientes connexion ne sont autorises 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 du reseau. Adresses speciales et reservees Il y a plusieurs adresses speciales : INADDR_LOOPBACK (127.0.0.1) fait toujours reference a l'hote local a l'aide du peripherique de rebouclage (loopback) ; INADDR_ANY (0.0.0.0) signifie n'importe quelle adresse pour l'attachement de socket ; INADDR_BROADCAST (255.255.255.255) A packet addressed to INADDR_BROADCAST through a socket which has SO_BROADCAST set will be broadcast to all hosts on the local network segment, as long as the link is broadcast-capable. Numero d'adresse le plus haut Numero d'adresse le plus bas Sur tout sous-reseau IP non point-a-point localement attache avec une liaison du type qui gere la diffusion generale (broadcast), l'adresse avec la numerotation la plus elevee (par exemple, l'adresse 255 sur un sous-reseau avec un masque de reseau 255.255.255.0) est designee comme adresse de broadcast. Elle ne peut pas etre assignee de maniere utile a une interface individuelle et ne peut etre adressee qu'avec un socket avec l'option SO_BROADCAST definie. Les normes d'Internet ont aussi historiquement reserve l'adresse avec le numero le plus bas (par exemple, l'adresse 0 d'un sous-reseau avec un masque reseau 255.255.255.0) pour le broadcast, bien qu'elles la qualifient d'<< obsolete >> pour cette fonction (quelques sources l'appellent aussi << adresse reseau >>). Depuis Linux 5.14, elle est consideree comme une adresse ordinaire de diffusion unique (unicast) et peut etre assignee a une interface. Les normes d'Internet ont traditionnellement reserve aussi diverses adresses pour des usages particuliers, bien que Linux ne traite plus certaines d'entre elles specialement. [0.0.0.1, 0.255.255.255] [240.0.0.0, 255.255.255.254] Les adresses dans ces plages (0/8 et 240/4) sont reservees globalement. Depuis Linux 5.3 et Linux 2.6.25, respectivement, les adresses 0/8 et 240/4, autres que INADDR_ANY et INADDR_BROADCAST sont traitees comme des adresses unicast ordinaires. Les systemes qui suivent le comportement traditionnel n'interagiront pas avec ces adresses historiquement reservees. [127.0.0.1, 127.255.255.254] Les adresses dans cette plage (127/8) sont traitees comme des adresses de rebouclage (loopback) semblables a l'adresse standardisee de rebouclage locale INADDR_LOOPBACK (127.0.0.1) ; [224.0.0.0, 239.255.255.255] Les adresses dans cette plage (224/4) sont dediees a un usage de diffusion multiple (multicast). Options de socket See IPPROTO_IP(2const). /proc interfaces See proc_sys_net_ipv4(5). 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 un socket non bloquant devrait bloquer. EALREADY Une connexion est deja en cours sur un socket non bloquant. 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 dans 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 un socket deja connecte. EMSGSIZE Un datagramme est plus grand qu'une MTU sur le 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 un socket qu'aucun paquet n'a atteint. ENOPKG Un sous-systeme du noyau n'est pas configure. ENOPROTOOPT EOPNOTSUPP Passage d'une option de socket non valable. ENOTCONN L'operation n'est definie que pour un socket connecte, mais ce socket n'etait pas connecte. 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 par l'autre extremite. ESOCKTNOSUPPORT Le socket n'est pas configure ou un type de socket inconnu a ete demande. D'autres erreurs peuvent etre declenchees par les protocoles des couches superieures. Consultez tcp(7), raw(7), udp(7) et socket(7). NOTES 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. Cette derniere est deconseillee. Voir la RFC 6762 pour un exemple de protocole (mDNS) utilisant l'approche plus moderne de diffusion multiple pour communiquer avec un groupe illimite d'hotes sur le reseau local. L'utilisation du niveau des options de socket SOL_IP n'est pas portable, les piles basees sur BSD utilisent le niveau IPPROTO_IP. INADDR_ANY(0.0.0.0) et INADDR_BROADCAST (255.255.255.255) sont independantes de l'ordre des octets. Cela signifie que htonl(3) n'a aucun effet sur elles. Compatibilite Pour la compatibilite avec Linux 2.0, la syntaxe obsolete socket(AF_INET, SOCK_PACKET, protocole) est encore geree pour ouvrir un socket packet(7). Cela 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. L'erreur utilisee pour diagnostiquer l'epuisement de l'intervalle de ports ephemeres varie suivant les appels systemes (connect(2), bind(2), listen(2), sendto(2)) qui peuvent assigner des ports ephemeres. Les ioctls pour configurer les options d'interface specifiques a IP et les tables ARP ne sont pas decrites. La reception de l'adresse de destination originale avec MSG_ERRQUEUE dans msg_name par recvmsg(2) ne fonctionne pas dans certains noyaux Linux 2.2. VOIR AUSSI IPPROTO_IP(2const), recvmsg(2), sendmsg(2), byteorder(3), capabilities(7), icmp(7), ipv6(7), netdevice(7), netlink(7), raw(7), socket(7), tcp(7), udp(7), ip(8) Le fichier source du noyau Documentation/networking/ip-sysctl.rst. RFC 791 pour les specifications IP d'origine. RFC 1122 pour les exigences IPv4 des hotes. RFC 1812 pour les exigences IPv4 des routeurs. TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot , Jean-Paul Guillonneau et bubu Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.17 8 fevrier 2026 ip(7)