一、定义
1.什么是差错检测
差错检测(Error Detection): 差错检测是指在数据传输过程中,通过特定的算法检查数据是否在传输过程中发生错误的过程。差错检测通常是通过在数据后面添加额外的检验信息(如校验和或循环冗余校验CRC码)来实现的。接收方接收到数据后,会重新计算这些校验信息,并与接收到的校验信息进行比较。如果两者不一致,则说明在传输过程中可能发生了错误。
2.什么是差错纠正(虽说这节标题里有纠正,但似乎没有具体讲)
差错纠正(Error Correction): 差错纠正则是在差错检测的基础上,接收方不仅能检测到错误,还能够确定错误的具体位置,并自动修复这些错误,从而恢复原始数据的过程。常见的差错纠正技术包括海明码(Hamming Code)和低密度奇偶校验码(LDPC)等。(纠正这部分其实是考研考点,但是课上没讲,说明期末考试中没有这个,所以不展开讲)
3.不想读上面的文字就看这句话
用人话说就是差错检测与纠正都是在正常的数据(D)后面加上一段额外的信息(EDC),然后根据数据与额外信息的关系来算出数据错没错,错了怎么改。
二、差错检测
1.例子
接下来只讲差错检测,当你收到一个快递时,你首先会进行视觉检查,看看包装是否有明显的破损的痕迹。如果包装有破损,这可能表明在运输过程中发生了某种差错,导致包装受损,进而可能影响到里面的物品。其次,你会看到发件人与收件人的信息,你也会核对是不是正确的。
事实上,快递盒和快递单上的信息都属于校验信息,用于进行差错检测。但是这样检测也不能100%看出快递里的东西有没有损坏,数据也是这样,差错检测只能检测出大部分的差错,存在局限性。
2.差错检测的方式
接下来就是讲有哪几种检错方式,第一种奇偶校验(Parity Checking),第二种校验和(Internet checksum),第三种循环冗余检测(Cyclic Redundancy Check)。 首先我们要知道在网络中传输的数据都是由一串01组成的数字串,就像这样:0101010000。然后就可以开始讲解这三种方式了。
3.循环冗余检测(CRC)
已知:
数据(被除数):101001101
生成多项式(除数):110101
求出:
余数(冗余码):01110
步骤:
1)生成多项式比如说是x5+x4+x2+1,可以写成x5+x4+0x3+x2+0x+x0,得到除数为110101,也就是说几次项的系数不为零,那么第几个数就为1。得到最高项次数r=5。
2)对被除数进行补位,在末尾补r个0。
3)进行类似除法的异或操作,如101000XOR110101=1mod11101,再下移一位,直到余数的位数等于r。
4)得到余数加到原数据末尾,形成完整的数据。
5)接收方将完整数据与除数相除,得到的余数为0则证明数据正确。