分为:检错编码 + 纠错编码两部分
差错来源:
概括来说,传输中的差错都是由于噪声引起的。
全局性 1.由于线路本身电气特性所产生的随机噪声,是信道固有的,随机存在的。
解决办法:提高信噪比来减少或避免干扰(对传感器下手)
局部性 2.外界特点的短暂原因所造成的冲击噪音,是产生差错的主要原因。
解决办法:通常利用编码技术来解决。
差错分类:
链路层为网络层提供服务:
1.无确认无连接服务:适用通信质量好,有线传输链路
2.3.有确认无连接服务,有确认面向连接服务:适用通信质量差的无线传输链路。
数据链路层的差错控制
数据链路层编码VS物理层数据编码与调制:
物理层编码针对的是单个比特。解决传输过程中比特同步等问题,如曼彻斯特编码。而数据链路层的编码针对的是一组比特,它通过冗余码技术实现一组二进制比特串在传输过程中是否出现了差错。
冗余编码:在数据发送之前,先按照某种关系附加上一定的冗余位,构成一个符合某一规则的码字后再发送。当要发送的有效数据变化时,相应的冗余位也随之变化,使码字遵从不变的规则。接收端根据收到码字是否仍符合原规则,从而判断是否出错。
检错编码–奇偶校验码
特点:只能检查出奇数个比特错误,检错能力50%
检错编码–CRC循环冗余码
思想:
例子:要发送的数据是1101011011,采用CRC校验,生成多项式是10011。
(1)计算冗余码:
“加0”。假设生成多项式的阶为r,则加r个0。多项式为N位,则阶为n-1。
则加0后的数据为:11010110110000。
(2)模2除法“
数据加0后除以多项式,余数为冗余码/FCS/CRC检验码的比特序列。
(二进制除法:位上XOR)
{:height=“200px” width=“500px”}
最终发送的数据为:11010110111110
接收端检错过程:
把收到的每一个帧都除以同样的余数,然后检查得到的余数R。
1.余数为0,则判定这个帧没有差错,接收。
2.余数不为0,判定这个帧有差错(无法确定到位),丢弃。
FCS的生成以及接收端CRC检验都是由硬件实现的,处理很迅速,因此不会延误数据的传输。
总结:在数据链路层仅仅使用循环冗余检验CRC差错检测只能做到对帧的无差错接收。接收端丢弃的帧虽然曾收到了,但是最终被丢弃。
而“可靠传输”是指数据链路层发送端发送什么,接收端就能收到什么。
链路层使用CRC检验,能实现无比特差错的传输,但是由于丢弃了错误的数据帧,还不是可靠传输。
纠错编码–海明码
发现双比特错;纠正单比特错。
工作原理:动一发而牵全身。
工作流程:
1.确定校验码位数r:
【海明不等式】2^r >= k+r+1(r为冗余信息位,k为信息位)
如:要发送的数据:D=101101
数据位数k=6,满足不等式的r最小为4。
D=101101的海明码应该有6+4=10位。
其中原数据6位,校验码4位。
2.确定校验码和数据的位置
2^n校验码管在第n位上有值的位置。
3.求校验码的值
4.检错并纠错