思维导图:
什么是差错:
产生差错的原因主要是噪声;噪声分为全局性噪声和局部性噪声
差错分为俩类:位错和帧错
帧错分为三种:丢失、重复、失序
位错:
位错就是传输数时某一位或某几位二进制位发生错误;是从比特的角度来看的
位错之检错编码:奇偶校验码
奇偶校验码:就是在数据上添加一位校验位,以此来判断数据是否出错
但是奇偶校验码只能有奇数位错误时才能检验出来,所以检错能力只有50%
举个例子:
1110和1101都采用奇校验是无法查出错误的(出现了偶数位错误)(第一位为校验位),发送了1110,接收了1101,但是奇校验依旧成立。所以上图的答案是D。
位错之检错编码:循环冗余码
就是用要发送的数据除以(模2除法)生成多项式得到一个帧检验序列,发送给接收方的就是数据+帧检验序列;接受方再用数据+帧检验序列 除以相同的生成多项式,若余数为0,则数据传输中未发生差错,反之,出现差错。
CRC校验并不能达到可靠传输
我们现在普遍认为:凡是接收端数据链路层接收的帧均无差错,但是这是一种不太准确的描述
准确的来说:我们都能以非常接近1的概率认为这些帧在传输过程中无差错
位错之纠错编码:海明校验码
第一步: 确定校验码的位数r
根据海明不等式求出r的值
第二步: 确定校验码和数据的位置关系
把求出的校验位放到相应的位置上,这些位置一般都放在2的次幂位置上,即1,2,4,8,16…,当最后一位校验位超出校验位+数据位的长度时,直接补到最后一位上即可;
第三步: 求校验码的值
每一个校验位用二进制表示时都有一位为1,那么这个校验位校验的就这位为1的所有数据位;例如:p1的二进制表示为0001,那么他就会校验最后一位为1的数据,即:D1、D2、D4、D5 这几位。
知道了校验位可以校验的位之后令这几位与P1异或为0,就可以求出P1的值,例如:P1 异或D1异或D2异或D4异或D5 = 0,求P1 即可
然后分别求出P2P3P4
第四步: 检错和纠错
校验时,再次用校验位和其可以校验的位异或最终结果为0则无错,反之有错;例如:
上图中D2 出错后
P1 异或 D1 异或 D2 异或 D4 异或 D5 = 1
P2 异或 D1 异或 D3 异或 D4 异或 D6 = 0
P3 异或 D2 异或 D3 异或 D4 =1
P4 异或 D5 异或 D6 =0
所以在0101位出错,即第5位出错
然后纠正即可,1是错的改成0就是纠正了