CRC即迴圈 冗餘校正碼:是資料通訊領域中最常用的一種差錯校正碼,其特徵是資訊欄位和校正欄位的長度可以任意選定。
CRC校正公用程式庫在資料存放區和資料通訊領域,為了保證資料的準確,就不得不採用檢錯的手段.
下面我們通過一個簡單的例子來說明循環冗餘檢查的原理:
在發送端,先把資料劃分為組,假定每組k個位元(也就是每組K為)。現假定待傳送的資料M = 101001(k=6).CRC運算就是在資料M的後面添加供差錯檢測用的n位冗餘碼,然後構成以一個幀發送出去,一共發送(k+n)位。在所要發送的資料後面增加n位的冗餘碼,雖然增大了資料轉送的開銷,但卻可以進行差錯檢測。
這n位冗餘碼可用以下方法得出。用二進位的模2運算進行2^n乘M的運算,這相當於在M後面添加n個0.得到的(k+n)位的數除以收發雙方事先商定的長度為(n+1)位的除數P ,得出商是Q而餘數是R(n位,比P少一位)。在下面的例子中M=101001.假定除數P=1101(即n=3).經模2除法運算後的結果:商Q=110101(這個商並沒有什麼用),而餘數R=001. 這個餘數R作為冗餘碼拼接在資料M的後面發送出去。這種為了進行檢錯而添加的冗餘碼常稱為幀檢驗序列FCS。因此,加上FCS後發送的幀是101001001,共有(k+n)位。
CRC是一種檢錯方法,而FCS是添加在資料後面的冗餘碼。
在接收端把接收到的資料以幀為單位進行CRC檢驗:把收到的每一個幀都除以同樣的除數P(模2運算),然後檢查得到餘數R。如果在傳輸過程中無差錯,那麼經過CRC檢驗後得出的餘數是R肯定是0.但如果出現誤碼,那麼餘數R仍等於0的機率是非常小的。
總之,在接收端對收到的每一幀經過CRC檢驗後,有兩種情況:
1)、若得出的餘數R=0,則判定這個幀沒有錯,接受;
2)、若餘數R。=0,則判定這個幀有差錯,就丟棄。
一種較方便的方法是用多項式來表示循環冗餘檢查過程。
從以上的討論可以看出,如果我們在傳輸資料時不以幀為單位來傳送,那麼就無法加入冗餘碼進行差錯檢驗。因此,如果要在資料連結層進行差錯檢驗,就必須把資料劃分為幀,每一幀都加上冗餘碼,一幀接一幀地傳送,然後在接收方逐幀進行差錯檢驗。
最後在強調一下,在資料連結層若僅僅使用循環冗餘檢查CRC差錯檢測技術,則只能做到對幀的無差錯接受,即“凡是接收端資料連結層接受的幀,我們都以非常接近與1的機率認為這些幀在傳輸過程中沒有產生差錯”。接收端丟棄的幀雖然曾收到了,但最終因為有差錯被丟棄,即沒有被接受。所以可以近似的認為:凡是被接收端資料連結層接受的幀均無差錯。