弗莱彻校验和
弗莱彻校验和是一种错误检测技术,它使用两个校验和来确定通过网络信道传输的消息中的单比特错误。它是一种块码技术,由 John G. Fletcher 于 1970 年代在美国劳伦斯利弗莫尔实验室发明。
校验和是根据要传输的数据块中的数据值创建的,并附加到数据中。当接收方收到此数据时,将重新计算校验和并与现有校验和进行比较。不匹配表示发生错误。
此方法的错误检测能力几乎与循环冗余校验 (CRC) 相同,但所需的计算量要少得多。
弗莱彻校验和的版本
弗莱彻校验和有三种流行的算法:
弗莱彻-16 - 数据字被分成 8 位块。然后,计算两个 8 位校验和,并将其追加以形成一个 16 位弗莱彻校验和。
弗莱彻-32 - 数据字被分成 16 位块。计算两个 16 位校验和,并将其追加以形成一个 32 位弗莱彻校验和。
弗莱彻-64 - 数据字被分成 32 位块。计算两个 32 位校验和,并将其追加以形成一个 32 位弗莱彻校验和。
计算弗莱彻校验和的算法
INPUT : data blocks of equal sizes, 𝑏1,𝑏2………… 𝑏𝑛 OUTPUT : two checksums, 𝑐ℎ𝑒𝑐𝑘𝑠𝑢𝑚1 and 𝑐ℎ𝑒𝑐𝑘𝑠𝑢𝑚2, of 1 byte each
步骤 1) 初始化部分和以及总和,𝑐1=0 和 𝑐2=0
步骤 2) 对于每个数据块,𝑏𝑖
- i. 将 𝑏𝑖 加到 𝑐1
- ii. 将 𝑐1 的更新值加到 𝑐2
步骤 3) 计算校验和,
- 𝑐ℎ𝑒𝑐𝑘𝑠𝑢𝑚1= 𝑐1 𝑀𝑂𝐷 256 和 𝑐ℎ𝑒𝑐𝑘𝑠𝑢𝑚2= 𝑐2 𝑀𝑂𝐷 256
步骤 4) 将校验和 𝑐ℎ𝑒𝑐𝑘𝑠𝑢𝑚1 和 𝑐ℎ𝑒𝑐𝑘𝑠𝑢𝑚2 附加到数据块 𝑏1、𝑏2………… 𝑏𝑛
弗莱彻校验和计算示例
假设有五个数据块,163、200、19、74 和 88。计算如下:
Block Number Data Block c1 c2 - - 0 0 1 163 163 163 2 200 363 526 3 19 382 908 4 74 456 1364 5 88 544 1908
𝑐ℎ𝑒𝑐𝑘𝑠𝑢𝑚1 = 544 𝑀𝑂𝐷 256 = 34
𝑐ℎ𝑒𝑐𝑘𝑠𝑢𝑚2 = 1908 𝑀𝑂𝐷 256 = 123
广告