Checksum 101
文章目录
前言
在分布式系统、文件传输、数据存储等场景中,数据在传输和存储过程中可能出现错误或损坏。为了确保数据的完整性和正确性,Checksum(校验和) 是一种常用且高效的手段,扮演着“数据防护罩”的角色。
定义
Wiki 定义如下:
A checksum is a small-sized block of data derived from another block of digital data for the purpose of detecting errors which may have been introduced during its transmission or storage.
简而言之:Checksum 是一种通过算法计算出的摘要值,用来校验数据在传输或存储过程中是否发生错误。
工作原理
一句话:通过对数据进行算法运算,生成校验值,传输或存储时一并携带,接收端再次计算并比对校验值,从而验证数据是否一致。
典型流程如下:
- 发送端:对原始数据执行校验算法 → 生成 Checksum → 附加发送或存储;
- 接收端:接收数据后重新计算 Checksum → 对比 → 若一致则视为无误,否则视为数据损坏。
属性与指标
常关注的 Checksum 属性包括:
-
冲突概率(Collision Rate) 不同数据计算出的 Checksum 值相同的概率,越低越好。
-
性能(计算效率) 算法运算时间对系统性能的影响,需在准确性与性能之间权衡。
-
空间占用(Checksum 长度) 通常是 8-bit、16-bit、32-bit、64-bit,不同精度适应不同场景。
-
容错能力 检测出数据损坏的能力,但不具备纠错(与 CRC、ECC 区分)。
-
对抗性(安全性) 简单 Checksum 易被伪造,不适用于安全校验场景(如密码学中使用 Hash)。
类型
常见 Checksum 算法
-
模加(Modular Sum) 最基础方式,快速但容易冲突,适用于轻量校验。
-
异或(XOR) 多用于简单字节流的快速校验。
-
CRC(Cyclic Redundancy Check) 比简单校验更强,广泛用于网络通信和硬盘系统。
-
MD5、SHA 系列 实际属于密码学 Hash 函数,但在部分场景中用于校验数据完整性。
应用场景分类
-
存储校验 如 HDFS、Ceph 对数据块进行 Checksum,确保磁盘损坏可发现。
-
传输校验 TCP/IP 协议中的 TCP Checksum 用于检测网络传输误码。
-
备份一致性 数据库、对象存储系统利用 Checksum 校验备份文件是否一致。
-
文件校验 软件分发时附带 SHA256 或 MD5 Checksum,用户下载后对比验证文件完整性。
Checksum 与程序关系
根据 Checksum 的用途,可分为以下两种关系:
-
内嵌型校验 如 TCP 包中自带 Checksum 字段,系统层自动处理。
-
业务侧显式使用 开发者在上传文件、传输 JSON 等场景中显式加上校验字段。
常用工具与实现
常见 Checksum 工具和相关命令如下:
md5sum
、sha256sum
:文件校验命令行工具- Hadoop:数据块写入自动生成 CRC 校验
- ZFS、Btrfs:文件系统级别内置校验机制
- PostgreSQL:表/页校验机制
- Redis:使用 CRC16 进行数据槽分布一致性控制
总结
Checksum 是分布式系统与网络协议中不可或缺的基础能力。 它通过简单、高效的方式提供了错误检测机制,提升了系统的数据可靠性。虽然不能纠正错误,但作为检测机制,它已足够成为系统稳定性的“第一道防线”。
文章作者 沉风网事
上次更新 2018-10-29