Le ifconfig
La commande sur les systèmes d'exploitation tels que FreeBSD et OpenBSD a été mise à jour conformément au reste du système d'exploitation. De nos jours, il peut configurer toutes sortes de paramètres d'interface réseau sur ces systèmes d'exploitation et gérer une gamme de protocoles réseau. Les BSD fournissent ioctl()
soutien pour ces choses.
Cela ne s'est pas produit dans le monde Linux. Il y a, aujourd'hui, trois ifconfig
commandes :
ifconfig
de GNU inetutilsjdebp % inetutils-ifconfig -l enp14s0 enp15s0 lo jdebp % inetutils-ifconfig lo lo Link encap:Local Loopback inet addr:127.0.0.1 Bcast:0.0.0.0 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:9087 errors:0 dropped:0 overruns:0 frame:0 TX packets:9087 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:51214341 TX bytes:51214341 jdebp %
-
ifconfig
depuis NET-3 net-toolsjdebp % ifconfig -l ifconfig: option
-l' not recognised. ifconfig:
--help' gives usage information. jdebp % ifconfig lo lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> inet6 ::2 prefixlen 128 scopeid 0x80<compat,global> inet6 fe80:: prefixlen 10 scopeid 0x20<link> loop txqueuelen 1000 (Local Loopback) RX packets 9087 bytes 51214341 (48.8 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 9087 bytes 51214341 (48.8 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 jdebp % -
ifconfig
de (version 1.40 de) l'ensemble d'outils noshjdebp % ifconfig -l enp14s0 enp15s0 lo jdebp % ifconfig lo lo link up loopback running link address 00:00:00:00:00:00 bdaddr 00:00:00:00:00:00 inet4 address 127.0.0.1 prefixlen 8 bdaddr 127.0.0.1 inet4 address 127.53.0.1 prefixlen 8 bdaddr 127.255.255.255 inet6 address ::2 scope 0 prefixlen 128 inet6 address fe80:: scope 1 prefixlen 10 inet6 address ::1 scope 0 prefixlen 128 jdebp % sudo ifconfig lo inet4 127.1.0.2 alias jdebp % sudo ifconfig lo inet6 ::3/128 alias jdebp % ifconfig lo lo link up loopback running link address 00:00:00:00:00:00 bdaddr 00:00:00:00:00:00 inet4 address 127.0.0.1 prefixlen 8 bdaddr 127.0.0.1 inet4 address 127.1.0.2 prefixlen 32 bdaddr 127.1.0.2 inet4 address 127.53.0.1 prefixlen 8 bdaddr 127.255.255.255 inet6 address ::3 scope 0 prefixlen 128 inet6 address ::2 scope 0 prefixlen 128 inet6 address fe80:: scope 1 prefixlen 10 inet6 address ::1 scope 0 prefixlen 128 jdebp %
Comme vous pouvez le voir, GNU inetutils et NET-3 net-tools ifconfig
s présentent des lacunes marquées, en ce qui concerne IPv6, en ce qui concerne les interfaces qui ont plusieurs adresses et en ce qui concerne des fonctionnalités telles que -l
.
Le problème IPv6 est en partie un code manquant dans les outils eux-mêmes. Mais dans l'ensemble, cela est dû au fait que Linux ne fournit pas (comme le font d'autres systèmes d'exploitation) la fonctionnalité IPv6 via le ioctl()
interface. Il permet uniquement aux programmes de voir et de manipuler les adresses IPv4 via le réseau ioctl()
s.
Linux fournit à la place cette fonctionnalité via une interface différente, send()
et recv()
sur une famille d'adresses spéciale et quelque peu étrange, AF_NETLINK
.
Le GNU et NET-3 ifconfig
s pourrait ont été ajustés pour utiliser cette nouvelle API. L'argument contre cela était qu'il n'était pas portable sur d'autres systèmes d'exploitation, mais ces programmes étaient en pratique déjà pas portable de toute façon donc ce n'était pas vraiment un argument.
Mais ils n'ont pas été ajustés et restent comme indiqué ci-dessus à ce jour. (Certaines personnes y ont travaillé à différents moments au fil des ans, mais les améliorations, malheureusement, n'ont jamais été intégrées aux programmes. Par exemple :Bernd Eckenfels n'a jamais accepté un correctif qui ajoutait une fonctionnalité d'API netlink aux outils réseau NET-3. ifconfig
, 4 ans après la rédaction du correctif.)
Au lieu de cela, certaines personnes ont complètement réinventé l'ensemble d'outils en tant que ip
commande, qui utilisait la nouvelle API Linux, avait une syntaxe différente et combinait plusieurs autres fonctions derrière un command subcommand
à la mode -interface de style.
J'avais besoin d'un ifconfig
qui avait la syntaxe de ligne de commande et le style de sortie de FreeBSD ifconfig
(que ni le GNU ni le NET-3 ifconfig
a, et qui ip
certainement pas). Alors j'en ai écrit un. Comme preuve qu'on pouvait écrire un ifconfig
qui utilise l'API netlink sous Linux, c'est le cas.
Donc, la sagesse reçue à propos de ifconfig
, comme ce que vous citez, n'est plus vraiment vrai. C'est maintenant faux pour dire que "ifconfig
n'utilise pas netlink.". La couverture qui couvrait deux ne couvre pas trois.
Cela a toujours été faux de dire que "netlink est plus efficace". Pour les tâches que l'on fait avec ifconfig
, il n'y a pas grand-chose en termes d'efficacité entre l'API netlink et le ioctl()
API. On fait à peu près le même nombre d'appels d'API pour une tâche donnée.
En effet, chaque appel API est deux appels système dans le cas netlink, par opposition à un dans le cas ioctl()
système. Et sans doute l'API netlink a l'inconvénient que sur un système très utilisé, elle intègre explicitement la possibilité que l'outil ne reçoive jamais de message d'accusé de réception l'informant du résultat de l'appel de l'API.
Il est par ailleurs faux de dire que ip
est "plus polyvalent" que GNU et NET-3 ifconfig
s parce qu'il utilise netlink . Il est plus polyvalent car il fait plus de tâches, faisant des choses dans un gros programme que l'on ferait avec des programmes séparés autres que ifconfig
. Il n'est pas plus polyvalent simplement grâce à l'API qu'il utilise en interne pour effectuer ces tâches supplémentaires. Il n'y a rien d'inhérent à l'API à ce sujet. On pourrait écrire un outil tout-en-un utilisant le FreeBSD ioctl()
API, par exemple, et déclarent également qu'elle est "plus polyvalente" que l'individu ifconfig
, route
, arp
, et ndp
commandes.
On pourrait écrire route
, arp
, et ndp
commandes pour Linux qui utilisaient également l'API netlink.
Autres lectures
- Jonathan de Boyne Pollard (2019).
ifconfig
. Guide bouffe . Logiciels. - Eduardo Ferro (2009-04-16). ifconfig :signale une adresse IP incorrecte / un correctif initial . Bogue Debian #359676.
La norme ifconfig
que nous avons dans de nombreuses distributions est obsolète pour plusieurs raisons. Parle de manière obsolète et limitée avec le noyau, et de fait, ne comprend plus toutes les configurations réseaux. Vous ne pourrez pas manipuler certaines configurations réseau telles que ifconfig
versions que vous pouvez faire avec ip
. De plus, le ifconfig
la prise en charge des espaces de noms réseau est limitée.
Comme histoire anecdotique, j'ai trouvé des alias IP d'interface qui ne sont visibles que dans ip
et pas dans SuSE ifconfig
.
En ce qui concerne les différences sous le capot :De ifconfig vs ip :Quelle est la différence et comparaison de la configuration réseau
Bien que
ip
peut sembler un peu complexe au premier abord, mais ses fonctionnalités sont beaucoup plus larges que ifconfig. Il est fonctionnellement organisé sur deux couches de la pile réseau, c'est-à-dire la couche 2 (couche de liaison), la couche 3 (couche IP) et effectue le travail de toutes les commandes mentionnées ci-dessus à partir du package net-tools.Alors que
ifconfig
affiche ou modifie principalement les interfaces d'un système, cette commande est capable d'effectuer les tâches suivantes :
Afficher ou modifier les propriétés de l'interface.
Ajout, suppression d'entrées de cache ARP et création d'une nouvelle entrée ARP statique pour un hôte.
Affichage des adresses MAC associées à toutes les interfaces.
Affichage et modification des tables de routage du noyau.
L'un des principaux points forts qui le sépare de son ancien homologue ifconfig est que ce dernier utilise ioctl pour la configuration du réseau, qui est un moyen moins apprécié d'interaction avec le noyau tandis que le premier tire parti du mécanisme de socket netlink pour le même qui est un successeur beaucoup plus flexible d'ioctl pour l'inter- communication entre le noyau et l'espace utilisateur à l'aide de rtnetlink (qui ajoute une capacité de manipulation de l'environnement réseau).
À propos de l'utilisation/des avantages de netlink :De LJ - Kernel Korner - Pourquoi et comment utiliser Netlink Socket
Le socket Netlink est un IPC spécial utilisé pour transférer des informations entre les processus du noyau et de l'espace utilisateur. Il fournit un lien de communication en duplex intégral entre les deux au moyen d'API de socket standard pour les processus de l'espace utilisateur et d'une API de noyau spéciale pour les modules du noyau. Le socket Netlink utilise la famille d'adresses AF_NETLINK.
.....
Pourquoi les fonctionnalités ci-dessus utilisent netlink au lieu d'appels système, les systèmes de fichiers ioctlsor proc pour la communication entre les mondes utilisateur et noyau ? nous risquons de polluer le noyau et de nuire à la stabilité du système. Le socket Netlink est cependant simple :seule une constante, le type de protocole, doit être ajoutée à netlink.h. Ensuite, le module du noyau et l'application peuvent communiquer immédiatement à l'aide d'API de type socket.
....
Le socket Netlink est une interface flexible pour la communication entre les applications de l'espace utilisateur et les modules du noyau. Il fournit une API de socket facile à utiliser pour les applications et le noyau. Il fournit des fonctionnalités de communication avancées, telles que le duplex intégral, les E/S tamponnées, la multidiffusion et la communication asynchrone, qui sont absentes des autres IPC noyau/espace utilisateur.