CRC校验¶
来源:
计算机网络 / 数据链路层/CRC校验.md
CRC的基本思想¶
在发送端把数据分成组,每组k个比特,CRC就是在每组数据M后面加上n位冗余码,然后构成k+n位的帧发送出去,增加了数据传输的开销,但是当数据出现差错时,这样的代价是值得的

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