在网络传输中,由于噪音和信号衰减等,经常会在链路中发生比特翻转、丢失等·。为此在信息接收方常常需要对接收到的信息进行检错和纠错。常用的几种检错和纠错方法有
奇偶校验,校验和,循环冗余编码等。
1、奇偶校验
利用在信息后面附加一个奇偶校验位来进行校验
事先通信双方约定是采用奇校验还是偶校验,假设采用偶校验,则发送方在信息后面附加一位使所有信息(包括校验位)中一共有偶数个1,在接收方检验信息中1的个数,若为奇数个则判定出错。
优点:编码简单,方便
缺点:只能检错不能纠错,当发生偶数个错误时,不能检测出
为此,发展出二维奇偶校验
将要发送的d位数组成i行j列的二维矩阵,并使用i+j+1个校验位编码。
对于单个比特错误二维奇偶校验不仅能够检测出而且能够纠正,对于校验码本身的错误也能纠正,而且对于分组中两个比特错误的任何组合都能够检测出但不能纠正。
2、校验和
校验和是将分组中所有位每16位为一组,求和,将求和的结果取反码即得到校验码
对于求和溢出的情况,将溢出的那一位与最后一位相加。
接收方收到信息后将所有数据16位为一组相加(包括校验位)如果最终结果不是全1,则判断出错。
校验和相对开销较CRC小,只需要16位。
3、循环冗余编码CRC
循环冗余编码也称多项式编码
通信双方约定一个r+1比特的生成多项式G,发送方在d比特数据后附加r比特CRC码,使这d+r多项式可以整除G。接收方用G去除接收到的d+r如果余数不为0则判断出错。
其中 R=(D*2^r)/G的余数
校验和通常在运输层中应用而CRC通常用在链路层,主要因为运输层通常在用户主机中作为操作系统的一部分实现,所以使用相对简单和快速的校验和,而链路层差错检测在适配器中用专业硬件实现,能够快速处理复杂多CRC操作。