如果要自己填充IP数据报,那么计算Checksum是必不可少的一步,算法如下。
按16位一组,取补码相加,然后对和取补码
USHORT Checksum(USHORT *buffer, int size)
{
unsigned long cksum=0;
while(size >1)
{
cksum+=*buffer++;
size -=sizeof(USHORT);
}
if(size)
cksum += *(UCHAR*)buffer;
cksum = (cksum >> 16) + (cksum & 0xffff);
cksum += (cksum >>16);
return (USHORT)(~cksum);
}
===================
HC' = ~(C + (-m) + m') = ~(~HC + ~m + m')
HC - old checksum in header
C - one's complement sum of old header
HC' - new checksum in header
C' - one's complement sum of new header
m - old value of a 16-bit field
m' - new value of a 16-bit field
本文详细介绍了IP数据报中Checksum的计算方法,包括直接计算Checksum的算法步骤、更新Checksum的增量算法及其数学原理,并探讨了当数据变化时如何高效地更新Checksum。
1347

被折叠的 条评论
为什么被折叠?



