循環冗餘檢驗

目前廣泛使用的是循環冗餘檢驗(CRC)
舉個例子說明它的原理:
比如我們需要傳的數據爲101001,用k記錄一共有多少位,即k=6。然後CRC運算需要把待傳的數據的末尾加上用於檢測的n位冗餘碼,可以簡單的理解爲在數據後面加上n個0。假設n=3,這樣循環冗餘檢驗的被除數101001000就得到了。除數是通信雙方商定好的,現在一般使用的方式是用多項式來表示除數,比如P(x)=x^3+x^2+1,就得到除數P=1101。現在就可以開始進行檢驗了,注意除數P的位數等於n+1。運算的方法和除法類似,只是相減變成了異或而已。經過運算,得到了餘數爲001,它被稱爲幀檢驗序列FCS。截至現在做的一切的運算,都只是在發送端進行的。爲了檢驗幀是否無比特差錯接收了,是在接收端檢驗的。計算出的幀檢驗序列FCS會附加在幀的尾部一起發送。

這裏寫圖片描述

接收端接收到後,會把FCS取出,添加到數據部分的末尾,得到除數101001001,再次和除數P=1101相除,如果得到的餘數等於0,那麼就證明此次傳輸時無比特傳輸的。如果餘數不等於0,那就證明這個幀有差錯。無比特傳輸和可靠傳輸有很大的不同的,比如發送端發送了5個幀,但是接收端只接收到了3個幀,此時進行循環冗餘檢驗時,收到的3個幀檢驗合格了,這並不代表此次傳輸時無差錯的,相反,是出了差錯的,只是循環冗餘檢測不出來而已。
CRC是一種檢錯方法,而FCS是添加在數據後面的冗餘碼,兩者的概念完全不同。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章