GNU/Linux >> Tutoriales Linux >  >> Linux

pros y contras de los comandos ip vs ifconfig

El ifconfig El comando en sistemas operativos como FreeBSD y OpenBSD se actualizó en línea con el resto del sistema operativo. Hoy en día puede configurar todo tipo de configuraciones de interfaz de red en esos sistemas operativos y manejar una variedad de protocolos de red. Los BSD proporcionan ioctl() apoyo para estas cosas.

Esto no sucedió en el mundo de Linux. Hay, hoy, tres ifconfig comandos:

  • 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 de NET-3 herramientas de red
    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 (versión 1.40 de) el conjunto de herramientas 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 % 

Como puede ver, GNU inetutils y NET-3 net-tools ifconfig Los s tienen algunas deficiencias marcadas, con respecto a IPv6, con respecto a las interfaces que tienen varias direcciones y con respecto a la funcionalidad como -l .

El problema de IPv6 es, en parte, algún código faltante en las propias herramientas. Pero, en general, se debe al hecho de que Linux no proporciona (como lo hacen otros sistemas operativos) la funcionalidad de IPv6 a través del ioctl() interfaz. Solo permite que los programas vean y manipulen direcciones IPv4 a través de la red ioctl() s.

En cambio, Linux proporciona esta funcionalidad a través de una interfaz diferente, send() y recv() en una familia de sockets de dirección especial, y algo extraña, AF_NETLINK .

El GNU y NET-3 ifconfig s podría se han ajustado para usar esta nueva API. El argumento en contra de hacerlo era que no era portable a otros sistemas operativos, pero estos programas en la práctica ya no es portátil de todos modos así que eso no fue un gran argumento.

Pero no fueron ajustados, y permanecen como se ha dicho hasta el día de hoy. (Algunas personas trabajaron en ellos en varios puntos a lo largo de los años, pero las mejoras, lamentablemente, nunca llegaron a los programas. Por ejemplo:Bernd Eckenfels nunca aceptó un parche que agregara alguna capacidad de API de enlace de red a NET-3 net-tools ifconfig , 4 años después de que se escribiera el parche).

En cambio, algunas personas reinventaron por completo el conjunto de herramientas como un ip comando, que usaba la nueva API de Linux, tenía una sintaxis diferente y combinaba varias otras funciones detrás de un moderno command subcommand interfaz de estilo.

Necesitaba un ifconfig que tenía la sintaxis de línea de comandos y el estilo de salida de FreeBSD ifconfig (que ni el GNU ni el NET-3 ifconfig tiene, y que ip ciertamente no tiene). Así que escribí uno. Como prueba de que uno podría escribir un ifconfig que usa la API netlink en Linux, lo hace.

Así que la sabiduría recibida sobre ifconfig , como lo que cita, ya no es realmente cierto. Es ahora falso decir que "ifconfig no usa netlink". La manta que cubría a dos no cubre a tres.

siempre ha sido falso decir que "netlink es más eficiente". Para las tareas que uno hace con ifconfig , realmente no hay mucho en lo que respecta a la eficiencia entre la API de netlink y el ioctl() API. Uno hace prácticamente la misma cantidad de llamadas a la API para cualquier tarea determinada.

De hecho, cada llamada a la API es dos llamadas al sistema en el caso de enlace de red, a diferencia de una en el ioctl() sistema. Y podría decirse que la API de netlink tiene la desventaja de que, en un sistema muy utilizado, incorpora explícitamente la posibilidad de que la herramienta nunca reciba un mensaje de reconocimiento que le informe del resultado de la llamada a la API.

Además, es falso decir que ip es "más versátil" que GNU y NET-3 ifconfig s porque usa netlink . Es más versátil porque hace más tareas, haciendo cosas en un gran programa que uno haría con programas separados diferentes a ifconfig . No es más versátil simplemente a fuerza de la API que utiliza internamente para realizar esas tareas adicionales. No hay nada inherente a la API sobre esto. Se podría escribir una herramienta todo en uno que usara FreeBSD ioctl() API, por ejemplo, e igualmente afirman que es "más versátil" que el ifconfig individual , route , arp y ndp comandos.

Se podría escribir route , arp y ndp comandos para Linux que también usaban la API de netlink.

Lecturas adicionales

  • Jonathan de Boyne Pollard (2019). ifconfig . Guía de comida . Software.
  • Eduardo Ferro (2009-04-16). ifconfig:informa dirección IP incorrecta/parche inicial . Error de Debian n.° 359676.

El estándar ifconfig que tenemos en muchas distribuciones está en desuso por varias razones. Habla de forma obsoleta y limitada con el kernel y, de hecho, ya no entiende todas las configuraciones de red. No podrá manipular algunas configuraciones de red como ifconfig versiones que puedes hacer con ip . Además, el ifconfig la compatibilidad con espacios de nombres de red es limitada.

Como anécdota, encontré alias de IP de interfaz que solo son visibles en ip y no en SuSE ifconfig .

En cuanto a las diferencias debajo del capó:de ifconfig vs ip:¿Cuál es la diferencia y comparación de la configuración de red?

Aunque ip puede parecer un poco complejo al principio, pero tiene una funcionalidad mucho más amplia que ifconfig. Está funcionalmente organizado en dos capas de Networking Stack, es decir, la capa 2 (capa de enlace), la capa 3 (capa IP) y realiza el trabajo de todos los comandos mencionados anteriormente del paquete de herramientas de red.

Mientras que ifconfig principalmente muestra o modifica las interfaces de un sistema, este comando es capaz de realizar las siguientes tareas:

  • Mostrar o modificar las propiedades de la interfaz.

  • Adición, eliminación de entradas de caché ARP junto con la creación de una nueva entrada ARP estática para un host.

  • Visualización de direcciones MAC asociadas a todas las interfaces.

  • Visualización y modificación de tablas de enrutamiento del núcleo.

Uno de los aspectos más destacados que lo separa de su antiguo homólogo ifconfig es que este último utiliza ioctl para la configuración de la red, que es una forma menos apreciada de interacción con el kernel, mientras que el primero aprovecha el mecanismo de conexión de red para el mismo, que es un sucesor mucho más flexible de ioctl para la interconexión. comunicación entre el kernel y el espacio del usuario usando rtnetlink (que agrega la capacidad de manipulación del entorno de red).

Acerca del uso/ventajas de netlink:De LJ - Kernel Korner - Por qué y cómo usar Netlink Socket

El socket Netlink es un IPC especial que se utiliza para transferir información entre el núcleo y los procesos del espacio del usuario. Proporciona un vínculo de comunicación de dúplex completo entre los dos mediante API de socket estándar para procesos de espacio de usuario y una API de kernel especial para módulos de kernel. El socket de Netlink utiliza la familia de direcciones AF_NETLINK.

.....

¿Por qué las funciones anteriores usan netlink en lugar de llamadas al sistema, ioctls o sistemas de archivos proc para la comunicación entre el mundo del usuario y el kernel? No es una tarea trivial agregar llamadas al sistema, ioctls o archivos proc para nuevas funciones; corremos el riesgo de contaminar el núcleo y dañar la estabilidad del sistema. Sin embargo, el socket de Netlink es simple:solo se debe agregar una constante, el tipo de protocolo, a netlink.h. Entonces, el módulo del kernel y la aplicación pueden hablar usando API de estilo socket inmediatamente.

....

El socket Netlink es una interfaz flexible para la comunicación entre aplicaciones de espacio de usuario y módulos del kernel. Proporciona una API de socket fácil de usar tanto para las aplicaciones como para el kernel. Proporciona funciones de comunicación avanzadas, como full-duplex, E/S en búfer, multidifusión y comunicación asincrónica, que están ausentes en otros IPC de kernel/espacio de usuario.


Linux
  1. Ver comandos y tareas con el comando watch de Linux

  2. Introducción a los comandos chgrp y newgrp de Linux

  3. Cómo deshabilitar los comandos de apagado y reinicio en Linux

  4. Aprenda la diferencia entre los comandos "su" y "su -" en Linux

  5. Comandos de Linux:trabajos, bg y fg

Los 13 mejores IDE de Java {con pros y contras}

Comandos Pushd y Popd en Linux

Cómo usar los comandos Pbcopy y Pbpaste en Linux

5 divertidos comandos para usar en Linux y Terminal

40 Ejemplo Práctico y Productivo de Comandos Linux df

Comandos Zip y Unzip en Linux/Unix