我們在大學《計算機網路》或者是《計算機組成原理》中學過crc校驗碼。
做個總結。
不想看原理直接翻到例子那裡,簡潔明瞭。
迴圈冗餘校驗碼,是眾多校驗碼中的一種,是用來校驗傳送過來的資料是否被修改過的碼。
他們的簡單工作原理,可以用乙個10進製的不嚴謹例子表示。
首先接收方和傳送方要共同約定,傳送的數字都能被3整除。(或者是被別的質數整除)
那麼傳送方在發23的時候,要先計算23/3=7餘2,那麼傳送方要傳送23-2=21給接收方。
接收方收到21要先檢測能否被3整除,如果能,那麼資料是沒被篡改過的。
(你可能會問,那我傳送方本身就要傳送21怎麼辦?我傳送22、23都變成了21! 是的,這個例子不嚴謹,但是重點是它的原理,原理是雙方約定能夠被乙個數整除)
顯然我們在傳輸資訊的時候,資訊都是01串。每乙個01串都可以對應成乙個多項式。
怎麼對應?比如10101,對應成 x^4+x^2+x^0(也就是對應2的多少次冪啦)
我們傳送的01串,對應成乙個多項式,我們把這個叫做m(x)這就找到了「被除數」。
上面的例子中雙方要約定乙個都能整除的除數,這個「除數」在這裡叫做「生成多項式」,雙方要約定乙個都能整除的01串。怎麼約定?這個國際有標準,比如crc-12、crc-16、crc-ccitt等等。 這樣子我們就找到了「除數」,我們把這個叫做g(x)。
算商怎麼算?
先把m(x) 乘 g(x)的最高次冪 ,得到的多項式叫做t(x),
也就是先把傳送的資訊串向左移動,空出來的補0,騰出空間來給校驗位。
舉個例子,要傳送010111,「除數」是101, 那麼要騰出來3個位置,給餘數,變成010111000.
再把m(x)/g(x)得到校驗多項式(也就是「餘數」),
體現在01串上是 資訊串除以生成多項式的對應串,這樣也得到了除數對應的01串(這個除法算出的餘數)。
然後t(x)加上這個校驗多項式。
體現在01串上的操作就是 資訊串後面騰出來的位置變成了餘數對應的二進位制串 。
假設要傳送 1101011011 ,生成多項式g(x) 對應的串10011。
先向左位移5位變成 1101011011 00000, 然後算餘數 位移後的串除以g(x)對應串,算出餘數
然後 這個餘數和 位移後的資訊串做模2運算,這就是要傳送的串了!(其實也就是把騰出來的0用餘數填充上,注意餘數要右對齊。)
那麼接收方只要把傳送方發的串除以生成多項式對應的串發現能整除則資料沒損失。
:-( 它的原理講起來很囉嗦……我也沒什麼辦法簡化呀^_^。。
注意除法的時候要模2運算哦!
什麼是模2運算? 相同為0,不同為1。
計算機網路 CRC校驗
crc即迴圈冗餘校驗碼 是資料通訊領域中最常用的一種查錯校驗碼,其特徵是資訊字段和校驗欄位的長度可以任意選定。迴圈冗餘檢查 crc 是一種資料傳輸檢錯功能,對資料進行多項式計算,並將得到的結果附在幀的後面,接收裝置也執行類似的演算法,以保證資料傳輸的正確性和完整性。方法 迴圈冗餘檢驗的原理 在資料鏈...
計算機網路 CRC校驗
crc即迴圈冗餘校驗碼 是資料通訊領域中最常用的一種查錯校驗碼,其特徵是資訊字段和校驗欄位的長度可以任意選定。迴圈冗餘檢查 crc 是一種資料傳輸檢錯功能,對資料進行多項式計算,並將得到的結果附在幀的後面,接收裝置也執行類似的演算法,以保證資料傳輸的正確性和完整性。方法 迴圈冗餘檢驗的原理 在資料鏈...
計算機網路鏈路層
來自 tcp ip詳解 學習筆記 第2章 鏈路層 資料鏈路層有三個目的 1 為ip模組傳送和 接收ip資料報。2 為arp模組傳送arp請求和接收arp應答。3 為rarp傳送rarp請 求和接收rarp應答 arp叫做位址解析協議,是用ip位址轉mac位址的一種協議。rarp則叫做逆位址解析協議,...