checksum二进制反码求和计算方法

checksum二进制反码求和计算方法:

ip报文:将首部不包含数据,分成多个16位字的序列,将检验和置零,然后进行反码算术运算把所有16位字相加后,将得到的  和的反码  写入检验和字段。接收方接收到后,再按照16位字的序列计算一次,得到的和为1,取反码为0.

udp:将ip首部,udp首部和数据部分一起检验,数据部分不是偶数个字节,则要填入一个全零字节,此字节不发送,计算方法同上。

unsigned short checksum(unsigned short *buf, int length)
{
    unsigned long sum;

    for(sum = 0; length > 0; length--) {
        sum += *buf++;
        sum = (sum>>16) + (sum&0xffff);
        sum += (sum>>16);
    }

    return ~sum;
} 

猜你喜欢

转载自www.cnblogs.com/frisk/p/12422231.html
今日推荐