什麼是crc校驗?
crc即迴圈冗餘校驗碼:是資料通訊領域中最常用的一種查錯校驗碼,其特徵是資訊字段和校驗欄位的長度可以任意選定。迴圈冗餘檢查(crc)是一種資料傳輸檢錯功能,對資料進行多項式計算,並將得到的結果附在幀的後面,接收裝置也執行類似的演算法,以保證資料傳輸的正確性和完整性。
crc校驗原理:
其根本思想就是現在要傳送的幀後面附加乙個數(這個就是用來校驗的校驗碼,但要注意,這裡的數也是二進位制序列的,下同),生成乙個新幀傳送給接收端。當然,這個附加的數不是隨意的,它要使所生成的新幀能與傳送端和接收端共同選定的某個特定數整除(注意,這裡不是直接採用二進位制除法,而是採用一種稱之為「模2除法」)。到達接收端後,再把接收到的新幀除以(同樣採用「模2除法」)這個選定的除數。因為在傳送端傳送資料幀之前就已通過附加乙個數,做了「去餘」處理(也就已經能整除了),所以結果應該是沒有餘數。如果有餘數,則表明該幀在傳輸過程**現了差錯。
crc校驗步驟:
crc校驗中有兩個關鍵點:
一:是預先確定乙個傳送端和接收端都用來作為除數的二進位制位元串(或多項式),可以隨機選擇,也可以使用國際標準,但是最高位和最低位必須是1;
二:是把原始幀與上面計算出的除數進行模2除法運算,計算出crc碼。
具體步驟:
1.選擇合適的除數
2.看選定除數的二進位制位數,然後再要傳送的資料幀上面加上這個位數-1位的0,然後用新生成的幀以模2除法的方式除上面的除數,得到的餘數就是該幀的crc校驗碼。注意,餘數的位數一定只比除數字數少一位,也就是crc校驗碼位數比除數字數少一位,如果前面位是0也不能省略。
3.將計算出來的crc校驗碼附加在原資料幀後面,構建成乙個新的資料幀進行傳送;最後接收端以模2除法方式除以前面選擇的餘數,如果沒有餘數,則說明資料幀在傳輸過程中沒有出錯。
例:crc生成多項式(選擇的除數):g(x) = x^4+ x^3+1, 要求出二進位制序列10110011(原始幀)的crc校驗碼。
1.除數的二進位制序列11001
2.除數是5位,則在資料幀後面加5-1位0,則資料幀變為101100110000,然後使用模2除法除以除數11001,得到餘數。【補幾位0與x的最高次冪相同,模除就是進行異或】
3.將計算出來的crc校驗碼新增到原始幀的後面,真正的資料幀為101100110100,再把這個資料幀傳送到接收端。
4.接收端收到資料幀後,用上面選定的除數,用模2除法除去,驗證餘數是否為0,如果為0,則說明資料幀沒有出錯。
生成多項式g(x):除數,多項式的位寬(width,簡記為w),這個位寬不是多項式對應的二進位制數的位數,而是位數減1.
另外一點,多項式表示和二進位制表示都很繁瑣,交流起來不方便,因此,文獻中多用16進製制簡寫法來表示,因為生成多項式的最高位肯定為1,最高位的位置由位寬可知,故在簡記式中,將最高的1統一去掉了,如crc32的生成多項式簡記為04c11db7實際上表示的是104c11db7。當然,這樣簡記除了方便外,在程式設計計算時也有它的用處。所以在第一章中提到的在被除數後增加0的位數就是位寬,計算出的crc校驗值長度也是位寬。
資訊/資料 多項式c(x):原始幀多項式
c(x)左移r位:c(x)*2^r
校驗碼:c(x)*2^r 除以 g(x) 所得的餘數
CRC校驗原理及步驟
什麼是crc校驗?crc即迴圈冗餘校驗碼 是資料通訊領域中最常用的一種查錯校驗碼,其特徵是資訊字段和校驗欄位的長度可以任意選定。迴圈冗餘檢查 crc 是一種資料傳輸檢錯功能,對資料進行多項式計算,並將得到的結果附在幀的後面,接收裝置也執行類似的演算法,以保證資料傳輸的正確性和完整性。crc校驗原理 ...
CRC校驗原理及步驟
什麼是crc校驗?crc即迴圈冗餘校驗碼 是資料通訊領域中最常用的一種查錯校驗碼,其特徵是資訊字段和校驗欄位的長度可以任意選定。迴圈冗餘檢查 crc 是一種資料傳輸檢錯功能,對資料進行多項式計算,並將得到的結果附在幀的後面,接收裝置也執行類似的演算法,以保證資料傳輸的正確性和完整性。crc校驗原理 ...
CRC校驗原理及步驟
什麼是crc校驗?crc即迴圈冗餘校驗碼 是資料通訊領域中最常用的一種查錯校驗碼,其特徵是資訊字段和校驗欄位的長度可以任意選定。迴圈冗餘檢查 crc 是一種資料傳輸檢錯功能,對資料進行多項式計算,並將得到的結果附在幀的後面,接收裝置也執行類似的演算法,以保證資料傳輸的正確性和完整性。crc校驗原理 ...