Como descobrir que endereço Ethernet usar quando você quer conversar com um determinado endereço Internet?
Para solucionar esta questão existe um protocolo específico, chamado ARP (adrress resolution protocol). (Note que o ARP não é um protocolo IP, isto é , os datagramas ARP não tem cabeçalhos IP.)
Suponha que você esteja no sistema 128.6.4.194 e queira conectar o sistema 128.6.4.7. Seu sistema primeiro irá verificar que 128.6.4.7 está na mesma rede, então ele pode conversar diretamente via Ethernet. Então ele irá procurar 128.6.4.7 em sua tabela ARP, para ver se o seu endereço Ethernet já é conhecido. Caso seja conhecido, o sistema irá adicionar um cabeçalho Ethernet, e enviar o pacote.
Mas suponha que este sistema não esteja na tabela ARP. Não há como enviar o pacote, porque você precisa do endereço Ethernet. Então o seu sistema usa o protocolo ARP para enviar uma requisição ARP. Essencialmente uma requisição ARP diz "Eu preciso o endereço Ethernet para 128.6.4.7".
Todo o sistema escuta requisições ARP.
Quando um sistema vê uma requisição ARP para ele mesmo, ele é requisitado a responder. Então 128.6.4.7 verá a requisição e responderá com uma resposta ARP dizendo como resultado "128.6.4.7 é 8:0:20:1:56:34". (Lembre-se que endereços Ethernet são de 48 bits, o que são 6 octetos. Endereços Ethernet são convencionalmente apresentados em hexadecimal, usando a pontução mostrada acima.)
Seu sistema irá salvar esta informação em sua tabela ARP, então os futuros pacotes para esse mesmo endereço poderão ir diretamente. Muitos sistemas tratam a tabela ARP como uma cache, e limpam suas entradas se estas não forem usadas em um determinado período de tempo.
Note que as requisições ARP devem ser enviadas como "broadcasts". Não há como uma requisição ARP ser enviada diretamente ao sistema correto. Afinal, a razão pela qual a requisição ARP está sendo enviada é que você não conhece o endereço Ethernet.
Então um endereço Ethernet para todas as máquinas é usado, isto é ff:ff:ff:ff:ff:ff. Por convenção, todas as máquinas Ethernet prestam atenção nos pacotes com este endereço. Então cada máquina verifica se a requisição é para o seu próprio endereço. Se for, ela reponde. Se não, ela simplesmente a ignora. (Alguns hosts usam requisições ARP para atualizar seu conhecimento sobre outros hosts da rede, mesmo que a requisição não seja para eles.) Note que pacotes cujo endereço IP indica broadcast (ex: 255.255.255.255 ou 128.6.5.255) também são enviados com um endereço Ethernet de broadcast