ROOT
ROOT
文章目录
  1. 奇偶校验码
    1. 奇校验:
    2. 偶校验
    3. 二维奇偶校验
      1. 无错情况
      2. 有错 & 纠错
  2. CRC 校验
    1. 求 R
    2. 校验

数据链路层差错编码之奇偶校验码和 CRC 校验

刚刚到操场完成了大学第一个 5 公里慢跑,现在神清气爽。

今天学到了数据链路层,看到了各种差错编码,例如奇偶校验码,循环冗余校验码(CRC)等等,都是在数据后面加个冗余信息用于判断。

D => DR(R 为差错检验或者纠正比特)

奇偶校验码

奇偶校验码比较简单了,就是在一串数据后面加一位,用来凑够奇数个(奇校验)或偶数个(偶校验)1

举个栗子:

奇校验:

01100110 => 01100110(1)

偶校验

01100110 => 01100110(0)

二维奇偶校验

二维奇偶校验就是同时检验每行,每列的奇偶校验,可以纠错。

举个栗子(下面都是偶校验):

无错情况

有错 & 纠错

CRC 校验

这才是重头戏,检错能力极强,据说准确率可达99%。先来看看它的算法:

  1. 将原数据比特 视为一个二进制数(本来就是二进制)
  2. 发送接收双方约定一个 位的生成函数,也是用二进制表示。
  3. 找出一个 CRC比特 ,附带在 后面用于冗余校验码。

检错的时候,就看看 能否整除,若余式全 0,无错;否则有错。

需要注意的是这里的整除,并不是平常所用的除法,而是 模 2 除法 ,就是长除的时候减法用 异或 来计算,也就是不进位。

所以可以这样来找:

因为这里是用 异或 来代替加减法(不进位),所以上式可看做加法,那么 就是通过 相当于 左移 位)除以 得到的余式。

例如:

求 R

最后求得

校验

最后来校验一下所求的结果是否正确,就是拿 除以 看看余式是否为 0。

结果是显然的。。

支持一下
扫一扫,支持Netcan
  • 微信扫一扫
  • 支付宝扫一扫