跳转至

CRC校验

来源:计算机网络 / 数据链路层/CRC校验.md

CRC的基本思想

在发送端把数据分成组,每组k个比特,CRC就是在每组数据M后面加上n位冗余码,然后构成k+n位的帧发送出去,增加了数据传输的开销,但是当数据出现差错时,这样的代价是值得的 image.png|302

CRC流程

模2运算

模2加法不进位

加上n个0

先用模2运算进行\(2^n \times M\)的操作,也就是在M后面加上n个零

模2除法M除以P

双方事先商定一个长度为n+1位的除数P

\[ (M<<n) \div P = Q \cdots R \]

显然我们会得到一个长度为n位的余数R

M拼接余数R

R就是n位的冗余码,把R放在M后面,发送出去就行 这个余数R也叫做帧检验序列FCS

注意:CRC是校验方法,FCS是添加的冗余码

检验

接收方把收到的每一个帧除以P,检查得到的余数 - 余数是0,就接受 - 余数不是0,就判定这个帧有差错,丢弃 这是因为

\[ (M<<n) -R = PQ \]

注意:模2情况下,加法和减法是一样的

生成多项式

就是把前面的除数P,以多项式的形式表示

\[ P(X) = X^3+X^2+1->1101 \]

常用的有CRC-16,CRC-CCITT,CRC-32

\[ P(X)=X^{16}+X^{15}+X^2+1 \]

比如这是CRC-16

相关笔记