2012-07-11 2 views
4

Windows XP의 UdpClient에서 UDP 데이터 그램을 장치로 보내려고하지만 응답하지 않습니다. Wireshark에서 해당 트래픽을 살펴보면 모든 아웃 바운드 패킷이 잘못되었음을 알 수 있습니다. 왜냐하면 모든 IP 헤더 체크섬이 0x0000이기 때문입니다.UDP 데이터 그램에 대해 IP 헤더 체크섬을 계산하지 못하게 할 수있는 요인은 무엇입니까?

기기에 네트워크 카드가 두 개 있기 때문에 다른 네트워크 카드를 사용하기 시작하여 같은 문제가 발생하기 시작했습니다.

두 장치 모두 네트워크 카드를 핑 (ping) 할 수 있기 때문에 C# 코드가 잘못되어 있다고 가정합니다. 그러나 확실하지 않습니다. 이 문제를 일으키기 위해 UdpClient가있는 Windows XP의 .NET 4에서 뭔가 잘못 할 수 있습니까?

답변

7

Windows가 체크섬 계산의 하드웨어 오프 로딩을 수행하기 때문에 빈 체크섬이 표시됩니다. 네트워크 인터페이스 카드 (NIC) 프로세서에 의해 수행됩니다. 패킷 스니퍼를 사용하여 패킷을 캡처하면 NIC가 처리하기 전에 패킷이 표시됩니다. 어떤 경우, UDP 프로토콜 defines the checksum as optional에서

enter image description here enter image description here

를, 제로는 검사에 대한 유효한 값 : 당신은 장치 관리자에서 장치의 속성 페이지에서 오프로드 해제 할 수 있습니다. 이는 처리 능력이 낮은 장치가 체크섬 계산을 건너 뛸 수있게하기 위함입니다. 일반적으로 체크섬은 패킷 (예 : 라우터)을 처리하는 첫 번째 네트워크 노드에 의해 채워집니다. 0으로 남아 있더라도 장치는 유효한 패킷을 받아 들여야합니다.

EDIT : 방금 UPD 헤더가 아니라 IP 헤더에 대해 이야기하고 있다는 것을 깨달았습니다. 이것은 IP 헤더 체크섬이 선택 사항이 아니라는 점을 제외하고 두 가지 모두에 적용됩니다 (NIC에 의해 계산됩니다).

+1

사진이있는 대답을 선택하겠습니다. – John

4

드라이버 문제 같습니다. 드라이버 속성에서 체크섬 오프로드를 해제하십시오.

같은 시스템에서 wireshark를 실행하는 경우 체크섬 오프로드가 올바르게 작동하고 Wireshark가 패킷을 본 후에 계산 중이므로 Wireshark가 체크섬을보고하지 않을 수 있습니다.

체크 박스가 0인지 또는 0이 아닌지 확인하기 위해 별도의 상자에서 wireshark 실행을 확인하십시오.

결국 체크섬이 정상이면 방화벽 문제 일 수 있습니다. 반환 트래픽을 허용하는 로컬 시스템에 방화벽 규칙이 있는지 확인하십시오.

+0

답변 해 주셔서 감사합니다. 올바른 것으로 upvoted. – John

+0

@john, 고맙습니다. 어느 것이 옳았 는가 - 방화벽 또는 드라이버 문제입니까? – Ben

+0

오프로드 된 체크섬 – John