原理

P/ICMP/IGMP/TCP/UDP等协议的校验和算法都是相同的,采用的都是将数据流视为16位整数流进行重复叠加计算。为了计算检验和,首先把检验和字段置为0。然后,对有效数据范围内中每个16位进行二进制反码求和,结果存在检验和字段中,如果数据长度为奇数则补一字节0。当收到数据后,同样对有效数据范围中每个16位数进行二进制反码的求和。由于接收方在计算过程中包含了发送方存在首部中的检验和,因此,如果首部在传输过程中没有发生任何差错,那么接收方计算的结果应该为全0或全1(具体看实现了,本质一样; 校验时可能返回~checksum) 。如果结果不是全0或全1,那么表示数据错误。

例子:

[cpp] view plaincopy
  1. #include <stdio.h>
  2. unsigned short checksum(unsigned short *pdate, int size)
  3. {
  4. unsigned int sum=0;
  5. while (size>1)
  6. {
  7. sum += *pdate;
  8. pdate++;
  9. size -= sizeof(short);
  10. }
  11. if (size)
  12. sum += *(unsigned char*)pdate;
  13. while(sum>>16)
  14. {
  15. sum = (sum & 0xffff) + (sum>>16);
  16. }
  17. return ~sum;
  18. }
  19. int main(void)
  20. {
  21. unsigned short checksum_code=0;
  22. unsigned short date[] = {0,0x4500, 0x0029, 0x44f1,0x4000, 0x8006, 0xc0a8, 0x01ae, 0x4a7d, 0x477d};//date[0]存放校验码
  23. unsigned short check_res=0;
  24. checksum_code = checksum((unsigned short*)date, sizeof(date));//产生校验码
  25. date[0] = checksum_code;
  26. printf("generate:%x\n", checksum_code);
  27. check_res= checksum((unsigned short*)date, sizeof(date));//校验结果
  28. printf("check result:%x\n", check_res);
  29. return 0;
  30. }

编译运行:

checksum校验相关推荐

  1. Hadoop数据完整性与CheckSum校验原理

    一.HDFS数据完整性 用户肯定都希望系统在存储和处理数据时,数据不会有任何丢失或损坏.但是,受网络不稳定.硬件损坏等因素,IO操作过程中难免会出现数据丢失或脏数据,难免会出现数据丢失或脏数据,数据传 ...

  2. android checksum校验

    checksum就是校验码,和md5的概念可以说是一样的,只是算法不一样. checksum的算法也都不一样,看定的协议是怎么样的 我这边的业务场景是需要android端给打印机发送一个升级指令,两个 ...

  3. SQL SERVER数据页checksum校验算法

    在SQL SERVER2005以上版本中,数据页默认开启checksum,标识为m_flagBits & 0x200 == True,其值m_tornBits位于页头0x3C,4字节. 其算法 ...

  4. php blocklog_SQLSERVER中的logblock校验(译)

    SQLSERVER中的log block校验(译) 来自: http://sankarreddy.com/2010/03/transaction-log-block-checksum/ 阅读下文之前可 ...

  5. 《深入浅出DPDK》读书笔记(十):硬件加速与功能卸载(VLAN、IEEE1588、IP TCP/UDP/SCTP checksum、Tunnel)

    Table of Contents 109.硬件卸载简介 110.网卡硬件卸载功能 111.DPDK软件接口 接收侧: 发送侧: 112.硬件与软件功能实现 113.VLAN硬件卸载 1. 收包时VL ...

  6. IP协议 Header Checksum算法

    引用:http://www.cnblogs.com/vamei/archive/2012/12/02/2796988.html 协议森林05 我尽力 (IP协议详解) 作者:Vamei 出处:http ...

  7. centos 7.2执行yum -y install报错Metadata file does not match checksum

    分析结论 1,Metadata file does not match checksum报错在于元文件的校验值与元文件不匹配 2,元数据是指 mnt/repodata/436345f4b666f0a4 ...

  8. PostgreSQL checksum

    在计算机系统中,checksum 通常用于校验数据在传输或存取过程中是否发生错误.PostgreSQL 从 9.3 开始支持 checksum,以发现数据因磁盘. I/O 损坏等原因造成的数据异常.本 ...

  9. Wireshark 提示和技巧 | Checksum Offload

    CheckSum 一些网络协议使用校验和来确保数据的完整性,校验和也被称为冗余校验. 校验和用于确保数据传输或存储的数据部分的完整性,它基本上是一个数据部分的计算汇总.发送方将计算数据的校验和,并与校 ...

最新文章

  1. excel定义函数操作文档
  2. 访问一个HTTPS的网站的大致流程
  3. 文本超出隐藏 综合整理
  4. 【Google Play】App Bundle 使用详解 ( 应用模块化 )
  5. c#.net课程设计:ZCMU通讯录(待更新)
  6. Spring MVC Hibernate MySQL集成CRUD示例教程
  7. linux运行bin not found,自己制作根文件后,程序-/bin/sh:XXX:not found错误
  8. Day 1: Introduction to Deep Learning
  9. 中小企业选择仓库管理软件免费版的七大特点
  10. 怎么将图片转成html,一种将图片转成HTML文档的方法与流程
  11. 论文阅读笔记:GMC Graph-Based Multi-View Clustering
  12. Android模拟器启动报错:gpu found. vendor id 1002 device id 0x
  13. 柬埔寨之旅——穿越千年,感受震撼
  14. 新编php找工作常见面试笔试汇总
  15. WSTMart商城系统数据字典
  16. linuxService
  17. Greenplum助医疗大数据从“奢侈品”走向常态化
  18. 第二章 关系映射详解
  19. 【饭谈】为什么别人都劝你别做外包?
  20. linux系统rc路由配置_Linux下多播路由的实现

热门文章

  1. 五菱大疆怎么造出了Kiwi大疆版?
  2. 《朗读者》:在历史的重负里前行
  3. Django-模型Models
  4. HTML入门必看-含源码案例(表格-列表-表单-图片-视频-音频)
  5. 【20号微软推广正版验证】
  6. [PAT-A 1069]The Black Hole of Numbers
  7. JS清除缓存的几种方法
  8. sa-sdk-javascript 神策页面加载的时候未进行埋点
  9. 互联网公司最值钱的东西是什么?
  10. Excel制作表格的小技巧