CRC循環冗餘檢驗

現實的通信鏈路都不會是理想的。比特在傳輸過程中可能會產生差錯:1可能變成0,而0也可能變成1,這叫做比特差錯

CRC循環冗餘檢驗:是一種根據網絡數據包或電腦文件等數據產生簡短固定位數校驗碼的一種散列函數,主要用來檢測或校驗數據傳輸或者保存後可能出現的錯誤。它是利用除法及餘數的原理來作錯誤偵測的。

以上CRC的概念來自百度百科。

CRC的具體操作如下:

在發送端,在數據M後面添加供差錯檢測的N位冗餘碼,然後構成一個幀發送出去。

在接收端,把接收的數據以幀爲單位進行CRC校驗,即把收到的每一個幀都除以同樣的除數P,然後檢查餘數R

(1)如果得到的餘數R=0,則判定這個幀沒有差錯,就接受;

(2)如果餘數R != 0,則判定這個幀有差錯,就丟棄。


下面重點是N位冗餘碼怎麼獲得。

用二進制的模2運算(進行加法時不進位)進行2的N次方乘M的運算,這相當於在M後面添加N個0。得到的(K+N)位的數除以收發雙方事先商定的長度爲(N+1)位的除數P,得到商Q而餘數是R。

公式:


例如:M=101001,假如除數P=1101,經過模2除法運算後的結果是:Q=110101,餘數P=001,R要拼接在M的後面發送出去,即發送的幀爲101001001。

如圖:


接受到幀之後進行同樣的操作,然後進行上面說過的餘數R判斷。



如此CRC就完成了,此外還要強調一點:

在數據鏈路層若僅僅使用循環冗餘檢驗CRC差錯檢測技術,則只能做到對幀的無差錯接受(因爲錯的被丟棄的了,所有認爲收到的幀都是無差錯的)。

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