差错检测和纠正

原创 2002年03月22日 17:40:00

差错检测和纠正

    物理过程所引起的差错,在某些介质中通常是突发的而不是单个的。网络设计者已经研究出两种基本的策略来处理差错。一种方法是在每一个要发送的数据块上附加足够的冗余信息,使接收方能够推导出已发出的字符应该是什么。另一种方法是只加足够的冗余位,使接收方知道差错发生,但不知道是什么样的差错,然后要求接收方重新进行传输。前者的策略是使用纠错码(error-correcting code),而后者则使用检错码(error-detecting code)。

1.纠错码

    在了解纠错码之前,先了解一个基本概念:海明距离。通常一帧包括m个数据(报文)位和r个冗余位或者校验位。设整个长度为n(即n=m+r),则此长度为n的单元通常被称作n位码字(codeword)。

    给出任意两个码字,如10001001和10110001,可以确定它们有多少个对应位不同。在此例中有3位不同。为了确定有多少位不同,只须对两个码字做异或运算,然后计算结果中1的个数。两个码字中不同位的个数,称为海明距离(Hamming Distance)。其重要性在于,假如两个码字具有海明距离d,则需要d个位差错才能将其中一个码字转换成另一个。

    一种编码的校验和纠错能力取决于它的海明距离。为检测出d比特错,需要使用d+1的编码;因为d个单比特错决不可能将一个有效的码字转变成另一个有效的码字。当接收方看到无效的码字,它纠能明白发生传输错误。同样,为了纠正d比特错,必须使用距离为2d+1的编码,这是因为有效码字的距离远到即使发生d个变化,这个发生了变化的码字仍然比其它码字都接近原始码字。作为纠错码的一个简单例子,考虑如下只有4个有效码字的代码:

    0000000000、0000011111、1111100000和1111111111

    这种代码的距离为5,也就是说,它能纠正双比特错。假如码字0000000111到达后,接收方知道原始码字应该为0000011111。但是,如果出现了三位错,而将0000000000变成了0000000111,则差错将不能正确地纠正。

2.检错码

    检错码有时也用于数据传输。例如,当信道为单工方式,无法要求重传的情况下,大多数采用检错码加重传的方式。

    假设信道的出错是孤立的,信道的误码率为每位10-6。数据块的大小为100位。为1000位的数据块纠错,需要10个校验位;1兆的数据位将需要10000个校验位。若只需要检测一个数据块的一位错误,每块一个奇偶位就够了。每传送1000个数据块就需要额外传送一个数据块。错误检错+重传方式的整个开销,仅仅是每兆数据只有2001位,而海明码为10000位。

    假若在一个块上只加一个奇偶位,那么块的长的突发错误的检测率就会很糟糕,能够检测到差错的概率只有0.5,这是难以接受的。改进的措施可以采取将每个数据块组成n位宽k行高的长方形矩阵进行发送。对每一列的奇偶位分别进行计算,附加在矩阵上,作为矩阵的最后一行,然后按行进行发送。当块到达后,接收方检测所有的奇偶位。如果其中任何一个出错了,就需要重新传送整个块。

    这种方法能够检测到单个程度为n的突发错误,因为每一列只有一位改变了。然而如果第一位变反,最后一位变反,且所有其它位都正确,则长度为n+1的突发差错将不会被检测到。假如一个块被一个长的突发差错或者短的突发差错所破坏,n列中的每一列的奇偶值碰巧正确的概率为0.5,那么这个出错块被接受的概率不应该是2-n。

    虽然上述方法有时已经足够了,但是在实践中,另一种方法正在被广泛使用,即多项式编码(也叫循环冗余码,或CRC码)。多项式编码是基于将位串看成是系数为0或1的多项式,一个k位帧可以看成是从Xk-1到X0的k-1次多项式的系数序列。如果采用多项式编码的方式,发送方和接收方必须事先商定一个生成多项式G(x),生成多项式的高位和低位必须是1。要计算m位的帧M(x)的校验和,生成多项式必须比该多项式短。基本思想是:将校验和加在帧的末尾,使这个带校验和的帧的多项式能被G(x)除尽。当接收方收到带校验和的帧时,用G(x)去除它,如果有余数,则传输出错。

    计算校验和的算法如下:

    ①.设G(x)为r阶,在帧的末尾附加r个零,使帧为m+r位,则相应的多项式是XrM(x)。

    ②.按模2除法用对应于G(x)的位串去除对应于XrM(x)的位串。

    ③.按模2减法从对应于XrM(x)的位串中减去余数。结果就是要传送带校验和的帧,叫多项式T(x)。

    以下三个多项式已经成为国际标准:

    crc -12  = x^12+x^11+x^3+x^2+x+1
  crc -16  = x^16+x^15+x^2+1
  crc -ccitt = x^16+x^12+x^5+1

    这三个多项式都包含了x+1作为基本因子。当字符串长度为6位时,使用CRC-12;其余两个多项式用在字符串长度为8位的情况下。一个16位的校验和,如CRC-16或CRC-CCITT,可以捕捉到所有的单位差错和双位差错,所有奇数位数的差错,所有长度小于或等于16位的突发差错,99.997%的长度为17位的突发差错,以及99.998%的长度为18位或多于18位的突发差错。

    虽然计算校验和的计算方法看起来相当复杂,但Peterson和Brown已经给出了一种简单的移位寄存器电路来进行计算,并用硬件来完成对校验和的校验。在实际应用中,几乎都在使用此硬件。

数据链路层----差错检测

我们知道数据在传输的时候,最后都是以bit流的形式传输。而传输我们不能保证一定不出错,所以提供一定的检测和纠错机制还是很有必要的;其实说这个是数据链路层的差错检测,也可以说是整个网络数据传输过程中的一...
  • jaikly317
  • jaikly317
  • 2013年04月17日 21:50
  • 1510

【计算机网络】数据链路层(二):差错检测和纠正

帧同步虽然可以区分每个数据帧的起始和结束,但是还没有解决数据正确传输的两方面问题:一、如果有帧出现了错误?二、如果有帧丢失了?这都是数据链路层确保向网络层提供可靠数据传输服务解决的问题,也就是数据链路...
  • yeswenqian
  • yeswenqian
  • 2015年03月24日 21:59
  • 2802

TCP协议通过哪些差错检测和纠正方法来保证传输的可靠性?

TCP协议通过哪些差错检测和纠正方法来保证传输的可靠性?
  • u011329762
  • u011329762
  • 2014年10月28日 13:47
  • 2373

差错检测和纠错技术

在网络传输中,由于噪音和信号衰减等,经常会在链路中发生比特翻转、丢失等·。为此在信息接收方常常需要对接收到的信息进行检错和纠错。常用的几种检错和纠错方法有 奇偶校验,校验和,循环冗余编码等。 1、奇偶...
  • Dillon2015
  • Dillon2015
  • 2017年01月09日 16:54
  • 893

差错检测和纠正技术

差错检测和纠正技术 数据在传输的过程中难免会出现差错(比如经过路由转发时),因此我们需要一些差错检测和纠正技术来检测数据中的差错并纠正,使接收方收到正确的数据,也避免发送方对数据进行重传。 下图...
  • RENZHADEBENYUAN
  • RENZHADEBENYUAN
  • 2018年02月06日 14:32
  • 17

差错检测和循环冗余检验crc

差错检测 传输过程中可能会产生比特差错:1 可能会变成 0 而 0 也可能变成 1。 在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率 BER(Bit Error Rate)。 ...
  • liuweidagege
  • liuweidagege
  • 2015年02月08日 10:36
  • 2167

数据链路层差错检测:CRC(循环冗余检验)

1、循环冗余检验(CRC): 在发送端,先把数据划分为祖,假定每组K个比特。现假定待传送的数据M = 101001(k=6)。CRC运算就是在数据M后面添加提供差错检测的n位冗余码,然后构成一个帧发送...
  • Sharp_UP
  • Sharp_UP
  • 2017年05月12日 00:03
  • 1123

数据链路层的三个基本问题:封装成帧 透明传输 差错检测

一. 封装成帧 透明传输 差错检测
  • azsx02
  • azsx02
  • 2017年04月06日 11:29
  • 1251

数据链路层三个问题---封装成帧、透明传输、差错检查

数据链路层: 前言: 数据链路层使用的信道主要有以下的两种类型:  1. 点对点信道。这种信道使用一对一的点对点信道方式。  2. 广播信道。这种信道使用一对多的广播通信方式,因此过程比较复杂。 通...
  • hj605635529
  • hj605635529
  • 2017年05月14日 16:08
  • 474

轻松理解CRC差错检测算法七 -注解

原文第9部分的补充原因不得不承认把这个系列的翻译继续下去是很有挑战的。最近加班多,工作之余的精力就比较少了。坚持下去的想法还是有的,但回顾渐忘的初心,做这件事情的意义是在于帮助那些想把CRC算法学明白...
  • u012520854
  • u012520854
  • 2016年12月22日 22:47
  • 298
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:差错检测和纠正
举报原因:
原因补充:

(最多只允许输入30个字)