在數(shù)字?jǐn)?shù)據(jù)通信中,由發(fā)送器發(fā)送的數(shù)據(jù)信號禎(Frame)在經(jīng)由網(wǎng)絡(luò)傳到接收器后,由于多種原因可能導(dǎo)致錯誤位(bit errors)的出現(xiàn),因此必須由接收器采取一定的措施探測出所有的錯誤位,并進(jìn)而采取一定的措施予以修正。
一、錯誤檢測的基本原理(Principle of Error Check)
發(fā)送器向所發(fā)送的數(shù)據(jù)信號禎添加錯誤檢驗碼(Check Bits),并取該錯誤檢測碼作為該被傳輸數(shù)據(jù)信號的函數(shù);接收器根據(jù)該函數(shù)的定義進(jìn)行同樣的計算,然后將兩個結(jié)果進(jìn)行比較:如果結(jié)果相同,則認(rèn)為無錯誤位;否則認(rèn)為該數(shù)據(jù)禎存在有錯誤位。
一般說來,錯誤檢測可能出現(xiàn)三種結(jié)果:
1. 在所傳輸?shù)臄?shù)據(jù)禎中未探測到,也不存在錯誤位
2. 所傳輸?shù)臄?shù)據(jù)禎中有一個或多個被探測到的錯誤位,但不存在未探測到的錯誤位
3. 被傳輸?shù)臄?shù)據(jù)禎中有一個或多個沒有被探測到的錯誤位。
顯然我們希望盡可能好地選擇該檢測函數(shù),使檢測結(jié)果可靠,即:所有的錯誤最好都能被檢測出來;如檢測出現(xiàn)無錯結(jié)果,則應(yīng)不再存在任何未被檢測出來的錯誤。
實際采用的錯誤檢測方法主要有兩類:奇偶校驗(Parity)和CRC循環(huán)冗余校驗(Cyclic Redundancy Check)。
二、奇偶校驗(Parity)
1.單向奇偶校驗
單向奇偶校驗(Row Parity)由于一次只采用單個校驗位,因此又稱為單個位奇偶校驗(Single Bit Parity)。發(fā)送器在數(shù)據(jù)禎每個字符的信號位后添一個奇偶校驗位,接收器對該奇偶校驗位進(jìn)行檢查。典型的例子是面向ASCII碼的數(shù)據(jù)信號禎的傳輸,由于ASCII碼是七位碼,因此用第八個位碼作為奇偶校驗位。
單向奇偶校驗又分為奇校驗(Odd Parity)和偶校驗(Even Parity),發(fā)送器通過校驗位對所傳輸信號值的校驗方法如下:奇校驗保證所傳輸每個字符的8個位中1的總數(shù)為奇數(shù);偶校驗則保證每個字符的8個位中1的總數(shù)為偶數(shù)。
顯然,如果被傳輸字符的7個信號位中同時有奇數(shù)個(例如1、3、5、7)位出現(xiàn)錯誤,均可以被檢測出來;但如果同時有偶數(shù)個(例如2、4、6)位出現(xiàn)錯誤,單向奇偶校驗是檢查不出來的。
一般在同步傳輸方式中常采用奇校驗,而在異步傳輸方式中常采用偶校驗。
2.雙向奇偶校驗
為了提高奇偶校驗的檢錯能力,可采用雙向奇偶校驗(Row and Column Parity),也可稱為雙向冗余校驗(Vertical and Longitudinal Redundancy Checks)。
三、CRC循環(huán)冗余校驗(Cyclic Redundancy Check)
1.CRC循環(huán)冗余校驗的基本原理
發(fā)送器和接收器約定選擇同一個由n+1個位組成的二進(jìn)制位列P作為校驗列,發(fā)送器在數(shù)據(jù)禎的K個位信號后添加n個位(n < K)組成的FCS禎檢驗列(Frame Check Sequence),以保證新組成的全部信號列值可以被預(yù)定的校驗二進(jìn)制位列P的值對二取模整除;接收器檢驗所接收到數(shù)據(jù)信號列值(含有數(shù)據(jù)信號禎和FCS禎檢驗列)是否能被校驗列P對二取模整除,如果不能,則存在傳輸錯誤位。P被稱為CRC循環(huán)冗余校驗列,正確選擇P可以提高CRC冗余校驗的能力。(注:對二取模的四則運算指參與運算的兩個二進(jìn)制數(shù)各位之間凡涉及加減運算時均進(jìn)行XOR異或運算,即:1 XOR 1=0,0 XOR 0=0,1 XOR 0=1)??梢宰C明,只要數(shù)據(jù)禎信號列M和校驗列P是確定的,則可以唯一確定FCS禎檢驗列(也稱為CRC冗余檢驗值)的各個位。
FCS幀檢驗列可由下列方法求得:在M后添加n個零后對二取模整除以P所得的余數(shù)。
例如:如要傳輸?shù)腗=7位列為1011101,選定的P校驗二進(jìn)制位列為10101(共有n+1=5位),對應(yīng)的FCS幀校驗列即為用1011101 0000(共有M+n=7+4=11位)對二取模整除以10101后的余數(shù)0111(共有n=4位)。因此,發(fā)送方應(yīng)發(fā)送的全部數(shù)據(jù)列為10111010111。接收方將收到的11位數(shù)據(jù)對二取模整除以P校驗二進(jìn)制位列10101,如余數(shù)非0,則認(rèn)為有傳輸錯誤位。
2.CRC循環(huán)冗余校驗標(biāo)準(zhǔn)多項式P(X)
為了表示方便,實用時發(fā)送器和接收器共同約定選擇的校驗二進(jìn)制位列P常被表示為具有二進(jìn)制系數(shù)(1或0)的CRC標(biāo)準(zhǔn)校驗多項式P(X)。
(1)CRC循環(huán)冗余校驗常用的標(biāo)準(zhǔn)多項式P(X)
常用的CRC循環(huán)冗余校驗標(biāo)準(zhǔn)多項式如下:
CRC(16位) = X^16+X^15+X^2+1
CRC(CCITT) = X^16+X^12+X^5+1
CRC(32位) =X^32+X^26+X^23+X^16+X^12+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X+1
以CRC(16位)多項式為例,其對應(yīng)校驗二進(jìn)制位列為1 1000 0000 0000 0101。
注意:這兒列出的標(biāo)準(zhǔn)校驗多項式P(X)都含有(X+1)的多項式因子;各多項式的系數(shù)均為二進(jìn)制數(shù),所涉及的四則運算仍遵循對二取模的運算規(guī)則。
(2)CRC循環(huán)冗余校驗標(biāo)準(zhǔn)多項式P(X)的檢錯能力
CRC循環(huán)冗余校驗具有比奇偶校驗強得多的檢錯能力??梢宰C明:它可以檢測出所有的單個位錯、幾乎所有的雙個位錯、低于P(X)對應(yīng)二進(jìn)制校驗列位數(shù)的所有連續(xù)位錯、大于或等于P(X)對應(yīng)二進(jìn)制校驗列位數(shù)的絕大多數(shù)連續(xù)位錯。
但是,當(dāng)傳輸中發(fā)生的錯誤多項式E(X)能被校驗多項式P(X)對二取模整除時,它就不可能被P(X)探測出來,例如當(dāng)E(X)=P(X)時。
四、錯誤修正(Error Correction)
對數(shù)據(jù)信號禎傳輸過程中的位錯進(jìn)行修正的方法主要有兩種:
1. 由發(fā)送器提供錯誤修正碼,然后由接收器自己修正錯誤
2. 在接收器發(fā)現(xiàn)接收到的錯誤禎中有位錯誤時,通知發(fā)送器重新發(fā)送數(shù)據(jù)信號禎。
前一種方法中的錯誤修正碼需要發(fā)送器由被傳送數(shù)據(jù)信號禎計算得到,然后添加到數(shù)據(jù)禎的后面,其長度幾乎等于數(shù)據(jù)位數(shù),導(dǎo)致效率降低50%,實際采用不多;一般采用后一種較為有效的重發(fā)送方法。
數(shù)據(jù)交換技術(shù)(Data Switching Technology)
在數(shù)據(jù)通信線路中,最簡單的形式是在由某種傳輸介質(zhì)直接連接的兩臺設(shè)備之間進(jìn)行通信。但在長距離通信中,從源站發(fā)出的數(shù)據(jù)一般還需要經(jīng)過網(wǎng)絡(luò)中一個或多個用作交換設(shè)備的中間結(jié)點,由相應(yīng)結(jié)點的交換設(shè)備把數(shù)據(jù)從一個結(jié)點傳送到另一個結(jié)點,直至到達(dá)目的站。通常我們將交換網(wǎng)絡(luò)中所有通信的發(fā)送方與接收方的主機均簡稱為站,而將通信交換設(shè)備簡稱為結(jié)點。這些結(jié)點以不規(guī)則的網(wǎng)狀結(jié)構(gòu)用傳輸線路互相連接起來,而每個站點都連接到某個結(jié)點上。
在交換網(wǎng)絡(luò)中,站點之間需要通過有關(guān)結(jié)點之間的數(shù)據(jù)交換才能實現(xiàn)數(shù)據(jù)通信,基本的交換技術(shù)有兩類:電路交換與存儲轉(zhuǎn)發(fā),存儲轉(zhuǎn)發(fā)又可以分為報文交換和分組交換,分組交換則可分為面向連接的虛電路傳輸和無連接的數(shù)據(jù)報傳輸。目前,最具有發(fā)展前景的是高速分組交換技術(shù)。