數據鏈路層差錯檢測之循環冗余檢驗CRC


引用https://blog.csdn.net/wenqiang1208/article/details/71641414

為什么引入CRC

現實的通信鏈路都不會是理想的。這就是說,比特在傳輸的過程中可能會產生差錯:1可能會變成0,0可能會變成1,這就叫做比特差錯。在一段是時間內,傳輸錯誤的比特占所傳輸比特總數的比率成為誤碼率BER(Bit Error Rate)。誤碼率與信噪比有很大的關系,在實際通信中不可能使誤碼率下降到零。 
因此,為了保證數據傳輸的可靠性,在計算機網絡傳輸數據時,必須采用各種差錯檢測措施。 
目前在數據鏈路層廣泛使用了循環冗余檢測CRC的檢測技術

CRC的原理

CRC運算實際上就是在數據長為k的后面添加供差錯檢測用的n位冗余碼,然后構成幀k+n位發送出去。

首先來介紹幾個概念 
(1)模2運算:實際上是按位異或運算,即相同為0,相異為1,也就是不考慮進位、借位的二進制加減運算。如:1111+1010 = 0101 
(2)FCS:其實就是冗余碼,幀檢驗序列(Frame Check Sequence) 
(3)生成多項式:其實就是除數,比如下面將要用到的除數p = 1101

這里寫圖片描述

計算n位冗余碼

現假定待傳輸的數據M = 101001(k = 6),除數p = 1101 (n = 3)比n多一位 
這n位冗余碼可以用下面的方法得出。 
(1)用二進制的模2運算進行(2^n)乘M的運算,相當於在M后面添加n個0。 
即M后面添加3個0 
(2)現在得到M = 101001000(k+n = 9)位的數除以除數p(n = 3)位, 
得到商是Q(不關心),余數R =001(n位)R就是冗余碼FCS

現在加上FCS后發送的幀是101001001 
這里寫圖片描述

在接收端把接收到的數據M = 101001001以幀為單位進行CRC檢驗:把收到的每一個幀都除以相同的除數p(模2運算),然后檢查得到的余數R。 
如果在傳輸過程中沒有差錯,那么經過檢驗后得到余數R肯定是0。 
(讀者可以自己檢驗下,被除數現在是M = 101001001,除數P= 1101,看余數是否為0) 
總之,在接收端對接收到的每一個幀經過CRC檢驗后,有兩種情況: 
(1)余數R = 0,則判斷這個幀沒有問題,就接受 
(2)余數R != 0,則判斷這個幀有差錯,就丟棄。

總結一下:

在數據鏈路層若僅僅使用CRC差錯檢驗技術,則只能做到對幀的無差錯接收。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM