文章目录
- 一、 奇偶校验码
- 二、 奇偶校验码 特点
- 三、 奇偶校验码 示例
- 四、 CRC 循环冗余码 ( 原理说明 )
- 五、 CRC 循环冗余码 计算示例
- 六、 CRC 循环冗余码 生成多项式
一、 奇偶校验码
奇偶校验码 组成 :
① 信息元 :
位 ; 要发送的有效数据 ;
② 校验元 :
位 ; 冗余码 ;
③ 奇校验码 :
的个数为 奇数 ; 冗余位
;
④ 偶校验码 :
的个数为偶数 ; 冗余位
;
二、 奇偶校验码 特点
奇偶校验码 特点 : 该编码方法 , 只能检查 奇数个 比特错误 , 如果有 偶数个比特错误 , 无法检查出来 , 检错率是
;
三、 奇偶校验码 示例
奇偶校验码 示例 :
传输 字符 ‘S’ 的 ASCII 码
, 使用 奇校验码 , 在 数据前 添加
位 冗余位
, 表明
的个数为奇数 , 上述数据的
的个数为
个 , 是奇数个 ;
奇数个错误 : 如果接受到的数据中
的个数是 偶数个 , 此时就能检测出数据错误 ;
偶数个错误 : 如果接收到的数据中
的个数为 奇数个 , 那么就会判断接收的数据是正确的 ; 无法检查出 偶数个错误 ;
四、 CRC 循环冗余码 ( 原理说明 )
发送端 :
① 要传输的数据 :
;
② 生成多项式 :
;
③ 计算冗余码 : 使用
, 商是
, 余数是
;
④ 冗余码 : 余数
就是 FCS 帧检验序列 , 也就是 冗余码 ;
⑤ 最终发送的数据 :
接收端 :
① 接收到的数据 :
;
② 生成多项式 :
;
③ 判定差错 : 计算
余数是否为
, 如果余数为
, 说明传输过程中没有错误 ;
数据链路层 使用 CRC 循环冗余校验编码 , 进行差错控制 , 只能做到无差错接收 , 凡是接收到的数据帧 , 都是正确的 ;
五、 CRC 循环冗余码 计算示例
发送数据
, 使用 CRC 循环冗余码 , 生成多项式是
, 求最终的发送数据
最终发送的数据组成 : 原始数据
帧检验序列 FCS ;
计算 帧检验序列 FCS :
① 数据加 冗余码 位数个
: 首先确定 冗余码 位数 , 冗余码的位数是 生成多项式的 阶 , 即 生成多项式
的 总位数 减去
, 相当于 离散数学 中的生成函数的 最高位次幂 ; FCS 的位数是
位 ;
生成多项式 是
位 , 那么阶 就是
位 , FCS 帧检验序列就是
位 ;
数据加
个
后为
② 模
除法 : 数据 加上
后 , 除以 生成多项式 , 余数就是 FCS 帧检验序列 ;
二进制除法 , 与十进制除法不同的是 , 每个除法相除的计算是 异或操作 ;
异或运算 : 同
, 异
;
模
除法计算过程分析 :
异或
计算得到
, 然后下一位
落下来 , 得到
;
异或
计算得到
, 然后下面
位 落下来 , 得到
;
异或
计算得到
, 然后下
位落下来 , 得到
;
异或
计算得到
最终计算出来的 帧检验序列 是
;
最终发送的数据是 :
接收端接收数据并校验 :
① 检验过程 : 接收端接收 上述
数据 , 将上述数据 与 生成多项式
相除 , 如果余数为
说明该数据帧没有差错 ;
② 结果判定 : 如果余数不为
, 说明数据帧错误 , 而且不知道哪里出现错误 , 丢弃该数据帧 , 重新发送 ;
六、 CRC 循环冗余码 生成多项式
生成多项式 :
相当于 :
对应的模二运算的除数 :
;
的
次幂系数为
, 对应第
位 为
;
的
次幂系数为
, 对应第
位 为
;
的
次幂系数为
, 对应第
位 为
;
的
次幂系数为
, 对应第
位 为
;
生成多项式对应的 二进制数 , 总位数是最高次幂加一 , 每一位是对应位前的系数
或
;