計算檢驗和

2021-06-16 13:09:45 字數 450 閱讀 8200

ushort checksum(ushort *buffer, int size) // 注意 buffer型別   指向ushort型別(16位)

unsigned long cksum=0;  //32位

while(size >1)  

if(size)   //size奇數時

//cksum>>16;  //取高16位

//cksum&0xffff;   //取低16位

cksum = (cksum >> 16) + (cksum & 0xffff);   // 高16位+低16位

cksum += (cksum >>16);  //若上一步溢位,即上一步得出的cksum的高16位不位0,則將高16位加到cksum中。

return (ushort)(~cksum); //各位取反   注意返回值為16位

IP首部檢驗和計算

計算ip首部檢驗和 如上圖,計算?是多少?計算 從08 00之後開始計算到後面的08 00即 兩個位元組的相加 45 00 00 20 d5 56 00 00 80 01 de b7 45 5d c0 a8 00 dc 等於 3800f 然後溢位的再次加到後面即 800f 3 等於 8012 最後用...

IP資料報檢驗和計算

在進行計算之前先補充一下基礎知識。原碼是計算機機器數中最簡單的一種形式,數值位就是真值的絕對值,符號位位 0 時表示正數,符號位為 1 時表示負數,原碼又稱帶符號的絕對值。為了方便整數和小數區別,整數的符號位與數值位之間用 隔開,小數的符號位與數值位之間用 隔開。舉例 以8位機器數為例,整數的 0 ...

Linux 核心IP和UDP檢驗和計算

ip checksum a.接收報文 struct iphdr iph ip hdr skb if unlikely ip fast csum u8 iph,iph ihl goto checksum error b.傳送報文 ip send check iph udp checksum a.網絡卡...