Ver Feed RSS

Tecnologia de Redes, Mobilidade e Inovação

O que é ARP?

Avaliação: 2 votos, 5,00 média.
O protocolo ARP é utilizando - de uma forma ou de outra - por qualquer usuário de redes (por mais leigo que seja) todos os dias, centenas ou milhares de vezes. Por isso qualquer problema nesse nível causa problemas graves na rede.

No entanto, apesar de ser tão utilizado, ele é muito mal compreendido, o que dificulta em muito a depuração dos problemas que seriam simples de resolver se fosse melhor entendido.

ARP

Em primeiro lugar é importante compreender que em Ethernet, os equipamentos não se comunicam via endereço IP, mas sim via endereço MAC.

Para quem tem menos de 10 anos de experiência no mercado de redes, o que vou dizer pode parecer inacreditável: o mundo não foi sempre 100% TCP/IP. Antigamente existiam (e existem até hoje) outros protocolos de rede concorrentes como Novell IPX, AppleTalk, DECNet, XNS, Banyan VINES, só para nomear alguns.

Isso quer dizer que os switchs Ethernet deveriam ser independentes do protocolo de rede. Por isso eles trabalham com seu próprio sistema de endereçamento, os endereços MAC e os outros protocolos acima tinham que se adaptar a ele no seu nível.

Sobre os endereços MAC, para quem não sabe, cada fabricante compra um lote de endereços (o IEEE controla) e assim cada equipamento sai de fábrica com um endereço MAC único no mundo. Outra informação interessante é que os três primeiro número do MAC address indicam o fabricante e existem na Internet várias tabelas que informam que fabricante corresponde a quais números.

Voltando ao tema do ARP, quando um equipamento necessita se comunicar com outro via Ethernet, ele necessita saber o endereço MAC desse equipamento. No entanto ele sabe apenas o endereço IP do destino. Sendo assim ele precisa descobrir qual é o endereço MAC do equipamento que tem aquele IP, para daí poder transmitir esse pacote na Ethernet.

Neste ponto entra o ARP. Via ARP um equipamento descobre qual o endereço MAC do colega com o qual ele necessita conversar.

O ARP funciona assim: o equipamento de origem envia um pacote de broadcast Ethernet (endereço MAC de destino ff:ff:ff:ff:ff:ff) com informações de qual IP ele necessita conversar. Como o pacote Ethernet é de broadcast, ele chega a todos os equipamentos da rede na mesma VLAN, inclusive aquele que tem o IP procurado, que responde, informando o seu endereço MAC.

É como se eu chegasse a uma sala cheia de pessoas e gritasse pelo nome da pessoa que procuro. Todos irão escutar, mas apenas a pessoa que procuro irá se identificar.

Então o ARP é bem simples: a máquina de origem grita para todas as outras que procura um determinado IP, se alguma máquina possuir esse IP ela responde e pronto. A máquina de origem descobriu o MAC da máquina de destino e acabou o ARP.

Mas o que ocorre quando um equipamento tenta se comunicar com outro, porém de outra rede? Como ele faz para descobrir o endereço MAC de um equipamento que está em outra rede, via Internet por exemplo? A resposta é simples: ele não faz.

O ARP só funciona dentro da rede, dentro da mesma VLAN ou, como chamamos, dentro do mesmo domínio de broadcast.

Assim, no caso de uma comunicação com equipamento de outra rede, a máquina de origem deve enviar o pacote para o seu default gateway, e assim ela faz o ARP para descobrir o endereço MAC do seu gateway.

Vamos a um exemplo: o equipamento com IP 192.168.0.100 tem como gateway 192.168.0.1 e quer enviar um pacote para o IP 200.1.1.1. Então o 192.168.0.100 faz um ARP para o IP 192.168.0.1, descobre o endereço MAC do gateway (192.168.0.1) e enviar então um pacote com endereço MAC de destino desse gateway, mas com endereço IP de destino 200.1.1.1. O default gateway recebe o pacote (porque foi direcionado para o seu MAC), percebe que o IP de destino é outro e simplesmente encaminha.

Verificando o ARP no Linux

Logicamente que não faz sentido para um equipamento fazer ARP para cada pacote. Para fazer um download de um arquivo é necessário uma troca de milhares de pacotes (dependendo do tamanho do arquivo). Se os equipamentos tivessem que fazer um ARP para cada pacote, haveria na rede mais ARP que tráfego útil.

Sendo assim cada equipamento mantém uma tabela ARP das descoberta feitas.

No Linux o comando arp monitora e gerencia essa tabela.

Listar as Entradas ARP

O comando "arp -a" mostra a tabela arp (endereço IP associado a cada endereço MAC) de cada placa de rede. Exemplo:

[root@servidor2 ~]# arp -a
? (192.168.111.1) at 00:15:E9:F6:BB:E1 [ether] on eth0
? (192.168.111.158) at 00:1E:58:94:EC:51 [ether] on eth0
? (192.168.111.3) at 00:1E:58:43:B2:EB [ether] on eth0
? (192.168.111.101) at 00:0D:87:EF:F7:98 [ether] on eth0

Essa linhas caducam. Isso significa que o Linux irá esquecer essas linhas depois de algum tempo, não todas ao mesmo tempo, mas de acordo com o tempo de existência de cada uma. O default do Linux é aproxidamente 7 minutos (na verdade não sei o valor exato, se alguém tiver essa informação por favor coloque um post). Assim, depois que a linha fica nesse cache de ARP por 7 minutos, ela é automaticamente apagada, ou seja, depois disso o Linux terá que repetir o ARP para aquele IP.

Esse processo de caducar uma entrada é importante caso haja uma mudança de IP na rede.

Apagar uma Entrada

Algumas vezes poderemos querer apagar uma entrada dessa tabela e forçar o Linux a refazer o ARP, ou seja, forçar o Linux a perguntar na rede qual o MAC daquele IP.

O comando é "arp -d ENDERECO_IP". Assim se você quer eliminar a entrada do IP 192.168.111.5, utilize o comando "arp -d 192.168.111.5".

Forçar uma Entrada

Você pode forçar permanentemente uma entrada na tabela ARP (que ficará permanente, até que seja apagada com o comando arp -d ou até que o Linux seja re-inicializado).

O comando é "arp -s IP MAC", por exemplo "arp -s 192.168.111.161 00:ff:aa:bb:cc:dd"

Muito cuidado aqui. Se você, por exemplo, configurar manualmente uma entrada você pode causar problemas de comunicação na rede. Lembre-se que o Linux pode ter uptime de meses, mantendo essa entrada. Se depois de algum tempo você trocar a placa de rede do equipamento 192.168.111.161 e esquecer de reconfigurar a tabela ARP do Linux, esse Linux não irá mais se comunicar com o 192.168.111.161 e você ficará louco tentando descobrir a causa.

Problemas Causados Pelo ARP

Na verdade o ARP não causa problemas. Quem causa problema é administrador da rede que faz mudanças e esquece que existe a tabela ARP.

Vamos ver alguns exemplos.

Exemplo I:

O administrador troca o gateway da rede. Por exemplo, ele vai fazer o upgrade de firewall por outro mais parrudo. No entanto o administrador quer manter o mesmo endereço IP (para não ter que trocar o default gateway de todos os computadores da rede). Então o administrador configura o novo firewall, posiciona no rack e prepara para a mudança: ele puxa o cabo de rede do firewall antigo, conecta no novo e... nada. As máquinas não navegam.

A explicação é simples: as máquinas dos usuários estão com o MAC da placa de rede do firewall anterior cacheadas na tabela ARP. Vai demorar alguns minutos até que todas tenham esquecido a informação, façam um novo arp.

Por isso muitos sistemas (inclusive o Linux) fazem, no boot, o que se chama "gratuitous arp", que é avisar à todos na rede que ele tem um determinado IP. O gratuitous ARP serve para detectar conflitos na rede e atualizar a tabela ARP de todos os equipamentos.

Exemplo II:

O administrador configura um Linux com duas placas de redes, com IPs diferentes. Por exemplo, a eth0 com IP 192.168.0.1 e a eth1 com 10.0.0.100. No entanto ele conecta as duas placas de rede no mesmo switch (em duas portas diferente obviamente, mas no mesmo switch e na mesma VLAN).

Neste caso o Linux vai receber a requisição de ARP nas duas placas (o ARP é broadcast) e irá responder nas duas placas. A máquina que fez a requisição irá então receber o MAC address das duas placas, mas apenas uma tem o IP.

Por exemplo, a eth0 tem MAC 00:11:22:33:44:55 com IP 192.168.0.1 e a eth1 tem MAC aa:bb:cc:dd:ee:ff com IP 10.0.0.100. Então o PC com IP 192.168.0.55 faz um ARP para o IP 192.168.0.1. Ele irá receber resposta das duas placas. Vale a que chegar por último.

Se a resposta eth0 chegar por último, não haverá problemas, mas se a da eth1 chegar por último, o PC pensará que o IP 192.168.0.1 tem MAC aa:bb:cc:dd:ee:ff.

Esse tipo de problema tem até nome "ARP Flux". Para quem se interessar em conhecer mais esse problema e as soluções possíveis, aqui vai uma boa referência:

http://linux-ip.net/html/ether-arp.html#ether-arp-flux

Atualizado 17-07-2009 em 08:17 por mlrodrig

Categorias
Não Categorizado

Comentários

  1. Avatar de magnusrk8
    Muito bom artigo..
  2. Avatar de Ylago
    Muito bom artigo (2)!
  3. Avatar de liecht
    No exemplo II seria necessario criar duas vlans: uma para cada placa. No caso, quando o pacotesse chegasse ate o gateway, o mesmo iria verificar em sua tabela se o esta nela, sem sim, retornaria o pacote para dentro da vlan, se nao, mandaria o pacote para outra vlan.
  4. Avatar de juniorphy
    Excelente Artigo ...
  5. Avatar de juliocfs
    muito bom artigo .
  6. Avatar de beirsdorf
    otimo, lembra os momentos de leitura do tanenbaum
  7. Avatar de Não Registrado
    Muitooo bom, bastante claro!
  8. Avatar de Não Registrado
    Show de bola!
  9. Avatar de TiagoAraujo
    Parabens pelo artigo.
  10. Avatar de rjwifi
    excelente ... mto show
  11. Avatar de Não Registrado
    VALEU GALERA VINDO DE PORTUGAL, NO MINHO, DA UNIVERSIDADE DO MINHO, DEPARTAMENTO DE INFORMATICA!

    MUITO BOM ARTIGO GALERA!
  12. Avatar de wld.net1
    Muito bom o artigo só faltou explicar um pouco mais como ocorre o processo do frame com o cabeçalho, mais ficou muito bom.

+ Enviar Comentário



Visite: BR-Linux ·  VivaOLinux ·  Dicas-L