Meu entendimento é que, com APIPA, os clientes podem configurar automaticamente um endereço IP e uma máscara de sub-rede quando um servidor DHCP não estiver disponível. Entendo que essa abordagem não é realmente prática por vários motivos, mas estou curioso: há algo embutido no protocolo para verificar se um determinado endereço IP está em uso?
Por exemplo, digamos que meu host opte por usar 169.254.0.2
. E se outro host no domínio de broadcast já tiver esse endereço? Meu host verificaria antes de concluir a autoalocação?
É quase impossível que dois dispositivos escolham o mesmo IP para si.
Cada dispositivo pega um endereço e, em seguida, testa para ver se ele já está em uso, transmitindo pacotes ARP Probe. Todos os casos de conflito são bem cobertos, como repetir solicitações quando nenhuma resposta chega, solicitação ARP para o mesmo IP por outro dispositivo e outros.
Finalmente, o dispositivo se anuncia à rede via ARP com seu IP escolhido, garantido pelo algoritmo como único (ou quase garantido).
Para obter detalhes, consulte RFC 5227 que contém o padrão que todas as redes ad-hoc devem seguir.
O endereço local de link é uma variante desse algoritmo, implementado pela primeira vez no MacOS 9 em 1998, onde cada dispositivo escolhe um endereço aleatório em sua primeira tentativa. O padrão aqui é RFC 3927 .
O protocolo é definido na RFC 3927 , com a seção 2 sendo dedicada à seleção de endereços. Na subseção 2.2 você encontrará: