CRC (Cyclic Redundancy Check) 循環冗餘校驗


CRC 是 Cyclic Redundancy Check (循環冗餘校驗) 的縮寫, 是一種具有檢錯 糾錯能力的散列校驗方式。

CRC 利用除法及餘數 (能被某一特定數整除), 用來檢測 (或校驗) 數據傳輸 (或保存後) 可能齣現的錯誤。 CRC 會産生一個簡短且位數固定的校驗碼。

著名的通訊協議 X.25 的 FCS (幀檢錯序列) 采用的是 CRC-CCITT, WinRAR NERO ARJ LHA 等壓縮工具軟件采用的是 CRC32, 磁盤驅動器的讀寫采用瞭 CRC16, 通用圖像存儲格式 GIF TIFF 等也采用 CRC 作為檢錯手段。

數據傳輸


在數據傳輸過程中, 無論設計的傳輸係統再怎麼完美, 也會存在差錯, 這種差錯可能導緻在鏈路上傳輸的一個或多個幀被破壞 (如 0 變為 1,或 1 變為 0), 接受方從而接收到錯誤數據。

為盡量提高接受方收到數據的正確率, 在接收方接收數據之前需對數據進行差錯檢測, 當且僅當檢測結果正確時, 接收方纔正式收下數據。

檢測的方式有多種, 常見的有: 奇偶校驗 (沒有糾錯能力) 海明校驗 (沒有糾錯能力) 校驗和校驗 因特網校驗 循環冗餘校驗 等。

循環冗餘校驗


CRC (循環冗餘校驗) 通過某種數學運算來建立數據位和校驗位的約定關係, 校驗通信鏈路上數字傳輸的準確性。

發送方使用公式算齣被傳送數據所含信息的一個值, 並將此值附在被傳送數據後, 接收方對同一數據使用相同公式,計算得到相同結果。 若這兩個 CRC 結果不一緻, 說明傳輸過程中齣現瞭差錯, 接收方可要求發送方重新發送該數據。

CRC 在網絡通信中, 相對於其它校驗方法有一定優勢。 CRC 可高比例的糾正信息傳輸過程中的錯誤, 可在極短時間內完成數據校驗碼的計算, 並迅速完成糾錯過程。 CRC 通過數據包自動重發的方式, 使得通信速度大幅提高, 對通信效率和安全提供瞭保障。

從檢錯能力來看, CRC 所不能發現的錯誤的幾率僅為 0.0047% 以下。 從檢錯的正確率 速度 成本等方麵, CRC 比奇偶校驗等校驗方式具有優勢。 因而,CRC 為信息通信領域極為普遍的校驗方式。 由於 CRC 檢錯能力強, 成本低, 因此被廣泛用於編碼器和電路檢測中。

另請參閱:

版權聲明: 本文為獨傢原創稿件,版權歸 樂數軟件 ,未經許可不得轉載。

CRC 版本

名稱 多項式 錶示法 應用舉例 備注
CRC-8 X 8 +X 2 +X+1 0X107
CRC-12 X 12 +X 11 +X 3 +X 2 +X+1 0X180F telecom systems
CRC-16 X 16 +X 15 +X 2 +1 0X18005 Bisync, Modbus, USB, ANSI X3.28, SIA DC-07 又稱 CRC-16 或 CRC-16-ANSI
CRC-CCITT X 16 +X 12 +X 5 +1 0X11021 ISO HDLC, ITU X.25, V.34/V.41/V.42, PPP-FCS
CRC-32 X 32 +X 26 +X 23 +X 22 +X 16 +X 12 +X 11 +X 10 +X 8 +X 7 +X 5 +X 4 +X 2 +X+1 0x104C11DB7 ZIP, RAR, IEEE 802 LAN/FDDI, IEEE 1394, PPP-FCS
CRC-32C X 32 +X 28 +X 27 +X 26 +X 25 +X 23 +X 22 +X 20 +X 19 +X 18 +X 14 +X 13 +X 11 +X 10 +X 9 +X 8 +X 6 +1 0x11EDC6F41 iSCSI, SCTP, G.hn payload, SSE4.2, Btrfs, ext4, Ceph
CRC-64