首页 > 技术文章 > 计算机网络-链路层(1)差错检测与纠正

yangyuliufeng 2018-07-11 15:52 原文

差错编码D→DR,其中R为差错检测与纠正比特(冗余比特/监督位)
差错编码并不能保证100%可靠。
差错编码可分为检错码与纠错码
两个等长字符串之间的汉明距离是两个字符串对应位置的不同字符的个数。换句话说,它就是将一个字符串变换成另外一个字符串所需要替换的字符个数
对于检错码,如果编码集的汉明距离ds=r+1,则该差错编码可以检测r位的差错
例如,编码集 {00,01,10,11} 的汉明距离ds=1,不能实现差错检测
例如,编码集 {0000,0101,1010,1111} 的汉明距离ds=2,可以100%检测1比特差错。(红色即冗余信息,此处使用了重复码)
对于纠错码,如果编码集的汉明距离ds=2r+1,则该差错编码可以纠正r位的差错,将一个无效的码字纠正为距离最近的码字。
例如,编码集 {000000,010101,101010,111111} 的汉明距离ds=3,可以纠正1比特差错,如100010纠正为101010。
  • 奇偶校验码
差错检测最简单的方式就是用单个奇偶校验位,使1的总数总是偶数
 
如果出现偶数个比特的差错无法检测出
 
检测能力50%,检测效率高
二维奇偶校验:检测奇数位差错、部分偶数位差错;纠正同一行/列的奇数位错
  • Internet校验和(Checksum)
发送端:
将“数据”(校验内容)划分为16位的二进制“整数”序列
求和(sum):补码求和(最高位进位的“1”,返回最低位继续加)
校验和(Checksum):sum的反码
放入分组(UDP、TCP、IP)的校验和字段
接收端:与发送端相同算法计算,计算得到的"checksum":为16位全0(sum为16位全1)无错;否则有错
  • 循环冗余检测(CRC)编码/多项式编码
检错能力更强大的差错编码,广泛应用于实际网络(以太网,802.11 WiFi,ATM)
将数据比特D视为一个二进制数
选择一个r+1位的比特模式G,称为生成多项式
目标:选择r位的CRC比特R,满足
(1)<D,R>刚好可以被G模2整除
(2)接收端检错:利用G除<D,R>,余式全0,无错;否则,有错!
(3)可以检测所有突发长度小于r+1位差错。
模2算术,加法不进位,减法不借位,相当于XOR
D*2^r XOR R = nG
D*2^r = nG XOR R
R=余式[D*2^r/G]
因此D*2^r + R = nG时无错;否则有错

推荐阅读