IP頭校驗和

2022-03-05 20:06:52 字數 1134 閱讀 8053

這裡要說的是首部校驗和字段。

在傳送資料時,為了計算數ip據報的校驗和。應該按如下步驟:

(1)把ip資料報的首部都置為0,包括校驗和字段。

(2)把首部看成以16位為單位的數字組成,依次進行二進位制反碼求和。

(3)把得到的結果存入校驗和字段中。

在接收資料時,計算資料報的校驗和相對簡單,按如下步驟:

(1)把首部看成以16位為單位的數字組成,依次進行二進位制反碼求和,包括校驗和字段。

(2)檢查計算出的校驗和的結果是否等於零。

(3)如果等於零,說明被整除,校驗是和正確。否則,校驗和就是錯誤的,協議棧要拋棄這個資料報

計算對ip首部檢驗和的演算法如下:   

(1)把ip資料報的校驗和字段置為0;   

(2)把首部看成以16位為單位的數字組成,依次進行二進位制求和(注意:求和時應將最高位的進製儲存,所以加法應採用32位加法);   

(3)將上述加法過程中產生的進製(最高位的進製)加到低16位(採用32位加法時,即為將高16位與低16位相加,之後還要把該次加法最高位產生的進製加到低16位)   

(4)將上述的和取反,即得到校驗和。

程式如下:

unsigned short ipcksum(unsigned short *addr,int len)

if(len==1)

sum+=*(unsigned char*)addr;

sum=(sum>>16)+(sum&0xffff); //把高位的進製,加到低八位,其實是32位加法

sum+=(sum>>16); //add carry

cksum=~sum; //取反

return (cksum);

}int main()

; unsigned short cksum;

cksum=ipcksum(iph,20);

printf("%x\n",cksum);

iph[5]=cksum;

cksum=ipcksum(iph,20);

if(cksum)

printf("checksum is incorrect!\n");

else

printf("checksum is correct!\n");

}

IP校驗和詳解

校驗和演算法 之前一直只知道ip校驗和演算法反碼求和相關的,但具體細節不清楚,今天了解了下。ip校驗和主要是用來保證資料 ip包頭 的完整性的.它用的演算法非常簡單,就是反碼求和校驗.需要注意的是反碼求和又叫1的補碼 one s complement 而2的補碼就是我們通常說的補碼求和了.校驗演算法...

IP校驗和詳解

原文見my blog url align center color magenta font 宋體 size 15pt ip size font font 宋體 size 15pt 校驗和詳解 size font color align align left font 宋體 size 14pt 一 ...

IP包的校驗和

ip頭結構 ipv4首部一般是20位元組長。在乙太網幀中,ipv4包首部緊跟著乙太網幀首部,同時乙太網幀首部中的協議型別值設定為0800 16 ipv4提供不同,大部分是很少用的選項,使得ipv4包首部最長可擴充套件到60位元組 總是4個位元組4個位元組的擴充套件 04 8121619 2431 版...