网络传输中的反码求和算法

在发送数据,计算数据包的校验和,按如下步骤:

1、把校验和字段置为0;

2、把需校验的数据看成以16位为单位的数字组成,依次进行二进制反码求和;

3、把得到的结果存入校验和字段中。

在接收数据时,计算数据包的校验和相对简单,按如下步骤:

1、把首部看成以16位为单位的数字组成,依次进行二进制反码求和,包括校验和字段;

2、检查计算出的校验和的结果是否为0;

3、如果等于0,说明被整除,校验是和正确。否则,校验和就是错误的,协议栈要抛弃这个数据包。
IP,ICMP,TCP,UDP数据校验的不同:
(IP校验和只校验20字节的IP报头;而ICMP校验和覆盖整个报文(ICMP报头+ICMP数据);UDP和TCP校验和不仅覆盖整个报文,而且还有12字节的IP伪首部,包括源IP地址(4字节)、目的IP地址(4字节)、协议(2字节,第一字节补0)和TCP/UDP包长(2字节)。另外UDP、TCP数据报的长度可以为奇数字节,所以在计算校验和时需要在最后增加填充字节0(注意,填充字节只是为了计算校验和,可以不被传送)。
反码求和:对一个无符号的数,先求其反码,然后从低位到高位,按位相加,有溢出则向高位进1(跟一般的二进制加法规则一样),若最高位有进位,则向最低位进1。
代码:
/计算校验和  
USHORT checksum(USHORT *buffer,int size)  
{  unsigned long cksum=0;  //这里注意,其实是把数据头部校验和字段内存里的值也要赋值为0,最后才能正确。while(size>1)  {  cksum+=*buffer++;  size-=sizeof(USHORT);  }  if(size)  {  cksum+=*(UCHAR *)buffer;  }  //将32位数转换成16  while (cksum>>16)  cksum=(cksum>>16)+(cksum & 0xffff);  return (USHORT) (~cksum);  
}  

这里有一篇详细的英文解释,说明1的反码求和和2的反码求和的不同与选择,参考http://www.netfor2.com/checksum.html

转载于:https://www.cnblogs.com/MyselfDancing/p/3482333.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294462.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA中maven如何将jar包导入本地的maven库

第一步:将IKAnalyzer.jar包存放在一个文件夹中,比如mylib文件夹第二步:建立一个IKAnalyzer.jar包相关的pom.xml文件,需要在pom.xml文件中定义其maven坐标及其相应的依赖代码即可,同样将pom文件存放在上述jar文件同一文…

你以后会不会有小三?

1 千万别碰到小孩就去逗他(素材来源网络,侵删)▼2 像极了早上刚睡醒炸毛的你▼3 乞丐和社畜的区别▼4 当你学校装了能上网的平板后(素材来源网络,侵删)▼5 看图写字(素材来源网络&#xff0…

MySQL--3--mysqldump备份策略

参考地址:http://doc.mysql.cn/mysql5/refman-5.1-zh.html-chapter/database-administration.html#backup-strategy-example 5.9 备份策略 在my.inf中启动二进制日志,用--log-bin[file_name]选项启动时,mysqld写入包含所有更新数据的SQL命令的…

java判断星座if语句_Java根据出生日期计算(判断)星座

下面我们来了解一下十二星座对应的日期划分范围。白羊:0321~0420 天秤:0924~1023 金牛:0421~0521 天蝎:1024~1122 双子:0522~0621 射手:1123~1221 巨蟹:0622~0722 摩羯:1222~0120 狮…

CSharp 如何OCR离线识别文本

WPF开发者QQ群: 340500857 | 微信群 -> 进入公众号主页 加入组织由于微信群人数太多入群请添加小编微信号(yanjinhuawechat)或(W_Feng_aiQ)邀请入群(需备注WPF开发者)本项目是基于开源项目P…

第一个h5页面

不废话&#xff0c;先爆照&#xff0c;不好勿喷 我用的软件是WebStorm开发&#xff0c;然后也知道了h5我们可以用谷歌浏览器点击右键&#xff0c;然后点击审查&#xff0c;就可以按照手机屏幕来看到页面 下面是项目的图片 这个是我的index.html文件 <!doctype html> <…

HDU-2023

求平均成绩 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 54671 Accepted Submission(s): 13094 Problem Description假设一个班有n(n<50)个学生&#xff0c;每人考m(m<5)门课&#xff0c;求每个学生的…

Ubuntu系统备份和恢复

为什么80%的码农都做不了架构师&#xff1f;>>> 安装好Ubuntu之后&#xff0c;别忘了安装 for linux 防火墙和杀毒软件。在备份系统前&#xff0c;请保证系统是无错和干净的&#xff1a;本人操作系统是ubuntu14.04&#xff0c;不知道是系统出了问题还是装的软件有问…

回顾2012;展望2013

同样的话题&#xff0c;但是却在不同的时间&#xff0c;不同的地点&#xff0c;感触却也良多。回顾2012&#xff1b;展望2013虽说是老话题。但对于我来说是一年向下一年的一个跨度。今天是2012年12月19日凌晨05&#xff1b;16分转载于:https://blog.51cto.com/tengfeidongman/1…

热血致敬!曾影响几代科学巨匠的传奇经典,至今仍无人能超越!

▲ 点击查看有人说&#xff0c;世界上有两本神书&#xff0c;一本是霍金的《时间简史》&#xff0c;是可以不看&#xff0c;但书架必须得有。还有一本&#xff0c;就是必须有也必须看的书&#xff0c;这就是《从一到无穷大》。2018年&#xff0c;清华大学校长&#xff0c;将这本…

链表之单链表约瑟夫问题(一)

package com.chenyu.zuo.linkedList;import com.chenyu.zuo.linkedList.RemoveMidNode.Node; /*** 环形单链表的约瑟夫问题* 比如5个人,报数第3个就删除,从第一个人开始报数* 1、2、3、4、5* 1、2、4、5* 2、4、5* 2、4* 4* 最后4留下来了* 输入:一个单向环形链表的头节点h…

.NET 6 中 gRPC 的新功能

gRPC是一个现代的、跨平台的、高性能的 RPC 框架。gRPC for .NET 构建在 ASP.NET Core 之上&#xff0c;是我们推荐的在 .NET 中构建 RPC 服务的方法。.NET 6 进一步提高了 gRPC 已经非常出色的性能&#xff0c;并添加了一系列新功能&#xff0c;使 gRPC 在现代云原生应用程序中…

视频编码H.264的应用

近日&#xff0c;数字音视频编解码技术标准&#xff08;AVS&#xff09;工作组在12月21日结束的第47次会议上公布并于明年4月份会正式推出最新的AVS2视频编码标准&#xff0c;新的编码效率比上一代标准翻了一番&#xff0c;并且在无失真音频编码上取得了突破性的进展。AVS编码标…

java捕捉音频,如何捕获在Java中的音频数据

I want to access the audio data that my microphone is recording with Java. How would I do that?My goal is to save the audio data that is recorded and simultaneously play it to the user.解决方案If you dont need any of the additional functionality in JMF, I…

saltstack的安装(转载连接)

see the link转载于:https://blog.51cto.com/358778493/1767256

java-developer 性能是怎么样的?

在项目中&#xff0c;我们都经常面临所开发的产品性能问题。然而这些问题都不是很容易解决。大多性能问题追根究底都是系统架构或者说是设计问题。推翻了重做是不可能的&#xff0c;怎么从这些问题中吸取经验教训才是正道。来看看我遇到的设计问题。 案例&#xff1a; 企业…

链表之单链表约瑟夫问题(二)

约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类问题时我…

这,像极了爱情!

全世界只有3.14 % 的人关注了爆炸吧知识特别的爱给特别的你古希腊数学家普罗克洛斯说过&#xff1a;“数学就是这样一种东西&#xff1a;她提醒你有无形的灵魂&#xff0c;她赋予她所发现的真理以生命&#xff1b;她唤起心神&#xff0c;澄净智慧&#xff1b;她给我们的内心思想…

使用C#为MSTest测试项目实现自定义断言

前言MSTest测试项目为我们实现了断言类Assert&#xff0c;用于报告代码行为的正确性&#xff0c;比如&#xff1a;var result Calculator.Add(1,2); Assert.AreEqual(3, result);虽然常用的断言方法已经可以工作。但是&#xff0c;我们更希望使用自定义断言&#xff0c;这样可…

mysql 调用未定义函数_php – Wierd和Annoying错误:调用未定义的函数mysql_query()[复制]...

参见英文答案 > Why shouldn’t I use mysql_* functions in PHP? 15个我已经在这一个超过一个小时了,我可以连接到我的数据库和所有(不会给出任何错误)但是当我尝试使用时我收到以下错误“的mysql_query($查询);”Call to undefined f…