GNU/Linux >> Tutoriels Linux >  >> Linux

avantages et inconvénients des commandes ip vs ifconfig

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 inetutils
    jdebp % 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-tools
    jdebp % 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 nosh
    jdebp % 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.


Linux
  1. Introduction aux commandes Linux chgrp et newgrp

  2. Comment désactiver les commandes d'arrêt et de redémarrage sous Linux

  3. Commandes Linux - Présentation et exemples

  4. Commandes de redémarrage et d'arrêt de Linux

  5. 11 commandes "ssh" et "scp" utiles sous Linux

13 meilleurs IDE Java {Avec avantages et inconvénients}

Commandes Pushd et Popd sous Linux

Comment utiliser les commandes Pbcopy et Pbpaste sous Linux

5 commandes amusantes à utiliser sous Linux et Terminal

40 Exemple pratique et productif de commandes Linux df

Commandes Zip et Unzip sous Linux/Unix