crc
crc稱迴圈冗餘校驗(cyclic redundancy check, crc)
其是一種根據網路資料報或電腦檔案等資料產生簡短固定位數校驗碼的一種雜湊函式,主要用來檢測或校驗資料傳輸或者儲存後可能出現的錯誤。它是利用除法及餘數的原理來作錯誤偵測的。
說起crc,很多人是初次接觸的,但實際上其基本原理我們很久之前就已經有所了解,接下來我會大家慢慢認識crc。
1
crc原理
先在要傳送的幀後面附加乙個數(這個就是用來校驗的校驗碼,這裡的數也是二進位制序列),生成乙個新幀傳送給接收端。這個附加的數不是隨意的,它要使所生成的新幀能與傳送端和接收端共同選定的某個特定數整除(不是直接採用二進位制除法,而是採用一種稱之為「模2除法」)。到達接收端後,再把接收到的新幀除以(同樣採用「模2除法」)這個選定的除數。因為在傳送端傳送資料幀之前就已通過附加乙個數,做了「去餘」處理,所以結果應該是沒有餘數。如果有餘數,則表明該幀在傳輸過程**現了差錯。
crc背景
以上是書上給定的基本原理的定義,但模2除法是什麼?我們又該如何移位,又該怎麼去計算那個附加的數呢?
crc計算中需要的一些簡單概念如下所示:
1) 幀檢測序列frame checksequence:為進行差錯檢驗而新增的冗餘碼。
2) 多項式模2除法:不考慮進製、錯位的二進位制加減法,相當於異或。其是crc校驗技術中的核心部分。與四則運算相同,模2運算也包括模2加、模2減、模2乘、模2除四種二進位制運算。而且,模2運算也使用與四則運算相同的運算子,即「+」表示模2加,「-」表示模2減,「×」或「·」表示模2乘,「÷」或「/」表示模2除。與四則運算不同的是模2運算不考慮進製和借位,即模2加法是不帶進製的二進位制加法運算,模2減法是不帶借位的二進位制減法運算。這樣,兩個二進位制位相運算時,這兩個位的值就能確定運算結果,不受前一次運算的影響,也不對下一次造成影響。
3) 生成多項式:當進行crc檢驗時,傳送方和接受方事先約定乙個除數,即生成多項式g(x),比如1010011可以表示為 x^6 + x^4 + x^1 + x^0,。
同時我們還需要知道crc校檢碼的計算,設資訊欄位為k位,校驗欄位為r位,則碼字長度為n(n=k+r)。設雙方事先約定了乙個r次多項式g(x),則crc碼:v(x)=a(x)g(x)=xrm(x)+r(x)其中: m(x)為k次資訊多項式, r(x)為r-1次校驗多項式。這裡r(x)對應的**即為冗餘碼,加在原資訊欄位後即形成crc碼。r(x)的計算方法為:在k位資訊欄位的後面新增r個0,再除以g(x)對應的**序列,得到的餘數即為r(x)對應的**(應為r-1位;若不足,而在高位補0)。
3
crc計算
①將多項式轉化為二進位制序列,由g(x) = x^4 + x^3 + 1可知二進位制一種有五位,第4位、第三位和第零位分別為1,則序列為11001
②多項式的位數字5,則在資料幀的後面加上5-1位0,資料幀變為101100110000,然後使用模2除法除以除數11001,得到餘數。
③將計算出來的crc校驗碼新增在原始幀的後面,真正的資料幀為101100110100,再把這個資料幀傳送到接收端。
④接收端收到資料幀後,用上面選定的除數,用模2除法除去,驗證餘數是否為0,如果為0,則說明資料幀沒有出錯。
代數引論
一起來看 VMware之網路設定
由於linux目前很熱門,越來越多的人在學習linux,但是買一台服務放家裡來學習,實在是很浪費。那麼如何解決這個問題?虛擬機器軟體是很好的選擇,常用的虛擬機器軟體有vmware workstations和virtualbox等。在使用虛擬機器軟體的時候,很多初學者都會遇到很多問題,而vmware的...
新書來了 邀您一起來看看
徹底剖析作業系統的原理,實現核心執行緒 特權級變換 使用者程序 任務排程 檔案系統等作業系統最基本的組成單元。用實際 解釋了鎖 訊號量 生產者消費者問題。實現了shell,幫助大家理解內部命令 外部命令 管道等操作。京東購買 今天,優秀的使用者體驗設計是產品所不可或缺的,但設計一款產品則是乙個漫 長...
第 4 頁 一起來看看workstation這個類
首先還是來看看我們自定義的資料型別employee,在應用的時候它和int型別的資料沒什麼兩樣,一樣的需要建立變數 物件 只不過前者是咱自己定義的,而後這是它內建的。employee這個類中有許多屬性,也有許多方法。而此時,我們不能直接用我們所建立出來的物件呼叫它的屬性進行修改。因為它是privat...