CRC迴圈冗餘校驗學習及總結

2021-08-02 00:12:09 字數 945 閱讀 7985

這個解釋貌似有些抽象。具體詳解會在下文詳解。

在資料的實際傳輸過程中資料可能會發生差錯,也就是說位元在物理鏈路中收各種影響資料會和傳送時的資料不一致,可能某個位元位在傳輸過程中會由0變為1或者相反,即實際通訊鏈路是不理想的,為了確保資料傳輸的準確性,計算機在傳輸資料時必須採用各種資料校驗機制,比如說奇偶校驗和crc資料冗餘校驗。

那麼crc迴圈冗餘校驗的原理是什麼呢,眾所周知在資料幀的最後有乙個crc校驗碼,這是crc迴圈冗餘校驗的根本所在,那麼這個校驗碼是怎麼來的呢?其實這個校驗碼就是乙個餘數,被除數是資料段的資料m左移n位(右移後空出來的位置用0填充),除數是收發雙方實現原定好的長度為k資料p,那麼大夥是不是有疑問那麼究竟源資料m要左移幾位呢n到底要為多大?其實右移的位數的大小n就是除數字數的k-1。至於為什麼請往下看。假設m為1001010,p為1101

我們實際走一下這個過程,這樣比較容易理解一點,具體步驟如下:

其實這個和我們小學學的除法區別不大,只有一點不同,注意看你源資料和除數相減時和我們十進位制除法是不一樣的,這裡用的是,模2運算就是進行加減法的時候兩個數字同為1或者同為0則結果為0不同則為1。冗餘碼就是除完以後的餘數

所以實際傳送的就是資料部分加冗餘碼即按照上面的例子就時m+冗餘碼(這裡的+不是算算數運算子),即1001010101。看到這裡你是不是就明白了為什麼冗餘碼的長度是除數的長度減一了吧。

那麼接收端接收到資料以後怎麼驗證自己收到的資料是不是正確無誤的呢,接收端拿到資料以後就直接用資料連上校驗碼除以已知的除數如果餘數字0則資料正確,如果餘數不為0則判定該則該幀有誤,就丟棄,要注意的是判斷只能判斷幀是否正確但不能判斷幀出錯幾位或者說在哪個位置出錯。

迴圈冗餘校驗(CRC)總結

crc校驗採用多項式編碼方法,如乙個8位二進位制數 b7b6b5b4b3b2b1b0 可以用7階二進位製碼多項式b7x7 b6x6 b5x5 b4x4 b3x3 b2x2 b1x1 b0x0表示。例如11000001可表示為 1x7 1x6 0x5 0x4 0x3 0x2 0x1 0x0 一般說,n...

迴圈冗餘校驗 CRC校驗

一 crc校驗概念 即迴圈冗餘校驗碼 cyclic redundancy check 是資料通訊領域中最常用的一種查錯校驗碼,迴圈冗餘檢查 crc 是一種資料傳輸檢錯功能,對資料進行多項式計算,並將得到的結果附在幀的後面,接收裝置也執行類似的演算法,以保證資料傳輸的正確性和完整性。其特徵是資訊字段和...

迴圈冗餘校驗CRC

網上搜到的內容不全面,維基百科講的比較好,原理很清楚傳送門 其實對於程式設計師來講,不用太在意它的數學原理,另外生成碼的選擇不是隨意的,這可能影響到校驗的效能。注意其中的加法不進製,減法不借位,類似是異或邏輯。關於怎樣產生crc,有這樣乙個演算法 下面為crc的計算過程 1 設定crc暫存器,並給其...