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