CRC循环冗余校验
:::danger
将要发送的数据比特序列当作一个多项式f(x)的系数,在发送端用收发双方预先约定的生成多项式G(x)去除,求出一个余数多项式。将余数多项式加到数据多项式后发送到接收端;
接收端用同样的G(x)去除收到的f1(x),得到余数多项式。如果得到的余数多项式与接收到的余数多项式相同,表示传输无错。否则有错,发送方重传;
注意è G(x)由协议来规定,其结构及检错效果是经过严格数学分析与实验后确定;
⑶、CRC具体做法:
发送方将要发送的数据分组,假定每组K个比特,其多项式为M(x),生成多项式为r阶多项式G(x),则在原始数据后加N个0形成xrM(x),用xrM(x)按照模2除法除G(x)得到余项,把余项放在原始数据尾部作为真正的发送数据;CRC运算就是在数据M后添加N位冗余码,供差错检测用,然后将数据与冗余码一起发送出去,共(K+N)位。
冗余码求法如下è将数据M乘以2N,相当于在M后加N个0.用事先商量好的长度为(N+1)位的除数P除,得到余数R,然后把R放在数据M后面,具体如下例:
【例题3.2】发送数据M=1101011011(K=10),双方约定生成多项式为10011,即:G(x)=x4+x+1,N=4;
故实际发送为1100110111110(在数据后面添加的冗余码1110称为帧检验序列 FCS);
接收方将收到的每一帧用同样的除数P除,检查余数,若余数为0则无错,否则有错,余数不为0的概率极小,一般而言传输出错而余数为0的概率极小。
【练习】要发送数据为1101011011,P(x)= x4+x+1.求余数。
⑷、特别注意以下问题:
①.循环冗余检验CRC和帧检验序列 FCS并不等同:
CRC 是一种常用的检错方法,而 FCS 是添加在数据后面的冗余码;
FCS 可以用 CRC 这种方法得出,但也可以用其它方法得出。
②.仅用CRC差错检测技术只能做到无差错接受[即:凡是接收端数据链路层接受的帧都没有传输差错(有差错的帧就丢弃而不接受)];要做到“可靠传输”(即发送什么就能收到什么,解决了帧丢失、帧重复、帧失序等传输差错)就必须再加上确认和重传机制。
③.互联网的数据链路层不使用确认和重传机制(因为代价高),由运输层TCP协议实现可靠传输。
:::