2012-02-03 3 views
1

マルチキャストメッセージを利用するネットワーク探索プロセスを実装しました。同じセグメントに接続された任意のIPアドレスを持つ特定のデバイスを検出することができます。同じソースIPアドレスを持つマルチキャストメッセージが無視される理由

クライアントAはマルチキャストメッセージを送信し、他のクライアントを要求します。他のクライアントからのマルチキャストメッセージの応答 "ここに..."。基本的にこれは正常に動作します。

しかし、私はトラブルを引き起こす1つのケースがあります。

Client A  Client B 
192.168.2.5 192.168.2.5 
    |    | 
    \__________/
     >>> 
    UDP Multicast Message: 
    Source: 192.168.2.5 | Destination: 224.0.0.150 

マルチキャストメッセージを送信するクライアントAとクライアントBの両方が同じIPアドレスをリッスンする可能性があります。この場合、UDPパケットのソースアドレスは宛先クライアントのIPアドレスと同じです。したがって、クライアントBのアプリケーションはマルチキャストメッセージを受信しません。

同じメッセージを持つマルチキャストメッセージがブロックされ、ip-stackにドロップされたと思います。とにかく受信する方法(ソケット設定)はありますか?

+1

通常、2台のコンピュータが同じipを持つことはできません。私はスイッチが2つの異なるポートにパッケージを送信することを許可しないと思う。 – rekire

+0

もちろん、2回同じIPは許可されません。しかしそれは起こるかもしれない。とにかく、私が知っているように、スイッチはIPアドレス(>レイヤ3)を気にしません。 – Maus

+0

@Maus Switchesは接続されているものではなく、同じIPを持つ2台のマシンを検出した場合、ARPキャッシュは混乱し、パケットをどこに送信するのかわからなくなるか、それらのどれにでもほとんど何かを送ることを拒否します。 – nos

答えて

4

はい、ホストに独自のマルチキャストパケット(送信元IPアドレスのフィルタであることが多い)を読み取らせることができます。これは、IP_MULTICAST_LOOPソケットオプションによって制御されます。

int loop = 1; 
setsockopt(socket, IPPROTO_IP, IP_MULTICAST_LOOP, &loop, sizeof(loop)); 
+0

デフォルトで[IP_MULTICAST_LOOPが有効になっています](http://www.tldp.org/HOWTO/Multicast-HOWTO-6.html)ので、プログラムのある部分でループを無効にしない限り、通常このsetsockoptを使用する必要はありませんそれを再び有効にします。 –

関連する問題