差錯檢測
傳輸過程中可能會產生比特差錯: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)。
要做到“可靠傳輸”(即發送什麼就收到什麼)就必須再加上確認和重傳機制。
可以說“CRC是一種無比特差錯,而不是無傳輸差錯的檢測機制”
循環冗餘檢驗CRC