原文轉載自:https://blog.csdn.net/hm108106/article/details/73332465
1.CRC
CRC循環冗余校驗碼是數據通信中的一種查錯校驗碼。
循環冗余檢查對數據進行多項式計算,將計算結果附加在幀后面,接收數據的設備執行模2運算,保證數據傳輸的正確性和完整性。
2.模2除法
①不向上借位,只要除數和被除數的位數相同就可進行計算,不比較它們的大小;
②模2運算中用到了模2減法,與邏輯異或相似:
1-1=0, 1-0=1, 0-1=1 , 0-0=0,③例子:
3.CRC校驗的步驟
(1)選擇一個生成多項式,作為對接收的幀進行除法運算時的除數,生成多項式可以寫為二進制形式;
生成多項式的要求:
①最高位和最低位必須為1;
②當CRC碼的任何一位發生錯誤時,新幀除生成多項式后余數不為0;
③不同位發生錯誤時,余數應該是不同的;生成多項式轉化為二進制形式:
如x5+x3+x2+1,寫為二進制:101101(2)計算CRC校驗碼位數k=生成多項式位數-1,在要發送的數據幀后加k個0,除第一步用生成多項式轉化的二進制數(使用模2除法),得到的余數即為CRC校驗碼;
- 模2除時,余數的位數必須只比除數少一位,不能省略0
(3)把得到的校驗碼CRC加到原數據幀后,構成一個新數據幀發送到接收端,接收端將新幀除以之前選擇的除數(模2除法),如果沒有余數,則表明該數據幀在傳輸過程中沒有出錯,否則出錯;
4.CRC校驗例子:
假設CRC生成多項式G(X)=X5+X4+X+1,要發送的二進制數據幀為100101110,求CRC校驗碼:
①把生成多項式轉換為二進制數:110011;
②由生成多項式的位數為6可知,CRC校驗碼的位數為5,所以在數據幀后加5個0,變為10010111000000,將這個數使用模2除法除以生成多項式110011,得到余數即CRC校驗碼11010;
![]()
③用得到的CRC校驗碼替換掉數據幀中的5個0,形成新的幀10010111011010,將這個新幀發送給接收端;④接收端收到新幀后,用新幀除以上面的多項式110011(模2除法),如果余數為0,該數據幀在傳輸過程中沒有出錯,否則出錯;(經驗證余數為0)