在資料轉送的過程中,不可避免會出現差錯,為判斷一個資料區塊中是否存在傳輸錯誤,發送方可在資料區塊中加入一些冗餘資訊,使接收方可通過這些冗餘資訊判斷傳輸是否出錯,這些加入的冗餘資訊稱為差錯編碼。
差錯編碼分為檢錯碼和錯誤修正碼。
檢錯碼只能讓接收方判斷資料區塊是否有錯,但無法確認錯誤的位置,主要有同位碼和CRC迴圈冗餘碼。
錯誤修正碼不僅能發現錯誤,而且能糾正錯誤,主要是海明碼。由於錯誤修正碼開銷較大,所以不適合於電腦通訊。在電腦通訊中主要使用檢錯重發方法,主要使用的是檢錯碼,其中CRC是一種能力相當強的檢錯碼,並且實現編碼和檢錯的電路比較簡單,因而得到了廣泛的應用。
CRC編碼主要用於資料連結層,它的基本思想將二進位位串看成係數為0或1的多項式。一個n位的幀被看成是n-1次多項式的係數列表。最左邊是xn-1項的係數,接著是xn-2項的係數,依此類推,直到X0項的係數。如位元11100011可以表示為多項式X7+X6+X5+X+1。同樣的,多項式X4+ X+1,可以表示為位元10011。
假設發送方要發送的資料幀是1010101010,在進行CRC編碼時,發送方和接收方必須事先商定一個產生多項式,如X4+ X+1,對應的位元為10011,其最高階為4,則在幀1010101010後面附加4個0,成為10101010100000。
用10101010100000除以10011,得到的餘數就是CRC校正碼。
650) this.width=650;" title="001.jpg" src="http://www.bkjia.com/uploads/allimg/131227/1R144ER-0.jpg" />
這個除法用到的是異或運算,基本規則是兩個相同的數相除,其結果是0,兩個不同的數相除,其結果是1。最終得到的CRC校正碼為0100產生多項式的最高階為幾,就可以得到一個幾位的CRC校正碼),然後將10101010100000用模2減法實際上也是異或運算)減去CRC校正碼0100,就得到了最終實際要傳輸的資料幀10101010100100。
大家可以自己練習一下這道考題:
若資訊碼字為11100011,產生多項式 GX)=X5+X4+X+1,則計算出的 CRC 校正碼為 16) 。
16)A.01101 B.11010 C.001101 D.0011010
本文出自 “一壺濁酒” 部落格,轉載請與作者聯絡!