ARP - Address Resolution Protocol


Introdução

Para resolver o problema do mapeamento de endereços lógicos em endereços físicos quando do uso de IP sobre redes ethernet, mas não restrito a apenas estes dois protocolos, o ARP foi proposto (e aceito) na internet através da RFC826.
Sua operação segue o seguinte princípio:

Formato do pacote ARP

O pacote ARP possui uma estrutura de tamanho variável que segue o seguinte formato, descrito em pseudo 'C':
struct ARP {
    int16 HardwareType;
    int16 ProtocolType;
    int8  HardwareLen;
    int8  ProtocolLen;
    int16 Operation;
    int8  SenderHardwareAddr[ HardwareLen ];
    int8  SenderProtocolAddr[ ProtocolLen ];
    int8  TargetHardwareAddr[ HardwareLen ];
    int8  TargetProtocolAddr[ ProtocolLen ];
} PacketData;
Na operação de resposta, o pacote é copiado, preenchido com a informação desejada e devolvido. Como o endereço físico do requisitante está presente na informação, não há problemas no envio.

ARP Cache

Se para cada vez que fosse necessário enviar um datagrama IP fosse necessário usar uma sequência de ARP, a rede ficaria absurdamente carregada. Em vez disso, mantém-se em memória uma lista dos últimos endereços descobertos.
Depois de algum tempo o endereço no ARP Cache é removido, independentemente de estar sendo usado ou não. É o que se chama de Aging.

Otimizando o processamento do ARP

Algumas operações simples podem melhorar significativamente o aproveitamento da rede com relação a pacotes ARP:

Comentários sobre o ARP

Apesar de ter sido criado especificamente para uso com IP sobre ethernet, devido à forma que foi implementado, seu uso não está restrito a este ambiente.
O ARP é um protocolo de baixo nível, operando na camada de enlace. Seus pacotes devem ser de alguma forma diferenciados dos pacotes IP. No caso do ethernet utiliza-se o campo TypeSpec para isto. O IP recebe o valor 0800h enquanto o ARP fica com o 0806h. Estes valores estão definidos na RFC Assigned Numbers.


Copyright ©1995 by Jonny