Cyclic Redundancy Check (CRC)

CRC 是一種利用多項式除法偵測傳輸錯誤的機制。Sender 在資料後附上一段餘數,使得整個 bit string 能被雙方共知的 generator polynomial 整除;receiver 只要驗證整除性,就能判斷傳輸是否出錯。

Generator Polynomial

CRC 的數學基礎是選定一個 generator polynomial (sender 和 receiver 共享)。給定資料 的 degree ,可以寫出:

移項後得 ,表示 可以被 整除。Sender 送出的不是 ,而是末尾附上餘數的

Modulo-2 arithmetic 中,加法和減法都是 XOR,因此 是同一件事。

Sender

給定 generator polynomial(bit string 長度為 )和資料:

  1. 在資料末端補 個 0
  2. 用 modulo-2 binary division 除以 ,得到餘數 (modulo-2 division 與十進位長除法相同,只是把減法換成 XOR)
  3. 附在原始資料後面送出

)為例:

  1. 個 0,資料變為
  2. ,餘數為
  3. 送出

Receiver

Receiver 同樣持有 ,對收到的 bit string 做 modulo-2 division:

  • 餘數為 :傳輸正確
  • 餘數不為 :有 bit 被翻轉,傳輸出錯

承上例,receiver 收到 ,除以 後餘數為 ,判定正確。若資料在傳輸中第 4 bit 遭翻轉變成 ,餘數變為 ,偵測到錯誤。