今天我们来看看有关于计算机网络的知识——奇偶校验码和CRC冗余校验码,这两种检测编码的方式相信大家在计算机组成原理当中也有所耳闻,所以今天我就来跟大家分享有关他们的知识。
奇偶校验码
奇偶校验码是通过增加冗余位使得码字中1的个数恒为奇数或偶数的编码方法,它是一种检错码。根据被传输的一组二进制代码的数位中“1”的个数是奇数还是偶数来进行校验,可分为奇校验和偶校验。给每一个码字加一个校验位,用它来构成奇性或偶性校验。具体来说,如果是奇校验,则在数据二进制位后面添加一个奇校验位,使数据位和校验位中二进制位1出现的个数总是奇数个;如果是偶校验,则使1的个数为偶数。
我们按照下图当中的两个编码,分别对他们使用奇偶校验,来更加直观的了解奇偶校验。
奇校验
我们看上面的10100010,它有奇数个1,那么就在最后的校验位加上0。
第二个10100000,它的1为偶数个,那么根据奇校验我们就要在校验位上加上1。
偶校验
偶校验则同理。第一个10100010,有奇数个1,则在校验位上加上1。
第二个10100000,它的1为偶数个,那么根据奇校验我们就要在校验位上加上0。
优缺点
但是奇偶校验码也存在一些问题:
- 优点:奇偶校验码是一种非常有效的数据验证方法,能够检测出数据传输过程中的错误,保护数据的完整性和准确性。
- 缺点:然而,奇偶校验码只能检测出错误的数据,而不能确定错误的具体位置,也不能检测出偶数位错误或恶意数据。此外,其效率相对较低,对于复杂的数据校验需求可能不够高效。
CRC冗余校验
CRC是一种根据网络数据包或电脑文件等数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误。CRC利用除法及余数的原理,实现错误侦测的功能。具体来说,CRC是两个字节数据流采用二进制除法(没有进位,使用XOR来代替减法)相除所得到的余数。其中被除数是需要计算校验和的信息数据流的二进制表示;除数是一个长度为n的预定义(短)的二进制数,通常用多项式的系数来表示。
在CRC当中,我们需要通过多项式和异或运算来得到是否出错。如果最终刚好整除,得到0,那么就说明没有出错。反之则有错误。
假设我们有一个多项式G(x)和一个信息位如下:
那么我们可以由多项式G(x)得出用于校验的“除数“10111”,并且因为G(x)的最高位的次数是4,我们就给信息位不上4个0。最后我们用10100010000去除10111,通过异或运算可以得到如下的计算过程:
因为最终的结果为1101,不为0,因此我们可以得出在传输过程中有错误产生。
CRC的检验能力
CRC除了能检查出随机差错外,也可以检查突发的错误。
- CRC可以检查全部离散的一位错误
- CRC可以检查全部离散的两位错误
- 能检查全部的奇数位差错
- 能检查全部长度小于等于k的突发差错(k是多项式的最高幂值)
总结
总的来讲今天我们看了两种检验方法,希望对大家有所帮助。如果对大家有所帮助,希望大家可以给我一个点赞或关注,这对我非常重要,谢谢!