STCP tem tido detecção de endereços IP duplicados há algum tempo, mas uma mudança na forma como o Microsoft Windows 2008 e 7 se comportam acrescentou uma interessante ruga.
Primeiro vamos rever como funciona.
A detecção de endereço IP duplicado depende do protocolo de resolução de endereço (ARP).
A ferramenta Packet_monitor mostra um pacote ARP em duas linhas como
11:13:43.123 Rcvd Ether Dst ff:ff:ff:ff:ff:ff Src 00:13:d4:59:7a:da Tipo 0806 (ARP)
Req. ARP Meta 164.152.77.217 Src 164.152.77.34 [00:13:d4:59:7a:da]
Onde
|
STCP examina o Src e se corresponder ao endereço IP da interface que foi recebido no STCP, então o STCP reporta um endereço IP duplicado no syserr_log com uma mensagem formatada como
<time> WARNING (<index>): MAC address <MAC address> is using our IP address <IP address>
Por exemplo:
11:13:43 AVISO(5): Endereço MAC 00:13:d4:59:7a:da está usando nosso endereço IP 164.152.77.34
O "MAC" significa Media Access Control (Controle de Acesso à Mídia) e conhecer o endereço MAC lhe dará algumas pistas sobre a identificação do hospedeiro ofensor. Os primeiros 3 bytes do endereço são chamados de "Organizationally Unique Identifier" (OUI) e podem ser usados para determinar algo sobre o cartão Ethernet ou o host em que ele se encontra. Por exemplo, Stratus tem dois OUIs registrados, 00-00-A8 e 00-04-FC. Você pode consultar qualquer OUI em http://standards.ieee.org/develop/regauth/oui/public.html.
Muitos hosts, incluindo STCP, quando iniciam ou quando uma interface IP é configurada, enviam o que é conhecido como ARP gratuito. Este quadro basicamente procura seu próprio endereço IP, se receber uma resposta sabe que o endereço IP está em uso. Aqui está um exemplo de rastreamento de um monitor de pacotes mostrando o ARP gratuito enviado por outro módulo VOS, pois ele traz à tona uma de suas interfaces. Note que tanto o Meta e Src têm o mesmo endereço IP.
10:19:53.045 Rcvd Ether Dst ff:ff:ff:ff:ff:ff Src 00:00:a8:41:3b:6e Tipo 0806 (ARP)
Req. ARP Alvo 164.152.77.34 Src 164.152.77.34 [00:00:a8:41:3b:6e]
OK, então qual é esta ruga que eu mencionei no início deste post?
A partir do Windows 2008 e Windows 7, a pilha TCP da Microsoft envia o ARP gratuito com o campo Src definido para 0.0.0.0.
10:45:10.530 Rcvd Ether Dst ff:ff:ff:ff:ff:ff Src 1c:c1:de:b4:76:60 Tipo 0806 (ARP)
Req. ARP Meta 164.152.77.34 Src 0.0.0.0.0 [1c:c1:de:b4:76:60]
O resultado é que a STCP pensa que esta é uma consulta "normal" para seu endereço Ethernet e responde com uma resposta normal.
10:45:10.530 Xmit Ether Dst 1c:c1:de:b4:76:60 Src 00:00:00:a8:41:3b:6e Tipo 0806 (ARP)
ARP Rep Alvo 0.0.0.0.0 [1c:c1:de:b4:76:60] Src 164.152.77.34 [00:00:a8:41:3b:6e]
Ele não registra qualquer indicação de um endereço IP duplicado. A boa notícia é que a pilha do Windows reconhece a duplicação e mudará para um endereço local de link do formulário 169.254.X.Y.
Por que a Microsoft fez esta mudança? Parece que muitas pilhas TCP (incluindo STCP) irão atualizar sua entrada de cache ARP para o endereço IP de origem com o endereço Ethernet incluído no quadro ARP. Se o endereço IP for uma duplicata você acaba rompendo as conexões atuais para o endereço IP duplicado, pois os pacotes são redirecionados para o host duplicado. Ao mudar o campo Src para 0.0.0.0, a Microsoft evita que as pilhas TCP (incluindo STCP) atualizem suas entradas de cache ARP.