資料鏈路層迴圈冗餘(CRC)檢驗

g33_N發表於2017-05-11

資料鏈路層有許多協議,但有三個基本問題是相同的:封裝成幀、透明傳輸和差錯檢驗。為了保證資料傳輸的可靠性,在計算機網路傳輸資料時,必須採用各種差錯檢驗措施,目前廣泛使用的是迴圈冗餘(CRC)檢驗的檢錯技術。
CRC檢驗原理:
在傳送端,先把資料劃分為組,假定每個組k個位元。現假定待傳送的資料M=101001(k=6)。CRC運算就是在資料M後面新增供差錯檢驗用的n位冗餘碼,然後構成一個幀傳送出去,一共傳送(k+n)位。在要傳送的資料後面加n位的冗餘碼,雖然增加了資料傳送的開銷,但卻可以進行差錯檢測。當傳輸可能出現差錯時,付出這種代價是很值得的。
這n位冗餘碼可以通過下面的方法得出。用二進位制的模2運算進行2^n乘M的運算,這相當於在M後面新增n個0。得到k+n位的數除以收發雙方事先商定的長度為(n+1)位的除數p,得出商是Q餘數是R(n位,比p少一位)。
這裡寫圖片描述
在上圖所示例子中,M=101001(k=6),假定除數p=1101(n=3).經模2除法運算後的結果是:商Q=110101(這個商並沒有什麼用),而餘數R=001,這個餘數R就作為冗餘碼拼接在M之後傳送出去,這種為了進行檢錯而新增的冗餘碼常稱為幀檢驗序列FCS,因此加上FCS後傳送的幀是101001001(一共K+n位)。
在接收端把接收到的資料以幀為單位進行CRC檢驗:把收到的每一幀都除以同樣的除數P(模2運算),然後檢查得到的餘數R:
如果在傳輸過程中無差錯,那麼經過CRC檢驗後得出的餘數R肯定是0。
總之在接收端對收到的每一幀資料進行檢測後,有以下兩種情況:
1、若餘數R=0,則判定這個幀沒有錯,就接受;
2、若餘數R≠0,則判定這個幀有錯,就丟棄。

一種簡便的方法是使用多項式來表示迴圈冗餘檢驗過程,在上邊的例子中,用多項式P(X) = x^3 +X^2+1表示P = 1001(最高位對應X^3,最低位對應X^0).

相關文章