淺談CRC效驗

淺談CRC效驗

在網絡的信息的傳輸中,現實的通信鏈路都不會是理想的。這就是說,比特在傳輸過程中可能會產生差錯:1可能變爲0,而0也可能變爲1.這就是比特差錯。因此,爲了保證數據傳輸的可靠性,在計算機網絡傳輸數據時,必須採用差錯檢測措施。目前在數據鏈路層廣泛使用了循環冗餘檢驗CRC的檢錯技術。

CRC即循環冗餘校驗碼(Cyclic Redundancy Check[1] ):是數據通信領域中最常用的一種查錯校驗碼,其特徵是信息字段和校驗字段的長度可以任意選定。循環冗餘檢查(CRC)是一種數據傳輸檢錯功能,對數據進行多項式計算,並將得到的結果附在幀的後面,接收設備也執行類似的算法,以保證數據傳輸的正確性和完整性。

如何效驗:

在接收端吧接收到的數據以幀爲單位進行CRC檢驗:把收到的每一個幀都除以同樣的除數P(模2運算),然後檢查得到的餘數R。如果在傳輸過程中無差錯,那麼經過CRC檢驗得出的餘數R肯定是0。但如果出現誤碼,那麼餘數R仍等於0的概率是非常非常小的。需要強調的是,在數據鏈路層若僅僅使用循環冗餘檢驗CRC差錯檢測技術,則只能做到對幀的無差錯接收,即“凡是接收端數據鏈路層接受的幀,我們都能以非常接近於1的概率認爲這些幀在傳輸過程中沒有產生差錯”。接收端丟棄的真雖然曾收到了,但最終還認爲因爲有差錯被丟棄,即沒有接受。以上所述的可以近似的表述爲:凡是接收端數據鏈路層接受的幀均無差錯

CRC檢驗的基本思想是利用線性編碼理論,在發送端根據要傳送的k位二進制碼序列,以一定的規則產生一個檢驗碼r位(就是CRC碼),附在信息後面,構成一個新的二進制碼序列數共(k+r)位,最後發送出去。接收端根據同樣的規則校驗,以確定傳送中是否出錯。

接收端有兩種處理方式:

1、計算k位序列的CRC碼,與接收到的CRC比較,一致則接收正確。2、計算整個k+r位的CRC碼,若爲0,則接收正確。CRC碼有多種檢驗位數,8位、16位、32位等,原理相同。16位的CRC碼產生的規則是先將要發送的二進制序列數左移16位(即乘以2的16次方後),除以一個多項式,最後所得到的餘數就是CRC碼。求CRC碼所採用的是模2運算法則,即多項式除法中採用不帶借位的減法運算,運算等同於異或運算。

生成crc校驗碼:

例如:我們要生成序列1101011011的crc效驗碼:

要傳輸的數據爲:1101011011

除數設爲:10011

在計算前先將原始數據後面填上4個0:11010110110000

這裏寫圖片描述

由此我們知道生成crc校驗碼最關鍵的就是除數的選取;

生成多項式的選取是個很有難度的問題,如果選的不好,那麼檢出錯誤的概率就會低很多。好在這個問題已經被專家們研究了很長一段時間了,對於我們這些使用者來說,只要把現成的成果拿來用就行了。

最常用的幾種生成多項式如下:

CRC8=X8+X5+X4+X0

CRC-CCITT=X16+X12+X5+X0

CRC16=X16+X15+X2+X0

CRC12=X12+X11+X3+X2+X0

CRC32=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X1+X0

因此,如果我們要求所發數據的crc校驗碼,使用上面多項式即可。。。。

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