常见的校验码(举例计算海明码)

校验码是一种特定的数值,用于检测数据在存储或传输过程中是否发生错误。通过对数据应用特定的算法生成校验码,并将其与原始数据一同存储或传输。接收方再次计算接收到的数据的校验码,与传输或存储的校验码进行比较,以验证数据的完整性和正确性。校验码广泛应用于数据通信、存储系统、数字信号处理等领域,

常见的校验码

  1. 奇偶校验位(Parity Bit)

    原理:通过添加一个额外的位(0或1),使得数据中1的总数为奇数(奇校验)或偶数(偶校验)。奇偶校验位可以检测单个位的错误。

    应用:串行通信、内存校验等。

  2. 循环冗余校验(CRC)

    原理:通过将数据视为一个大的多项式,并将其除以一个固定的"生成多项式",得到的余数作为CRC校验码。CRC能够检测到多位错误,并具有较高的错误检测能力。

    应用:网络通信协议(如Ethernet、USB)、数据存储(如硬盘驱动器)等。

  3. 校验和(Checksum)

    原理:将数据分成固定大小的段,然后将这些段相加(有时还会进行其他操作),最后可能对结果取反或进行其他处理以生成校验和。校验和能够检测数据中的错误,但其错误检测能力不如CRC。

    应用:IP头校验、文件校验等。

  4. 海明码(Hamming Code)

    原理:一种错误纠正码,通过在数据中添加冗余位,不仅可以检测错误,还能确定错误的位置并进行纠正,通常用于纠正单个位的错误。

    应用:计算机内存、卫星通信等。

  5. LRC(Longitudinal Redundancy Check)和VRC(Vertical Redundancy Check)

    原理:LRC通过计算数据块每一列的校验位来生成,VRC则计算每一行的校验位。两者经常结合使用,以检测和纠正数据传输中的错误。

    应用:磁带数据存储、某些通信协议等。

使用校验码的好处

  • 数据完整性:确保数据在传输或存储过程中未被篡改。
  • 错误检测和纠正:能够发现数据错误并在某些情况下自动修正这些错误。
  • 提高可靠性:对于关键系统和应用,校验码可以显著提高数据传输和存储的可靠性。

一个计算海明码的例子

假设我们有一个4位的数据位1101,我们要构建一个海明码。构建过程如下:

确定校验位的数量

对于n位的数据位,需要满足条件 2^r ≥ n+r+1,其中r是校验位的数量。对于4位数据,最小的r使得不等式成立是3(因为2^3=8≥4+3+1),所以我们需要3个校验位。一共3+4=7位。

插入校验位

在原始数据位中插入校验位,校验位的位置是2的幂次方。用P表示校验位,

python 复制代码
2^0=1
2^1=2
2^2=4

所以第1位、第2位、第4位放置P,第3、5、6、7位放原始4位的数据位1101

python 复制代码
位置: 1 2 3 4 5 6 7
码字: P P 1 P 1 0 1

计算校验位

假设三个校验位为P1、P2、P4。

P1 覆盖了那些位数在其二进制表示中有1的位置(从1开始计数)。具体来说,就是每隔1位检查一次,所以它检查了1(01)、3(11)、5(101)、7(111)、9(1001)、......位。

P2 覆盖了那些位数在其二进制表示中有2的位置。具体来说,就是每隔2位检查一次,所以它检查了2(10)、3(11)、6(110)、7(111)、10(1010)、11(1011)、14(1110)......位。

P4 覆盖了那些位数在其二进制表示中有4的位置。这意味着每隔4位检查一次,所以它检查了4~7、12......位。

对于P1:

P1 覆盖了从位置1开始的每隔一位的位置,即1、3、5、7位。

在我们的示例中,这些位置的值分别是P1(我们正在计算它),1(位置3的数据位),1(位置5的数据位),1(位置7的数据位)。

因此,P1需要确保这些位置上的1的总数为偶数。在我们的例子中,有三个1,所以P1应该也是1。

对于P2:

P2 覆盖了从位置2开始的每隔两位的位置,即2、3、6、7位。

这些位置的值分别是P2(我们正在计算它),1(位置3的数据位),0(位置6的数据位),1(位置7的数据位)。

有两个1,所以为了使得1的总数为偶数,P2应该是0。

对于P4:

P4 覆盖了从位置4开始的每隔四位的位置,即4、5、6、7位。

这些位置的值分别是P4(我们正在计算它),1(位置5的数据位),0(位置6的数据位),1(位置7的数据位)。

有两个1,所以为了使得1的总数为偶数,P4应该是0。

因此,根据上述计算,校验位的值应该是P1=1,P2=0,P4=0。因此,完整的海明码为1010101。

相关推荐
小小小米粒4 小时前
NAT 模式, 仅主机模式 Host-Only ,桥接模式 Bridge
linux·服务器·网络
头疼的程序员8 小时前
计算机网络:自顶向下方法(第七版)第三章 学习分享(二)
网络·学习·计算机网络
Blurpath住宅代理8 小时前
代理协议深度解析:HTTP与SOCKS5如何科学选型?
网络·静态ip·动态代理·住宅代理
小二·8 小时前
Go 语言系统编程与云原生开发实战(第38篇)
网络·云原生·golang
昵称只能一个月修改一次。。。8 小时前
Linux系统编程:网络编程
linux·服务器·网络
野犬寒鸦8 小时前
TCP协议核心:TCP详细图解及TCP与UDP核心区别对比(附实战解析)
服务器·网络·数据库·后端·面试
新缸中之脑8 小时前
Pinchtab: 通过 HTTP 控制浏览器
网络·网络协议·http
珠海西格8 小时前
聚焦痛点|分布式光伏消纳困境的三大表现及红区治理难点
服务器·网络·分布式·安全·区块链
wangan0949 小时前
浏览器自动将http访问链接自动转化为https链接,解决办法
网络·网络协议·http
admin and root9 小时前
记一次攻防演练redis未授权访问案例
网络·数据库·redis·安全·web安全·渗透测试·src漏洞挖掘