3.差错控制 - wolai 笔记

1.差错从何而来

概括来说,传输中的差错都是由于噪声引起的。
全局性:由于线路本身电气特性所产生的随机噪声(热噪声),是信道固有的,随机存在的。
解决办法提高信噪比来减少或避兔干扰。(对传感器下手)
局部性:外界特定的短暫原因所造成的冲击噪声,是产生差错的主要原因。
解决办法通常利用编码技术来解决。
分类
  • 位错比特位出错,1变为0,0变为1
  • 帧错:[#1]-[#2]-[#3]
    • 丢失:收到[#1]-[#3]
    • 重复:收到[#1]-[#2]-[#2]-[#3]
    • 失序:收到[#1]-[#3]-[#2]
链路层为网络层提供服务:
  • 无确认无连接服务通信质量好,有线传输链路
  • 有确认无连接服务通信质量差的无线传输链路
  • 有确认面向连接服务通信质量差的无线传输链路

2.差错控制

2.0 冗余编码

在数据发送之前,先按某种关系附加上一定的冗余位,构成一个符合某一规则的码字后再发送。当要发送的有效数据变化时,相应的冗余位也随之变化,使码字遵从不变的规贝上接收端根据收到码字是否仍符合原规则,从而判断是否出错。

2.1 检错编码

(1)奇偶校验码

n-1位信息元,1位校验元
  • 奇校验码:“1”的个数为奇数
  • 偶校验码:“1”的个数为偶数
特点:只能检查出奇数个比特错误,检错能力为50%。

(2)循环冗余码CRC

示例:
要发送的数据是1101 0110 11,采用CRC校验,生成多项式是10011,那么最终发送的数据应该是?
  • 0,假设生成多项式的阶为r,则加r0;10011表示为多项式为x4+x+1x^4+x+1,阶为4.(多项式N位,阶为N-1)
  • 2除法,数据加0后除以多项式,余数为冗余码/FCS/CRC检验码的比特序列。(异或:01
在数据链路层仅仅使用循环冗余检验CRC差错检测技术,只能做到对帧的无差错接收,即“凡是接收端数据链路层接受的帧,都能以非常接近于1的概率认为这些帧在传输过程中没有产生差错”。接收端丢弃的帧虽然曾收到了,但是最终还是因为有差错被丢弃。“凡是接收端数据链路层接收的帧均无差错”
“可靠传输”:数据链路层发送端发送什么,接收端就收到什么。
链路层使用CRC检验,能够实现无比特差错的传输,但这还不是可靠传输。

2.2 纠错编码:海明码

(1)工作流程

  1. 确定校验码位数r
  2. 确定校验码和数据的位置
  3. 求出校验码的值
  4. 检错并纠错

(2)海明距离

两个合法编码(码字)的对应比特取值不同的比特数称为这两个码字的海明距离(码距),一个有效编码集中,任意两个合法编码(码字)的海明距离的最小值称为该编码集的海明距离(码距)
检错:码距为d,则需要d+1
纠错:码距为d,则需要2d+1

(3)确定校验码位数r

  • 数据/信息有m位,冗余码/校验码有r
  • 校验码一共有2^r种取值
  • 海明不等式2^r >= m+r+1
示例:要发送的数据:D=1100
  • 数据的位数 k=4;
  • 满足不等式的最小r3;
  • 也就是D=1100的海明码应该有4+3=7位;
  • 其中原数据4位,校验码3

(4)确定校验码和数据的位置

校验码放在序号为2^n的位置上,数据按序填上。
原始数据D=1100

(5)求出校验码的值

原始数据D=1100
  • 4号校验码负责4,5,6,7的校验 ---偶校验---> x4 = 0
  • 2号校验码负责2,3,6,7的校验 ---偶校验---> x2 = 0
  • 1号校验码负责1,3,5,6的校验 ---偶校验---> x1 = 1
完整的海明码

(6)检错并纠错

纠错方法一:找到不满足奇偶校验的分组取交集,并与满足校验的分组取差集。
纠错方法二

3.数据链路层编码VS物理层编码

数据链路层编码和物理层的数据编码与调制不同。物理层编码针对的是单个比特,解决传输过程中比特的同步等问题,如曼彻斯特编码。而数据链路层的编码针对的是一组比特,它通过冗余码的技术实现一组二进制比特串在传输过程是否出现了差错。

Comment