跳到主要内容

CRC循环冗余码

CRC 即 Cyclic Redundancy Check 的缩写

  1. 可以默认CRC没有纠错功能.CRC 循环冗余校验属于检错码,只能检测出现了错误,但无法纠正错误。

数链层仅使用CRC差错检测技术,只能作到对帧的无差错接收,凡是接收端数据链路层接收的帧,都能以非常接近于1的概率认为这些帧在传输过程中没有产生差错。

  1. C/S双方协定密码:G(x)

  2. 发送方用密码G(x)DATA和生成FCS校验码,新的发送数据是DATA+FCS

  3. 然后接收方使用密码G(x)对收到的DATA+FCS进行校验,判断数据在传输过程中是否出现错误

发送方对原始数据追加校验码

  • 假设原始数据是:101001

  • 生成待追加的校验码,需要使用一个G(x)(生成多项式,收发双方事先约定)

  • 构造被除数:原始数据 + 生成多项式最高次项个0,即:101001000

  • 除数:除数实际上就是生成多项式的系数,G(x) 展开得到: G(x)=1101

  • 通过上述运算,得到校验码 001,添加到原始数据之后,得到的最终发送数据为 101001001

接收方对收到的数据进行校验

  • 继续接前文,假设收到的数据为 101001001

  • 接收方对该数据做除法,除数仍然是之前使用的多项式的系数 1101

  • 若余数为0,则表示未出错

  • 余数不为0,则表示传输过程中出现了错误

结语


  • 计算出余数后,还要对其进行补位,才能得到最终使用的校验码

  • 在计算机网络中,数据链路层将数据封装成帧时,会在帧尾添加校验码,从而判断数据在传输过程中是否发生错误

  • 在实际使用CRC时,采用的生成多项式更为复杂,从而确保较低的漏检率

Loading Comments...