UDP checksum error
-
Hallo an alle,
ich weiß, geh mal googeln, hab ich bereits und keine Lösungsansätze für mein Problem gefunden.
Also ich versende über UDP RTP Pakete. Die Pakete sind auch wenn ich sie mir im Sniffer(Wireshark, Packetyzer) ansehe völlig korrekt.
Aber für das darüberliegende UDP Paket sagen beide Sniffer das die Checksum incorrect ist.
Checksum: 0x68b9(incorrect, should be 0x2205)
ist die genaue Aussage.Das UDP Socket ist SOCK_DGRAM ncht SOCK_RAW.
Programmiere mit MS Visual Studio 2008 Pro.
Struct Member Alignment steht auf 1 Byte.
Versende das ganze mit sendto aus Winsock 2.Hier der Ausschnitt meines Versands
#define PAYLOAD_BLOCKCOUNT 160 typedef struct rtpHdr{ unsigned int cc:4; /* CSRC count */ unsigned int x:1; /* header extension flag */ unsigned int p:1; /* padding flag */ unsigned int version:2; /* protocol version */ unsigned int pt:7; /* payload type */ unsigned int m:1; /* marker bit */ unsigned int seq:16; /* sequence number */ unsigned int ts:32; /* timestamp */ unsigned int ssrc:32; /* synchronization source */ } tRtpHdr; typedef struct tRtpStruct : tRtpHdr { char Payload[PAYLOAD_BLOCKCOUNT]; } tRtpStruct; bool CSocketClass::SendRTPPackets(tRtpStruct* pRtp, int nSize, SOCKADDR_IN tRemoteSockAddr) { int nRes; nRes = sendto(m_sockRTP, (const char*)pRtp, nSize, 0, (SOCKADDR*)&tRemoteSockAddr, sizeof(SOCKADDR)); if(nRes == SOCKET_ERROR) return false; return true; }Warum die falsche Checksum???
P.S.: Habe gerade auch gesehen das es bei IP dasselbe ist, das dessen Checksum bereits inkorrekt ist.
-
Das liegt ziemlich sicher daran, dass die Checksumme erst von deiner Netzwerkkarte berechnet wird. Das Feature nennt sich "TCP/UDP Checksum Offloading", und entlastet (ein wenig) die CPU. Ist ein Standardfeature, was alle (fast alle?) modernen Netzwerkkarten können.
Wenn du das bei deiner Netzwerkkarte auf "off" stellst, sollte die Checksumme im Sniffer-Log passen.
Bzw. du kannst die falsche Checksumme auch einfach ignorieren, da das Paket ja mit der richtigen, von der Netzwerkkarte berechneten Checksumme rausgeht.
-
Na dann erklärt sich auch, dass am Empfänger die Checksumme korrekt ist.
Danke für die Info.Ein frohes Fest wünsche ich. :xmas1: