差错检测和纠错技术
一、差錯(cuò)檢測(cè)和糾錯(cuò)技術(shù)簡(jiǎn)單介紹
本篇講的差錯(cuò)檢測(cè)和糾錯(cuò)技術(shù)主要是針對(duì)比特錯(cuò)誤。
對(duì)一個(gè)節(jié)點(diǎn)發(fā)送到一個(gè)相鄰節(jié)點(diǎn)的幀,檢測(cè)是否出現(xiàn)比特差錯(cuò),并糾正。相關(guān)技術(shù)有很多,下圖為差錯(cuò)檢測(cè)和糾正的過(guò)程。
在發(fā)送節(jié)點(diǎn),數(shù)據(jù)D附加若干差錯(cuò)檢測(cè)和糾錯(cuò)位EDC,一起發(fā)送到鏈路。數(shù)據(jù)D包括網(wǎng)絡(luò)層傳來(lái)的數(shù)據(jù)報(bào),以及鏈路級(jí)尋址信息、序列號(hào)和其他字段。保護(hù)范圍包括數(shù)據(jù)D的所有字段。
接收節(jié)點(diǎn)接收比特序列D’和EDC’。接收方利用收到的D’按照規(guī)則來(lái)計(jì)算差錯(cuò)校驗(yàn)位EDC,看計(jì)算的EDC是否與收到的EDC’相同,相同則無(wú)錯(cuò)誤,不相同則有錯(cuò)誤。
這里需要說(shuō)明一下差錯(cuò)檢測(cè)技術(shù)和糾正技術(shù)不能保證接收方檢測(cè)到所有的比特差錯(cuò),即可能出現(xiàn)未檢測(cè)到的比特差錯(cuò),而接收方并未發(fā)現(xiàn)。所有我們需要選擇一個(gè)合適的差錯(cuò)檢測(cè)方案使未檢測(cè)到的情況發(fā)生的概率很小即可。
差錯(cuò)檢測(cè)和糾錯(cuò)技術(shù)越好,越復(fù)雜,開(kāi)銷更大。
二、三種主要的差錯(cuò)檢測(cè)技術(shù)
(1)奇偶校驗(yàn):最基本的方法。
(2)檢查和方法:常用于運(yùn)輸層。
(3)循環(huán)冗余檢測(cè):常用于鏈路層。
1、奇偶校驗(yàn)
1.1、一比特奇偶校驗(yàn)
(1)發(fā)送方:
在要發(fā)送的信息D(d位)后面附加一個(gè)奇偶校驗(yàn)位,發(fā)送數(shù)據(jù)中1的個(gè)數(shù)是奇數(shù)則位奇校驗(yàn),否則是偶校驗(yàn)。
如上圖所示,假設(shè)發(fā)送數(shù)據(jù)進(jìn)行偶校驗(yàn),則需要在校驗(yàn)位補(bǔ)充1以湊成偶數(shù)個(gè)1。 然后將d+1位數(shù)據(jù)一起傳輸發(fā)送。
(2)接收方:檢測(cè)收到的信息(d+1位)中“1”的個(gè)數(shù)。
若是使用偶校驗(yàn):當(dāng)發(fā)現(xiàn)奇數(shù)個(gè)1時(shí)表示至少有一個(gè)比特發(fā)生差錯(cuò)(奇數(shù)個(gè)比特差錯(cuò))。
若是使用奇校驗(yàn):當(dāng)發(fā)現(xiàn)偶數(shù)個(gè)1時(shí)表示至少有一個(gè)比特發(fā)生差錯(cuò)。
我們可以看到不管是奇校驗(yàn)還是偶校驗(yàn)都只能查出任意奇數(shù)個(gè)錯(cuò)誤,不能發(fā)現(xiàn)偶數(shù)個(gè)錯(cuò)誤。
若比特差錯(cuò)概率很小,差錯(cuò)獨(dú)立發(fā)生,一比特奇偶校驗(yàn)可滿足要求。 若差錯(cuò)集中在一起“突發(fā)”,一幀中未檢測(cè)到的差錯(cuò)的概率達(dá)到50%。
1.2、二維奇偶校驗(yàn)
基本思想:
首先將要傳的信息D(d比特)劃分為i行j列,即i個(gè)組,每組j位。其次,對(duì)每行和每列分別計(jì)算奇偶校驗(yàn)值。最后結(jié)果的i+j+1個(gè)奇偶比特構(gòu)成了幀的差錯(cuò)檢測(cè)比特。
如上圖,假設(shè)需要發(fā)送的數(shù)據(jù)是10101 11110 01110共15比特。劃分為3組,每組5個(gè)比特。分別進(jìn)行、列偶校驗(yàn),校驗(yàn)碼如上圖。假設(shè)在傳輸過(guò)程中有一個(gè)比特錯(cuò)誤,例如第二行第二列的1變?yōu)?。在接收方進(jìn)行校驗(yàn)時(shí)會(huì)發(fā)現(xiàn)第二行和第二列的校驗(yàn)碼不對(duì),這樣就會(huì)發(fā)現(xiàn)是第二行第二列的數(shù)據(jù)發(fā)生了錯(cuò)誤。
因此二維奇偶校驗(yàn)可以檢測(cè)并糾正單個(gè)比特差錯(cuò),可以檢測(cè)但不能糾正分組中任意兩個(gè)比特的差錯(cuò)。
2、檢查和方法
2.1、過(guò)程
(1)發(fā)送方:首先在發(fā)送方將數(shù)據(jù)的每?jī)蓚€(gè)字節(jié)當(dāng)作一個(gè)16位的整數(shù),可分成若干整數(shù)。然后將所有16位的整數(shù)求和,對(duì)得到的和逐位取反,作為檢查和,放在報(bào)文段首部,一起發(fā)送。
(2)接收方:對(duì)接收到的信息(包括檢查和)按與發(fā)送方相同的方法求和。若結(jié)果全1則表示收到的數(shù)據(jù)無(wú)差錯(cuò),若結(jié)果中有0表示收到的數(shù)據(jù)出現(xiàn)差錯(cuò)。
注意:當(dāng)數(shù)字作加法時(shí),最高位的進(jìn)位要回加到結(jié)果中。
如下例子:
2.2、檢查和特點(diǎn)
(1)分組開(kāi)銷小:檢查和位數(shù)比較少。
(2)差錯(cuò)檢測(cè)能力弱。
(3)適用于運(yùn)輸層,因?yàn)椴铄e(cuò)檢測(cè)用軟件實(shí)現(xiàn),檢查方法簡(jiǎn)單、快速。
(4)鏈路層的差錯(cuò)檢測(cè)由適配器中專用的硬件實(shí)現(xiàn),采用更強(qiáng)的循環(huán)冗余檢測(cè)方法。
3、循環(huán)冗余檢測(cè)(CRC)
3.1、檢測(cè)過(guò)程
這種檢測(cè)方法在計(jì)算機(jī)網(wǎng)絡(luò)中廣泛采用。
循環(huán)冗余檢測(cè)編碼:即多項(xiàng)式編碼,把要發(fā)送的比特串看作為系數(shù)是0或1的一個(gè)多項(xiàng)式,對(duì)比特串的操作看作為多項(xiàng)式運(yùn)算。
例如10111可看作x4^44+x2^22+x+1。
(1)發(fā)送方:首先在發(fā)送方計(jì)算出一個(gè)r位附加比特R,添加到D的后面產(chǎn)生DR(d+r)比特。DR能被生成多項(xiàng)式G模2運(yùn)算整除,一起發(fā)送。
(2)接收方:用生成多項(xiàng)式G去除接收到的DR(d+r)比特。若余數(shù)非0則表明傳輸發(fā)生差錯(cuò);若余數(shù)為0表示傳輸正確,去掉尾部r位,得所需數(shù)據(jù)D。
3.2、模2計(jì)算
模2計(jì)算:
加法不進(jìn)位,減法不借位,即操作數(shù)的按位異或(XOR)。
乘法和除法與二進(jìn)制運(yùn)算類似,其中加法或減法沒(méi)有進(jìn)位或錯(cuò)位。例如乘以2r^rr,即比特模式左移r個(gè)位置。
3.3、R的計(jì)算
計(jì)算R的步驟如下:
將數(shù)據(jù)D后面添加r個(gè)0,除以給定的生成多項(xiàng)式G,所得余數(shù)即為R(r位),r表示CRC編碼的位數(shù)。
設(shè)D=101110,d=6,G(生成多項(xiàng)式)=1001,CRC編碼是3比特即生成多項(xiàng)式位數(shù)減1。r=3。計(jì)算過(guò)程為:
最后算出的余數(shù)是011,即R。
因此實(shí)際傳輸?shù)臄?shù)據(jù)形式是:101110011
3.4、循環(huán)冗余碼CRC的特點(diǎn)
生成多項(xiàng)式G的選擇:有8、12、16和32比特生成多項(xiàng)式G。其中8比特的CRC用于保護(hù)ATM信元首部;32比特的標(biāo)準(zhǔn)CRC-32用于鏈路級(jí)協(xié)議。
CRC能檢測(cè)小于r+1位的突發(fā)差錯(cuò)、以及任意個(gè)奇數(shù)個(gè)差錯(cuò)。
總結(jié)
- 上一篇: IPv6数据报
- 下一篇: socket 套接字的基本概念