常见的数据校验方式(奇偶,累加,CRC校验)
校驗就是在通訊數據的后面附加一些信息,通過這些附加的信息來判斷接收到的數據是否和發送出去的數據相同,數據是否準確無誤的發送到接收端。常見的校驗方式有奇偶校驗,累加校驗,CRC校驗(多項式校驗)。
奇偶校驗
通過傳輸數據(二進制)中“1”的個數是奇數還是偶數作為判斷依據,分為奇校驗和偶校驗。
例:a.若發送數據為8b’0000_0011時,數據中有兩個1,則校驗位為1,實際發送數據為8’b0000_0011_1,保證發送數據中1的個數為奇數;b.若發送數據為8’b0000_0111時,數據中有3個1,則校驗位為0,實際發送數據不變,8’b0000_0111_0;偶校驗與奇校驗類似。
局限性:奇偶校驗能檢測傳輸數據中奇數位錯誤,不能檢測偶數位錯誤。奇偶校驗只能檢測出誤,無法確定錯誤發生具體是哪一位。
累加校驗
累加和校驗的實現方式有多重,最常用的一種是在一次通訊數據包的最后加入一個字節的校驗數據。這個字節內容為數據包中全部數據的忽略進位的按字節累加和。
比如要傳輸的數據為:1,2,3;
加上校驗和后的數據為:1,2,3,6
6為前三個字節的校驗和,接收方收到全部數據后對前三個數據進行同樣的累加計算,如果累加后與最后一個字節相同的話就認為傳輸數據無誤。
局限性:累加和校驗實現簡單,被廣泛應用。這種方式的檢錯能力一般,對單字節校驗和有約1/256的誤判率。
CRC校驗
CRC校驗即循環冗余校驗(Cyclic Redundancy Check),是一種基于數據計算的校驗碼。發送數據被看做是一個多項式的系數,假設發送數據為bn-1bn-2…b1b0(其中bi為0或1),則其對于的多項式為:bn-1Xn-1+bn-2Xn-2+…b1X+b0。例如數據1101對應多項式為X3+X2+1。CRC校驗為在k位信息碼后再拼接r位的校驗碼,報文長度為n位,因此這種編碼又叫作(n,k)碼。
CRC校驗碼過程
1.要發送的k位數據對應一個k-1次的多項式K(x)。
2.發送方和接收方約定一個生成多項式G(x),設該生產多項式的最高次冪為r(多項式的最高次冪比多項式位數少1)。
3.在發送數據的末尾添加r個0,則其對應的多項式M(x)=XrK(x)(發送數據左移r位)。
4.用M(x)除以G(x),采用模2除法*,得到商Q(x),余式R(x),則M(x)=Q(x)*G(x)+R(x)。
5.令T(x)=M(x)+R(x),T(x)所對應的數據是在原數據塊的末尾加上余式對應的數據。
6.發送端發送T(x)。
7.接收端收到數據T(x),將T’(x)除以G(x),若余式為0,則認為傳輸過程中沒有發生錯誤,接收到的數據與發送的數據相同。反之,則數據發送過程中出現錯誤。
CRC校驗原理
對于一個給定的(n,k)碼,可以證明,存在一個最高次冪為n=k+r的多項式M(x),存在且僅存在一個r次多項式G(x),使得M(x)=xr*K(x)+G(x)。(即對于指定長度的信息碼和CRC校驗碼,生成碼G(x)具有唯一性)。發送方通過指定G(x)產生r位的CRC校驗碼,接收方則通過該G(x)來驗證收到的報文碼的CRC校驗碼是否為0。假設發送信息的多項式C(x)表示,將C(x)左移r位,則可以表示為C(x)*2r,這樣C(x)的右邊就會空出r位校驗碼的位置,做模2除,C(x)*2r/G(x),得到的余數R就是校驗碼,發送數據的CRC編碼是C(x)*2r+R,驗證接收到的報文編碼是否正確,依然是使用模2除法,C(x)*2r+R/G(x)。
模2減法
相對于普通的算術減法,主要區別在模2減法不做錯位處理。即:0-0=0;0-1=1;1-0=1;1-1=0;可以看出模2減法與相同位異或進行運算結果相同。補:模2加法結果同樣是相應位異或運算。
模2除法
相對于普通的算法除法,主要區別在于模2除法即不向上位錯位,也不比較除數和被除數相同為數值的大小,只要以相同位數進行相除即可??蓞⒖枷旅胬印?/p>
?
CRC生成多項式滿足條件
1.生成多項式的最高位和最低位必須為1。
2.當被傳輸信息(CRC碼)任何一位發送錯誤時,被生成多項式做模2除后,應該使余數不為0。
3.不同位發送錯誤時,應該使余數不同。
常見的生成多項式:
CRC-12(城域網):G(x)=X12+X11+X3+X2+X+1
CRC-16(廣域網):G(x)=X16+X15+X2+1
CRC-CCITT:?????? G(x)=X16+X12+X5+1
CRC-32(局域網):G(x)=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X+1
CRC校驗檢錯能力/應用
檢錯能力:全部單個bit錯誤,全部離散的二位錯,全部奇數個錯誤,全部長度小于或等于K的突發錯。(K為生成多項式的最高冪次)
以1-(1/2)K-1的概率檢出長度為K+1位的突發錯。
應用:因CRC檢錯能力強,開銷小,易于用編碼器及檢測電路實現,從性能和開銷上考慮均優奇偶校驗和累加校驗。在數據存儲和數據通訊領域,多用CRC校驗。
參考資料:
計算機網絡——循環冗余校驗碼_何處秋風悲畫扇的博客-CSDN博客_crc校驗碼
CRC校驗碼原理、實例、手動計算 - 步孤天 - 博客園
一文講透CRC校驗碼-附贈C語言實例 - 云+社區 - 騰訊云
CRC校驗詳解(附代碼示例)_fengwang0301的博客-CSDN博客_crc校驗
總結
以上是生活随笔為你收集整理的常见的数据校验方式(奇偶,累加,CRC校验)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BUG之路2--ubuntu安装uwsg
- 下一篇: 金山网盾3.6beta2新增下载安全防御