循環冗余檢測(CRC)


循環冗余檢測(CRC)

鏈路層通常會具有差錯檢測的功能,使用的方法是發送方 在數據字段D 后加上EDC字段,在接收方會檢驗EDC字段來查看D是否出錯。而如今廣泛應用的計數就是 循環冗余檢測(CRC)。

我們考慮d bit的數據D,發送結點要將它發送給接受結點。

詳解

發送方

  • 發送方首先與接收方協商一個 r+1 bit的數字當除數,這個數字成為生成多項式,記為G——可以隨機選擇,也可按國際上通行的標准選擇,但最高位和最低位必須均為“1”;
    • 生成多項式,若它給你的為 P(x) = x3+1,那么G = 1001
  • 在數據M后面添加供差錯檢測的 r 位冗余碼,然后構成一幀發送出去,一共發送(d+r)位;
    • 雖然添加n位冗余碼增大了數據傳送的開銷,但是可以進行差錯檢測,當傳輸可能出現差錯時,付出這種代價是值得的。
  • 冗余碼計算:
    • 用二進制模2運算進行D * 2r(相當於D左移r位)的運算。意思就是在D后面補r個0。現在D就變成了d+r位;
    • 用M除以收發雙方事先商定的長度為r+1的除數G;
    • 得到的余數R,這個R就是FCS(幀檢驗序列)。將這個FCS序列加到M上然后發出去。

接收方

  • 在接受端把接受到的數據以幀為單位進行CRC校驗 ;
  • 把收到的每一個幀都除以同樣的除數G,然后檢查余數R;
  • 如果余數R為0,如果在傳輸過程中沒有差錯
  • 如果出現誤碼,那么余數R為零的概率是非常小的。

例子

D=101001 G=1101 r=3。

發送端

  • M=D * 2r ;
    則:M=101001000;
  • 用M除以P

  • 得到余數R也就是FCS,將FCS加到M上,就得到了要發送的幀。
    D=101001000+FCS=101001001

接收端
接收到的每一幀都要進行差錯檢驗,假設收到101001001,P=1101。

最后余數R=0,則判定這個幀沒有出錯。


免責聲明!

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



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