CRC校驗

一,什麼是crc校驗?
crc校驗全稱爲:循環冗餘校驗碼(Cyclic Redundancy Check),它是用來校驗數據在傳輸過程中是否發生改變的。其原理爲:在一個p位二進制數據序列之後附加一個r位二進制檢驗碼(序列),從而構成一個總長爲n=p+r位的二進制序列;附加在數據序列之後的這個檢驗碼與數據序列的內容之間存在着某種特定的關係。如果因干擾等原因使數據序列中的某一位或某些位發生錯誤,這種特定關係就會被破壞。因此,通過檢查這一關係,就可以實現對數據正確性的檢驗。
二,如何進行校驗?
首先我們來學習幾個概念:
1,幀檢驗序列FCS(Frame Check Sequence)
主要功能:爲了校驗數據是否正常而多加入了幾位數據。
2,模二除
所謂的模二除,就是指不帶借位的除法,具體請看下面的例子:

這裏寫圖片描述

如圖所示便爲模二除,它與普通除法的區別便是不借位,即滿足下面的運算規則:
(1)0-1=1
(2)0-0=0
(3)1-0=1
(4)1-1=0
3,生成多項式(generator polynomial)
當進行CRC檢驗時,發送方與接收方需要事先約定一個除數,而該除數使用生成多項式產生,一般記作G(x)。請看常見的生成多項式:
G(X) = X^4 + X^3 + 1
G(X)=X^8+X^5+X^4+1
G(X)=X^16+X^15+X^5+1
G(X)=X^12+X^11+X^3+X^2+1
……
生成除數的位數爲生成多項式最高次數加1,相應的位數如果在相應的多項式中的相應次方是存在的則爲1,否則用0代替。
如: G(X) = X^4 + X^3 + 1 (位數從0開始算起)
則它的代表的除數有5位(0~4),x^4,x^3,1(x^0)存在,所以相應的位數爲1,其餘位爲0,即爲:
11001
G(X)=X^8+X^5+X^4+1
除數爲:100110001
G(X)=X^16+X^15+X^5+1
除數爲:11000000000100001
G(X)=X^12+X^11+X^3+X^2+1
除數爲:1100000001101
三,校驗碼的生成
如果生成的除數爲m(m>1)位,則最後的校驗碼就爲m-1位 。
如下所示:
若需要傳輸的數據爲:1101001001
生成多項式選擇:G(x)=X^4 + X^3 + 1
則除數爲:11001
開始生成:
1,首先在傳輸的數據後加上4個0(最後生成的校驗碼爲除數位數減1),即爲:11010010010000
2,以11010010010000爲被除數,以11001爲除數進行模二除,直到最後一位除不過爲止
3,過程
這裏寫圖片描述
4,經過計算可以得到需要的校驗碼爲:1001
5,將原始數據後面的四個0修改爲校驗碼即得:11010010011001

四,如何校檢數據呢?
當接收方收到發送的數據後,便用該數據除以雙方約定的除數,如果能夠整除便說明數據無誤,如果不爲0則傳輸過程出現了錯誤
校檢結果如下:
這裏寫圖片描述
由於我們直接使用了對的數據所以得到的餘數爲0,可如果將數據中的某一位,或某些位進行取反,結果又會怎樣呢?有興趣的童鞋可以進行嘗試一番,此處便不再贅言。

發佈了34 篇原創文章 · 獲贊 8 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章