您所在的位置:读书频道 > 网络与维护 > 网络协议 > 7.3.3 检错码方案

7.3.3 检错码方案

2007-07-05 12:56 王达 电子工业出版社 字号:T | T
一键收藏,随时查看,分享好友!

本章主要介绍局域网、广域网,以及OSI各层主要功能及其工作原理这些基本的计算机网络通信技术,同时还将介绍计算机网络数据通信中常见的技术指标和参数。这些都是我们平常进行各种网络工程施工和系统设计的基础和前提。本节是检错码方案介绍。

AD:

7.3.3  检错码方案
在差错控制方面,主要是通过干扰码的方式进行的,其中又有两种方案:纠错码和检错码。纠错码方案(下节将介绍)广泛应用于无线链路中,因为无线链路相比铜线或者光纤链路有更多的噪声,也更容易出错。如果不使用纠错码方案的话,则很可能不能进行任何有效数据传输。然而对于像铜线或光纤链路这样错误率非常低的链路来说,如果采用纠错码方案,效率会受到严重影响。这时就得采用效率更高的检错码方案了。所谓"检错",顾名思义就是检查错误。
为了说明检错码方案比记错码方案效率更高,现举一个例子。假如错误率为每位10-6,这样对于一个1000位的数据块,为了提高纠错功能,需要10个校验位;1Mbit的数据则需要10000个校验位。如果仅仅为了检测数据块中的单个1位错误,则每个数据块1个奇偶位就足够了。每1000个数据块也就需要额外传输一个数据块(1001位)。利用"错误检测+重传"的方法,总的开销是每1Mbit数据只需要2001位。相比之下,如果利用海明码,则需要10000位,显然效率高许多。
在检错码方案中,"奇偶校验码"和"循环冗余编码"这两种方案应用最广,下面分别予以介绍。
1.奇偶校验码
奇偶校验码通过在数据后加上一个奇偶位(Parity Bit),使得码字中"1"的个数为固定的奇数或偶数的编码方法,是一种检错码。如使用偶校验("1"的个数恒为偶数)方式,则当"1"的个数为偶数时,在后面加一个"0"作为校验码,使其中的"1"个数仍为偶数个;如果"1"的个数为奇数,则在后面加"1"作为校验码,仍保持其中的"1"个数为偶数个。如:

10110101 --> 101101011
10110001 --> 101100010
但奇偶校验只可以用来检查单个错误,所以它检错能力差,一般只用于通信要求较低的环境。 
2.循环冗余编码(CRC)
CRC校验采用多项式编码方法。它的基本思想是把被处理的数据块看做是一个n阶的二进制多项式:a0x0+ a1x1+ a2x2+…+ an-1xn-1。如一个8 位二进制数10110101,表示为多项式g(x)后即为:g(x)=1x7 + 0x6 +1x5 +1x4 + 0x3 +1x2 + 0x +1
多项式乘除法运算过程与普通代数多项式的乘除法相同。多项式的加减法运算以2为模,加减时不进、错位,和逻辑异或运算一致。如下面的例子:
10011011        00110011          11100000     10100010
+  11001010      + 11001101         -10100110    -10101111
01010001        11111110          01000110     00001111
当采用CRC校验时,发送方和接收方用同一个生成多项式g(x),并且g(x)的首位和最后一位的系数必须为1。CRC的处理方法是:发送方以g(x)去除t(x)(二进制数据),得到余数作为CRC 校验码。校验时,以计算的校正结果是否为0 为据,判断数据帧是否出错。
CRC校验可以100%地检测出所有奇数个随机错误和长度小于等于k(k为g(x)的阶数)的突发错误。所以CRC的生成多项式的阶数越高,那么误判的概率就越小。CCITT建议:2048Kbit/s的PCM基群设备采用CRC-4方案,使用的CRC校验码生成多项式g(x)= x4 + x +1。采用16位CRC校验,可以保证在1014bit码元中只含有一位未被检测出的错误。在IBM的同步数据链路控制规程SDLC的帧校验序列FCS 中,使用CRC-16,其生成多项式g(x)= x16 + x15 + x2 +1;而在CCITT推荐的高级数据链路控制规程HDLC的帧校验序列FCS中,使用CCITT-16,其生成多项式g(x)= x16 + x15 + x5 +1 。
CRC校验码的编码方法是用待发送的二进制数据t(x)除以生成多项式g(x),将最后的余数作为CRC校验码。具体实现步骤如下。
(1)设待发送的数据块是m位的二进制多项式t(x),生成多项式为r阶的g(x)。在数据块的末尾添加r个0,数据块的长度增加到m+r位,对应的二进制多项式为xr t(x)。
(2)用生成多项式g(x)去除xrt(x),求得余数为阶数r-1的二进制多项式y(x)。此二进制多项式y(x)就是t(x)经过生成多项式g(x)编码的CRC校验码。
(3)用xrt(x)以模2的方式减去y(x),得到二进制多项式xrt'(x)。xrt'(x)就是包含了CRC校验码的待发送字符串。
从CRC的编码规则可以看出,CRC编码实际上是将代发送的m位二进制多项式t(x)转换成了可以被g(x)除尽的m+r位二进制多项式xrt'(x),所以解码时可以用接收到的数据去除g(x),如果余数位零,则表示传输过程没有错误;如果余数不为零,则在传输过程中肯定存在错误。许多CRC的硬件解码电路就是按这种方式进行检错的。同时xrt'(x)可以看做是由t(x)和CRC校验码的组合,所以解码时将接收到的二进制数据去掉尾部的r位数据,得到的就是原始数据。
为了更清楚地了解CRC校验码的编码过程,下面用一个简单的例子来说明CRC校验码的编码过程。由于CRC-32、CRC-16、CCITT和CRC-4的编码过程基本一致,只有位数和生成多项式不一样。为了叙述简单,用一个CRC-4编码的例子来说明CRC的编码过程。
设待发送的数据t(x)为12位的二进制数据100100011100。因为CRC-4的生成多项式为g(x)= x4 + x +1,阶数r为4,即10011。首先在t(x)的末尾添加4个0,构成x4t(x),数据块就成了1001000111000000。然后用g(x)去除x4t(x),不用管商是多少,只需要求得余数y(x)。表7-2为给出了以上3步的除法过程。
表7-2  演示示例除法步骤

被除数/ gx/结果   

   

0

1 001000111000000

100111000000

1 0011

0 000100111000000

1

1 00111000000 

1000000

1 0011

0 00001000000

2

1 000000

1100

1 0011

0 001100


从表7-2中可以看出,CRC编码实际上是一个循环移位的模2运算。对CRC-4,假设有一个5位的寄存器,通过反复的移位和进行CRC的除法,那么最终该寄存器中的值去掉最高一位就是所要求的余数。
【责任编辑:雪花 TEL:(010)68476606-8007】

回书目   上一节   下一节

分享到:

栏目热门

更多>>

  1. Linux服务器配置全程实录
  2. 揭秘--优秀PPT这样制作

热点职位

更多>>

热点专题

更多>>

读书

网管员必读—网络应用
本书是一本介绍当前主流计算机网络应用技术的工具图书,全面总结了当前最主流、最基础的计算机网络应用,包括局域网和互联网应用

51CTO旗下网站

领先的IT技术网站 51CTO 领先的中文存储媒体 WatchStor 中国首个CIO网站 CIOage 中国首家数字医疗网站 HC3i 51CTO学院