Gewünschtes Verhalten
Wenn eine Anwendung ein Paket an die globale Broadcast-IP-Adresse sendet 255.255.255.255, möchte ich, dass das Paket ff:ff:ff:ff:ff:ffauf allen Schnittstellen an die globale Ethernet-Broadcast-Adresse ( ) gesendet wird.
Unter Linux und wahrscheinlich auch unter anderen Betriebssystemen scheint dies zu funktionieren. Windows XP und Windows 7 weisen diesbezüglich unterschiedliche Verhaltensweisen auf, und keines der beiden Verhaltensweisen ist für meine Situation wünschenswert.
Windows XP-Verhalten
Das Paket wird korrekt an die erste Netzwerkschnittstelle gesendet (die Schnittstellenreihenfolge ist unter "Netzwerkverbindungen / Erweiterte / Erweiterte Einstellungen" angegeben). Es wird auch an die anderen Schnittstellen gesendet.
Bisher stimmt alles. Das Problem ist, dass beim Senden an die anderen Schnittstellen die Quelladresse des Broadcast-Pakets die IP-Adresse der ersten Schnittstelle ist. Stellen Sie sich zum Beispiel diese Netzwerkkonfiguration vor (Reihenfolge ist wichtig):
- Adapter 1: IP-Adresse
192.168.0.1 - Adapter 2: IP-Adresse
10.0.0.1 - Adapter 3: IP-Adresse
172.17.0.1
Wenn ich jetzt ein Broadcast-Paket sende, werden die folgenden Pakete gesendet (mit Quell- und Ziel-IP-Adressen):
- Auf Adapter 1:
192.168.0.1=>255.255.255.255 - Auf Adapter 2:
192.168.0.1=>255.255.255.255 Auf Adapter 3:
192.168.0.1=>255.255.255.255In der Praxis funktionieren Anwendungen, die Broadcast-Pakete verwenden, nicht auf anderen Schnittstellen als Adapter 1. Meiner Meinung nach ist dies ein offensichtlicher Fehler im TCP / IP-Stack von Windows XP.
Windows 7-Verhalten
Das Ändern der Reihenfolge der Netzwerkschnittstellen scheint keine Auswirkungen auf Windows 7 zu haben. Stattdessen scheint die Übertragung von der IP-Routentabelle gesteuert zu werden.
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
===========================================================================
Sehen Sie die 255.255.255.255Routen? Ja, sie steuern Broadcast-Pakete. In dieser Situation werden Broadcast-Pakete über das gesendet, 192.168.0.3da es die niedrigere Metrik hat ... aber nicht an die anderen Schnittstellen.
Sie können die Schnittstelle ändern, über die globale Broadcast-Pakete sehr einfach gesendet werden (fügen Sie einfach eine persistente 255.255.255.255Route mit einer niedrigen Metrik hinzu). Unabhängig davon, wie sehr Sie sich bemühen, werden Broadcast-Pakete nur auf einer einzigen Schnittstelle gesendet , nicht auf allen, wie ich es gerne hätte.
Fazit
- Windows 7 sendet nur Broadcast-Pakete an eine Schnittstelle. Sie können wählen, welche, aber das ist hier nicht der Punkt.
- Windows XP sendet Broadcast-Pakete an alle Schnittstellen, sendet sie jedoch erwartungsgemäß nur an eine Schnittstelle, was in der Praxis dem Windows 7-Verhalten entspricht.
Das Ziel
Ich möchte diese globale IP-Broadcast-Unterstützung in Windows (vorzugsweise Windows 7) ein für alle Mal ändern. Der bessere Weg wäre natürlich eine unterstützte Konfigurationsänderung (Registry-Hack oder ähnliches), aber ich bin offen für alle Vorschläge.
Irgendwelche Ideen?