差错检测(error detection),是指在发送的码序列(码字)中加入适当的冗余度以使得接收端能够发现传输中是否发生差错的技术。除了用于通信外,差错检测技术也广泛用于信息存储中。
检测原理
差错检测是通过检错码来实现的,检错码C只是所有可能出现的序列集合X的一部分,在发送端只把数据编码成C中的码字来传输,当接收端收到不属于集合C的序列时,则认为发生了传输误码。检错码的好坏主要是由传输效率和漏检概率来度量的,传输效率是指每传输1比特实际载有的信息量,可表示为。若传输中的差错使一个码字错成另一个码字,检测系统则无法发现产生了误码,这称为漏检,相应的概率称为漏检概率。用于差错检测的码字应使漏检概率尽可能小而传输效率尽可能高,此外还必须考虑应具有有效地进行编码以及判定差错的方法。差错检测是自动请求重发技术的基础,同时也是现代电信网维护管理方面的一个重要组成部分。
电信网早期的差错检测仅简单地对线路码实施,如利用HDB3码或CMI码(见传输码型)的编码规则,检测出极性破坏的个数来对传输质量进行评估。当估计的误码率大到一定程度则发出相应的即时维护告警信号。这种检测方法的漏检概率很大,但适应早期的技术条件。
检测方法
在计算机通信中常用的差错检测技术有奇偶校验和分组校验两大类方法。
2.1 奇偶校验
这是一种基于字符的差错检测方法,适合于异步通讯。发送端,待发送的数据划分为字符的集合,在每一个要传输的字符(信息码)的后面附加一个比特的校验信息(称为监督码),使得信息码连同监督码在一起的1个数为奇数(奇校验)或偶数(偶校验)。接收端根据这一规则检测传输过程中足否有错。奇偶校验的监督码只有1位,并且只能检测出奇数个错误,但在数据通信过程中出现奇数个错误的概率远大于偶数个错误。它的最大缺点就是没有办法检测出偶数个错误,为避免这一缺点,引入方阵(两维)奇偶校验方法。总之奇偶校验,主要用于计算机内部的数据传送和I/O设备中。
2.2 分组校验
这是一种基于数据块的差错检测方法,适合于同步通讯。发送端,待发送的数据划分为数据块的集合,对当前每一个要传输的数据块(信息码),根据一定的计算规则,计算出一个附加的校验数据块,紧跟于信息码发送出去。接收端,使用同样的规则进行校验以确定传输是否有错。在计算机通信中,典型的分组校验方法有校验和法与循环冗余校验法两种。
(1)校验和法:这是一种简单而快速的分组校验方法。一种简单的校验和方法就是按一定的位数求数据块的和,然后将该结果值作为校验码。在TCP/IP协议中IP数据报就使用这种简单的方法对数据报的首部进行检验.发送端,将数据划分为16位码字(数据组)的集合,然后求它们的和,将和的反码作为所谓的因特网校验和。接收端,对收到的数据计算校验和,检查是否匹配收到的分组中所携带的校验和字段。显然,很容易找到不同的分组数据块具有相同的校验和,从而使得这种校验方法不足以保证可靠的数据通信,但是计算校验和简单、快速,以致在一些要求用软件方法进行校验的应用程序如因特网协议中有一定的应用价值。
(2)循环冗余校验(CRC)是利用分组循环码进行差错检测的。一个分组循环码由其生成多项式g(x)来描述的次数r等于校验位的个数。对于长为k的信息分组,a0,a1,...,ak ,可表示为多项式,此时r个校验位恰好等于,除以g(x)所得的余式,记作。同样算法用于接收端对差错的判定,对接收到的k+r长的分组b(x),若g(x)不能整除b(x),则判定传输中有差错发生。由于使用简单的移位反馈寄存器电路可实现多项式除法,所以CRC技术在通信和信息存储中得到了非常广泛的应用。
为了保证通信设备间的互通和互换,对CRC校验技术进行了广泛的国际标准化工作。如CCITT为电信网数字通路的性能监测规定了一系列标准的循环冗余校验,如CRC4,CRC8,CRC10,CRC16等。每一个循环冗余校验对应于一个特定的生成多项式,字母后面的数字代表校验位的个数,如CRC16有16个校验位,生成多项式为。