Comportement désiré
Lorsqu'une application envoie un paquet à l'adresse IP de diffusion globale 255.255.255.255
, je souhaite que le paquet soit envoyé à l'adresse de diffusion globale Ethernet ( ff:ff:ff:ff:ff:ff
), sur toutes les interfaces.
Sur Linux et probablement sur d'autres systèmes d'exploitation, cela semble fonctionner. Windows XP et Windows 7 présentent des comportements différents à ce sujet, et aucun comportement n'est souhaitable dans ma situation.
Comportement de Windows XP
Le paquet sera envoyé correctement à la première interface réseau (l'ordre des interfaces est spécifié dans "Connexions réseau / Paramètres avancés / avancés"). Il sera également envoyé aux autres interfaces.
Tout va bien jusqu'à présent. Le problème est que, lors de l'envoi aux autres interfaces, l'adresse source du paquet de diffusion est l'adresse IP de la première interface. Par exemple, imaginez cette configuration réseau (l'ordre est important):
- Adaptateur 1: adresse IP
192.168.0.1
- Adaptateur 2: adresse IP
10.0.0.1
- Adaptateur 3: adresse IP
172.17.0.1
Maintenant, si j'envoie un paquet de diffusion, les paquets suivants seront envoyés (avec les adresses IP source et de destination):
- Sur l'adaptateur 1:
192.168.0.1
=>255.255.255.255
- Sur l'adaptateur 2:
192.168.0.1
=>255.255.255.255
Sur l'adaptateur 3:
192.168.0.1
=>255.255.255.255
En pratique, les applications utilisant des paquets de diffusion ne fonctionneront sur aucune autre interface que l'adaptateur 1. À mon avis, il s'agit d'un bogue flagrant dans la pile TCP / IP de Windows XP.
Comportement de Windows 7
La modification de l'ordre de l'interface réseau ne semble pas avoir d'effet sur Windows 7. Au lieu de cela, la diffusion semble être contrôlée par la table de routage IP.
IPv4 Route Table
===========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 10.202.254.254 10.202.1.2 286
0.0.0.0 0.0.0.0 192.168.0.1 192.168.0.3 10
10.202.0.0 255.255.0.0 On-link 10.202.1.2 286
10.202.1.2 255.255.255.255 On-link 10.202.1.2 286
10.202.255.255 255.255.255.255 On-link 10.202.1.2 286
127.0.0.0 255.0.0.0 On-link 127.0.0.1 306
127.0.0.1 255.255.255.255 On-link 127.0.0.1 306
127.255.255.255 255.255.255.255 On-link 127.0.0.1 306
192.168.0.0 255.255.255.0 On-link 192.168.0.3 266
192.168.0.3 255.255.255.255 On-link 192.168.0.3 266
192.168.0.255 255.255.255.255 On-link 192.168.0.3 266
224.0.0.0 240.0.0.0 On-link 127.0.0.1 306
224.0.0.0 240.0.0.0 On-link 192.168.0.3 266
224.0.0.0 240.0.0.0 On-link 10.202.1.2 286
255.255.255.255 255.255.255.255 On-link 127.0.0.1 306
255.255.255.255 255.255.255.255 On-link 192.168.0.3 266
255.255.255.255 255.255.255.255 On-link 10.202.1.2 286
===========================================================================
Voir les 255.255.255.255
itinéraires? Oui, ils contrôlent les paquets de diffusion. Dans cette situation, les paquets de diffusion seront envoyés via le 192.168.0.3
car il a la métrique inférieure ... mais pas vers les autres interfaces.
Vous pouvez changer l'interface par laquelle les paquets de diffusion globale seront envoyés très facilement (il suffit d'ajouter une 255.255.255.255
route persistante avec une métrique faible). Mais peu importe vos efforts, les paquets de diffusion ne seront envoyés que sur une seule interface, pas tous comme j'aimerais qu'il le fasse.
Conclusion
- Windows 7 envoie uniquement des paquets de diffusion à une seule interface. Vous pouvez choisir lequel, mais ce n'est pas le point ici.
- Windows XP envoie des paquets de diffusion à toutes les interfaces, mais il les envoie uniquement comme prévu à une interface, ce qui en pratique est équivalent au comportement de Windows 7.
Le but
Je veux changer cette prise en charge de la diffusion IP globale dans Windows (de préférence Windows 7) une fois pour toutes. Bien sûr, la meilleure façon serait d'avoir une sorte de changement de configuration pris en charge (hack de registre ou similaire), mais je suis ouvert à toutes les suggestions.
Des idées?