数据链路层:循环冗余检验CRC

来源:互联网 发布:淘宝公司介绍模板 编辑:程序博客网 时间:2024/04/30 10:25
在发送端,先把数据划分为组,假定每组 k 个比特。现假定传送的数据 M=101001       ( k=6 )。CRC运算就是在数据 M 的后面添加供差错检测用的 n 位冗余码,然后构成一个帧发送出去,一共发送 ( k + n) 位。在所要发送的数据后面增加 n 位的冗余码,虽然增大了数据传输的开销,但却可以进行差错检测。当传输可能出现差错时,付出这种代价往往时很值得的。这 n 位 冗余码可用以下方法得出。用二进制的模 2 运算进行 2^n 乘 M 的运算,这相当与在 M 后面添加 n 个 0 。 得到的 ( k + n ) 位的数除以收发双方事先商定的长度 ( n + 1) 位的除数 P ,得出商是 Q 而余数 R ( n 位,比 P 少一位 )。关于除数 P 下面还要介绍 。 M = 101001 ( 即 k = 6)。假定除数 P = 101 (即 n = 3)。经模 2 除法运算后的结果是: 商 Q = 110101,而余数 R = 001。这个余数 R 就作为冗余码拼接在数据 M 的后面发送出去。这种为了进行检错而添加的冗余码常称为帧检验序列 FCS (Frame Check Sequence )。因此加上 FCS 后发送的帧是 101001001 ( 即 2^nM+FCS ) 共有 ( k + n ) 位。在接收端把接收端的数据以帧为单位进行 CRC 检验: 把收到的每一个帧都除以同样的除数 P ( 模 2 运算),然后检查得到的余数R。如果在传输过程中无差错,那么经过 CRC 检验后得出的余数 R 肯定是 0。
1 0
原创粉丝点击