数据校验之Checksum算法
校驗和(Checksum)是網絡協議使用的數據錯誤檢測方法,并且被認為比LRC(縱向冗余校驗,Longitudinal Redundancy Check,LRC),VRC和CRC(循環冗余校驗(Cyclic Redundancy Codes,CRC))更可靠。此方法在發送方使用校驗和生成器,在接收方使用校驗和校驗器。
在發送方,數據由校驗和生成器分為n位長度的相等子單元。該位通常為16位長度。然后使用一個稱贊方法將這些子單元加在一起。該和為n位。然后對得到的位進行補充。這個稱為校驗和的補充和被附加到原始數據單元的末尾,然后被發送到接收器。
?
?
接收器在接收到數據+校驗和之后,將其傳遞給校驗和檢查器。校驗和檢查器將此數據單元劃分為多個等長的子單元,并將所有這些子單元相加。這些子單元還包含校驗和作為子單元之一。然后對結果位進行補碼。如果補余結果為零,則表示數據沒有錯誤。如果結果不為零,則意味著數據包含錯誤,并且Receiver拒絕該錯誤。
?
?
接收器在接收到數據+校驗和之后,將其傳遞給校驗和檢查器。校驗和檢查器將此數據單元劃分為多個等長的子單元,并將所有這些子單元相加。這些子單元還包含校驗和作為子單元之一。然后對結果位進行補碼。如果補余結果為零,則表示數據沒有錯誤。如果結果不為零,則意味著數據包含錯誤,并且Receiver拒絕該錯誤。
示例–
如果要發送的數據單元是10101001 00111001,則在發送方站點和接收方站點使用以下過程。
發件人網站:
10101001 subunit 1 00111001 subunit 2 11100010 sum (using 1s complement) 00011101 checksum (complement of sum)
傳輸到接收器的數據是–
接收者網站:
10101001 subunit 1 00111001 subunit 2 00011101 checksum 11111111 sum 00000000 sum's complementResult is zero, it means no error.優點:
校驗和可檢測所有涉及奇數位數的錯誤以及涉及偶數位數的錯誤。
缺點:
主要問題是,如果一個子單元的一個或多個位被損壞,一個子單元的一個或多個對應位被損壞,并且第二個子單元中一個或多個相反值的對應位也被損壞,則錯誤將無法檢測到。這是因為這些列的總和保持不變。
示例–
如果與校驗和一起發送的數據是10101001 0011100100011101。但是在目的地接收的數據是0?0101001?1?0111001 00011101。
接收者網站:
00101001 1st bit of subunit 1 is damaged 10111001 1st bit of subunit 2 is damaged 00011101 checksum 11111111 sum 00000000 Ok 1's complement盡管數據已損壞,但未檢測到錯誤。
?
參考:
https://www.geeksforgeeks.org/error-detection-code-checksum/
https://blog.csdn.net/ZCShouCSDN/article/details/94131769
總結
以上是生活随笔為你收集整理的数据校验之Checksum算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 核心频率个加速频率_【硬件资讯】AMD:
- 下一篇: Python语法--Mooc七月