Curso de Redes – Protocolo ARP – Address Resolution Protocol
Protocolo ARP: Address Resolution Protocol
Quando um quadro Ethernet é enviado de um host para outro em uma rede, é o endereço físico de 48 bits (MAC Address) que determina para qual interface o quadro é destinado. O software do driver de dispositivo não verifica o endereço IP dentro do datagrama.
Como, então, podemos realizar a conexão entre dois hosts se no pacote temos endereços IP de origem e destino, mas precisamos dos endereços físicos das interfaces de rede envolvidas?
O protocolo ARP fornece resolução dinâmica de endereços, que é um mapeamento entre as duas firmas de endereçamento distintas: endereços IP, e qualquer outro tipo de endereço usado na camada de enlace. No caso dos quadros Ethernet, a camada de enlace usa o MAC Address (Media Access Control), endereço físico da interface.
O ARP, portanto, é um protocolo que permite obter o MAC Address de uma interface a partir de seu endereço IP. Existe também um outro protocolo que permite realizar o mapeamento inverso, ou seja, obter o endereço IP a partir de um MAC Address. Esse protocolo é conhecido por RARP (Reverse Address Resolution Protocol).
A idéia principal do protocolo ARP é que a interface de rede possui um endereço de hardware (endereço físico de 48 bits). Quando quadros são trocados entre duas interfaces de rede, eles devem ser endereçados às interfaces físicas corretas. Porém, a pilha TCP/IP possui seu próprio esquema de endereçamento, que consiste em endereços IP de 32 bits (IPv6 utiliza endereços de 128 bits).
Portanto, saber apenas o endereço IP de um host não é suficiente para que seja possível enviar um quadro ao host. O driver Ethernet precisa conhecer o endereço físico de destino para que seja possível enviar os dados. É aí que entra o protocolo ARP – fornecer um mapeamento dinâmico entre os endereços IP e os endereços físicos (MAC) utilizados na transmissão de dados.
Tipos de Mensagens ARP
Há dois tipos diferentes de mensagens enviadas pelo protocolo ARP, uma da origem ao destino, e outra do destino à origem. Para cada mensagem ARP, definimos como remetente quem transmite a mensagem e alvo quem deve recebê-la. As mensagens são:
- ARP Request (Requisição ARP): Mensagem enviada requisitando a resolução de um endereço IP em endereço físico.
- ARP Reply (Resposta ARP): Mensagem de resposta ao ARP Request, contendo o endereço físico resolvido.
Formato do Pacote ARP
A figura a seguir mostra o formato de um pacote ARP, quando usado usado em uma rede Ethernet para realizar resolução de endereço IP:
A descrição de cada campo é dada seguir:
HTYPE – Hardware Type (Tipo de hardware): Especifica o tipo de protocolo da rede, como Ethernet, cujo valor é 1. Outros tipos comuns incluem Frame Relay (15), ATM (16) e HDLC (17).
PTYPE – Protocol Type (Tipo de Protocolo): Especifica o protocolo da camada de internet para o qual a requisição do ARP é direcionada.O valor para o protocolo IPv4 é 0x0800.
HLEN – Hardware Length (Comprimento do Hardware): Tamanho do endereço de hardware, em grupos de oito bits (octetos). Um MAC Address Ethernet tem o tamanho de 6.
PLEN – Protocol Length (Comprimento do Protocolo): Tamanho, em octetos, do endereço especificado no campo PTYPE. Para o protocolo IPv4, o tamanho é 4
OPER – Operation (Operação): Tipo de operação que o transmissor está realizando, sendo o valor 1 para ARP Request (Requisição ARP), e 2 para ARP Reply (Resposta ARP).
SHA – Sender Address Hardware (Endereço Físico do Remetente): Endereço MAC do transmissor. Quando se trata de um pacote ARP Request, contém o endereço físico do remetente. Já em uma mensagem ARP Reply, contém o endereço físico procurado (resolvido).
SPA – Sender Protocol Address (Endereço do Remetente): Endereço da camada de internet do remetente (IP)
THA – Target Hardware Address (Endereço de Hardware do Alvo): Endereço físico do destinatário pretendido. Esse campo é ignorado em um pacote ARP Request (por razões óbvias), e em um pacote ARP Reply contém o endereço físico do host que originou a requisição ARP.
TPA – Target Protocol Address (Endereço de Protocolo do Alvo): Endereço da camada de internet (IP) do destinatário pretendido.
Cache ARP
Para que o protocolo ARP possa operar de forma eficiente é necessária a manutenção de um cache ARP em cada host. Esse cache mantém os mapeamentos de endereços mais recentes de IPs para endereços MAC na memória do host, possuindo um tempo de expiração para cada entrada no cache de 20 minutos a partir do momento em que a entrada foi adicionada.
Podemos examinar o cache ARP usando o comando arp -a em um prompt. A opção -a é utilizada para mostrar todas as entradas presentes no cache:
arp -a
Note que a saída gerada pelo comando nos mostra três colunas de informações, contendo os endereços IPs de vários hosts, seus endereços físicos em notação hexadecimal, e o tipo da entrada, que pode ser dinâmica ou estática:
- Entradas de Cache ARP Estáticas: Resoluções de endereços que são adicionadas manualmente à tabela de cache, e mantidas de forma permanente
- Entradas de Cache ARP Dinâmicas: Resoluções de endereços que são adicionadas de forma dinâmica à tabela de cache, como resultado de resoluções ARP completadas com sucesso. São transitórias, e removidas após um período de tempo.
Captura de Pacotes ARP
Para demonstrar o funcionamento do protocolo ARP, realizei a captura de pacotes trocados entre dois hosts por meio do comando ping, usando o software analisador de pacotes Wireshark. Usei duas máquinas Windows cujos IPs são 10.24.67.21 (remetente) e 10.24.67.20 (destinatário). Após a troca de pacotes ICMP com o ping, paramos a captura dos pacotes e aplicamos um filtro para exibição apenas dos pacotes ARP. Veja o resultado:
Note que o primeiro pacote ARP transmitido (ARP Request) foi enviado em broadcast, e na coluna Info do Wireshark pode-se ler a informação “Who has 10.24.67.20? Tell 10.24.67.21“, que significa que o host 10.24.67.21 está tentando descobrir quem é a máquina 10.24.67.20.
O segundo pacote mostra a resposta do host 10.24.67.20 contendo a informação desejada – no caso, o endereço MAC da interface, que é 70:71:bc:58:de:7c.
Os dois pacotes seguintes mostram o processo inverso, onde a máquina 10.24.67.20 usa o ARP para descobrir o MAC Address do primeiro host.
Podemos também abrir um desses pacotes para analisar o conteúdo da mensagem ARP trocada. Vamos analisar o conteúdo do primeiro pacote, que foi um ARP Request entre os hosts:
Vamos analisar as informações contidas nesse pacote:
- Tipo de mensagem: Request
- Tipo de Hardware: Ethernet (1)
- Tipo de Protocolo: IP (0x0800)
- Tamanho do Endereço de Hardware: 6 octetos (48 bits)
- Tamanho do Endereço do Protocolo: 4 octetos (32 bits)
- Operação (Opcode): Request (1)
- MAC Address do remetente: 08:00:27:66:ca:2e
- Endereço IP do remetente: 10.24.67.21
- MAC Address do alvo: 00:00:00:00:00:00
- Endereço IP do alvo: 10.24.67.20
Note o endereço MAC do host alvo: 00:00:00:00:00:00. O valor é todo em zeros pois esta é justamente a informação que o pacote ARP deve descobrir, realizando a resolução do IP-alvo para o MAC Address solicitado.
Proxy ARP
O protocolo ARP não fornece nenhum tipo de método de autenticação dos pacotes ARP Reply recebidos em uma rede, e por conta disso as respostas do ARP podem vir de outra rede distinta da rede onde a solicitação ARP é originada. Desta forma, um roteador pode responder às requisições ARP em uma das redes conectadas a ele feitas por um host em outra rede. Desta forma, o remetente das mensagens ARP pode “pensar” que o roteador é o host de destino, quando na verdade o host de destino está em outra rede conectada a outra interface do roteador.
Desta forma, o roteador funciona como um agente de proxy para o host de destino, retransmitindo pacotes dele para outros hosts.
Alguns dos usos mais comuns para a técnica de Proxy ARP são a conexão a redes dialup ou VPN, usar múltiplos IPs em um mesmo host, e em gateways de subrede transparentes.
ARP Probe
ARP Probe (“Sonda ARP”) são pacotes especiais ARP Request transmitidos em broadcast com o campo SPA (Endereço IP do remetente) contendo o valor 0.0.0.0. Esse pacote é utilizado por um host que solicitou um endereço IPv4 de um servidor DHCP, ou após a configuração manual de IP no host, para verificar se o IP atribuído já está em uso na rede.
Vamos ver esse pacote em serviço. Primeiramente, vou liberar a configuração de IP de minha máquina Windows com o comando ipconfig /release:
ipconfig /release
Agora minha máquina está sem IP:
Mando renovar o IP da máquina (requisitar nova configuração do servidor DHCP) e capturo os pacotes com o Wireshark:
ipconfig /renew
E eis a captura dos pacotes ARP Probe realizada com o Wireshark:
Vamos analisar alguns dos pacotes:
- Pacote No. 15: A máquina manda um ARP Request na rede para descobrir quem é o host 10.24.67.1 – que é o servidor DHCP da minha rede.
- Pacote No. 16: O servidor DHCP responde com seu MAC Address por meio de um ARP Reply.
- Pacote No. 35: Após a troca de vários pacotes DHCP, o host cliente envia o pacote ARP Probe para a rede a fim de verificar se alguém já está usando o endereço 10.24.67.21, que foi oferecido pelo servidor DHCP.
Os pacotes foram filtrados por protocolo ARP, por isso aparecem apenas alguns na captura mostrada.
Segurança do Protocolo ARP
Existem algumas situações nas quais o protocolo ARP pode ser explorado de forma maliciosa, sendo a mais comum o uso da técnica de ARP Spoofing. Vamos abordar esse assunto em nosso próximo artigo sobre ARP.
Até lá!
Muito bom o conteúdo
Obrigado.