zoukankan      html  css  js  c++  java
  • 数据链路层

    3.3 差错控制

    3.3.1 检错编码

    1.奇偶校验码:奇校验码和偶校验码的统称,是一种基本的检错码。

    要发送的数据为n位,则其中n-1位是信息元,1位为校验元。校验元根据信息元和具体的校验码决定。
    奇校验码:校验元会保证 信息元附加校验元的n位数据中,1的个数为奇数个。
      即信息元有偶数个1则校验元为1;信息元为奇数个1,校验元为0.保证组成的数据中1的个数为奇数个。
    偶校验码:校验元会保证 信息元附加校验元的n位数据中,1的个数为偶数个。

    特征:只能检查出奇数个比特的错误:数据中错误的比特数量为奇数时才可以检查出,偶数个检查不出。

    2.循环冗余码:又称多项式码。任何一个由二进制位串(0,1)组成的数据都可以与一个只含有0和1两个系数的多项式建立关系。

    X9+X7+X5+X3+X2+1==>1010101101:这个多项式从X的0阶到9阶,系数只有0,1 阶数代表所在的位数。系数为1对应的阶数为1没有系数的为0.

    帧检验序列:要发送一个m bit的帧或报文,发送前发送器要生成一个r bit的序列,这个r bit的序列就是帧检验序列(FCS)。 m+r bit才是最终发送的数据
    帧检验序列如何生成:发送方和接收方事先商定一个多项式G(X),这个多项式的最高位和最低位必须为1.最终发送的m+r bit数据要能被这个多项式整除(实际r bit就是先让m bit的数据与G(x)除以后的余数。把余数添加到m比特后面,这样m+r bit的数据就可以整除G(x) )。
    多项式G(X)有一些比较特殊的成了国际标准。

    冗余码计算:

    1. 获取G(x)的最高阶数,X9+X7+X5+X3+X2+X最高为9.在m bit的数据后面添加9个0.
    2. 假设m为111 则添加后的m为111000000000.
    3. 让添加后的m 111000000000/G(X)==>111000000000/1010101101(利用模2除,同为0,异为1)取9位余数(因为多项式是10位的,当被除数的最后一位值确定后,会得到一个9位的余数,前面的0也要留着)。
    4. 用这9位余数,替换掉之前的9个0.现在这个数就是最终要发送的数据,同时这个数还可以被多项式整除。

    余数就是帧检验序列,冗余码,r bit 都是它。

    特征:带r位校验码的多项式编码可以检测到所有长度小于等于r的突发性错误,CRC校验可以使用硬件来完成。
    循环冗余码能检测出所有奇数个错、单比特错、双比特错和所有小于、等于校验位长度的突发错。

    3.3.2 纠错编码

    海明码:又称汉明码。

    海明码将发送的信息从左到右依次编号,1,2,3,4,5,6,7,8...n。编号为2的幂的位是校验位,别的位是数据位。
    假设校验位有r个,数据位有m个,发送的总数据为m+r个数据(不是r都在m的后面,是发送的信息总量为m+r,查错是放在后面),m与r要保证 2r大于等于m+r+1
    数据位与校验位的关系:每一个数据位的位数都可以由校验位的位数相加得到。3=1+2,5=1+4,6=2+4,7=1+2+4.我们可以知道编号为k的数据位收到那些校验位的影响
    编号为1的校验位 p1 与 受p1影响的所有的数据位的值进行异或运算的结果为0.发送前数据位是已知的,由此可以计算所有的校验位。

    举例:p1 p2 d3 p4 d5 d6 d7 这个数据位与校验位中假设数据位 d3 d5 d6 d7 按顺序分别为1101.
    因为数据位357都与校验位1有关。所有 p1异或1异或1异或1=0可得p1=1.
    因为数据位367都与校验位2有关,同理可得p2=0.最终可得到所有的检验位的数值。
    最终的数据1010101. 观察这个可看影响编号为k的数据位的所有检验为的异或为编号为k的数据位的值。 p1,p2影响d3. p1异或p2=1=d3.
    根据这个规律,因为校验位的位置是已知的,在接收方收到数据时可以根据校验位对数据位进行校验,校验位的与数据为的组合有多种。根据不同的校验位对同一个数据位的校验或者不同的数据位与校验位的异或结果为0。计算出错误的数据位的正确数据并纠正。

    特征:能发现双比特错,但只能纠正单比特错。

  • 相关阅读:
    Linux 系统内核空间与用户空间通信的实现与分析
    busybox的一些变化
    switch_root 过程错误分析
    2 NICs on same subnet
    qt 维护x86和arm两套编译环境
    init脚本
    硬件测试
    devfs、sysfs、udev介绍
    原创整理:锐捷S3550系列交换机基本配置命令(二)
    【技术贴】red hat 9.0 找不到www.baidu.com.请检查名称并重试 net虚拟机设
  • 原文地址:https://www.cnblogs.com/xiaoeyu/p/11992244.html
Copyright © 2011-2022 走看看