問題:
1-クライアント1はサブネットAのIPをリッスンします
。2-サーバーはサブネットBにブロードキャストメッセージを送信します
。3-クライアント1もサブネットAにあるIPを介してこのメッセージを読み取ります。-
メッセージがブロードキャストされない場合、そのような状況はありません。しかし、ユニキャスト。
単一のネットワークインターフェイスで定義されているいくつかのIPとポートをリッスンするJavaアプリケーションを作成しようとしています。以下に私のネットワーク構成の例を示します。
netsh interface ip>show address
Configuration for interface "Local Area Connection"
DHCP enabled: No
IP Address: 22.108.131.1
SubnetMask: 255.255.255.0
IP Address: 22.108.132.1
SubnetMask: 255.255.255.0
IP Address: 22.108.133.1
SubnetMask: 255.255.255.0
InterfaceMetric: 0
データグラムチャネルを開いて、これらのIPアドレスにバインドしています。IPごとに、チャネルからのメッセージに応答するための異なるスレッドがあります。
つまり、サーバーはUDPブロードキャストメッセージをに送信します
22.108.131.25522.108.132.255
など
。
ただし、たとえば22.108.131.1をリッスンするために作成されたスレッドでは、22.108.132.255宛てのブロードキャストメッセージを受信しています。Wiresharkを使用して着信メッセージを確認すると、メッセージは22.108.132.255として正しく届くと表示されますが、私のアプリケーションでは、メッセージのエンドポイントがリスニングスレッドである22.108.131.1であることがわかります。
最初は私の実装が間違っていると思いましたが、もっと驚くべき問題は非ブロードキャストメッセージの着信です。つまり、メッセージの宛先が22.108.131.1の場合、22.108.132.1はそれを受信しません。これは、明らかにそうあるべきです。しかし、私が理解していないのは、それがブロードキャストメッセージに関するものである場合、なぜそれが本来のように実行されないのかということです。
問題の原因がWindowsの複数のIP構成であるかどうかはわかりません。しかし、私が観察しているのは、オペレーティングシステムがサブネットAのブロードキャストメッセージをサブネットBに配信することです。
手がかりになるかもしれないもう一つのことはこれです、私は22.108.133.1も定義しましたが、私は上記の22.108.131.1と22.108.132.1についてのみ話しました。そのIPのデータグラムチャネルを開かなくても、他のIPからそのサブネットのブロードキャストメッセージを読み取ることができます。
だから私はここで何かが欠けていますか?それとも、Windowsのネットワーク処理の性質ですか?