2010-02-03 2 views
1

소켓 프로그래밍 작업에 문제가 있습니다. 소켓/networkstream을 통해 명령을 보내는 TCP 클라이언트를 작성했습니다. 전선을 통과하는 원시 데이터를보기 위해 Wireshark을 사용하고 있습니다. Wireshark 응용 프로그램은 TCP 헤더의 체크섬이 잘못되었다는 것을 "명령"(즉, 플러시() 네트워크 스트림을 의미 함)을 보낼 때마다 알려줍니다 ("0x2440이어야하지만 0x0000입니다.). 왜 응용 프로그램 계층에서 TCP 헤더를 신경 써야하는지 이해할 수 없습니다. 그럴 수는 없습니다. 왜이 "오류"가 발생하는지 아는 사람이 있습니까? 설정이 있습니까? Tcp와 함께 .NET 2.0 소켓을 사용 중입니다..NET으로 TCP 프로그래밍

답변

8

데이터를 전송하는 컴퓨터에서 Wireshark 덤프를보고 있습니까? 그럴 경우 체크섬 Wireshark가보고있는 스택의 지점에서 계산되지 않았습니다. 오늘날 많은 네트워크 카드에는 TCP Checksum Offload가 있습니다. w 여기 체크섬은 하드웨어에 의해 이루어 지므로 체크섬 필드는 출구에서 0이 될 것입니다 (Wireshark는 패킷이 하드웨어로 전송되기 바로 전에 패킷을받습니다). ACK를 받기 때문에 수신 측은 분명히 차갑습니다. 또한 localhost와 대화하는 경우 스택에 체크섬이 전혀 생기지 않을 수도 있습니다 (호스트가 자체적으로 대화하는 데 꼭 필요한 것은 아닙니다).

+0

설명해 주셔서 감사합니다. 나는 그것을 몰랐다. 당신이 그 것들에 익숙하기 때문에 Wireshark를 사용하여 보내지는 바이트 스트림을 이해하는 방법을 물어볼 수 있습니까? 독점적 인 프로토콜에 따르면 나는 패킷에 텍스트를 포함하고있다. 그러나 패킷을 디코딩하려고하면 나는 횡설수설합니다. 다시 한번 감사드립니다. – John

+0

@ 존 : 당신이보고있는 프로토콜을 모른 채, 우리는 정말로 말할 수 없습니다. Wireshark에서 "Follow TCP stream"을한다면 유용한 데이터가 보이지 않습니까? –

+0

@ 존 : 표준 TCP 스트리밍입니다. "Follow TCP Stream"은 어떻게 든 패킷을 다시 붙입니다. 받은 데이터는 일반 텍스트 파일입니다. 나는 Wireshark를 더 보게 될 것이다. 감사. – John

관련 문제