一、总体流程:
把要发送的每组数据2^nM(k+n位)除以除数P(n+1位),计算出冗余码FCS(n位),然后再求出要发送的数据:2^nM+R。
接受端把收到的数据除以除数P,看余数R是否为0,如果为0则说明没有差错,如果不为0则说明有差错。
注意CRC的运算为模二运算。
二、详细
- 在数据链路层传送的帧中,广泛使用了循环冗余检验 CRC 的检错技术。
- 在发送端,先把数据分组,假定每组 k 个比特。
- 我们在每组数据的后面再添加供差错检测用的 n 位冗余码一起发送。
- 冗余码的计算
用二进制的模 2 运算进行 2^n 乘 M 的运算,这相当于在 M 后面添加 n 个 0。
得到的 (k + n) 位的数除以事先选定好的长度为 (n + 1) 位的除数 P,得出商是 Q (商没有什么用处),余数是 R,余数 R 比除数 P 少1 位,即 R 是 n 位,如果不够n位要在前面补0,补成n位。 - 冗余码的计算举例
(1)M = 101001(k = 6),除数 P = 1101( n = 3 )
(2)被除数是 2^nM = 101001000。
(3)模 2 运算的结果是:商 Q = 110101,余数 R = 001。
(4)把余数 R 作为冗余码添加在数据 M 的后面发送出去。发送的数据是:2^nM +