GNU/Linux >> Linux Esercitazione >  >> Linux

ip vs ifconfig comanda pro e contro

Il ifconfig comando su sistemi operativi come FreeBSD e OpenBSD è stato aggiornato in linea con il resto del sistema operativo. Al giorno d'oggi può configurare tutti i tipi di impostazioni dell'interfaccia di rete su quei sistemi operativi e gestire una gamma di protocolli di rete. I BSD forniscono ioctl() supporto per queste cose.

Questo non è accaduto nel mondo Linux. Ci sono, oggi, tre ifconfig comandi:

  • ifconfig da 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 da 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 da (versione 1.40 di) il set di strumenti 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 % 

Come puoi vedere, GNU inetutils e NET-3 net-tools ifconfig s hanno alcune carenze marcate, rispetto a IPv6, rispetto alle interfacce che hanno più indirizzi e rispetto a funzionalità come -l .

Il problema IPv6 è in parte un codice mancante negli strumenti stessi. Ma principalmente è causato dal fatto che Linux non (come fanno altri sistemi operativi) fornisce funzionalità IPv6 attraverso ioctl() interfaccia. Permette solo ai programmi di vedere e manipolare gli indirizzi IPv4 attraverso il ioctl() di rete p.s.

Linux fornisce invece questa funzionalità attraverso un'interfaccia diversa, send() e recv() su una famiglia di indirizzi socket speciale e alquanto strana, AF_NETLINK .

GNU e NET-3 ifconfig s potrebbe sono stati adattati per utilizzare questa nuova API. L'argomento contrario era che non era portabile su altri sistemi operativi, ma questi programmi erano in pratica già non comunque portatile quindi non era una gran discussione.

Ma non sono stati adattati e rimangono come sopra indicato fino ad oggi. (Alcune persone ci hanno lavorato in vari momenti nel corso degli anni, ma i miglioramenti, triste a dirsi, non sono mai entrati nei programmi. Ad esempio:Bernd Eckenfels non ha mai accettato una patch che aggiungesse alcune funzionalità API netlink a NET-3 net-tools ifconfig , 4 anni dopo che la patch era stata scritta.)

Invece, alcune persone hanno completamente reinventato il set di strumenti come ip comando, che utilizzava la nuova API di Linux, aveva una sintassi diversa e combinava diverse altre funzioni dietro un elegante command subcommand interfaccia in stile.

Avevo bisogno di un ifconfig che aveva la sintassi della riga di comando e lo stile di output del ifconfig di FreeBSD (che né GNU né NET-3 ifconfig ha, e quale ip sicuramente non ha). Così ne ho scritto uno. Come prova che si potrebbe scrivere un ifconfig che usa l'API netlink su Linux, lo fa.

Quindi la saggezza ricevuta su ifconfig , come quello che citi, non è più vero. ora non è vero per dire che "ifconfig non usa netlink.". La coperta che copriva due non copre tre.

lo è sempre stato falso dire che "netlink è più efficiente". Per le attività che si fanno con ifconfig , non c'è molto da fare quando si tratta di efficienza tra l'API netlink e il ioctl() API. Uno effettua più o meno lo stesso numero di chiamate API per una determinata attività.

Infatti, ogni chiamata API è due chiamate di sistema nel caso netlink, al contrario di una nel ioctl() sistema. E probabilmente l'API netlink ha lo svantaggio che su un sistema molto utilizzato incorpora esplicitamente la possibilità che lo strumento non riceva mai un messaggio di conferma che lo informa del risultato della chiamata API.

È, inoltre, falso affermare che ip è "più versatile" di GNU e NET-3 ifconfig s perché utilizza netlink . È più versatile perché svolge più compiti, facendo cose in un unico grande programma che si farebbero con programmi separati diversi da ifconfig . Non è più versatile semplicemente grazie all'API che utilizza internamente per eseguire quelle attività extra. Non c'è nulla di inerente all'API su questo. Si potrebbe scrivere uno strumento all-in-one che utilizza il ioctl() di FreeBSD API, ad esempio, e afferma altrettanto bene che è "più versatile" del singolo ifconfig , route , arp e ndp comandi.

Si potrebbe scrivere route , arp e ndp comandi per Linux che utilizzavano anche l'API netlink.

Ulteriori letture

  • Jonathan de Boyne Pollard (2019). ifconfig . Guida nosh . Software.
  • Eduardo Ferro (2009-04-16). ifconfig:riporta indirizzo IP/patch iniziale errati . Errore Debian n. 359676.

Lo standard ifconfig che abbiamo in molte distribuzioni è deprecato per diversi motivi. Dialoga in modo obsoleto e limitato con il kernel, e di fatto non comprende più tutte le configurazioni di rete. Non sarai in grado di manipolare alcune configurazioni di rete come ifconfig versioni che puoi fare con ip . Inoltre, il ifconfig il supporto per gli spazi dei nomi di rete è limitato.

Come racconto aneddotico, ho trovato alias IP dell'interfaccia che sono visibili solo in ip e non in SuSE ifconfig .

Per quanto riguarda le differenze sotto il cofano:da ifconfig vs ip:qual è la differenza e confronto della configurazione di rete

Sebbene ip potrebbe sembrare un po' complesso a prima vista, ma ha funzionalità molto più ampie rispetto a ifconfig. È funzionalmente organizzato su due livelli di Networking Stack, ovvero Layer 2 (Link Layer), Layer 3 (IP Layer) e fa il lavoro di tutti i comandi sopra menzionati dal pacchetto net-tools.

Mentre ifconfig principalmente visualizza o modifica le interfacce di un sistema, questo comando è in grado di svolgere le seguenti attività:

  • Visualizzazione o modifica delle proprietà dell'interfaccia.

  • Aggiunta, rimozione di voci della cache ARP insieme alla creazione di una nuova voce ARP statica per un host.

  • Visualizzazione degli indirizzi MAC associati a tutte le interfacce.

  • Visualizzazione e modifica delle tabelle di routing del kernel.

Uno dei punti salienti principali che lo separa dalla sua antica controparte ifconfig è che quest'ultimo utilizza ioctl per la configurazione di rete, che è un modo meno apprezzato di interazione con il kernel mentre il primo sfrutta il meccanismo del socket netlink per lo stesso che è un successore molto più flessibile di ioctl per inter- comunicazione tra il kernel e lo spazio utente usando rtnetlink (che aggiunge capacità di manipolazione dell'ambiente di rete).

Informazioni sull'uso/vantaggi di netlink:Da LJ - Kernel Korner - Perché e come usare Netlink Socket

Il socket Netlink è un IPC speciale utilizzato per trasferire informazioni tra il kernel e i processi dello spazio utente. Fornisce un collegamento di comunicazione full-duplex tra i due tramite API socket standard per i processi in spazio utente e un'API kernel speciale per i moduli kernel. Il socket Netlink utilizza la famiglia di indirizzi AF_NETLINK.

......

Perché le funzionalità di cui sopra usano netlink invece di chiamate di sistema, ioctl o filesystem proc per la comunicazione tra utenti e mondi del kernel? È un compito non banale aggiungere chiamate di sistema, ioctls o file proc per nuove funzionalità; rischiamo di inquinare il kernel e danneggiare la stabilità del sistema. Il socket netlink è semplice, però:solo una costante, il tipo di protocollo, deve essere aggiunta a netlink.h. Quindi, il modulo del kernel e l'applicazione possono comunicare utilizzando API in stile socket immediatamente.

....

Il socket Netlink è un'interfaccia flessibile per la comunicazione tra applicazioni in spazio utente e moduli del kernel. Fornisce un'API socket facile da usare sia per le applicazioni che per il kernel. Fornisce funzionalità di comunicazione avanzate, come full-duplex, I/O con buffer, comunicazione multicast e asincrona, che sono assenti in altri IPC kernel/spazio utente.


Linux
  1. Come disabilitare i comandi di spegnimento e riavvio in Linux

  2. Scopri la differenza tra i comandi "su" e "su -" in Linux

  3. Trova un file con i comandi Trova e individua in Linux

  4. Comandi di riavvio e spegnimento di Linux

  5. Differenza tra i comandi 'ifconfig' e 'ip'

13 migliori IDE Java {con pro e contro}

Comandi Pushd e Popd in Linux

Come utilizzare i comandi Pbcopy e Pbpaste su Linux

5 comandi divertenti da usare in Linux e Terminal

40 Esempio pratico e produttivo di comandi Linux df

Comprimere e decomprimere i comandi in Linux/Unix