CRC校驗

數據鏈路層有三個基本問題:

(1)封裝成幀;

(2)透明傳輸;

(3)差錯檢測:

在差錯檢測中,傳輸差錯中分爲兩大類:

1.比特差錯:比特在傳輸過程中產生差錯:1可能變爲0,0可能變爲1.

   在一段時間內,傳輸錯誤的比特佔所傳輸總數的比特總數的比率稱爲誤碼率.

2.幀丟失、幀重複或幀失序:如

//3個幀   [#1]-[#2]-[#3]
[#1]-[#3]             //幀丟失[#2]
[#1]-[#2]-[#2]-[#3]   //幀重複[#2]
[#1]-[#3]-[#2]       //幀失序

所以在數據鏈路層中則採用循環冗餘校驗CRC(Cyclic Redundancy Cheak)的檢錯技術來實現無比特差錯的傳輸。即CRC校驗並不能保證可靠傳輸,只是做到對幀的無差錯接受(凡是接收端數據鏈路層接受的每一個幀均無比特差錯).


校驗方法:

1.在發送端,先把數據劃分爲組,假定每組K個比特,假定發送數據M=101001(k=6);

2.生成冗餘碼,在數據M後面添加差錯檢測用的n位冗餘碼,方法:

 (1)首先將對M進行乘以2^n的運算,即在M後面補n個0;

 (2)以多項式係數確定n+1位長度的除數P;

 (3)得到(k+n)位的數除以除數P(模2運算==異或運算),最後得到餘數R;

 (4)將這個餘數R作爲冗餘碼相加(拼接)在數據M的後面.(將這種爲了進行檢錯而添加的冗餘碼稱爲幀檢驗序列FCS(Frame Cheak Sequence)).

3.構成一個幀發送出去,一共發送(k+n)位;

4.接收端接收到的數據以幀爲單位進行CRC檢驗:收到的每一個幀都除以同樣的除數P(模2運算(異或)),然後檢查得到餘數R

 (1)若R=0,則判定這個幀沒有差錯,就接受;

 (2)若R!=0,則判定這個幀有差錯,直接丟棄.


以上除數一般以多項式係數表示:用多項式P(X)=X^3+X^2+1,則P=1101(n+1位,即n==3),多項式P(x)稱爲生成多項式.

以上面的步驟和M=101001(k=6)舉例:

(1)M*2^3=101001000;

(2)除以除數P:


(3)101001000+001=101001001,構成一個幀發送出去......

(4)接收端接收檢測.......


以上CRC檢驗是一種廣泛應用的多項式編碼,其又稱多項式碼,具有良好的數學結構,易於實現,發送端編碼器和接收端檢測譯碼器實現較爲簡單,具有十分強的檢錯能力,其中FCS的生成與CRC檢驗其依靠這些硬件處理很迅速,不會延誤數據的傳輸。

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