checksum校验
原理
P/ICMP/IGMP/TCP/UDP等协议的校验和算法都是相同的,采用的都是将数据流视为16位整数流进行重复叠加计算。为了计算检验和,首先把检验和字段置为0。然后,对有效数据范围内中每个16位进行二进制反码求和,结果存在检验和字段中,如果数据长度为奇数则补一字节0。当收到数据后,同样对有效数据范围中每个16位数进行二进制反码的求和。由于接收方在计算过程中包含了发送方存在首部中的检验和,因此,如果首部在传输过程中没有发生任何差错,那么接收方计算的结果应该为全0或全1(具体看实现了,本质一样; 校验时可能返回~checksum) 。如果结果不是全0或全1,那么表示数据错误。
例子:
- #include <stdio.h>
- unsigned short checksum(unsigned short *pdate, int size)
- {
- unsigned int sum=0;
- while (size>1)
- {
- sum += *pdate;
- pdate++;
- size -= sizeof(short);
- }
- if (size)
- sum += *(unsigned char*)pdate;
- while(sum>>16)
- {
- sum = (sum & 0xffff) + (sum>>16);
- }
- return ~sum;
- }
- int main(void)
- {
- unsigned short checksum_code=0;
- unsigned short date[] = {0,0x4500, 0x0029, 0x44f1,0x4000, 0x8006, 0xc0a8, 0x01ae, 0x4a7d, 0x477d};//date[0]存放校验码
- unsigned short check_res=0;
- checksum_code = checksum((unsigned short*)date, sizeof(date));//产生校验码
- date[0] = checksum_code;
- printf("generate:%x\n", checksum_code);
- check_res= checksum((unsigned short*)date, sizeof(date));//校验结果
- printf("check result:%x\n", check_res);
- return 0;
- }
编译运行:
checksum校验相关推荐
- Hadoop数据完整性与CheckSum校验原理
一.HDFS数据完整性 用户肯定都希望系统在存储和处理数据时,数据不会有任何丢失或损坏.但是,受网络不稳定.硬件损坏等因素,IO操作过程中难免会出现数据丢失或脏数据,难免会出现数据丢失或脏数据,数据传 ...
- android checksum校验
checksum就是校验码,和md5的概念可以说是一样的,只是算法不一样. checksum的算法也都不一样,看定的协议是怎么样的 我这边的业务场景是需要android端给打印机发送一个升级指令,两个 ...
- SQL SERVER数据页checksum校验算法
在SQL SERVER2005以上版本中,数据页默认开启checksum,标识为m_flagBits & 0x200 == True,其值m_tornBits位于页头0x3C,4字节. 其算法 ...
- php blocklog_SQLSERVER中的logblock校验(译)
SQLSERVER中的log block校验(译) 来自: http://sankarreddy.com/2010/03/transaction-log-block-checksum/ 阅读下文之前可 ...
- 《深入浅出DPDK》读书笔记(十):硬件加速与功能卸载(VLAN、IEEE1588、IP TCP/UDP/SCTP checksum、Tunnel)
Table of Contents 109.硬件卸载简介 110.网卡硬件卸载功能 111.DPDK软件接口 接收侧: 发送侧: 112.硬件与软件功能实现 113.VLAN硬件卸载 1. 收包时VL ...
- IP协议 Header Checksum算法
引用:http://www.cnblogs.com/vamei/archive/2012/12/02/2796988.html 协议森林05 我尽力 (IP协议详解) 作者:Vamei 出处:http ...
- centos 7.2执行yum -y install报错Metadata file does not match checksum
分析结论 1,Metadata file does not match checksum报错在于元文件的校验值与元文件不匹配 2,元数据是指 mnt/repodata/436345f4b666f0a4 ...
- PostgreSQL checksum
在计算机系统中,checksum 通常用于校验数据在传输或存取过程中是否发生错误.PostgreSQL 从 9.3 开始支持 checksum,以发现数据因磁盘. I/O 损坏等原因造成的数据异常.本 ...
- Wireshark 提示和技巧 | Checksum Offload
CheckSum 一些网络协议使用校验和来确保数据的完整性,校验和也被称为冗余校验. 校验和用于确保数据传输或存储的数据部分的完整性,它基本上是一个数据部分的计算汇总.发送方将计算数据的校验和,并与校 ...
最新文章
- excel定义函数操作文档
- 访问一个HTTPS的网站的大致流程
- 文本超出隐藏 综合整理
- 【Google Play】App Bundle 使用详解 ( 应用模块化 )
- c#.net课程设计:ZCMU通讯录(待更新)
- Spring MVC Hibernate MySQL集成CRUD示例教程
- linux运行bin not found,自己制作根文件后,程序-/bin/sh:XXX:not found错误
- Day 1: Introduction to Deep Learning
- 中小企业选择仓库管理软件免费版的七大特点
- 怎么将图片转成html,一种将图片转成HTML文档的方法与流程
- 论文阅读笔记:GMC Graph-Based Multi-View Clustering
- Android模拟器启动报错:gpu found. vendor id 1002 device id 0x
- 柬埔寨之旅——穿越千年,感受震撼
- 新编php找工作常见面试笔试汇总
- WSTMart商城系统数据字典
- linuxService
- Greenplum助医疗大数据从“奢侈品”走向常态化
- 第二章 关系映射详解
- 【饭谈】为什么别人都劝你别做外包?
- linux系统rc路由配置_Linux下多播路由的实现