求真百科歡迎當事人提供第一手真實資料,洗刷冤屈,終結網路霸凌。

校驗和檢視原始碼討論檢視歷史

事實揭露 揭密真相
前往: 導覽搜尋
校驗和
圖片來自優酷

校驗目的地數據項和的加密技術

檢驗和(checksum),在數據處理和數據通信領域中,用於校驗目的地一組數據項的和。它通常是以十六進制為數制表示的形式。如果校驗和的數值超過十六進制的FF,也就是255. 就要求其補碼作為校驗和。通常用來在通信中,尤其是遠距離通信中保證數據的完整性和準確性。

校驗和簡介

這些數據項可以是數字或在計算檢驗的過程中看作數字的其它字符串。校驗和(checksum)是指傳輸位數的累加,當傳輸結束時,接收者可以根據這個數值判斷是否接到了所有的數據。如果數值匹配,那麼說明傳送已經完成。TCP和UDP傳輸層都提供了一個校驗和與驗證總數是否匹配的服務功能。 [1]

它通常是以十六進制為數制表示的形式,如:

十六進制串:

1

0102030405060708

的校驗和是: 24 (十六進制)

如果校驗和的數值超過十六進制的FF,也就是255,就要求其補碼作為校驗和。

通常用來在通信中,尤其是遠距離通信中保證數據的完整性和準確性。

步驟

發送方生成檢驗和

1.將發送的進行檢驗和運算的數據分成若干個16位的位串,每個位串看成一個二進制數,這裡並不管字符串代表什麼,是整數、浮點數還是位圖都無所謂。

2.將IP、UDP或TCP的PDU首部中的檢驗和字段置為0,該字段也參與檢驗和運算。

3.對這些16位的二進制數進行1的補碼和(one's complement sum)運算,累加的結果再取反碼即生成了檢驗碼。將檢驗碼放入檢驗和字段中。

其中1的補碼和運算,即帶循環進位(end round carry)的加法,最高位有進位應循環進到最低位。反碼即二進制各位取反,如0111的反碼為1000。

接收方校驗檢驗和

1.接收方將接收的數據(包括檢驗和字段)按發送方的同樣的方法進行1的補碼和運算,累加的結果再取反碼。

2.校驗,如果上步的結果為0,表示傳輸正確;否則,說明傳輸有差錯。 檢驗和算法示例

圖5.7所示為一個只包含4個16位二進制數進行檢驗和運算的簡單例子。圖5.7(a)所示為發送方的運算,①、②、③是3個數據,④是檢驗和,先置0,也參加檢驗和運算。⑤是它們的一的補碼和,⑥是⑤的反碼。發送方將⑥放到檢驗和字段和數據一起發出。圖5.7(b)所示為接收方的運算,如果沒有傳輸差錯,最後結果應為0。

表示

如:

十六進制串: 0102030405060708

的校驗和是: 24 (十六進制)

IP首部校驗和計算

IP首部校驗和字段是根據IP首部計算的校驗和碼,它不對首部後面的數據進行計算。ICMP、IGMP、UDP和TCP在它們各自的首部中均含有同時覆蓋首部和數據校驗和碼。 為了計算一份數據報的IP檢驗和,首先把檢驗和字段置為0。然後,對首部中每個16bit進行二進制反碼求和(整個首部看成是由一串16bit的字組成),結果存在檢驗和字段中。當收到一份IP數據報後,同樣對首部中每個16bit進行二進制反碼的求和。由於接收方在計算過程中包含了發送方存在首部中的檢驗和,因此,如果首部在傳輸過程中沒有發生任何差錯,那麼接收方計算的結果應該為全1。如果結果不是全1(即檢驗和錯誤),那麼IP就丟棄收到的數據報。但是不生成差錯報文,由上層去發現丟失的數據報並進行重傳。

TCP和UDP校驗和計算

校驗和還包含一個96位的偽首標,理論上它位於TCP首標的前面。這個偽首標包含了源地址、目的地址、協議和TCP長度等字段,這使得TCP能夠防止出現路由選擇錯誤的數據段。這些信息由網際協議(IP)承載,通過TCP/網絡接口,在IP上運行的TCP調用參數或者結果中傳遞。

偽首部並非UDP數據報中實際的有效成分。偽首部是一個虛擬的數據結構,其中的信息是從數據報所在IP分組頭的分組頭中提取的,既不向下傳送也不向上遞交,而僅僅是為計算校驗和。

這樣的校驗和,既校驗了UDP用戶數據的源端口號和目的端口號以及UDP用戶數據報的數據部分,又檢驗了IP數據報的源IP地址和目的地址。(偽報頭保證UDP和TCP數據單元到達正確的目的地址。因此,偽報頭中包含IP地址並且作為計算校驗和需要考慮的一部分。最終目的端根據偽報頭和數據單元計算校驗和以驗證通信數據在傳輸過程中沒有改變而且到達了正確的目的地址。)

文件校驗和 在Windows中,exe校驗和是沒有必要的,因為系統會負責檢查,錯誤的exe將無法運行。但是sys文件和關鍵的dll文件是被要求要校驗和的。

視頻

TCP和UDP校驗和

[1]

參考文獻