1. 程式人生 > >資料鏈路層:迴圈冗餘檢驗CRC

資料鏈路層:迴圈冗餘檢驗CRC

在傳送端,先把資料劃分為組,假定每組 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 少一位 )。關於除數 P 下面還要介紹 。 M = 101001 ( 即 k = 6)。假定除數 P = 101 (即 n = 3)。經模 2 除法運算後的結果是: 商 Q = 110101,而餘數 R = 001。這個餘數 R 就作為冗餘碼拼接在資料 M 的後面傳送出去。這種為了進行檢錯而新增的冗餘碼常稱為幀檢驗序列 FCS (Frame Check Sequence )。因此加上 FCS 後傳送的幀是 101001001 ( 即 2^nM+FCS ) 共有 ( k + n ) 位。
在接收端把接收端的資料以幀為單位進行 CRC 檢驗: 把收到的每一個幀都除以同樣的除數 P ( 模 2 運算),然後檢查得到的餘數R。
如果在傳輸過程中無差錯,那麼經過 CRC 檢驗後得出的餘數 R 肯定是 0。