今天软考培训课讲到了校验码,在学习计网当中的TCP/UDP/IP数据报如何进行校验时接触到了CRC,特来写一篇学习笔记。
以下所有图片都引用自文老师软考教育
何为校验码
校验码是一种用于检测和纠正数据传输过程中的错误的技术。它通过在数据中添加额外的冗余信息,使接收端能够检测出数据是否在传输过程中发生了变化或错误,并在可能的情况下进行纠正。
其中,码距是指两个编码序列之间的不同位数。通常,码距越大,越利于检错和纠错。在校验码中,通过选择具有足够大码距的编码方式,可以检测出一定数量的错误,并在某些情况下进行纠正。例如,海明码(Hamming Code)是一种常见的具有纠正能力的码距技术。以下,根据是否能够检错和纠错分为检错校验码和检错纠错检验码。
检错检验码——奇偶检验码(Parity Check)
奇偶校验码是一种简单的校验码技术,用于检测数据传输过程中的单个位错误。在奇偶校验码中,通过添加一个附加位(奇校验或偶校验位)来确保数据中的1的数量是奇数或偶数。接收端通过检查奇偶校验位的值来检测错误。
检错校验码——循环冗余校验(CRC,Cyclic Redundancy Check)
CRC是一种广泛使用的校验码技术,常用于数据通信和存储中。CRC通过使用多项式除法来生成校验码,然后将校验码附加到数据中进行传输。接收端使用相同的多项式进行除法运算,并检查余数来确定是否存在错误。具体的计算过程如下。
这种检验计算思想的巧妙之处在于,在发送方计算出的结果就包含了所有的原始数据,将这样的结果拿来和经过传输后的数据二次运算/逆运算,相当于把每一项原始数据以成对的单位进行了比对,根据最终的真值0或1来判断数据在传输过程中是否有错误。这样的检验简单、快速还比较可靠。
检错纠错码——海明码(Hamming Code)
与前面三者不同的是,海明码是一种具有纠正能力的校验码技术,常用于数据传输和存储中。它通过在数据中插入冗余位来检测和纠正错误。海明码基于码距的概念,通过在数据中添加校验位,使得可以检测到一定数量的错误,并在某些情况下进行纠正。
这里有一道真题,可以拿来复习用: