2012-02-03 1 views
1

멀티 캐스트 메시지를 사용하는 네트워크 검색 프로세스를 구현했습니다. 동일한 세그먼트에 연결된 모든 IP 주소로 특정 장치를 검색 할 수 있습니다.동일한 소스 IP 주소를 사용하는 멀티 캐스트 메시지가 무시되는 이유

클라이언트 A는 멀티 캐스트 메시지를 보내고 다른 클라이언트를 요구합니다. 다른 클라이언트가 멀티 캐스트 메시지 "여기에 ..."로 응답했습니다. 기본적으로이 작동합니다.

하지만 문제가되는 경우가 하나 있습니다.

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 

동행가 발생할 수, 멀티 캐스트 메시지 및 클라이언트 B를 전송 모두 동일한 IP 주소를 듣고 그 클라이언트를했다. 이 경우 UDP 패킷의 소스 주소는 대상 클라이언트의 IP 주소와 동일합니다. 따라서 클라이언트 B의 응용 프로그램에는 멀티 캐스트 메시지가 수신되지 않습니다.

동일한 메시지가있는 멀티 캐스트 메시지가 차단되어 IP 스택에 삭제 된 것 같습니다. 어쨌든 그것을 받기위한 방법 (소켓 설정)이 있습니까?

+1

일반적으로 두 컴퓨터가 동일한 ip를 가질 수 없습니다. 나는 스위치가 두 개의 다른 포트로 패키지를 보낼 수 없게 될 것이라고 생각한다. – rekire

+0

물론 두 번 동일한 IP는 허용되지 않습니다. 그러나 그것은 일어날 수 있습니다. 어쨌든, 스위치는 IP 주소 (> Layer 3)에 신경 쓰지 않습니다. – Maus

+0

@Mausswitch는 @Mausswitch가 연결된 것들이 아니라, 같은 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를 사용할 필요가 없습니다 그런 다음 다시 활성화하려고합니다. –