AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 504063
Accepted
pkaramol
pkaramol
Asked: 2019-03-04 00:06:55 +0800 CST2019-03-04 00:06:55 +0800 CST 2019-03-04 00:06:55 +0800 CST

ip vs ifconfig comandos prós e contras

  • 772

Em algum momento, em algum material didático (da Linux Foundation) sobre Linux que encontrei, é mencionado o seguinte:

ipO comando é mais versátil e mais eficiente do que ifconfigporque usa soquetes netlink em vez de chamadas de sistema ioctl .

Alguém pode elaborar um pouco sobre isso, porque eu não consigo entender o que está acontecendo sob o capô?

PS Estou ciente deste tópico sobre essas ferramentas, mas não aborda essa diferença específica em como elas operam

linux networking
  • 2 2 respostas
  • 10086 Views

2 respostas

  • Voted
  1. Best Answer
    JdeBP
    2019-03-04T03:20:56+08:002019-03-04T03:20:56+08:00

    O ifconfigcomando em sistemas operacionais como FreeBSD e OpenBSD foi atualizado de acordo com o resto do sistema operacional. Hoje em dia, ele pode configurar todos os tipos de configurações de interface de rede nesses sistemas operacionais e lidar com uma variedade de protocolos de rede. Os BSDs fornecem ioctl()suporte para essas coisas.

    Isso não aconteceu no mundo Linux. Existem, hoje, três ifconfigcomandos:

    • ifconfigdo GNU inetutils
      jdebp % inetutils-ifconfig -l
      enp14s0 enp15s0 lo
      jdebp % inetutils-ifconfig lo
      lo Link encap: Loopback Local
            inet addr:127.0.0.1 Bcast:0.0.0.0 Mask:255.0.0.0
            LOOPBACK PARA CIMA EM EXECUÇÃO MTU: 65536 Métrica: 1
            Pacotes RX: 9087 erros: 0 descartados: 0 estouros: 0 quadro: 0
            Pacotes TX:9087 erros:0 descartados:0 estouros:0 portadora:0
            colisões:0 txqueuelen:1000
            Bytes RX: 51214341 Bytes TX: 51214341
      jdebp%
    • ifconfigde ferramentas de rede NET-3
      jdebp % ifconfig -l
      ifconfig: opção --help' fornece informações de uso.-l' not recognised.
      ifconfig:
      jdebp % ifconfig lo
      lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
          inet 127.0.0.1 máscara de rede 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 (loopback local)
          Pacotes RX 9087 bytes 51214341 (48,8 MiB)
          Erros de RX 0 descartados 0 overruns 0 frame 0
          Pacotes TX 9087 bytes 51214341 (48,8 MiB)
          Erros de TX 0 descartados 0 overruns 0 portadora 0 colisões 0
      jdebp%
    • ifconfigda (versão 1.40) do conjunto de ferramentas nosh
      jdebp % ifconfig -l
      enp14s0 enp15s0 lo
      jdebp % ifconfig lo
      ei
          link up loopback em execução
          endereço do link 00:00:00:00:00:00 bdaddr 00:00:00:00:00:00
          endereço inet4 127.0.0.1 prefixlen 8 bdaddr 127.0.0.1
          endereço inet4 127.53.0.1 prefixlen 8 bdaddr 127.255.255.255
          inet6 address ::2 scope 0 prefixlen 128
          endereço inet6 fe80:: escopo 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
      ei
          link up loopback em execução
          endereço do link 00:00:00:00:00:00 bdaddr 00:00:00:00:00:00
          endereço inet4 127.0.0.1 prefixlen 8 bdaddr 127.0.0.1
          endereço inet4 127.1.0.2 prefixlen 32 bdaddr 127.1.0.2
          endereço inet4 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
          endereço inet6 fe80:: escopo 1 prefixlen 10
          inet6 address ::1 scope 0 prefixlen 128
      jdebp%

    Como você pode ver, os GNU inetutils e NET-3 net-tools ifconfigtêm algumas deficiências marcantes, com relação ao IPv6, com relação a interfaces que possuem vários endereços e com relação a funcionalidades como -l.

    O problema do IPv6 é, em parte, algum código ausente nas próprias ferramentas. Mas, principalmente, é causado pelo fato de que o Linux não fornece (como outros sistemas operacionais) a funcionalidade IPv6 através da ioctl()interface. Ele apenas permite que os programas vejam e manipulem endereços IPv4 através dos ioctl()s de rede.

    Em vez disso, o Linux fornece essa funcionalidade por meio de uma interface diferente send()e recv()em uma família de soquetes de endereços especial e um tanto estranha, AF_NETLINK.

    ifconfigOs s GNU e NET-3 poderiam ter sido ajustados para usar esta nova API. O argumento contra isso era que não era portátil para outros sistemas operacionais, mas esses programas na prática já não eram portáteis , então isso não era um grande argumento.

    Mas eles não foram ajustados e permanecem como previstos até hoje. (Algumas pessoas trabalharam neles em vários pontos ao longo dos anos, mas as melhorias, infelizmente, nunca chegaram aos programas. Por exemplo: Bernd Eckenfels nunca aceitou um patch que adicionasse algum recurso de API de netlink às ferramentas de rede do NET-3 ifconfig, 4 anos após o patch ter sido escrito.)

    Em vez disso, algumas pessoas reinventaram completamente o conjunto de ferramentas como um ipcomando, que usava a nova API do Linux, tinha uma sintaxe diferente e combinava várias outras funções por trás de uma interface de estilo moderno.command subcommand

    Eu precisava de um ifconfigque tivesse a sintaxe de linha de comando e o estilo de saída do FreeBSD ifconfig(que nem o GNU nem o NET-3 ifconfigtem, e que ipcertamente não tem). Então eu escrevi um. Como prova de que se poderia escrever um ifconfigque usa a API netlink no Linux, ele o faz.

    Portanto, a sabedoria recebida sobre ifconfig, como o que você cita, não é mais verdadeira. Agora é falso dizer que " ifconfignão usa netlink.". O cobertor que cobria dois não cobre três.

    Sempre foi falso dizer que "netlink é mais eficiente". Para as tarefas que se faz com ifconfig, não há muito nisso quando se trata de eficiência entre a API netlink e a ioctl()API. Um faz praticamente o mesmo número de chamadas de API para qualquer tarefa.

    De fato, cada chamada de API são duas chamadas de sistema no caso do netlink, em oposição a uma no ioctl()sistema. E, sem dúvida, a API do netlink tem a desvantagem de que em um sistema muito usado ela incorpora explicitamente a possibilidade de a ferramenta nunca receber uma mensagem de confirmação informando-a do resultado da chamada da API.

    Além disso, é falso dizer que ipé "mais versátil" que o GNU e NET-3 ifconfigs porque usa netlink . É mais versátil porque faz mais tarefas, fazendo coisas em um grande programa que se faria com programas separados que não sejam ifconfig . Não é mais versátil simplesmente por causa da API que usa internamente para realizar essas tarefas extras. Não há nada inerente à API sobre isso. Alguém poderia escrever uma ferramenta completa que usasse a ioctl()API do FreeBSD, por exemplo, e igualmente afirmar que ela é "mais versátil" do que os comandos individuais ifconfig, route, arpe .ndp

    Pode-se escrever comandos route, arpe ndpcomandos para Linux que também usem a API netlink.

    Leitura adicional

    • Jonathan de Boyne Pollard (2019). ifconfig. Guia de no . Programas.
    • Eduardo Ferro (2009-04-16). ifconfig: reporta endereço IP errado/patch inicial . Erro Debian #359676.
    • 56
  2. Rui F Ribeiro
    2019-03-04T00:16:48+08:002019-03-04T00:16:48+08:00

    O padrão ifconfigque temos em muitas distribuições está obsoleto por vários motivos. Fala de forma desatualizada e limitada com o kernel, e de fato, não entende mais todas as configurações de rede. Você não poderá manipular algumas configurações de rede, tais ifconfigversões que você pode fazer com ip. Além disso, o ifconfigsuporte para namespaces de rede é limitado.

    Como um conto anedótico, encontrei alias de IP de interface que são visíveis apenas ipe não no SuSE ifconfig.

    Quanto às diferenças sob o capô: De ifconfig vs ip: Qual é a diferença e comparando a configuração de rede

    Embora ippossa parecer um pouco complexo no primeiro site, mas é muito mais amplo em funcionalidade do que ifconfig. Ele é funcionalmente organizado em duas camadas de Networking Stack, ou seja, Layer 2 (Link Layer), Layer 3 (IP Layer) e faz o trabalho de todos os comandos mencionados acima do pacote net-tools.

    Embora ifconfigexiba ou modifique principalmente as interfaces de um sistema, este comando é capaz de realizar as seguintes tarefas:

    • Exibindo ou modificando as propriedades da interface.

    • Adicionando, removendo entradas de Cache ARP ao longo da criação de uma nova entrada ARP estática para um host.

    • Exibindo endereços MAC associados a todas as interfaces.

    • Exibindo e modificando as tabelas de roteamento do kernel.

    Um dos principais destaques que o separa de seu antigo homólogo ifconfig é que este último usa ioctl para configuração de rede, que é uma forma menos apreciada de interação com o kernel, enquanto o primeiro aproveita o mecanismo de soquete netlink para o mesmo, que é um sucessor muito mais flexível de ioctl para intercomunicação entre kernel e espaço de usuário usando rtnetlink (que adiciona capacidade de manipulação de ambiente de rede).

    Sobre o uso/vantagens do netlink: De LJ - Kernel Korner - Por que e como usar o Netlink Socket

    O soquete Netlink é um IPC especial usado para transferir informações entre o kernel e os processos do espaço do usuário. Ele fornece um link de comunicação full-duplex entre os dois por meio de APIs de soquete padrão para processos de espaço do usuário e uma API de kernel especial para módulos de kernel. O socket Netlink usa a família de endereços AF_NETLINK.

    .....

    Por que os recursos acima usam netlink em vez de chamadas de sistema, sistemas de arquivos ioctls ou proc para comunicação entre os mundos do usuário e do kernel? É uma tarefa não trivial adicionar chamadas de sistema, ioctls ou arquivos proc para novos recursos; corremos o risco de poluir o kernel e danificar a estabilidade do sistema. No entanto, o socket Netlink é simples: apenas uma constante, o tipo de protocolo, precisa ser adicionada ao netlink.h. Então, o módulo do kernel e o aplicativo podem se comunicar usando APIs no estilo de soquete imediatamente.

    ....

    O soquete Netlink é uma interface flexível para comunicação entre aplicativos de espaço do usuário e módulos do kernel. Ele fornece uma API de soquete fácil de usar tanto para aplicativos quanto para o kernel. Ele fornece recursos avançados de comunicação, como full-duplex, E/S com buffer, multicast e comunicação assíncrona, que estão ausentes em outros IPCs de kernel/espaço de usuário.

    • 16

relate perguntas

  • Inicie/pare o serviço systemd usando o atalho de teclado [fechado]

  • Roteador estranho funciona com centos 6 [fechado]

  • Necessidade de algumas chamadas de sistema

  • astyle não altera a formatação do arquivo de origem

  • Passe o sistema de arquivos raiz por rótulo para o kernel do Linux

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve