二、 工作原理
循環冗餘校驗同其他差錯檢測方式一樣,通過在要傳輸的k比特數據D後添加(n-k)比特冗餘位(又稱幀檢驗序列,Frame Check Sequence,FCS)F形成n比特的傳輸幀T,再將其發送出去。
如何生成比特冗餘位呢?核心原理就一種,用傳輸的k比特數據除以某一個被除序列,得到的餘序列(正常的順序是減去餘序列,但是因爲模2減法和模2加法相同,減去餘序列等同於加上餘序列)即爲比特冗餘位。這樣,發送的完整序列除以被除序列就爲0,因爲被除序列接收端也是知道的,所以接收端用用接收到的完整序列除以被除序列,爲0判斷爲正確,不爲0判斷爲錯誤。
有2種方法介紹比特冗餘位的生成過程,第一種是直接法,第二種是多項式法。
直接法:與十進制除法過程一樣,但用的是模2除法,模2除法與算術除法類似,但每一位除的結果不影響其它位,不借位, 實際上就是異或。假設4比特傳輸數據爲1111,被除序列爲1101,除法如下圖所示,得到的餘序列爲111,最終發送序列爲1111111。
多項式法:把傳輸的k比特數據、被除序列和餘序列均看成多項式的形式,用多項式除法得到餘式多項式r(x)。被除序列爲生成多項式g(x)。傳輸的k比特數據爲信息序列多項式M(x)。
1 M(x)添加(n-k)個0,即x^(n-k)M(x);
2 x^(n-k)M(x)模2除以g(x),得到商多項式q(x),餘式多項式r(x),即
x^(n-k)M(x) + r(x) = q(x) g(x)
3 從x^(n-k)M(x)中減去r(x),即爲發送多項式,因爲模2減法和模2加法相同,所以r(x)即爲比特冗餘位對應的多項式。
三、類型
生成多項式g(x)理論上可以任意設置,但不同的設置有不同的性能,需要滿足:
- 最高位和最低位都是1
- 當被傳送信息任何一位發生錯誤時,P(X)不被T(X)整除
- 不同位發生錯誤時,餘數應該不同
- 對餘數繼續做模二除法時,應該使餘數循環
常用標準CRC生成多項式如下表:
名稱 生成多項式 簡記式 標準引用
- CRC-4 x4+x+1 3 ITU G.704
- CRC-8 x8+x5+x4+1 0x31
- CRC-8 x8+x2+x1+1 0x07
- CRC-8 x8+x6+x4+x3+x2+x1 0x5E
- CRC-12 x12+x11+x3+x+1 80F
- CRC-16 x16+x15+x2+1 8005 IBM SDLC
- CRC16-CCITT x16+x12+x5+1 1021 ISO HDLC, ITU X.25, V.34/V.41/V.42, PPP-FCS
- CRC-32 x32+x26+x23+...+x2+x+1 04C11DB7 ZIP, RAR, IEEE 802 LAN/FDDI, IEEE 1394, PPP-FCS
- CRC-32c x32+x28+x27+...+x8+x6+1 1EDC6F41 SCTP