Tcp和IP的校验和运算的问题,高手帮忙
我在计算Tcp和IP的校验和时,调试发现tcp校验和正确但是ip校验和不对?大家帮我分析一下问题可能出在什么地方。tcp校验和运算传入tcp头和伪tcp头;ip校验和运算传入ip头和tcp头。
附上我的校验和运算checksum函数:
function TForm1.CheckSum(var Buffer; Size : integer) : Word;
type
TWordArray = array[0..1] of Word;
var
ChkSum : LongWord;
i : Integer;
begin
ChkSum := 0;
i := 0;
while Size > 1 do
begin
ChkSum := ChkSum + TWordArray(Buffer)[i];
inc(i);
Size := Size - SizeOf(Word);
end;
if Size=1 then
ChkSum := ChkSum + Byte(TWordArray(Buffer)[i]);
ChkSum := (ChkSum shr 16) + (ChkSum and $FFFF);
ChkSum := ChkSum + (Chksum shr 16);
Result := Word(not ChkSum);
end;