計算機網路實驗 迴圈冗餘檢驗CRC

2021-08-18 18:02:06 字數 1396 閱讀 1562

題目描述:

crc的基本思想:

將二進位制位串看成係數為0或1的多項式。使用crc編碼時,傳送方和接收方必須事先商定乙個生成多項式g(x),生成多項式的最高位和最低位的係數必須是1。

假設乙個幀有m位,對應的多項式為m(x),為了計算它的校驗和,該幀必須比生成多項式長。

crc的原理:

在幀的尾部追加乙個校驗和,使得追加之後的幀所對應的多項式能夠被g(x)整除。

當接收方收到了帶校驗和的幀後,用g(x)去除它,如果有餘數,則表示傳輸過程中有錯誤。

計算crc校驗和的演算法:

① 假設g(x)的階為r。在幀的尾部加上r個0,構成的幀包含m+r位,對應的多項式為x^r*m(x); 

② 利用模2做除法。用g(x)去除x^r*m(x),得x^r*m(x) /g(x) = q(x) + r(x)/g(x) ,其中q(x)為商,r(x)為餘數。

③ 利用模2做減法。用x^r*m(x)減去餘數r(x),結果就是將要被傳輸的帶校驗和的幀,記為t(x)= x^r*m(x) – r(x)。

例如:設m(x) = 101001,除數 g(x) = 1101,則m=6,r=3。

則被除數是 x^r*m(x) = 101001000。 

模2運算的結果是:商q = 110101,餘數r = 001。

把餘數r作為冗餘碼新增在資料m的後面傳送出去。傳送的資料是:x^r*m(x) + r ,即101001001,共(m + r)位。

程式設計實現:使用迴圈冗餘檢驗crc計算幀檢驗序列fcs,並輸出傳送的幀。

輸入描述:

輸入為兩行。

第一行輸入m位二進位制,表示待傳送的資料。(m<=100)

第二行輸入r+1位二進位制,表示生成多項式的係數。(r<=32)

輸出描述:

在一行中輸出加上fcs後傳送的資料。

輸入樣例:

101001

1101

輸出樣例

101001001

#include#include#include#include#include#include#includeusing namespace std;

int main()

s4 = s1;

int flag,k;

for(int i = 0; i <= (l1-1); i++)

else

else

s1[j] = '0';

k++;

//cout << "j " << j <}

}//cout << s1 << endl;

}for(int i = l1; i < l1+l2-1; i++)

//cout << s3

return 0;

}

計算機網路 迴圈冗餘碼CRC

文章首發於我的個人部落格 在資料傳輸過程中可能出現位元差錯 1可能變為0,0也可能變為1 為了保證資料傳輸的可靠性,在計算機網路傳輸資料時,必須採用各種差錯檢測措施。一般來說,糾錯碼的編碼效率不如檢錯碼的編碼效率,因而在通訊中用得較多的還是檢錯碼。在資料鏈路層中,最廣泛應用的檢錯碼是一種漏檢率很低也...

計算機網路實驗

1 實驗題目 幀的封裝 幀的封裝時任何資料鏈路層協議必須實現的功能,對幀的封裝建立在詳細了解該協議 pdu格式的基礎之上。本次試驗要求同學們自己動手實現 ppp協議和 mac協議的 pdu封裝程式。2 實驗內容 1 隨機生成 64位元組的資料 a,作為網際層 ip協議的 pdu。2 將a 封裝成字元...

計算機網路 迴圈冗餘校驗CRC演算法原理 計算過程

前言 我們知道,一台主機向另外一台主機傳送報文的時候,需要一層層經過自己的協議棧進行資料封裝,到達最後一層 四層協議的網路介面層 時需要在幀尾部新增fcs校驗碼 通過crc演算法得出 當對端主機收到時,在接收端同樣通過crc演算法進行驗證,確認傳輸過程中是否出現錯誤。它只能確認乙個幀是否存在位元差錯...