- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
IPV6与IPV4报文比较
解析IPV4报文 和IPV6 报文的 checksum 的算法:
校验和(checksum)算法,简单的说就是16位累加的反码运算:
计算函数如下:
我们在计算时是主机字节序,计算的结果封装成IP包时是网络字节序,注意这两者之间的区别,我们在从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)p[num] 8 0xff00) | (UINT16)p[num + 1] 0x00FF;
2个字节累加,先取网络字节序低位左移8位(变成主机字节序高位),与(加)上 网络字节序中的高位(主机字节序地位),即网络字节序要先变成主机字节序在进行累加,
??????? size? -= 2;
??????? num?? += 2;
??? }
???
if (size 0)
如果长度为奇数
??? {
??????? cksum += ((UINT16)p[num] 8) 0xFFFF;
如果总的字节数为奇数,则最后一个字节单独相加
??????? num += 1;
??? }
?
??? while (cksum 16)
??? {
??????? cksum = (cksum 0xFFFF) + (cksum 16);
累加完毕将结果中高16位再加到低16位上,重复这一过程直到高16位为全0
??? }
???
??? return cksum;
}
?
注意:UINT32 cksum的类型,这里是4个字节的,防止在累加的过程中,数据溢出,(例如 0xFF 累加时就会内存溢出)
?
详细的计算过程和原理如下
一:
ip 头 的计算:
直接对头部数据进行累加(不包括原来的checksum值):
1、ipv4包头
?
?????? ?ipHeadLen? = (pIpHeader-ver_ihl 0x0F) 2;
在ipv4 头中,版本类型和头长度加在一起是1 个字节(8位),各占4位,版本类型在前,长度在后,所以要取长度只能取低4 位,
??????? pIpHeader-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两种,分别包含如下几部分,这里做下比较
?
?
? IPV4 IPV6 目的地址 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)
您可能关注的文档
- BYD auto-中南大学.ppt
- C5~C9细菌各论ben.ppt
- CAD 命令 一看通.doc
- CAD使用心得连载.doc
- CAD2008版课件.ppt
- CA6140车床拨叉加工工艺及铣断夹具设计.doc
- CAD命令2009新年修正版.doc
- CAD课件04第4章 CAD软件工程技术.ppt
- CAN总线在燃料电池轿车电动空调系统中的应用[计算机工程].doc
- Camfrog 房间管理员口令大全.doc
- 福莱特玻璃集团股份有限公司海外监管公告 - 福莱特玻璃集团股份有限公司2024年度环境、社会及管治报告.pdf
- 广哈通信:2024年度环境、社会及治理(ESG)报告.pdf
- 招商证券股份有限公司招商证券2024年度环境、社会及管治报告.pdf
- 宏信建设发展有限公司2024 可持续发展暨环境、社会及管治(ESG)报告.pdf
- 品创控股有限公司环境、社会及管治报告 2024.pdf
- 中信建投证券股份有限公司2024可持续发展暨环境、社会及管治报告.pdf
- 洛阳栾川钼业集团股份有限公司环境、社会及管治报告.pdf
- 361度国际有限公司二零二四年环境、社会及管治报告.pdf
- 中国神华能源股份有限公司2024年度环境、社会及管治报告.pdf
- 广西能源:2024年环境、社会及治理(ESG)报告.pdf
最近下载
- 机械行业“人形机器人的Optimus时刻”系列(五):触觉感知(电子皮肤),高山将越,坦途在望.pdf
- 培训教材污水处理厂运营管理方案.pptx VIP
- 纪检委处理回复函.docx
- AP微积分BC 2016年真题 (选择题+问答题) AP Calculus BC 2016 Released Exam and Answers (MCQ+FRQ).pdf VIP
- 武汉市2025届高中毕业生四月调研考试(四调)物理试卷(含答案).pdf
- 《西安事变》课件.ppt VIP
- 排水沟设计计算11.xls VIP
- 2010版中药典,中国药典2010年版.doc
- 精彩拍摄跟我来.docx
- 小学常用单词分类汇总衡水体英语字帖(含例句).pdf
文档评论(0)