⑴ 計算機網路CRC檢驗中為什麼選擇16或32位效驗碼,效率最高
循環冗餘校驗(CRC)是一種根據網路數據封包或電腦檔案等數據產生少數固定位數的一種散列函數,主要用來檢測或校驗數據傳輸或者保存後可能出現的錯誤。生成的數字在傳輸或者儲存之前計算出來並且附加到數據後面,然後接收方進行檢驗確定數據是否發生變化。一般來說,循環冗餘校驗的值都是32位的整數。由於本函數易於用二進制的電腦硬體使用、容易進行數學分析並且尤其善於檢測傳輸通道干擾引起的錯誤,因此獲得廣泛應用。它是由W.WesleyPeterson在他1961年發表的論文中披露[1]。{{noteTA|T=zh-hans:循環冗餘校驗;zh-hant:循環冗餘校驗;|1=zh-hans:循環冗餘校驗;zh-hant:循環冗餘校驗;}}'''循環冗餘校驗'''(CRC)是一種根據網路數據封包或[[電腦檔案]]等數據產生少數固定位數的一種[[散列函數]],主要用來檢測或校驗數據傳輸或者保存後可能出現的錯誤。生成的數字在傳輸或者儲存之前計算出來並且附加到數據後面,然後接收方進行檢驗確定數據是否發生變化。一般來說,循環冗餘校驗的值都是32位的整數。由於本函數易於用二進制的[[電腦硬體]]使用、容易進行數學分析並且尤其善於檢測傳輸通道干擾引起的錯誤,因此獲得廣泛應用。它是由[[W.WesleyPeterson]]在他1961年發表的論文中披露{{citejournal|author=Peterson,W.W.andBrown,D.T.|year=1961|month=January|title=CyclicCodesforErrorDetection|journal=ProceedingsoftheIRE|doi=10.1109/JRPROC.1961.287814|issn=0096-8390|volume=49|pages=228}}。==簡介==CRC「校驗和」是兩個位元數據流採用二進制除法(沒有進位,使用XOR異或來代替減法)相除所得到的余數。其中被除數是需要計算校驗和的信息數據流的二進製表示;除數是一個長度為n+1的預定義(短)的二進制數,通常用多項式的系數來表示。在做除法之前,要在信息數據之後先加上n個0.CRCa是基於[[有限域]]GF(2)([[同餘|關於2同餘]])的[[多項式環]]。簡單的來說,就是所有系數都為0或1(又叫做二進制)的多項式系數的集合,並且集合對於所有的代數操作都是封閉的。例如::(x^3+x)+(x+1)=x^3+2x+1\equivx^3+12會變成0,因為對系數的加法都會模2.乘法也是類似的::(x^2+x)(x+1)=x^3+2x^2+x\equivx^3+x我們同樣可以對多項式作除法並且得到商和余數。例如,如果我們用''x''3+''x''2+''x''除以''x''+1。我們會得到::\frac{(x^3+x^2+x)}{(x+1)}=(x^2+1)-\frac{1}{(x+1)}也就是說,:(x^3+x^2+x)=(x^2+1)(x+1)-1這里除法得到了商''x''2+1和余數-1,因為是奇數所以最後一位是1。字元串中的每一位其實就對應了這樣類型的多項式的系數。為了得到CRC,我們首先將其乘以x^{n},這里n是一個固定多項式的[[多項式的階|階]]數,然後再將其除以這個固定的多項式,余數的系數就是CRC。在上面的等式中,x^2+x+1表示了本來的信息位是111,x+1是所謂的'''鑰匙''',而余數1(也就是x^0)就是CRC.key的最高次為1,所以我們將原來的信息乘上x^1來得到x^3+x^2+x,也可視為原來的信息位補1個零成為1110。一般來說,其形式為::M(x)\cdotx^{n}=Q(x)\cdotK(x)+R(x)這里M(x)是原始的信息多項式。K(x)是n階的「鑰匙」多項式。M(x)\cdotx^{n}表示了將原始信息後面加上n個0。R(x)是余數多項式,既是CRC「校驗和」。在通訊中,發送者在原始的信息數據M後加上n位的R(替換本來附加的0)再發送。接收者收到M和R後,檢查M(x)\cdotx^{n}-R(x)是否能被K(x)整除。如果是,那麼接收者認為該信息是正確的。值得注意的是M(x)\cdotx^{n}-R(x)就是發送者所想要發送的數據。這個串又叫做''codeword''.CRCs經常被叫做「[[校驗和]]」,但是這樣的說法嚴格來說並不是准確的,因為技術上來說,校驗「和」是通過加法來計算的,而不是CRC這里的除法。「[[錯誤糾正編碼]]」常常和CRCs緊密相關,其語序糾正在傳輸過程中所產生的錯誤。這些編碼方式常常和數學原理緊密相關。==實現====變體==CRC有幾種不同的變體*shiftRegister可以逆向使用,這樣就需要檢測最低位的值,每次向右移動一位。這就要求polynomial生成逆向的數據位結果。''實際上這是最常用的一個變體。''*可以先將數據最高位讀到移位寄存器,也可以先讀最低位。在通訊協議中,為了保留CRC的[[突發錯誤]]檢測特性,通常按照[[物理層]]發送數據位的方式計算CRC。*為了檢查CRC,需要在全部的碼字上進行CRC計算,而不是僅僅計算消息的CRC並把它與CRC比較。如果結果是0,那麼就通過這項檢查。這是因為碼字M(x)\cdotx^{n}-R(x)=Q(x)\cdotK(x)可以被K(x)整除。*移位寄存器可以初始化成1而不是0。同樣,在用演算法處理之前,消息的最初n個數據位要取反。這是因為未經修改的CRC無法區分只有起始0的個數不同的兩條消息。而經過這樣的取反過程,CRC就可以正確地分辨這些消息了。*CRC在附加到消息數據流的時候可以進行取反。這樣,CRC的檢查可以用直接的方法計算消息的CRC、取反、然後與消息數據流中的CRC比較這個過程來完成,也可以通過計算全部的消息來完成。在後一種方法中,正確消息的結果不再是0,而是\sum_{i=n}^{2n-1}x^{i}除以K(x)得到的結果。這個結果叫作核驗多項式C(x),它的十六進製表示也叫作[[幻數]]。按照慣例,使用CRC-32多項式以及CRC-16-CCITT多項式時通常都要取反。CRC-32的核驗多項式是C(x)=x^{31}+x^{30}+x^{26}+x^{25}+x^{24}+x^{18}+x^{15}+x^{14}+x^{12}+x^{11}+x^{10}+x^8+x^6+x^5+x^4+x^3+x+1。==錯誤檢測能力==CRC的錯誤檢測能力依賴於關鍵多項式的階次以及所使用的特定關鍵多項式。''誤碼多項式''E(x)是接收到的消息碼字與正確消息碼字的''異或''結果。當且僅當誤碼多項式能夠被CRC多項式整除的時候CRC演算法無法檢查到錯誤。*由於CRC的計算基於除法,任何多項式都無法檢測出一組全為零的數據出現的錯誤或者前面丟失的零。但是,可以根據CRC的[[#變體|變體]]來解決這個問題。*所有隻有一個數據位的錯誤都可以被至少有兩個非零系數的任意多項式檢測到。誤碼多項式是x^k,並且x^k只能被i\lek的多項式x^i整除。*CRC可以檢測出所有間隔距離小於[[多項式階次]]的雙位錯誤,在這種情況下的誤碼多項式是E(x)=x^i+x^k=x^k\cdot(x^{i-k}+1),\;i>k。如上所述,x^k不能被CRC多項式整除,它得到一個x^{i-k}+1項。根據定義,滿足多項式整除x^{i-k}+1的{i-k}最小值就是多項是的階次。最高階次的多項式是[[本原多項式]],帶有二進制系數的n階多項式==CRC多項式規范==下面的表格略去了「初始值」、「反射值」以及「最終異或值」。*對於一些復雜的校驗和來說這些十六進制數值是很重要的,如CRC-32以及CRC-64。通常小於CRC-16的CRC不需要使用這些值。*通常可以通過改變這些值來得到各自不同的校驗和,但是校驗和演算法機制並沒有變化。CRC標准化問題*由於CRC-12有三種常用的形式,所以CRC-12的定義會有歧義*在應用的CRC-8的兩種形式都有數學上的缺陷。*據稱CRC-16與CRC-32至少有10種形式,但沒有一種在數學上是最優的。*同樣大小的CCITTCRC與ITUCRC不同,這個機構在不同時期定義了不同的校驗和。==常用CRC(按照ITU-IEEE規范)=={|class="wikitable"!名稱||多項式||表示法:正常或者翻轉|-|CRC-1||x+1(用途:硬體,也稱為[[奇偶校驗位]])||0x1or0x1(0x1)|-|CRC-5-CCITT||x^{5}+x^{3}+x+1([[ITU]]G.704標准)||0x15(0x??)|-|CRC-5-USB||x^{5}+x^{2}+1(用途:[[USB]]信令包)||0x05or0x14(0x9)|-|CRC-7||x^{7}+x^{3}+1(用途:通信系統)||0x09or0x48(0x11)|-|CRC-8-ATM||x^8+x^2+x+1(用途:ATMHEC)||0x07or0xE0(0xC1)|-|CRC-8-[[CCITT]]||x^8+x^7+x^3+x^2+1(用途:[[1-Wire]][[匯流排]])|||-|CRC-8-[[Dallas_Semiconctor|Dallas]]/[[Maxim_IC|Maxim]]||x^8+x^5+x^4+1(用途:[[1-Wire]][[bus]])||0x31or0x8C|-|CRC-8||x^8+x^7+x^6+x^4+x^2+1||0xEA(0x??)|-|CRC-10||x10+x9+x5+x4+x+1||0x233(0x????)|-|CRC-12||x^{12}+x^{11}+x^3+x^2+x+1(用途:通信系統)||0x80For0xF01(0xE03)|-|CRC-16-Fletcher||參見[[Fletcher'schecksum]]||用於[[Adler-32]]A&BCRC|-|CRC-16-CCITT||''x''16+''x''12+''x''5+1([[X25]],[[V.41]],[[Bluetooth]],[[PPP]],[[IrDA]])||0x1021or0x8408(0x0811)|-|CRC-16-[[IBM]]||''x''16+''x''15+''x''2+1||0x8005or0xA001(0x4003)|-|CRC-16-[[BBS]]||x16+x15+x10+x3(用途:[[XMODEM]]協議)||0x8408(0x????)|-|CRC-32-Adler||See[[Adler-32]]||參見[[Adler-32]]|-|CRC-32-MPEG2||See[[IEEE802.3]]||參見[[IEEE802.3]]|-|CRC-32-[[IEEE802.3]]||x^{32}+x^{26}+x^{23}+x^{22}+x^{16}+x^{12}+x^{11}+x^{10}+x^8+x^7+x^5+x^4+x^2+x+1||0x04C11DB7or0xEDB88320(0xDB710641)|-|CRC-32C(Castagnoli)||x^{32}+x^{28}+x^{27}+x^{26}+x^{25}+x^{23}+x^{22}+x^{20}+x^{19}+x^{18}+x^{14}+x^{13}+x^{11}+x^{10}+x^9+x^8+x^6+1||0x1EDC6F41or0x82F63B78(0x05EC76F1)|-|CRC-64-ISO||x^{64}+x^4+x^3+x+1(use:ISO3309)||(0xB000000000000001)|-|CRC-64-[[EcmaInternational|ECMA]]-182||x^{64}+x^{62}+x^{57}+x^{55}+x^{54}+x^{53}+x^{52}+x^{47}+x^{46}+x^{45}+x^{40}+x^{39}+x^{38}+x^{37}+x^{35}+x^{33}+x^{32}+x^{31}+x^{29}+x^{27}+x^{24}+x^{23}+x^{22}+x^{21}+x^{19}+x^{17}+x^{13}+x^{12}+x^{10}+x^9+x^7+x^4+x+1(asdescribedin[CRC16toCRC64collisionresearch]*[index.htm#SAR-PR-2006-05ReversingCRC–TheoryandPractice.]{{math-stub}}[[Category:校驗和演算法]][[bg:CRC]][[ca:Controlderendànciacíclica]][[cs:Cyklickýrendantnísoučet]][[de:ZyklischeRendanzprüfung]][[en:Cyclicrendancycheck]][[es:Controlderendanciacíclica]][[eu:CRC]][[fi:CRC]][[fr:Contrôlederedondancecyclique]][[he:בדיקתיתירותמחזורית]][[id:CRC]][[it:Cyclicrendancycheck]][[ja:巡迴冗長検査]][[ko:순환중복검사]][[nl:CyclicRendancyCheck]][[pl:CRC]][[pt:CRC]][[ru:Циклическийизбыточныйкод]][[simple:Cyclicrendancycheck]][[sk:Kontrolacyklickýmkódom]][[sv:CyclicRendancyCheck]][[vi:CRC]]
⑵ 計算機網路循環冗餘檢驗 中的除數怎麼來的
首先要知道CRC生成的多項式P(X)。除數的位數是P(X)最高次冪+1。P(X)每個冪數代表著除數從右到左第幾位為1,其餘的都為0,就得出除數了。比如P(X)=X^4+X^3+1,則除數個數為5,從右往左分別為0 1 2 3 4位,其中4,3,0位為1,其餘為0。除數為11001
⑶ 在計算機網路中什麼是crc校驗和,怎麼計算
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)*2R),這樣C(x)的右邊就會空出R位,這就是校驗碼的位置。用 C(x)*2R 除以生成多項式G(x)得到的余數就是校驗碼。
謝謝 希望能幫助到你
⑷ 循環冗餘檢驗是什麼
數據通信中應用最廣的一種檢驗差錯方法。方法是在發送端用數學方法產生一個循環碼,叫做循環冗餘檢驗碼。在信息碼位之後隨信息一起發出。在接收端也用同樣方法產生一個循環冗餘校驗碼。將這兩個校驗碼進行比較,如果一致就證明所傳信息無誤;如果不一致就表明傳輸中有差錯,並要求發送端再傳輸。
⑸ 如何解決「數據錯誤,循環冗餘檢查
數據錯誤循環冗餘檢查說明這個盤的文件系統結構損壞了。在平時如果數據不重要,那麼可以直接格式化就能用了。但是有的時候裡面的數據很重要,那麼就必須先恢復出數據再格式化,具體操作步驟如下:
1、首先我們下載並解壓數據恢復軟體運行後,直接雙擊需要恢復的分區,接著右擊軟體圖標選擇《以管理員身份運行》。
⑹ 計算機網路作業 若用循環冗餘碼校驗方法
在10110111001後面加00000,然後將1011011100100000與多項式生成的二進制101011進行除(異或)後得到的余數。再將余數與要傳輸的10110111001連接起來就行了。最後結果得:1011011100111100
⑺ 計算機網路中循環冗餘檢驗的解釋
教科書定義:循環冗餘校驗碼CRC是一種循環碼,它有很強的檢錯能力,而且容易用硬體實現,在區域網中有廣泛應用。
簡單的說下它的實現:用移位寄存器實現,移位寄存器由k位組成,還有幾個異或門和一條反饋迴路。移位寄存器可以按CCITT-CRC標准生成16位的校驗和。寄存器被初始化為0,數據字從右向左逐位輸入。當一位從最左邊移除寄存器時就從右邊輸入完後再輸入k個0。最後,當這一過程結束時,移位寄存器中就形成了校驗和。k位的校驗和跟在數據位後邊發送,接收端可以按同樣的過程計算校驗和並與接收到的校驗和比較,以檢測傳輸中的差錯。
具體實現和數學分析建議你參考網路http://ke..com/view/575295.htm
⑻ 數據錯誤(循環冗餘檢查) 是什麼意思
我想你的問題應該是這樣的,當你刪除文件或者是復制文件的時候彈出「無法刪除或復制:數據錯誤(循環冗餘檢查)」。出現這種情況,是因為你的這個文件有某些數據記錄不正確,也有可能硬碟某處物理損壞讀不過去(也就是硬碟有壞道)。循環冗餘檢查(CRC)是一種數據傳輸檢錯功能,對數據進行多項式計算,並將得到的結果附在幀的後面,接收設備也執行類似的演算法,以保證數據傳輸的正確性和完整性。若CRC校驗不通過,系統重復向硬碟復制數據,陷入死循環,導致刪除或復制過程無法完成,甚至會造成死機。一般出現這種情況,你是搞不定的,建議你拿到電腦公司讓他們去修,你自己搞的話,有可能會把硬碟弄壞!
⑼ 計算機網路,關於數據鏈路層差錯檢測的【循環冗餘演算法】
P應是由循環冗餘演算法規則算出來的,太久了,具體細節你再翻翻書。
⑽ "數據錯誤(循環冗餘檢查)"是什麼意思應該怎麼操作
死馬當做活馬醫—復制文件也「多進程」
問題描述:近來從光碟上復制一電影文件到硬碟上,復制到某一進度時,速度忽然越來越慢,不一會兒,彈出一錯誤提示窗口「無法復制:數據錯誤(循環冗餘檢查)」。重復幾次,依然如此。
問題分析:出現這種情況,是因為光碟刻錄時有某些數據記錄不正確,也有可能是光碟與你的光碟機不兼容,或光碟機某處物理損壞讀不過去。循環冗餘檢查(CRC)是一種數據傳輸檢
錯功能,對數據進行多項式計算,並將得到的結果附在幀的後面,接收設備也執行類似的演算法,以保證數據傳輸的正確性和完整性。若CRC校驗不通過,系統重復向硬碟復制數據,陷入死循環,導致復制過程無法完成。
解決辦法:注意到在上述過程中實際已有一部分數據復制到硬碟,只是碰到某些數據CRC校驗不通過時,Windows的復制命令無法跳過這些數據繼續執行。而當操作無法完成後,系統會把已經復制到硬碟上的數據刪除,這樣導致復制完全失敗。如果在復制時能跳過錯誤數據,這個問題不就能解決了嗎?
我們從網上下載文件時,較常用的下載工具是FlashGet。FlashGet可以把一個文件分成幾部分同時下載,也可以同時進行多個下載進程。那麼能不能在復制本地文件時也用FlashGet來多進程操作呢?答案是肯定的。
實戰操作:首先,你需要有一個本地站點。對於Windows 2000的用戶,只要系統中安裝了IIS(Internet信息服務)就可以了。如果還沒有安裝,那麼到「控制面板→添加/刪除程序→添加/刪除Windows組件」中,點擊組件,選擇IIS,點「下一步」,插入安裝光碟即可。
接著,創建一個虛擬目錄,地址對應於你的光碟盤符,這樣就無須對IIS的配置作任何改動。以Windows 2000的IIS5.0為例,創建虛擬目錄的步驟如下:
1.在「開始菜單→程序→管理工具」中啟動IIS;
2.在「默認Web站點」上點右鍵,選擇「新建→虛擬目錄」;
3.輸入目錄名稱,假定名稱為hao;
4.輸入目錄路徑(如圖1,路徑應為你的光碟路徑,並且此時光碟機中應有光碟,否則不能創建),其餘無須更改,一直「下一步」就可以完成了。
小提示:對於Windows 98的用戶,可以安裝PWS(個人網站發布系統),安裝程序是Windows 98安裝盤的add-ons\pws\setup.exe,之後再創建虛擬目錄。
然後,啟動FlashGet,新建一下載任務,在網址欄中輸入「localhost/hao/天地英雄.rm」(如圖2)。
這里的「hao」就代表了光碟盤符。若文件不在光碟根目錄下,則還應加上完整的路徑。然後選擇適當的下載目錄,保持FlashGet默認下的進程數,點「確定」,下載過程就開始了。在FlashGet的窗口查看此下載過程的圖表/日誌,可以看到文件被分成五個部分同時下載。
當其中一個進程進行到一定進度時碰上錯誤數據,速度逐漸降為零,但其他幾部分仍照常進行。而當其餘幾部分完成後,又會把剩餘的部分分成幾部分來下載。這樣除了錯誤數據,其餘均被下載到硬碟。此時,FlashGet窗口顯示完成99%,速度為0。
最後,到下載目錄把文件「天地英雄.rm.jc!」的名稱改為「天地英雄.rm」,復制過程就完成了。這樣做速度雖然比直接從光碟復制到硬碟要慢一些,但避免了對錯誤數據的重復操作,使復制過程基本順利完成。點擊此文件播放,非常流暢,文件缺少極少的數據根本不影響該文件的正常播放。至此,大功告成。
摘自 賽迪網--中國電腦教育報 2003/11/21 作者:王曉賓