ADDRESS RESOLUTION PROTOCOL
Thiago de Almeida Correia
São Paulo
2011
1. Visão Geral
Em uma rede de computadores local, os hosts se enxergam através de dois endereços, sendo
um deles o endereço Internet Protocol (IP) e o outro endereço de hardware ou media access control
address (MAC address). Os protocolos de nível superior utilizam o endereço IP como um endereço
de destino, porém, esses não conhecem o endereço MAC do destino. Entretanto, a solução para este
problema é conhecida como Address Resolution Protocol (ARP), ou seja, um protocolo responsável
por mapear os endereços MAC.
Quando um host pretende comunicar com outro host pela primeira vez, o host de origem não
terá o endereço MAC de destino mapeado, por isso, a origem utiliza o ARP. O ARP gerará uma
mensagem do tipo ARP request (requisição), cujo destino será todos os hosts daquela rede local,
com o objetivo de aguardar uma única mensagem, a mensagem ARP reply (resposta) do host de
destino informando o seu respectivo endereço MAC. Após obter o endereço MAC do destino, o
host de origem armazenará em uma tabela ARP cache (armazenamento temporário) o endereço
aprendido e na sequência dará continuidade a comunicação.
2. Detalhando o ARP
O ARP é largamente utilizado em redes Ethernet 802 para mapear endereços IP´s para
endereços MAC. Para realizar esse mapeamento o ARP está relacionado com o driver da interface
de rede do host. O protocolo ARP possui uma especificação que descreve apenas suas
funcionalidades e não sua implementação. Suas funcionalidades estão tornou-se um protocolo
padrão da Internet e seu Request For Comments (RFC) é RFC826. A implementação do protocolo
depende diretamente do driver da interface de rede e o tipo de rede, para que um novo microcódigo
seja gerado para a interface de rede.
2.1 Formato do pacote ARP
Para mapear o endereço IP e o protocolo para MAC, o protocolo ARP precisa de um formato
especifico de pacote. Este formato está descrito a seguir:
Onde:
Hardware address space (tipo de hardware): Campo de 16 bits representado em formato
hexadecimal, que especifica o tipo de hardware utilizado na rede física. No exemplo uma captura
mostrando uma rede do tipo Ehternet.
Protocol address space (tipo de protocolo): Campo de 16 bits representado em formato
hexadecimal, que especifica o tipo de protocolo de camada três que está sendo utilizado. No
exemplo uma captura mostrando o protocolo IP.
Byte length hardware address (tamanho do endereço de hardware): Campo de 8 bits
representado em bytes, que especifica o tamanho do endereço de hardware que está sendo utilizado.
No exemplo abaixo uma captura mostrando o tamanho do endereço MAC.
Byte length protocol address (tamanho do endereço do protocolo): Campo de 8 bits
representado em bytes, que especifica o tamanho do endereço do protocolo que está sendo utilizado
em camada de rede. No exemplo abaixo uma captura mostrando o tamanho do endereço IP.
Operation code (código de operação): Campo de 16 bits representado em hexadecimal, que
especifica o tipo de mensagem usada pelo protocolo ARP. No exemplo abaixo uma captura
mostrando uma mensagem do tipo request.
Hardware address of sender (endereço de hardware da origem): Campo de n bytes, que
especifica o endereço de hardware que está gerando a mensagem. No exemplo uma captura
mostrando o endereço MAC.
Protocol address of sender (endereço do protocolo da origem): Campo de n bytes, que
especifica o endereço do protocolo que está gerando a mensagem. No exemplo uma captura
mostrando o endereço IP.
Hardware address of target (endereço de hardware do destino): Campo de n bytes, que
especifica o endereço de hardware que está recebendo a mensagem. No exemplo uma captura
mostrando o endereço MAC.
Protocol address of target (endereço de hardware do destino): Campo de n bytes, que
especifica o endereço de protocolo que está recebendo a mensagem. No exemplo uma captura
mostrando o endereço IP.
2.2 Gerando pacote ARP
Quando um host pretenda enviar um pacote para outro host pela primeira vez, o host de
origem determinará primeiramente através de seu mecanismo de roteamento, qual será o next hop
(próximo salto), podendo ser ele mesmo ou um roteador, e qual será o hardware que será enviado.
Caso está rede seja um padrão Ethernet 802.3, por exemplo, o ARP será consultado para realizar o
mapeamento do endereço IP para o MAC.
O ARP tentará localizar o endereço MAC em sua tabela ARP cache. Caso encontre o MAC,
um endereço de 48 bits, ele estará pronto para enviar o pacote. Caso não encontre o MAC, o pacote
será descartado (dependendo do protocolo de camada superior, o pacote poderá ser ou não
retransmitido) e será gerado uma mensagem ARP request na rede, cujo destino seja todos os hosts
daquela rede.
O Internet Control Message Protocol (ICMP), por exemplo, não possui mecanismos para
retransmissão de pacotes e por este motivo, o pacote será descartado e não haverá retransmissão
quando o host de origem não tiver mapeado o endereço MAC em sua tabela ARP cache.
2.3 Recebendo pacote ARP
Quando um host recebe um pacote ARP request através de sua interface de rede, o driver da
interface encaminhará o pacote para o protocolo ARP realizar o processo de análise, através de seu
algoritmo.
O processo de análise começa com uma busca em sua própria tabela ARP cache, para
determinar se já existe uma entrada para aquele endereço de protocolo e endereço de hardware do
pacote de origem. Caso exista o endereço em sua tabela ARP cache, o host atualiza sobrescrevendo
os endereços. Caso não encontre os endereços na tabela ARP cache, uma nova entrada será criada
para que seja armazenado essas novas informações. O próximo passo é identificar se o host que
recebeu o pacote é o destino, para isso o ARP verifica no campo “Protocol address of target” se o
endereço IP coincide com o seu endereço, coincidindo os endereços o host cria um pacote do ARP
reply e envia para a origem, informando o seu endereço MAC.
2.4 Cache ARP
Em uma rede de grande porte e ocupada, o envio de pacotes em broadcasting interromperá
todos os hosts para que eles processem cada pacote da rede. Essa interrupção prejudicará de
maneira significativa a eficiência da rede e a tornaria mais lenta. Para reduzir os broadcasts, os hosts
de redes que necessitam utilizar o ARP mantêm uma lista de endereços IP e MAC que
correspondem a eles obtidos por solicitações anteriores. Isto é listado como ARP cache e é
atualizado sempre que uma solicitação for enviada ou recebida. Depois de algum tempo os
endereços da tabela ARP cache são removidos e este processo é chamado de Aging. O tempo padrão
de Aging é de 300 segundos, mas pode ser alterado, embora não seja recomendável.
2.5 Prox-ARP
O Proxy-ARP é utilizado em sub-redes para que um roteador, por exemplo, possa responder
as solicitações ARP request de um host que está em outra sub-rede. Uma das vantagens do ProxyARP é a vantagem dos hosts se comunicarem entre si, sem a necessidade de um gateway na rede,
para realizar o roteamento. O protocolo Proxy-ARP possui uma especificação que descreve a
implementação. Suas funcionalidades tornou-se um padrão da Internet e seu RFC é RFC1027.
2.5.1 Funcionamento do Proxy-ARP
Considere uma rede dividida em sub-redes e interconectada por um roteador, como
apresentado na figura abaixo:
Observe na figura acima, que o Host A possui uma mascara /16, ou seja, o Host A acredita
estar diretamente conectado a todos na rede 172.16.0.0. Quando o Host A precisa se comunicar com
qualquer outro host da rede diretamente conectado, ele enviará um ARP request para determinar o
endereço MAC do destino.
Agora imagine que o Host A queira enviar uma mensagem para o Host D. Neste caso, ele
gera um pacote do tipo ARP request, pois para ele o Host D está na mesma rede e não necessita de
roteamento. O processo para localizar o endereço MAC do Host D será da mesma forma que foi
apresentado anteriormente. Neste processo todos na sub-rede A receberá o pacote ARP request,
inclusive a interface E0 do roteador, porém, não chegará no Host D. A mensagem de broadcast
recebida pelo roteador, será descartada por padrão, pois ele não encaminha mensagens broadcast.
Uma vez que o roteador conhece o endereço IP do Host D (172.16.20.200), através de sua
segunda sub-rede, ele responderá ao Host A com seu próprio endereço MAC. Essa é a resposta
Proxy-ARP enviada pelo roteador para o Host A, adicionando no campo “Hardware address of
sender” o endereço MAC do roteador, porém, o endereço IP de origem não é alterado, ou seja, o
endereço IP será o do Host D.
Quando o Host A receber o pacote ARP reply, ele armazenará em sua tabela ARP cache as
novas informações enviadas pelo roteador. A partir de agora o Host A encaminhará todos os pacotes
destinados ao Host D com o endereço MAC da interface E0 do roteador.
2.6 RARP (Reverse Address Resolution Protocol)
Alguns hosts são conhecidos como diskless (sem disco) e ao serem iniciadas na rede não
conhecem o seu próprio endereço IP. Então, para que esses hosts possam descobrir qual é o seu
endereço IP, faz-se necessário gerar um pacote semelhante ao pacote ARP, porém o endereço de
hardware e IP são conhecidos pela origem. A diferença está em seu funcionamento que requer um
servidor RARP para manter uma base de dados mapeando os endereços de hardware para os
endereços IP´s, pré-configurado pelo administrador e que serão usados para endereçar os hosts na
rede local.
O protocolo RARP possui uma especificação que descreve como usá-lo em redes para
obter automaticamente o endereço IP, através do MAC. O protocolo recebeu a Request For
Comments (RFC) é RFC903.
O processo RARP é realizado da mesma forma que o ARP, com uma exceção do campo
“operation” que terá os seguintes valores:
3: Para RARP request
4: Para RARP reply
REFERÊNCIAS:
RODRIGUEZ, Adolfo et al. TCP/IP Tutorial and Technical Overview. Seventh Edition. IBM
Corporation, International Technical Support Organization: IBM, 2001. 986
Request For Comments: 826. Disponível em: http://www.ietf.org. Acesso em: 7 mai. 2011
Protocolo ARP. Disponível em: <http://www.m8.com.br/andre/arp.htm>. Acesso em: 7 mai. 2011