Le STCP détecte les adresses IP en double depuis un certain temps, mais un changement dans le comportement de Microsoft Windows 2008 et 7 a ajouté une ride intéressante.
Voyons d'abord comment cela fonctionne.
La détection des adresses IP en double repose sur le protocole de résolution d'adresse (ARP).
L'outil packet_monitor affiche un paquet ARP sur deux lignes comme
11:13:43.123 Rcvd Ether Dst ff:ff:ff:ff:ff:ff:ff Src 00:13:d4:59:7a:da Type 0806 (ARP)
ARP Req Target 164.152.77.217 Src 164.152.77.34 [00:13:d4:59:7a:da]
Où
|
Le STCP se penche sur le Src et si elle correspond à l'adresse IP de l'interface sur laquelle elle a été reçue, le STCP signale une adresse IP en double dans le syserr_log avec un message au format
<time> WARNING (<index>): MAC address <MAC address> is using our IP address <IP address>
Par exemple :
11:13:43 AVERTISSEMENT(5) : L'adresse MAC 00:13:d4:59:7a:da utilise notre adresse IP 164.152.77.34
Le "MAC" est l'abréviation de Media Access Control et la connaissance de l'adresse MAC vous donnera quelques indices quant à l'identité de l'hôte fautif. Les 3 premiers octets de l'adresse sont appelés "Organizationally Unique Identifier" (OUI) et peuvent être utilisés pour déterminer quelque chose sur la carte Ethernet ou l'hôte dans lequel elle se trouve. Par exemple, Stratus possède deux OUI enregistrés, 00-00-A8 et 00-04-FC. Vous pouvez consulter n'importe quel OUI à l'adresse http://standards.ieee.org/develop/regauth/oui/public.html
De nombreux hôtes, y compris STCP, lorsqu'ils démarrent ou lorsqu'une interface IP est configurée, envoient ce que l'on appelle un ARP gratuit. Cette trame cherche essentiellement sa propre adresse IP, si elle reçoit une réponse, elle sait que l'adresse IP est utilisée. Voici un exemple de trace packet_monitor montrant l'ARP gratuit envoyé par un autre module VOS lorsqu'il fait apparaître une de ses interfaces. Notez que les deux Cible et Src ont la même adresse IP.
10:19:53.045 Rcvd Ether Dst ff:ff:ff:ff:ff:ff:ff Src 00:00:a8:41:3b:6e Type 0806 (ARP)
Objectif de l'ARP Req 164.152.77.34 Src 164.152.77.34 [00:00:a8:41:3b:6e]
OK, alors quelle est cette ride dont j'ai parlé au début de ce post ?
À partir de Windows 2008 et Windows 7, la pile TCP de Microsoft envoie l'ARP gratuit avec le champ Src défini à 0.0.0.0.
10:45:10.530 Rcvd Ether Dst ff:ff:ff:ff:ff:ff Src 1c:c1:de:b4:76:60 Type 0806 (ARP)
ARP Req Target 164.152.77.34 Src 0.0.0.0 [1c:c1:de:b4:76:60]
Le résultat est que le STCP pense qu'il s'agit d'une requête "normale" pour son adresse Ethernet et répond avec une réponse normale
10:45:10.530 Xmit Ether Dst 1c:c1:de:b4:76:60 Src 00:00:a8:41:3b:6e Type 0806 (ARP)
ARP Rep Target 0.0.0.0 [1c:c1:de:b4:76:60] Src 164.152.77.34 [00:00:a8:41:3b:6e]
Il n'enregistre aucune indication de duplication d'adresse IP. La bonne nouvelle est que la pile Windows reconnaît la duplication et passe à une adresse locale de lien de la forme 169.254.X.Y.
Pourquoi Microsoft a-t-il apporté ce changement ? Il semble que de nombreuses piles TCP (y compris STCP) mettront à jour leur entrée de cache ARP pour l'adresse IP source avec l'adresse Ethernet incluse dans la trame ARP. Si l'adresse IP est une copie, vous finissez par rompre les connexions actuelles vers l'adresse IP dupliquée car les paquets sont redirigés vers l'hôte dupliqué. En modifiant le champ Src à 0.0.0.0 Microsoft empêche les piles TCP (y compris STCP) de mettre à jour leurs entrées de cache ARP.