『壹』 計算機網路問題,急,,,
2017年12月13日星期三,
這里需要強調一點,生成多項式(generator polynomial)和多項式不是一個概念,這里需要注意。我個人的理解是你要進行幾位的CRC校驗,就需要幾位的生成多項式(generator polynomial),但還收到生成多項式(generator polynomial)的第一位必須為1的限制,因此生成的多項式還需要注意這一點。原始信息所對應的多項式和生成多項式(generator polynomial)不是一個概念。
首先,我們要知道,任何一串二進制數都可以用一個多項式表示:且這串二進制數的各位對應多項式的各冪次,多項式中假如有此冪次項(比如多項式匯中有冪次項x^2對應二進制串碼中從右至左的第三位二進制數一定為1.因為右數第一位的冪次項為x^0,右數第二位的冪次項為x^1),則對應二進制數串碼中此位置的1,無此冪次項對應0。
舉例:代碼1010111對應的多項式為x^6+x^4+x^2+x+1,若我們將缺失的冪次項補全的話就有x^6+(x^5)+x^4+(X^3)+x^2+x+1,又因為x^5和X^3所對應的二進制位為0,不記入多項式中,因此有x^6+x^4+x^2+x+1,就是表示 1010111這個串碼。
而多項式為x^5+x^3+x^2+x+1的完整多項式為x^5+(x^4)+x^3+x^2+x+1正好對應二進制串碼101111,而x^4對應的二進制串碼中右數第五位(左數第二位)為0,不記入多項式中,因此,101111可以使用多項式x^5+x^3+x^2+x+1來表示。
通過上述兩個多項式的例子,可以看出,當多項式中的冪次項所對應的那一位二進制為1時,多項式中的那一個冪次項存在,而當二進制串碼中的某位為0時,對應的多項式冪次項忽略不記錄,例如,10111 1因為從左向右第二位是0,因此對應的多項式分子x^4就沒有被記錄到多項式中,
書面的說法是:
多項式和二進制數有直接對應關系:X的最高冪次對應二進制數的最高位,以下各位對應多項式的各冪次,有此冪次項對應1,無此冪次項對應0。可以看出:X的最高冪次為R,轉換成對應的二進制數有R+1位,
我們現在來看題目中generator plynomial (生成多項式)is X^4+x^2+1,最高冪次是4,因此,其表示的二進制為(4+1=5)5位,
且通過crc的原理,我們知道,循環冗餘校驗碼(CRC)是由兩部分組拼接而成的,
第一部分是信息碼,
第二部分是校驗碼,
可得公式:
CRC=信息碼+校驗碼,
很明顯校驗碼是跟在信息碼之後的,所以,題目中1101011011中左數的那5位是真正傳輸的信息(信息碼),即actual bit string transmitted(實際傳輸的信息位流)是11010,而後面的5位(11011)是校驗碼,
接下來我們結合上面的內容來理解對CRC的定義:
循環冗餘校驗碼(CRC)的基本原理是:在K位信息碼後再拼接R位的校驗碼,整個編碼長度為N位,因此,這種編碼也叫(N,K)碼。對於一個給定的(N,K)碼,可以證明存在一個最高次冪為N-K=R的多項式G(x)。根據G(x)可以生成K位信息的校驗碼,而G(x)叫做這個CRC碼的生成多項式。 校驗碼的具體生成過程為:假設要發送的信息用多項式C(X)表示,將C(x)左移R位(可表示成C(x)*2^R),這樣C(x)的右邊就會空出R位,這就是校驗碼的位置。用 C(x)*2^R 除以生成多項式G(x)得到的余數就是校驗碼。
另一個定義:
利用CRC進行檢錯的過程可簡單描述為:在發送端根據要傳送的k位二進制碼序列,以一定的規則產生一個校驗用的r位監督碼(CRC碼),附在原始信息後邊,構成一個新的二進制碼序列數共k+r位,然後發送出去。在接收端,根據信息碼和CRC碼之間所遵循的規則進行檢驗,以確定傳送中是否出錯。這個規則,在差錯控制理論中稱為「生成多項式」。
再看另一個描述,在代數編碼理論中,將一個碼組表示為一個多項式,碼組中各碼元當作多項式的系數。例如 1100101 表示為1·x^6+1·x^5+0·x^4+0·x^3+1·x^2+0·x^1+1,即 x^6+x^5+x^2+1。
設,編碼前的原始信息多項式為P(x),P(x)的最高冪次加1等於k(這里的K就是整個原始信息的二進制編碼的長度,以上例1100101為例,此串二進制編碼的最高位對應的多項式冪次為6,根據定義得K=6+1=7,正好是此串二進制編碼的長度,);
設,生成多項式為G(x),G(x)的最高冪次等於r,這個r可以隨意指定,也就是r可以不等於K,但指定r時,必須滿足生成多項式G(x)最高位必須為1的條件,
設,CRC多項式為R(x)。:將P(x)乘以x^r(即對應的二進制碼序列左移r位),再除以G(x),所得余式即為R(x)。
設,編碼後的帶CRC的信息多項式為T(x)。:用公式表示為T(x)=x^r*P(x)+R(x),翻譯過來就是,編碼後的帶CRC校驗的多項式由左移了r位的原始信息P(x)後接CRC的校驗碼R(x)組成,
而在接收端,是使用T(x )去除G(x),若無余數,則表示接收正確。就是接收端使用接收到的信息T(x )去除和發送端約好的生成多項式G(x),若除盡沒有餘數則表示信息正確接收。
我們再來看本題,

題中給出已傳輸的信息為:1101011011,即T(x )=1101011011;
而generator polynomial 生成多項式是:x^4+x^2+1,即G(x)=10101;
那麼,我們來使用T(x )除以G(x)=110,根據上面的定義,我們知道,出現了沒有除盡的情況,有餘數,余數為110,則說明信息11010在傳遞過程出現了錯誤,而題目中給出,若將此信息串碼的左數第三位進行翻轉,則接收到的信息為:1111011011,那麼,
T(x )=1111011011,
則,再通過T(x )除以G(x)進行校驗運算後,得到余數1,沒有除盡
即T(x )除以G(x)=1,
所以沒有通過CRC校驗,此時,接收端能發現這個錯誤,
但是,如果我們將此串數據的左數第三位和最後一位同時翻轉,得到1111011010,那麼再經過T(x )除以G(x)的接收端校驗後,除盡了,余數為0,則,此時,因為T(x )除以G(x)=0,通過了接收端的校驗,因此,接收端並不能發現這個錯誤,以為是收到了正確的串碼:11110,但實際上我們發送的串碼是:11010,
最後,我們再來研究一下,T(x )是怎麼除G(x)的,實際上我們必須清楚,這里的除法實際上並不是我們傳統意義上的十進制除法,而是兩個二進制的「按位異或」(請注意每步運算都是先進行高位對齊的。)的演算法,在二進制數運算中,這被稱為模二除運算,
來看兩個例子,
【例一】假設使用的生成多項式是G(X)=X3+X+1。4位的原始報文為1010,求編碼後的報文。
解:
1、將生成多項式G(X)=X^3+X+1轉換成對應的二進制除數1011。
R=3,R就是生成多項式的最高次冪,
2、此題生成多項式有4位(R+1)(注意:通過對生成多項式計算所得的校驗碼為3位,因為,生成多項式的R為生成多項式的最高次冪,所以校驗碼位數是3位),要把原始報文C(X)【這里的C(X)就是1010】左移3(R)位變成1010 000
3、用生成多項式對應的二進制數對左移3位後的原始報文進行模2除(高位對齊),相當於按位異或:
1010000
1011
------------------
0001000, 請注意這里,通過第一次除法,也就是模2除(高位對齊)的運算,將兩個二進制代碼進行了高位對齊後的按位異或的操作後,得到0001000即1000,接下來,需要進行第二次除法,即使用第一步得到的二進制數1000去除1011【G(x)】,則有下面的式子,
1000
1011
------------------
0011,請注意,結果為0011,也可以寫成11,但是我們由上面得知,由生成多項式G(X)=X^3+X+1,已經確定了校驗位是3位,因此,
得到的余位011,所以最終編碼為:1010 011。
例二:
信息欄位代碼為: 1011001;對應的原始多項式P(x)=x6+x4+x3+1
假設生成多項式為:g(x)=x4+x3+1;則對應g(x)的代碼為: 11001,又因為g(x)最高次冪為4,因此可以確定校驗位是4位,
根據CRC給生成多項式g(x)定義的規則,將原始代碼整體左移4位,這樣在原始數據後面多出4位校驗位的位置,即x^4*P(x),得到:10110010000;
接下來使用10110010000去除以g(x),得到最終的余數1010,並與原始信息組成二進制串碼:1011001 1010發送出去,
接收方:使用相同的生成多項式進行校驗:接收到的欄位/生成碼(二進制除法)
如果能夠除盡,則正確,
給出余數(1010)的計算步驟:
除法沒有數學上的含義,而是採用計算機的模二除法,即除數和被除數做異或運算。進行異或運算時除數和被除數最高位對齊,按位異或。
10110010000
^11001
--------------------------
01111010000 ,這里進行第一次按位異或,得到01111010000,即1111010000,將1111010000再去除以11001,如下步驟,
1111010000
^11001
-------------------------
0011110000,進行了第二次模2除後,得到0011110000,即11110000,將
11110000去除11001,
11110000
^11001
--------------------------
00111000,第三次摸2除,得到00111000,即111000,用
111000去除11001,
111000
^11001
-------------------
001010,進行第四次模2除後,得到最終的余數,001010,即1010,
則四位CRC校驗碼就為:1010。
『貳』 關於計算機網路的crc計算
我們知道,一台主機向另外一台主機發送報文的時候,需要一層層經過自己的協議棧進行數據封裝,到達最後一層(四層協議的網路介面層)時需要在幀尾部添加FCS校驗碼(通過CRC演算法得出)。當對端主機收到時,在接收端同樣通過CRC演算法進行驗證,確認傳輸過程中是否出現錯誤。它只能確認一個幀是否存在比特差錯,但沒有提供解決措施。
循環冗餘校驗的原理
在發送端,先把數據劃分為組(即:一幀)。假定每組 k 個比特。
在每組後面,添加供差錯檢測用的 n 位冗餘碼一起發送。即:實際發送長度為:k+n 比特。
發送前雙方協商n+1位的除數P,方便接收方收到後校驗。
給K比特的數據添加除數減一個0(P-1)作為被除數,與第三步確定的除數做「模2除法」。得出的余數即FCS校驗序列,它的位數也必須是(P-1)。
將FCS校驗序列添加至K個比特位的後面發送出去。
接收方對接收到的每一幀進行校驗,若得出的余數 R = 0,則判定這個幀沒有差錯,就接受(accept)。若余數 R ≠ 0,則判定這個幀有差錯,就丟棄。
對「模2除法」進行說明:
「模2除法」與「算術除法」類似,但它既不向上位借位,也不比較除數和被除數的相同位數值的大小,只要以相同位數進行相除即可。模2加法運算為:1+1=0,0+1=1,0+0=0,無進位,也無借位;模2減法運算為:1-1=0,0-1=1,1-0=1,0-0=0,也無進位,無借位。相當於二進制中的邏輯異或運算。
計算示例

那麼接收方拿到的就是:101001001。再以它為被除數,1101為除數進行「模2除法」。
『叄』 計算機網路:數據鏈路層
互聯網是指很多異構的網路由路由器聯系起來的一個大網路。在研究這個大網路之前,我們要庖丁解牛,先研究其局部和單元。最小的網路單元就是區域網,區域網是一個單位所擁有,且地理范圍和站點數量都很有限。
區域網內的計算機通信不需要路由器,所以不會用到網路層的協議,而是依賴數據鏈路層。
上圖說明了數據鏈路層在整個互聯網體系中的位置。數據鏈路層的信道分為兩種:
在點到點信道的數據鏈路層協議上,可以採用簡化的三層模型。無論是主機和主機,主機和路由器,或者兩個路由器之間,我們都可以看成結點和結點之間的通信。
數據鏈路層不必考慮物理層是如何實現比特傳輸的細節,我們甚至可以簡單設想,節點A沿著數據鏈路層的水平方向把幀輸出給結點B。
數據鏈路層的協議有多個,但有三個共性問題。
從上圖可以得出以下結論:
利用轉義字元(ESC,十六進制編碼0x1B)來解決幀的數據部分包含控制字元的問題
信道往往不是理想的,所以通信會帶來誤差。常用誤碼率來衡量傳輸誤差。誤碼率BER(bit error rate)等於錯誤的比特佔全部比特的百分比。
那麼我們怎麼知道所接受到的幀有沒有錯誤比特呢?這就需要校驗機制,目前數據鏈路層廣泛採用循環冗餘校驗CRC((Cyclic Rendancy Check)。其原理是在幀的數據部分後面加上冗餘碼(FCS),接受方利用冗餘碼校驗數據部分。具體細節請參考《計算機網路》。
綜上,封裝成幀和透明傳輸保證收到完整的幀,差錯檢驗保證收到正確的幀。這三種機制能保證幀的無差錯傳輸,但不能保證可靠傳輸(發送什麼就接收到什麼)。造成不可靠傳輸的原因有兩類:
1. 幀中的比特錯誤
2. 幀重復,幀丟失,幀失序
數據鏈路層的幀的三種機制只能消除第一種錯誤,至於第二種則需要確認和重傳機制。在早期互聯網中,數據鏈路層曾經保證可靠傳輸,但隨著光纖技術的發展,誤碼率大大下降,數據鏈路層就採用了簡單的不可靠傳輸協議,把可靠運輸的實現放在了運輸層中。實踐證明,這樣可以提高通信效率。
最後,我們可以看到,計算機網路本質是通信問題,裡麵包含了很多通信元素:完整,誤差,校驗,重復,丟失,失序,可靠傳輸等。
『肆』 crc是什麼意思 怎麼理解crc是什麼意思
1、循環冗餘校驗(Cyclic Rendancy Check, CRC)是一種根據網路數據包或計算機文件等數據產生簡短固定位數校驗碼的一種信道編碼技術,主要用來檢測或校驗數據傳輸或者保存後可能出現的錯誤。它是利用除法及余數的原理來作錯誤偵測的。
2、在數據傳輸過程中,無論傳輸系統的設計再怎麼完美,差錯總會存在,這種差錯可能會導致在鏈路上傳輸的一個或者多個幀被破壞(出現比特差錯,0變為1,或者1變為0),從而接受方接收到錯誤的數據。為盡量提高接受方收到數據的正確率,在接收方接收數據之前需要對數據進行差錯檢測,當且僅當檢測的結果為正確時接收方才真正收下數據。檢測的方式有多種,常見的有奇偶校驗、網際網路校驗和循環冗餘校驗等。循環冗餘校驗是一種用於校驗通信鏈路上數字傳輸准確性的計算方法(通過某種數學運算來建立數據位和校驗位的約定關系的)。發送方計算機使用某公式計算出被傳送數據所含信息的一個值,並將此值 附在被傳送數據後,接收方計算機則對同一數據進行 相同的計算,應該得到相同的結果。如果這兩個 CRC結果不一致,則說明發送中出現了差錯,接收方計算機可要求發送方計算機重新發送該數據。
『伍』 crc是什麼意思
CRC是循環冗餘校驗(CyclicRendancyCheck)是一種根據網路數據包或計算機文件等數據產生簡短固定位數校驗碼的一種信道編碼技術,主要用來檢測或校驗數據傳輸或者保存後可能出現的錯誤。它是利用除法及余數的原理來作錯誤偵測的。
簡介
在數據傳輸過程中,無論傳輸系統的設計再怎麼完美,差錯總會存在,這種差錯可能會導致在鏈路上傳輸的一個或者多個幀被破壞(出現比特差錯,0變為1,或者1變為0),從而接受方接收到錯誤的數據。為盡量提高接受方收到數據的正確率,在接收方接收數據之前需要對數據進行差錯檢測,當且僅當檢測的結果為正確時接收方才真正收下數據。檢測的方式有多種,常見的有奇偶校驗、網際網路校驗和循環冗餘校驗等。循環冗餘校驗是一種用於校驗通信鏈路上數字傳輸准確性的計算方法(通過某種數學運算來建立數據位和校驗位的約定關系的)。發送方計算機使用某公式計算出被傳送數據所含信息的一個值,並將此值附在被傳送數據後,接收方計算機則對同一數據進行相同的計算,應該得到相同的結果。如果這兩個CRC結果不一致,則說明發送中出現了差錯,接收方計算機可要求發送方計算機重新發送該數據。
工作原理
循環冗餘校驗同其他差錯檢測方式一樣,通過在要傳輸的k比特數據D後添加(n-k)比特冗餘位(又稱幀檢驗序列,FrameCheckSequence,FCS)F形成n比特的傳輸幀T,再將其發送出去。
『陸』 計算冗餘碼
FJNU.1240Description
計算機網路中採用循環冗餘碼來校驗數據的正確性。其原理是:發送方計算出待發送的二進制數據的循環冗餘碼,並隨同原數據一起發送到接收方;接收方通過重新計算接收到的數據的循環冗餘碼,並和收到的循環冗餘碼進行比較,如果兩者相同則可判定所收到的數據是正確的,否則說明數據是錯誤的。其中計算二進制數據的循環冗餘碼的計算過程如下:
>>協議事先約定一個二進制生成表達式,本題設為10011;
>>將待發送的二進制數據串的末尾加4個0;
>>將補上0的數據串按模2除法除於生成表達式,取余數;
>>該余數就是該二進制數據串的循環冗餘碼。
例如:
數據串為:1101011011
生成表達式為:10011
循環冗餘碼為1110
計算過程如下:
根據上述的計算方法,請編寫一個循環冗餘碼計算程序,假設二進制數據串的長度不超過20位,生成表達式固定為10011。
Input
輸入的第一行含一個正整數k (1<=k<=10),表示測試例的個數。後面緊接著k行,每行對應一個測試例,含一個N位二進制串(1<=N<=20),代表數據。
Output
每個測試例對應一行輸出,含一個5位二進制串,表示循環冗餘碼。
Sample Input
2
1101011011
10101010
Sample Output
01110
01001
Source
福建師范大學第三屆程序設計比賽網上預賽
My Program
┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄它是華麗的分隔線
【題意簡述】
對於輸入的二進制數,在末尾加上4個0後用10011對其進行模2除法。並輸出最後的結果(5位二進制碼)。
【粗略分析】
由於C++中沒有二進制的數據類型,因此採用字元串記錄。
觀察運算圖可知,每次都取前5位對它進行模2除法。我們可以設定一個i = 0 to n-5,用來計算每一步。
我們還可以觀察出,每次只有第i位為1時才會進行運算。所以我們加一個判定m[j]=='1'時才計算。
因為固定除數都為10011,我們直接將它列為數組,i=1 to 5 進行模2並存儲回字元數組即可。
【C++源代碼】
簡單地模擬一下計算過程就可以了。

