2013-03-07 4 views
0

일부 UDP 패킷을 수신하기 위해 멀티 캐스트 그룹에 연결하려고합니다. 내가 사용하고있는 코드가 잘 작동하고 있으며, 패킷을 받고 있는데 전에 문제가 없었습니다. 그러나 이제는 패킷이 멀티 캐스트 조인 메시지를 볼 필요가있는 스위치를 통과해야하는 새로운 요구 사항이 있습니다. 전에 스위치가 바보 같았 기 때문에 문제가되지 않았습니다.IGMP Join 메시지에 잘못된 체크섬이 있습니다.

var LocalAddress = "228.12.12.27"; 
var LocalPort = 46715; 
var LocalEndPoint = new IPEndPoint(IPAddress.Parse(LocalAddress), LocalPort); 
var RxSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 

RxSocket.Blocking = false; 
RxSocket.ReceiveBufferSize = UInt16.MaxValue; 
RxSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1); 

RxSocket.Bind(new IPEndPoint(IPAddress.Any, LocalEndPoint.Port)); 
RxSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(LocalEndPoint.Address)); 
RxSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 50); 

RxSocket.Close(); 

IGMP를 생성하는 라인은 메시지가

RxSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(LocalEndPoint.Address)); 

입니다 그리고 IGMP 참여 메시지가 발송됩니다 가입 :

가 멀티 캐스트 그룹에 가입하려면이 코드를 사용합니다.

그러나 Wireshark를 사용하여 네트워크를 스누핑하면 IGMP 메시지의 체크섬이 잘못되었음을 알 수 있습니다. http://i.imgur.com/6Ct52QG.png

내 코드 또는 입력에 문제가 있습니까? 아니면 다른 것이 있습니까?

답변

0

이 내 코드

없음 문제입니다. 이것은 OS의 네트워킹 스택에 의해 생성되거나, Nikolai Fetissov가 답변 한대로 네트워크 어댑터에 의해 생성되었습니다.

패킷을 보낸 컴퓨터에서 네트워크 분석기가 실행 중이고 네트워크 스택이 아니라 네트워크 어댑터가 체크섬을 생성 한 경우 네트워킹 스택에서 "자신의 패킷을 캡처하기 때문에" 패킷을 전송하는 패킷을 캡처하는 네트워크 어댑터가 아닌 캡쳐 메커니즘에 전달하기 때문에 캡처 된 패킷에는 계산 된 IP 체크섬이 없으므로 거의 확실하게 잘못된 IP가있는 것처럼 보입니다 체크섬.

"IP 체크섬 오프로드로 인해 발생할 수 있습니다" " Wireshark 디스플레이. 그것이 바로 Wireshark가 말하는 것입니다.

0

하드웨어에서 체크섬을 수행하는 최신 네트워크 카드로 예상됩니다. 이것에 대해 걱정하지 마십시오. 코드가 IP 체크섬을 생성하지 않기 때문에