1. 程式人生 > >CRC校驗原理及步驟

CRC校驗原理及步驟

ext 是把 nsf 其它 結果 aci 發送 二進制 padding

什麽是CRC校驗? CRC即循環冗余校驗碼:是數據通信領域中最常用的一種查錯校驗碼,其特征是信息字段和校驗字段的長度可以任意選定。循環冗余檢查(CRC)是一種數據傳輸檢錯功能,對數據進行多項式計算,並將得到的結果附在幀的後面,接收設備也執行類似的算法,以保證數據傳輸的正確性和完整性。 CRC校驗原理: 其根本思想就是先在要發送的幀後面附加一個數(這個就是用來校驗的校驗碼,但要註意,這裏的數也是二進制序列的,下同),生成一個新幀發送給接收端。當然,這個附加的數不是隨意的,它要使所生成的新幀能與發送端和接收端共同選定的某個特定數整除(註意,這裏不是直接采用二進制除法,而是采用一種稱之為“2除法
”)。到達接收端後,再把接收到的新幀除以(同樣采用“2除法”)這個選定的除數。因為在發送端發送數據幀之前就已通過附加一個數,做了“去余”處理(也就已經能整除了),所以結果應該是沒有余數。如果有余數,則表明該幀在傳輸過程中出現了差錯。 模2除法: 模2除法與算術除法類似,但每一位除的結果不影響其它位,即不向上一位借位,所以實際上就是異或。在循環冗余校驗碼(CRC)的計算中有應用到模2除法。 例: 技術分享圖片 CRC校驗步驟: CRC校驗中有兩個關鍵點,一是預先確定一個發送送端和接收端都用來作為除數的二進制比特串(或多項式),可以隨機選擇,也可以使用國際標準,但是最高位和最低位必須為1;二是把原始幀與上面計算出的除數進行模2除法運算,計算出CRC碼。 具體步驟:
1. 選擇合適的除數 2. 看選定除數的二進制位數,然後再要發送的數據幀上面加上這個位數-1位的0,然後用新生成的幀以模2除法的方式除上面的除數,得到的余數就是該幀的CRC校驗碼。註意,余數的位數一定只比除數位數少一位,也就是CRC校驗碼位數比除數位數少一位,如果前面位是0也不能省略。 3. 將計算出來的CRC校驗碼附加在原數據幀後面,構建成一個新的數據幀進行發送;最後接收端在以模2除法方式除以前面選擇的除數,如果沒有余數,則說明數據幀在傳輸的過程中沒有出錯。 CRC校驗碼計算示例: 現假設選擇的CRC生成多項式為G(X) = X4 + X3 + 1,要求出二進制序列10110011的CRC校驗碼。下面是具體的計算過程:
①將多項式轉化為二進制序列,由G(X) = X4 + X3 + 1可知二進制一種有五位,第4位、第三位和第零位分別為1,則序列為11001 ②多項式的位數位5,則在數據幀的後面加上5-1位0,數據幀變為101100110000,然後使用模2除法除以除數11001,得到余數。 技術分享圖片 ③將計算出來的CRC校驗碼添加在原始幀的後面,真正的數據幀為101100110100,再把這個數據幀發送到接收端。 ④接收端收到數據幀後,用上面選定的除數,用模2除法除去,驗證余數是否為0,如果為0,則說明數據幀沒有出錯。 來源:https://blog.csdn.net/d_leo/article/details/73572373

CRC校驗原理及步驟