GNU/Linux >> LINUX-Kenntnisse >  >> Linux

ip vs ifconfig Befehle Vor- und Nachteile

Der ifconfig command auf Betriebssystemen wie FreeBSD und OpenBSD wurde im Einklang mit dem Rest des Betriebssystems aktualisiert. Heutzutage kann es alle Arten von Netzwerkschnittstelleneinstellungen auf diesen Betriebssystemen konfigurieren und eine Reihe von Netzwerkprotokollen verarbeiten. Die BSDs bieten ioctl() Unterstützung für diese Dinge.

Das gab es in der Linux-Welt nicht. Heute gibt es drei ifconfig Befehle:

  • ifconfig von 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 von 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 aus (Version 1.40 von) dem Nosh-Toolset
    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 % 

Wie Sie sehen können, sind die GNU inetutils und NET-3 net-tools ifconfig s haben einige deutliche Mängel in Bezug auf IPv6, in Bezug auf Schnittstellen mit mehreren Adressen und in Bezug auf Funktionen wie -l .

Das IPv6-Problem ist teilweise fehlender Code in den Tools selbst. Aber im Wesentlichen liegt es daran, dass Linux nicht (wie andere Betriebssysteme) IPv6-Funktionalität durch den ioctl() bereitstellt Schnittstelle. Es lässt Programme nur IPv4-Adressen über das Netzwerk ioctl() sehen und manipulieren s.

Linux bietet diese Funktionalität stattdessen über eine andere Schnittstelle, send() und recv() auf einer speziellen und etwas seltsamen Adressfamilie von Sockets, AF_NETLINK .

GNU und NET-3 ifconfig s könnte wurden angepasst, um diese neue API zu verwenden. Das Argument dagegen war, dass es nicht auf andere Betriebssysteme portierbar sei, aber diese Programme seien in der Praxis bereits sowieso nicht tragbar das war also kein großes Argument.

Aber sie wurden nicht angepasst und bleiben bis heute so, wie sie oben gezeigt wurden. (Einige Leute haben im Laufe der Jahre an verschiedenen Stellen daran gearbeitet, aber die Verbesserungen haben es leider nie in die Programme geschafft. Zum Beispiel:Bernd Eckenfels hat nie einen Patch akzeptiert, der einige Netlink-API-Fähigkeiten zu NET-3 net-tools hinzufügte ifconfig , 4 Jahre nachdem der Patch geschrieben wurde.)

Stattdessen haben einige Leute das Toolset als ip komplett neu erfunden Befehl, der die neue Linux-API verwendete, hatte eine andere Syntax und kombinierte mehrere andere Funktionen hinter einem modischen command subcommand -Stil-Schnittstelle.

Ich brauchte einen ifconfig die die Befehlszeilensyntax und den Ausgabestil von FreeBSD ifconfig hatte (was weder GNU noch NET-3 ifconfig hat, und welche ip ganz sicher nicht). Also habe ich einen geschrieben. Als Beweis, dass man einen ifconfig schreiben könnte das die Netlink-API unter Linux verwendet, tut es.

Also die erhaltene Weisheit über ifconfig , wie das, was Sie zitieren, ist nicht mehr wirklich wahr. Es ist jetzt unwahr zu sagen, dass "ifconfig nutzt netlink nicht.". Die Decke, die zwei bedeckte, deckt drei nicht ab.

Das war es schon immer unwahr zu sagen, dass "netlink effizienter ist". Für die Aufgaben, die man mit ifconfig erledigt , zwischen der Netlink-API und dem ioctl() ist in Sachen Effizienz nicht wirklich viel drin API. Man macht so ziemlich die gleiche Anzahl von API-Aufrufen für jede gegebene Aufgabe.

Tatsächlich ist jeder API-Aufruf zwei Systemaufrufe im netlink-Fall, im Gegensatz zu einem im ioctl() System. Und wohl hat die Netlink-API den Nachteil, dass sie auf einem stark genutzten System explizit die Möglichkeit einschließt, dass das Tool niemals eine Bestätigungsnachricht erhält, die es über das Ergebnis des API-Aufrufs informiert.

Es ist außerdem falsch zu sagen, dass ip ist "vielseitiger" als GNU und NET-3 ifconfig s weil es netlink verwendet . Es ist vielseitiger, weil es mehr Aufgaben erledigt und Dinge in einem großen Programm erledigt, die man mit separaten Programmen anders als erledigen würde ifconfig . Es ist nicht einfach aufgrund der API vielseitiger, die es intern verwendet, um diese zusätzlichen Aufgaben auszuführen. Diesbezüglich ist der API nichts inhärent. Man könnte ein All-in-One-Tool schreiben, das den FreeBSD ioctl() verwendet API, zum Beispiel, und geben genauso gut an, dass es "vielseitiger" ist als das einzelne ifconfig , route , arp , und ndp Befehle.

Man könnte route schreiben , arp , und ndp Befehle für Linux, die ebenfalls die Netlink-API verwendet haben.

Weiterführende Literatur

  • Jonathan de Boyne Pollard (2019). ifconfig . Nosh-Leitfaden . Software.
  • Eduardo Ferro (2009-04-16). ifconfig:meldet falsche IP-Adresse / Anfangspatch . Debian-Fehler Nr. 359676.

Der Standard ifconfig wir in vielen Distributionen haben, ist aus mehreren Gründen veraltet. Spricht veraltet und eingeschränkt mit dem Kernel und versteht tatsächlich nicht mehr alle Netzwerkkonfigurationen. Sie können einige Netzwerkkonfigurationen wie ifconfig nicht manipulieren Versionen, die Sie mit ip ausführen können . Außerdem die ifconfig Die Unterstützung für Netzwerk-Namespaces ist begrenzt.

Als Anekdote habe ich Schnittstellen-IP-Alias ​​gefunden, die nur in ip sichtbar sind und nicht in SuSE ifconfig .

Was die Unterschiede unter der Haube betrifft:Von ifconfig vs. ip:Was ist der Unterschied und Vergleich der Netzwerkkonfiguration

Obwohl ip mag auf den ersten Blick etwas komplex erscheinen, aber es ist viel umfassender in der Funktionalität als ifconfig. Es ist funktional auf zwei Schichten des Netzwerkstapels organisiert, d. h. Schicht 2 (Verbindungsschicht), Schicht 3 (IP-Schicht) und erledigt die Arbeit aller oben genannten Befehle aus dem net-tools-Paket.

Während ifconfig zeigt oder modifiziert hauptsächlich die Schnittstellen eines Systems, dieser Befehl kann folgende Aufgaben erledigen:

  • Anzeigen oder Ändern von Schnittstelleneigenschaften.

  • Hinzufügen, Entfernen von ARP-Cache-Einträgen und Erstellen neuer statischer ARP-Einträge für einen Host.

  • Anzeigen von MAC-Adressen, die allen Schnittstellen zugeordnet sind.

  • Anzeigen und Ändern von Kernel-Routing-Tabellen.

Eines der wichtigsten Highlights, das es von seinem alten Gegenstück ifconfig unterscheidet, ist, dass letzteres ioctl für die Netzwerkkonfiguration verwendet, was eine weniger geschätzte Art der Interaktion mit dem Kernel ist, während ersteres den Netlink-Socket-Mechanismus für dasselbe nutzt, was ein viel flexiblerer Nachfolger von ioctl für die Inter- Kommunikation zwischen Kernel und Benutzerbereich unter Verwendung von rtnetlink (das die Fähigkeit zur Manipulation der Netzwerkumgebung hinzufügt).

Über die Verwendung/Vorteile von Netlink:Von LJ - Kernel Korner - Why and How to Use Netlink Socket

Netlink Socket ist ein spezieller IPC, der zum Übertragen von Informationen zwischen Kernel- und User-Space-Prozessen verwendet wird. Es bietet eine Vollduplex-Kommunikationsverbindung zwischen den beiden über Standard-Socket-APIs für User-Space-Prozesse und eine spezielle Kernel-API für Kernel-Module. Der Netlink-Socket verwendet die Adressfamilie AF_NETLINK.

.....

Warum verwenden die oben genannten Funktionen netlink anstelle von Systemaufrufen, ioctls oder proc-Dateisystemen für die Kommunikation zwischen Benutzer- und Kernel-Welten? Es ist eine nicht triviale Aufgabe, Systemaufrufe, ioctls oder proc-Dateien für neue Funktionen hinzuzufügen; wir riskieren, den Kernel zu verunreinigen und die Stabilität des Systems zu beschädigen. Der Netlink-Socket ist jedoch einfach:Es muss nur eine Konstante, der Protokolltyp, zu netlink.h hinzugefügt werden. Dann können das Kernel-Modul und die Anwendung sofort über APIs im Socket-Stil kommunizieren.

....

Netlink Socket ist eine flexible Schnittstelle für die Kommunikation zwischen User-Space-Anwendungen und Kernel-Modulen. Es bietet sowohl Anwendungen als auch dem Kernel eine einfach zu verwendende Socket-API. Es bietet erweiterte Kommunikationsfunktionen wie Vollduplex, gepufferte E/A, Multicast und asynchrone Kommunikation, die in anderen Kernel-/User-Space-IPCs nicht vorhanden sind.


Linux
  1. Überwachen Sie Befehle und Aufgaben mit dem Linux-Überwachungsbefehl

  2. Einführung in die Linux-Befehle chgrp und newgrp

  3. So deaktivieren Sie Befehle zum Herunterfahren und Neustarten in Linux

  4. Lernen Sie den Unterschied zwischen den Befehlen „su“ und „su -“ in Linux kennen

  5. Linux-Befehle:jobs, bg und fg

13 beste Java-IDEs {mit Vor- und Nachteilen}

Pushd- und Popd-Befehle unter Linux

So verwenden Sie die Befehle Pbcopy und Pbpaste unter Linux

5 lustige Befehle zur Verwendung in Linux und Terminal

40 Praktisches und produktives Beispiel für Linux-df-Befehle

Zip- und Unzip-Befehle unter Linux/Unix