爲了保證數據傳輸的可靠性,在計算機網絡傳輸數據時,必須採用各類差錯檢驗措施,目前普遍使用的是循環冗餘(CRC)檢驗的檢錯技術。網絡
CRC簡介編碼
循環冗餘碼校驗 英文名稱爲Cyclical Redundancy Check,簡稱CRC,它是利用除法及餘數的原理來做錯誤偵測(Error Detecting)的。實際應用時,發送裝置計算出CRC值並隨數據一同發送給接收裝置,接收裝置對收到的數據從新計算CRC並與收到的CRC相比較, 若兩個CRC值不一樣,則說明數據通信出現錯誤spa
那麼其實CRC有比較多種,好比CRC1六、CRC32 ,爲何叫1六、32呢。在這裏並不是與位有和關係。而是由所肯定的多項式最高次冪肯定的。以下所示。理論上講冪次越高校驗效果越好。
CRC(12位) =X^12+X^11+X^3+X^2+X+1
CRC(16位) = X^16+X^15+X^2+1
CRC(CCITT) = X^16+X^12 +X^5+1
CRC(32位) = X^32+X^26+X^23+X^16+X^12+X^11+X^10+ X^8+X^7+X^5+X^4+X^2+X+1.net
循環冗餘校驗碼(CRC)的基本原理:計算機網絡
在K位信息碼後再拼接R位的校驗碼,整個編碼長度爲N位,所以,這種編碼又叫(N,K)碼。對於一個給定的(N,K)碼,能夠證實存在一個最高次冪爲N-K=R的多項式G(x)。根據G(x)能夠生成K位信息的校驗碼,而G(x)叫作這個CRC碼的生成多項式。
校驗碼的具體生成過程爲:假設發送信息用信息多項式C(X)表示,將C(x)左移R位,則可表示成C(x)*2R,這樣C(x)的右邊就會空出R位,這就是校驗碼的位置。經過C(x)*2R除以生成多項式G(x)獲得的餘數就是校驗碼。注意:這裏的除法採用的是模2除法 blog
栗子1:get
某循環冗餘碼(CRC)的生成多項式 G(x)=x^3+x^2+1,發送信息1111,求他的CRC碼,博客
以及是否能夠判斷接受的CRC碼 1111101 、1001011 是否出錯。效率
解析:原理
① G(x) = x^3+x^2+1 -->3次方表示第4位有值,以此類推, G(x) =1101 ;
② 發送的信息用C(x)表示,G(x)爲四位數,C(x)向左側移(4-1)位,用0補齊C(x) = 1111000;
③ 使用模2除法,C(x)/G(x) 得 1011餘111 ; 注:若是餘數是兩位數11,須要左側用0補滿3位,若是餘0,則爲 000
④ CRC碼即爲 發送的信息「1111」拼接模2餘數「111」,得1111111。
校驗接收的CRC碼 1111101 是否出錯:
1111101 模2除法除以 1101 得1011 餘 10;所以接受的CRC碼 1111101 是錯誤的;
1001011 模2除法除以 1101 得1111 餘 0 ;所以接受的CRC碼 1001011 是正確的;
通訊與網絡中經常使用的CRC
在數據通訊與網絡中,一般k至關大,由一千甚至數千數據位構成一幀,然後採 用CRC碼產生r位的校驗位。它只能檢測出錯誤,而不能糾正錯誤。
通常狀況下,r位生成多項式產生的CRC碼可檢測出全部的雙錯、奇數位錯和突發長度小於等於r的突發錯以及(1-2-(r-1))的突發長度爲r+1的突 發錯和(1-2-r)的突發長度大於r+1的突發錯 。例如,對上述r=16的狀況,就能檢測出全部突發長度小於等於16的突發錯以及99.997%的突發 長度爲17的突發錯和99.998%的突發長度大於17的突發錯。
因此CRC碼的檢錯能力仍是很強的。這裏,突發錯誤是指幾乎是連續發生的一串錯,突發長 度就是指從出錯的第一位到出錯的最後一位的長度(可是,中間並不必定每一位都錯)。
栗子2:
計算機中經常使用的一種檢錯碼是CRC,即 _A_ 碼。在進行編碼過程當中要使用 _B_ 運算。假設使用的生成多項式是 G(X)=X4+X3+X+1, 原始報文爲11001010101,則編碼後的報文爲 _C_ 。CRC碼 _D_ 的說法是正確的。
在無線電通訊中常採用它規定碼字長爲7位.而且其中總有且僅有3個「1」。這種碼的編碼效率爲_E_。
供選擇的答案:
A:① 水平垂直奇偶校驗 ② 循環求和 ③ 循環冗餘 ④正比率
B:① 模2除法 ②定點二進制除法 ③二-十進制除法 ④循環移位法
C:① 1100101010111 ② 110010101010011 ③ 110010101011100 ④ 110010101010101
D:① 可糾正一位差錯 ②可檢測全部偶數位錯
③ 可檢測全部小於校驗位長度的突發錯 ④可檢測全部小於、等於校驗位長度的突發錯
E:① 3/7 ② 4/7 ③ log23/log27 ④ (log235)/7
解:從前面有關CRC的論述中可得出: A:③ 循環冗餘 B:① 模2除法
C:G(x)=11011,C(x)=11001010101,C(x)*24÷G(x)=110010101010000÷11011 餘0011
獲得的CRC碼爲② 110010101010011
D:從前面有關通訊與網絡中經常使用的CRC的論述中可得出:④ 可檢測全部小於、等於校驗位長度的突發錯
E:定比碼又叫定重碼,是奇偶校驗的推廣。在定比碼中,奇數或偶數的性質保持不變,然而附加一種限制,每一個字中1的總數是固定的。隨用途之不一樣,定比碼要求的附加校驗位可能多於一個,但較之單一的奇偶校驗將增長更多的檢錯能力。
參考博客 https://blog.csdn.net/weizhengbo/article/details/75040495