checksum二進制反碼求和計算方法

checksum二進制反碼求和計算方法:tcp

ip報文:將首部不包含數據,分紅多個16位字的序列,將檢驗和置零,而後進行反碼算術運算把全部16位字相加後,將獲得的  和的反碼  寫入檢驗和字段。接收方接收到後,再按照16位字的序列計算一次,獲得的和爲1,取反碼爲0.spa

udp:添加一個12字節 ip僞首部(源ip 4字節 + 目的ip 4字節 + 1全零字節 + 協議類型17  1字節 +  udp長度 2字節 ),僞首部、udp首部和數據部分一塊兒檢驗,數據部分不是偶數個字節,則要填入一個全零字節,此字節不發送,計算方法同上。code

tcp:同udp檢驗。blog

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;
} 
相關文章
相關標籤/搜索