1. 程式人生 > >差錯檢測 — 迴圈冗餘校驗CRC

差錯檢測 — 迴圈冗餘校驗CRC

  現實中通訊鏈路都不會是理想的,位元在傳輸的過程中可能會出現差錯,1可能變成0,0也可能變成1,這就叫做位元差錯。位元差錯是傳輸差錯的一種,因此為了保證資料傳輸的可靠性,在計算網路傳輸資料時,必須採用各種檢驗措施來處理位元差錯。目前在資料鏈路層廣泛使用了迴圈冗餘的CRC的檢錯技術

  • 幀檢驗序列FCS(Frame Check Sequence):為了進行差錯檢驗而新增的冗餘碼。
  • 模2運算:即按位異或運算,不考慮進位與借位,相同為0,不同為1(做除法時每一步餘數的首位逢一商一 逢零商零)
  • 傳送方和接收方事先商定的長度為(n+1)位的除數P,用多項式 P(x) 表示更為方便,又稱生成多項式。
  • 由(k-1)次多項式表示的 k 位位元訊息 M(X),每一位元位的值為 對應其每項多項式的係數,且從為高位位元開始。如一個8位元10011010對應的多項式為 M(x)=x^7 +x^4 +x^3 +x^1。
  • n位冗餘碼:用二進位制的模2運算進行2^n乘以M 的運算,相當於在M的後面新增n個0。

迴圈冗餘檢驗的原理:在傳送端,先把資料劃分成組,假定每組k個位元並作為M,CRC運算就是在資料M的後面新增供差錯檢測用的n位冗餘碼,然後構成一個幀(k+n)位 併發送出去。將得到的(k+n)位的數除以收發雙方事先商定的(n+1)位的除數P,得出的商是Q,而餘數是R(n位,比P少一位)。在接收端把接受到的資料以幀為單位進行CRC檢驗:即把收到的每一個幀都除以P(模2運算),然後檢查得到的餘數R,如果傳輸無差錯,那麼R肯定是0,就接受;如果R≠0,則判定這個幀有差錯(無法確定是哪幾位出現差錯),就丟棄。

有效資訊為1010001101,生成多項式p(x)=110101 , 求其CRC編碼? 

答:如圖所示(模2運算)

餘數為01110,CRC編碼為101000110101110