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


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

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

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

tcp:同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;
} 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM