1. 程式人生 > >迴圈冗餘校驗基本演算法

迴圈冗餘校驗基本演算法

也稱為多項式編碼,是鏈路層廣泛使用的更具糾錯能力的方法

基本思想: 將位串看成是係數為 0 或 1 的多項式。一個 k 位幀看作是一個 k-1 次多項式的係數列表,該多項式共有 k 項,從 xk-1 到 XO。這樣的多項式認為是 k-1 階多項式。高次(最左邊〉位是 xk-1 項的係數,接下來的位是 xk-2 項的係數,依此類推。

如, 110001 有 6 位,因此代表了一個有 6 項的多項式,其係數分別為 1 、 1 、 0、 0、 0 和 1 :即 1x5+ 1x4+0x3+0x2+0x1+1x0

多項式的算術運算遵守代數域理論規則,以 2 為模來完成。加法沒有進位,減法沒有借位。加法和減法都等同於異或。例如:

在這裡插入圖片描述

注意: 使用多項式編碼時,傳送方和接收方必須預先商定一個生成多項式 G(X),生成多項式的最高位和最低位係數必須是 1 。

計算 CRC 的演算法如下:

  1. 假設 G(x)的階為 r。在幀的低位端加上 r 個 0 位 , 使得該幀現在包含 m+r 位,對應多項式為 x’M(X)
  2. 利用模 2 除法,用對應於 G(x)的位串去除對應於 x、1(x)的位串。
  3. 利用模 2 減法,從對應於 x’M(x)的位串中減去餘數(總是小於等於 r 位)。結果就是將被傳輸的帶校驗和的幀。它的多項式不妨設為 T(X)

下圖展示了採用生成多項式為 G(x)=x4+x+1 計算幀 1101011111 校驗和的情形。
在這裡插入圖片描述

顯然, T(x)可以被 G(x)除盡(模 2)。在任何一種除法中,如果將被除數減掉餘數,則剩下的差值一定可以被除數除盡。例如,在十進位制中,如果 210 278 被 10 941 除,則餘數為 2399。從 210 278 中減去 .2399,得到 207 879,它可以被 10 941 除盡。

問題: 商數的每一位是怎麼來的?
解答: 看每一次除的第一位是0還是1

另外一個例子,對於101110101,採用110101作為生成多項式,餘數為00011
在這裡插入圖片描述

要注意的是,CRC迴圈冗餘校驗是硬體完成的,對於上層軟體或使用者來說是感覺不到的。因此,傳送端對出錯的資料幀進行重傳是自動進行的,這種差錯控制體質常簡稱為ARQ(自動重傳請求/自動請求重傳)