CRC计算/Checksum计算总结
常见校验算法简介
常用的简单校验算法:校验和,异或校验,crc校验,LRC校验,补码求和,checksum
相关思路和源码来自网络,自己只是整理, 做笔记用。
并未完整完善正确归纳,只是个人理解初步做笔记记录。
在实现业务需求过程中,通常要用到相关一些校验算法,简单整理常用校验算法并做笔记:
常用校验算法简单说明:
-
校验和:按每个字节,计算累加和,
-
异或校验:定义初值,按每个字节异或,求结果。
-
CRC校验:已有很多的标准及计算方式,可以返回8字节,16字节,32字节的结果。
受益匪浅的文章:https://blog.youkuaiyun.com/u013073067/article/details/86621770
设置crc值和多项式码;依次遍历每个字节,与crc值进行异或;crc值取出最低位的值,并右移一位;如果最低位值位1,则于多项式码进行异或;循环直到8位结束。
crc查表思想:观察,内部有个循环,每次对一个字节(8位)的循环中,对crc码的数字是不变的,这里与多项式码相关,可以直接用数组代替这里的求值。(crc表与crc返回8/16/32位有关,与多项式码有关) -
LRC校验:是不可靠的,先求和,再对结果取反+1
-
checksum:对checksum值归0,每16bit求和,不够16bit的高位补0,如果checksum溢出,则高16bit和低16bit相加进行处理(依次循环判断)。
奇偶校验:
(上面截图来自《计算机网络-自顶向下方法》陈鸣 译,机械工业出版社)
校验和方法:
(上面截图来自《计算机网络-自顶向下方法》陈鸣 译,机械工业出版社)
循环冗余检测:
(上面截图来自《计算机网络-自顶向下方法》陈鸣 译,机械工业出版社)
以太MAC帧中FCS
在数据链路层要