差错从何而来
概括来说,传输中的差错都是由于噪声引起的。
- 全局性:由于线路本身的电气特性所产生的随机噪声(热噪声),是信道固有的,随机存在的。
- 局部性:外界特定的短暂原因所造成的冲击噪声,是产生差错的主要原因。解决办法:通常利用编码技术来解决。
差错种类:
位错
比特位出错,1变成0,0变成1
帧错([#1]-[#2]-[#3])
- 丢失:收到[#1]-[#3]
- 重复:收到[#1]-[#2]-[#2]-[#3]
- 失序:收到[#1]-[#3]-[#2]
检错编码
奇偶校验码
如果一个字符的ASCll编码从低到高依次为1100101,采用奇偶校验码,在下述收到的传输后字符中,哪种错误不能检测?(D)
A:11000011
B:11001010
C:11001100
D:11010011
奇偶校验码特点:只能检查出奇数个比特错误,检错能力50%(错误的比特码不能相互抵消了)
CRC循环冗余码
接收端检错过程
把收到的每一个帧都除以同样的除数,然后检查得到余数R。
- 余数为0,判定这个帧没有差错,接受
- 余数不为0,判定这个帧有差错(无法确定到位),丢弃
FCS的生成以及接受端CRC校验都是由硬件实现,处理很迅速,因此不会延误数据的传输
在数据链路层仅仅使用循环冗余校验码检验CRC差错检测技术,只能做到对帧的无差错接受,即“凡是接收端数据链路层接受的帧,我们都能以非常接近1的概率认为这些帧在传输过程中没有产生差错”。接收端丢弃的帧虽然曾接收到了,但是最终还是因为有差错被丢弃。“凡是接收端数据链路层接收的帧均无差错”。
纠错编码
海明码
发现双比特错,纠正单比特错😳
工作流程
- 确定校验码的位数R
- 确定校验码和数据的位置
- 求出校验码的值
- 检错并纠错
确定校验码的位数R
海明不等式:2≥k+r+1 r为冗余信息位,k为信息位
要发送的数据:101101
数据的位数k=6
满足不等式的最小r为4
也就是101101的海明码应该有6+4=10,
其中原数据6位,校验码4位。
确定校验码和数据的位置
D=101101
假设这4位校验码分别为P、P、P、P;数据从左到右为D、D、。。。。D
二进制位 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 |
---|---|---|---|---|---|---|---|---|---|---|
数据位 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
代码 | P | P | D | P | D | D | D | P | D | D |
实际值 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 1 |
令所有要校验的的位异或为0
- 确定冗余码的位置:依次为2,2,2,2
- 确定冗余码的值:根据冗余码位置的二进制位1的位置,选出数据位置二进制位1相同的位置,统一进行异或处理为0
检错并纠错
| 二进制位 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 | | —- | —- | —- | —- | —- | —- | —- | —- | —- | —- | —- | | 数据位 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | | 代码 | P | P | D | P | D | D | D | P | D | D | | 实际值 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 1 |
故101101的海明码为0010011101
假设第五位出错,因此接收到的数据位0010111101
令所有要校验的位进行异或运算,从P开始取其结果:0101 = 5
故错误的位置为第五位,将其位置取异或即可。