实例说明
假如要发送的数据是1101 0110 11, 采用CRC校验, 生成多项式是10011, 那么最终发送的数据应该是?
发送端发送过程:
1. 最终发送的数据 = 要发送的数据 + 帧检验序列FCS(冗余码)
2. 利用生成多项式计算冗余码
计算冗余码的方法:
1. 加0, 要根据生成多项式中的阶为, 则加个0. (例题中生成多项式为10011, 也就是, 式中的最高阶为4, 也可以按照生成多项式位数减1, 也就是5 - 1, 为4. 也就是生成多项式的阶为4, 此时要在要传的数据后面加4个0, 此时数据变为1101 0110 1100 00.)
2. 模2除法, 数据加0后用模2除法除以生成多项式, 余数就为帧检验序列FCS(冗余码). (例题中得到的冗余码就是1110, 注意一定要是4位, 也就是加0的个数位, 不够的话用0补齐)
3. 要发送的数据加上冗余码并发送(例题中为1001 0110 11 后面接上1110, 变为了1001 0110 1111 10)
接收端检错过程:
1. 接收端把收到的每一帧都除以同样的除数, 然后检查得到的余数R(例题中为接收端收到的数据模2除以10011)
2. 如果余数为0, 判定这个帧没有差错, 接收.
3. 余数不为0, 判定这个帧有差错(无法确定到位), 丢弃.
需要注意的是:
- FCS的生成以及接收端CRC检验都是由硬件实现, 处理很迅速, 因此不会延误数据的传输.
- 在数据链路层仅仅使用循环冗余检验CRC差错检测技术, 只能做到对帧的无差错接收, 即"凡是接收端数据链路层接收的帧, 我们都能以非常接近于1的概率认为这些帧在传输过程中没有产生差错". 接收端丢弃的帧虽然曾收到了, 但是最终还是因为有差错被丢弃. "凡是接收端数据链路层接收的帧均无差错".
- 这种"无差错传输"并不是"可靠传输", "可靠传输"是指数据链路层发送端发送什么, 接收端就收到什么.