望ましい行動
アプリケーションがグローバルブロードキャストIPアドレス255.255.255.255
にパケットを送信するとき、ff:ff:ff:ff:ff:ff
すべてのインターフェイスで、パケットをイーサネットグローバルブロードキャストアドレス()に送信したいと思います。
Linuxおよびおそらく他のOSでも、これは動作するようです。Windows XPとWindows 7はこれに関して異なる動作を示し、どちらの動作も私の状況には望ましくありません。
Windows XPの動作
パケットは最初のネットワークインターフェイスに正しく送信されます(インターフェイスの順序は「ネットワーク接続/詳細設定/詳細設定」で指定されています)。他のインターフェースにも送信されます。
これまでのところすべてが正常です。問題は、他のインターフェイスに送信する場合、ブロードキャストパケットの送信元アドレスが最初のインターフェイスのIPアドレスであることです。たとえば、次のネットワーク構成を想像してください(順序は重要です)。
- アダプター1:IPアドレス
192.168.0.1
- アダプター2:IPアドレス
10.0.0.1
- アダプター3:IPアドレス
172.17.0.1
ブロードキャストパケットを送信すると、次のパケットが送信されます(送信元IPアドレスと宛先IPアドレスが含まれます)。
- アダプター1:
192.168.0.1
=>255.255.255.255
- アダプター2:
192.168.0.1
=>255.255.255.255
アダプター3:
192.168.0.1
=>255.255.255.255
実際には、ブロードキャストパケットを使用するアプリケーションは、アダプター1以外のインターフェイスでは動作しません。私の意見では、これはWindows XPのTCP / IPスタックの明らかなバグです。
Windows 7の動作
ネットワークインターフェイスの順序を変更しても、Windows 7には影響がないようです。代わりに、ブロードキャストは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
===========================================================================
参照255.255.255.255
ルートを?うん、彼らはブロードキャストパケットを制御します。この状況192.168.0.3
では、メトリックが低いため、ブロードキャストパケットはを介して送信されますが、他のインターフェイスには送信されません。
グローバルブロードキャストパケットが非常に簡単に送信されるインターフェイスを変更できます(255.255.255.255
メトリックの低い永続的なルートを追加するだけです)。しかし、どんなに頑張っても、ブロードキャストパケットは1つのインターフェイスだけで送信され、私がやりたいようにすべてのインターフェイスで送信されるわけではありません。
結論
- Windows 7は、ブロードキャストパケットを1つのインターフェイスにのみ送信します。どちらを選択してもかまいませんが、ここでは重要ではありません。
- Windows XPはブロードキャストパケットをすべてのインターフェイスに送信しますが、期待どおりに1つのインターフェイスにのみ送信します。これは実際にはWindows 7の動作と同等です。
目標
Windows(できればWindows 7)でのこのグローバルIPブロードキャストサポートを一度に変更したいと思います。もちろん、サポートされている構成の変更(レジストリハックなど)を行うことをお勧めしますが、私はすべての提案を受け入れます。
何か案は?