crc迴圈冗餘檢驗
CRC(Cyclic Redundancy Check):迴圈冗餘檢驗。在鏈路層被廣泛使用的檢錯技術。
CRC原理:
1、傳送端
1.1、在傳送端先將資料分組,每組k個數據。假定要傳送的資料是M。
1.2、在資料M後面新增供差錯檢測的n位冗餘碼,然後構成一幀傳送出去,一共傳送(k+n)位。
雖然新增n位冗餘碼增大了資料傳送的開銷,但是可以進行差錯檢測,當傳輸可能出現差錯時,付出這種代價是值得的。
1.3、冗餘碼可以用下面的方法得出:
3.1、用二進位制模2運算進行2^n*M(相當於M左移n位)的運算。意思就是在M後面補n個0。現在M就變成了k+n位。
1.3.2、用M除以收發雙方事先商定的長度為n+1的除數P。
1.3.3、得到的餘數R,這個R就是FCS(幀檢驗序列)。將這個FCS序列加到M上然後發出去。
2、接受端
2.1、在接受端把接受到的資料以幀為單位進行CRC校驗
2.2、把收到的每一個幀都除以同樣的除數P,然後檢查餘數R。
2.3、如果餘數R為0,如果在傳輸過程中沒有差錯。
2.4、如果出現誤碼,那麼餘數R為零的概率是非常小的。
總結:在接收端對接收到的每一幀進行CRC檢驗後,若餘數R為,則表示這個幀沒有錯,就接受。若R不為0,則判定這個幀出錯,就丟棄。
例:M=101001,P=1101,n=3。
在傳送端:
1、M=(2^n*M);
則:M=101001000
2、用M除以P

3、得到餘數R也就是FCS,將FCS加到M上,就得到了要傳送的幀。
M=101001000+FCS=101001001
在接收端:
接收到的每一幀都要進行差錯檢驗,假設收到101001001,P=1101。

最後餘數R=0,則判定這個幀沒有出錯。
---------------------
作者:午飯要陽光
來源:CSDN
原文:https://blog.csdn.net/lf_2016/article/details/58276536