1. 发送前,例如ip首部有20字节,将两字节checksum字段置为0x0000,再每次取两个字节相加。若相加后有进位到第三、四字节,则将第三、四字节再加到前两个字节上。
重复以上步骤,直到将20个字节加完。最后取所有相加和的低两字节取反码,得到checksum字段。
2. 接收后校验,和1相同,将首部20字节的每两字节的反码加起来,若和为0,则说名收到的报文正确。
3. 求首部校验和的C代码
-
unsigned short checksum(unsigned short *buf,int nword)
-
{
-
unsigned long sum;
-
for(sum = 0; nword > 0; nword--)
-
{
-
sum += *buf++;
-
sum = (sum >> 16) + (sum & 0xffff);
-
}
-
return ~sum;
-
}
阅读(1871) | 评论(0) | 转发(0) |