網際校驗和算法(Internet CheckSum)

網際校驗和算法

反碼算數運算:

兩個數進行二進制反碼求和的運算很簡單。它的規則是從低位到高位逐列進行計算。0和0相加是0,0和1相加是1,1和1相加是0但要產生一個進位1,加到下一列。如果最高位相加後產生進位,則最後得到的結果要加1。

網際校驗和算法概述:

  • 在發送方,先把被校驗的數據劃分爲許多16位字的序列。如果數據的字節長度爲奇數,則在數據尾部補一個字節的0以湊成偶數。用反碼算數運算把所有16位字相加後,然後再對和取反碼,便得到校驗和。

  • 在接收方,將收到的數據報(包括校驗和字段),將所有16位字再使用反碼算數運算相加一次,將得到的和取反,即得出校驗和的計算結果。如果數據報在傳輸過程中沒有任何變化,則此結果必爲0,於是就保留這個數據報。否則即認爲出差錯,並將此數據報丟棄。

舉例

“A,B,C,…,Y,Z”分別表示一系列8位組,用[A,B]這樣形式的字節組來表示A*256+B的整數,那麼該字節序列的反碼和就可以通過以下兩種表達式之一給出:

[A,B] +’ [C,D] +’ … +’ [Y,Z]

[A,B] +’ [C,D] +’ … +’ [Z,0]

其中,+’ 表示反碼算數運算相加,第一個公式適用於偶數個字節的校驗和,第二個公式適用於計算奇數個字節的校驗和。

原理:

1、校驗和的計算:將緩衝區的數據中挨個數累加(X),然後取反輸出(~X)。

2、校驗:將緩衝區的數據和校驗和(X)一起求校驗和,累加和(Y(及取反輸出(Y)。Y =緩衝區的數據累加(X(+校驗和(X)=0XFFFF。Y=0。所以當結果爲0,說明數據傳輸沒問題。

如果校驗和計算時高16位(XH)不等於零,(XH)+(XL)= Z,新校驗和爲~Z。 校驗時,再次求校驗和 :先求和(XH)*2^16 +(XL)+ ~Z= (XH)*2^16 +(XL)+ 0XFFFF - Z =(XH)*2^16+(0XFFFF -(XH))=Y.YH=XH,YL=(0XFFFF -(XH),YH+YL=0XFFFF.

程序截圖

在這裏插入圖片描述

項目代碼下載(java實現)

點擊下載項目代碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章