



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
解析IPV4报文 和IPV6 报文的 checksum 的算法:校验和(checksum)算法,简单的说就是16位累加的反码运算:计算函数如下:我们在计算时是主机字节序,计算的结果封装成IP包时是网络字节序,注意这两者之间的区别,我们在从IP包里读取要转化为主机字节序,往包里存入时要转化为网络字节序在存入。UINT32 Checksum(UINT32 cksum, VOID *pBuffer, UINT32 size) INT8 num = 0; UINT8 *p = (UINT8 *)pBuffer; if (NULL = pBuffer) | (0 = size) return cksum; while (size 1) cksum += (UINT16)pnum 0)如果长度为奇数 cksum += (UINT16)pnum 16) cksum = (cksum & 0xFFFF) + (cksum 16);累加完毕将结果中高16位再加到低16位上,重复这一过程直到高16位为全0 return cksum;注意:UINT32 cksum的类型,这里是个字节的,防止在累加的过程中,数据溢出,(例如 0xFF 累加时就会内存溢出)详细的计算过程和原理如下一:ip 头 的计算:直接对头部数据进行累加(不包括原来的checksum值):1、ipv4包头 ipHeadLen = (pIpHeader-ver_ihl & 0x0F) chksum = 0;因为不包括原来的checksum值,所以在每次计算前先把checksum的值置0,然后计算 sum = Checksum(0, (VOID *)pIpHeader, ipHeadLen);对整个ip包头的累加 pIpHeader-chksum = HTONS(UINT16)(sum);结果为计算值的反码,(别忘转化为网络字节序)2、ipv6包头在ipv6中已经省略了checksum 部分,但在后面的部分要有的,比如TCP/UDP包,别高兴的太早二、TCP/UDP 报文的计算(举例UDP):这里的checksum包含两部分,一部分是伪头的累加,还有一部分是UDP 包的累加(不包括原来的checksum值)伪头有分ipv4和ipv6两种,分别包含如下几部分,这里做下比较IPV4IPV6目的地址4字节(32位)16字节(128位)源地址4字节(32位)16字节(128位)协议类型1字节(8位)(Protocol)1字节(8位)(next header)(TCP/UDP)长度2字节(16位)2字节(16位)1、 ipv4类型的:第一部分,伪头部分的计算:sum = 0; udpLen = sizeof(UDP_HEADER_T) + dhcpLen;UDP的长度= UDP的包头长度 + UDP的数据长度sum += udpLen;或者,下面也是一样的,这里就是网络字节序和主机字节序的区别了,上面的是(主机字节序)直接累加,下面的是网络字节序,一定要变成主机字节序后累加 pUdpHeader-len = HTONS(udpLen);主机字节序转化为网络字节序,存入数据包中,一定要注意,我们做的所有累加也是网络字节序,这里一定要搞清楚,以防混淆搞错了 sum += (pUdpHeader-len 8 & 0x00FF);2个字节的累加,先取网络字节序的高位,右移8位,变成主机字节序的低位,累加 sum += (pUdpHeader-len saddr, 4); sum = Checksum(sum, (VOID *)&pIpHeader-daddr, 4);对4位的地址进行累加 sum += (UINT16)pIpHeader-proto & 0x00FF);对1位的协议类型进行累加伪头部分计算完成第二部分,UDP数据包的计算 pUdpHeader-chksum = 0;注意:每次计算前别忘先把checksum的值置 0,然后计算 sum = Checksum(sum, (VOID *)pUdpHeader, udpLen);对整个UDP包的累加 pUdpHeader-chksum = HTONS(UINT16)(sum);结果为计算值的反码,(别忘转化为网络字节序)数据包部分计算完成2、 ipv6类型的:第一部分,伪头部分的计算:sum = 0; udpLen = sizeof(UDP_HEADER_T) + dhcpLen;sum += udpLen;或者 pUdpHeader-len = HTONS(udpLen); sum += (pUdpHeader-len 8 & 0x00FF); sum += (pUdpHeader-len saddr, 16); sum = Checksum(sum, (VOID *)&pIpHeader-daddr, 16);对16位的地址进行累加 sum += (UINT16)pIpHeader-proto & 0x00FF);伪头部分计算完成第二部分,UDP数据包的计算 pUdpHeader-chksum = 0;注意:每次计算前别忘先把checksum的值置 0,然后计算 sum = Checksum(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《小小采购员》(教案)-六年级上册劳动苏科版
- 物流装车知识培训课件
- “科学”概念的标识性及其理论与实践探究
- 2025医学器官移植排斥反应考试题目及答案
- 2025成人生物细胞分裂过程考试题目及答案
- 第九章 第三节 大气压强说课稿 -2025-2026学年人教版物理八年级下学期
- 2025至2030无线个域网启用照明行业市场深度研究及发展前景投资可行性分析报告
- 车型变化点管理培训课件
- 2025成年人化学配位化合物结构考试题目及答案
- 8. 吃瓜果的人说课稿-2025-2026学年小学美术岭南版二年级下册-岭南版
- 联想集团复盘管理制度
- 呼吸机撤离和拔管流程
- 双预防安全生产管理制度
- 临时堆放管理制度
- 2024年长沙市芙蓉区招聘社区专职人员真题
- 农机服务合同协议书范本
- 食品代工生产合同协议书
- 红岩中考试题及答案
- 2023新教科版科学四年级上册第一单元教学设计
- 宫腔镜诊疗麻醉管理专家共识
- 2025-2030利巴韦林原料药行业市场现状供需分析及投资评估规划分析研究报告
评论
0/150
提交评论