差錯檢測和循環冗餘檢驗crc

差錯檢測

傳輸過程中可能會產生比特差錯:1 可能會變成 0 而 0 也可能變成 1。

在一段時間內,傳輸錯誤的比特佔所傳輸比特總數的比率稱爲誤碼率 BER(Bit Error Rate)。

誤碼率與信噪比有很大的關係。

爲了保證數據傳輸的可靠性,在計算機網絡傳輸數據時,必須採用各種差錯檢測措施。


循環冗餘檢驗 CRC

在數據鏈路層傳送的幀中,廣泛使用了循環冗餘檢驗 CRC 的檢錯技術。
在發送端,先把數據劃分爲組。假定每組 k 個比特。 
假設待傳送的一組數據 M = 101001(現在 k = 6)。我們在 M 的後面再添加供差錯檢測用的 n 位冗餘碼一起發送。
冗餘碼的計算
用二進制的模 2 運算進行 2n 乘 M 的運算,這相當於在 M 後面添加 n 個 0。
得到的 (k + n) 位的數除以事先選定好的長度爲 (n + 1) 位的除數 P,得出商是 Q 而餘數是 R,餘數 R 比除數 P 少1 位,即 R 是 n 位。




冗餘碼的計算舉例
現在 k = 6, M = 101001。
設 n = 3, 除數 P = 1101,
被除數是 2nM = 101001000。 
模 2 運算的結果是:商 Q = 110101,
           餘數 R = 001。
把餘數 R 作爲冗餘碼添加在數據 M 的後面發送出去。發送的數據是:2nM + R 
   即:101001001,共 (k + n) 位。


注:可以用生成多項式來表示循環冗餘的除數,例P(X)=X3+X2+1可以表示1101這個除數。
練:101101的生成多項式P(X)=?


幀檢驗序列 FCS
在數據後面添加上的冗餘碼稱爲幀檢驗序列 FCS (Frame Check Sequence)。
循環冗餘檢驗 CRC 和幀檢驗序列 FCS並不等同。
CRC 是一種常用的檢錯方法,而 FCS 是添加在數據後面的冗餘碼。
FCS 可以用 CRC 這種方法得出,但 CRC 並非用來獲得 FCS 的唯一方法。



接收端對收到的每一幀進行 CRC 檢驗
檢驗:
若得出的餘數 R = 0,則判定這個幀沒有差錯,就接受(accept)。
若餘數 R  0,則判定這個幀有差錯,就丟棄。


特點:
但這種檢測方法並不能確定究竟是哪一個或哪幾個比特出現了差錯。
只要經過嚴格的挑選,並使用位數足夠多的除數 P,那麼出現檢測不到的差錯的概率就很小很小。


僅用循環冗餘檢驗CRC 差錯檢測技術只能做到無差錯接受(accept)。

“無差錯接受”是指:“凡是接受的幀(即不包括丟棄的幀),我們都能以非常接近於 1 的概率認爲這些幀在傳輸過程中沒有產生差錯”。也就是說:“凡是接收端數據鏈路層接受的幀都沒有傳輸差錯”(有差錯的幀就丟棄而不接受)。

要做到“可靠傳輸”(即發送什麼就收到什麼)就必須再加上確認重傳機制。

考慮:幀重複、幀丟失、幀亂序的情況

可以說“CRC是一種無比特差錯,而不是無傳輸差錯的檢測機制”

OSI/RM模型的觀點:數據鏈路層要做成無傳輸差錯的!但這種理念目前不被接受!





循環冗餘檢驗CRC

發佈了45 篇原創文章 · 獲贊 13 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章